从不同客户端收集数据的最佳做法是什么?
What's the best practice to collect data from different clients?
以下是我的用例的详细信息:
我的数据是什么..
会有用户体验、错误报告、状态信息等。数据是零散的,将来可能会发生变化。所以我打算用NoSQL,可能mongodb,把数据存到服务器里
有哪些客户..
它们是用不同语言编写的客户端,如 C#、C++、LabVIEW 等。有些甚至无法访问 mongodb 驱动程序,因此当然不能直接与数据库通信。并且需要像下面这样的框架。
客户端 ->(某些协议)-> 代理 -> 数据库。
由于这些客户端不是 Web 客户端,因此使用 http 的普通 Web 服务器可能不适合我的情况,对吗?对协议、代理和数据库有什么建议,甚至是一个新的框架。
我的目标是让客户端能够尽可能方便的发送数据。
谢谢!
这并不是什么新东西,而是一个消息驱动的应用程序,这是一个很好理解的模式。
我主要是在 Java 中这样做的,所以我会在这里坚持使用这种语言。
单靠经纪人是不够的。假设您使用 Apache ActiveMQ as you message broker, you would still need to get your data into the database, since MQ is... ...a message queue. So you need a part which gets the messages out of MQ, processes them according to your business rules and stores them in the (correct) database instance, and the correct collection/bucket/table. Of course you could write this part by hand, but that would be pretty much reinventing the wheel. There is a notion of a "message routing and mediation engine", and the most commonly suggested here is Apache Camel, which has quite some components 与数据库和其他所谓的消费者和生产者进行通信。这是关键点。一般来说,如果可能,您的客户应该将他们的数据直接发送到消息代理。但是,如果他们做不到,他们可以简单地发送文本文件或进行 REST 调用——实际上有太多选项无法在此处列出。传入的数据可以通过 Apache Camel 中的 "route" 进行预处理并标准化为您的标准格式(一组消费者、转换规则和生产者,以最简单的形式)并作为 AMQP 消息发送到 MQ。从那里,另一个 Camel 路由可以处理 AMQP 消息,应用您的业务规则并将数据存储在数据库中......或者您可能想到的任何其他内容(例如发送电子邮件)。
因此,此解决方案支持多种传入和传出消息协议(只要它们受 Camel 支持),并且您的业务规则位于集中且定义明确的位置。
为了实现这一点,我强烈建议使用 Apache ServiceMix,它是 ActiveMQ、Camel 和一个系统的分布,用于管理组件和业务规则。
最后,我认为具有 http 协议的 Web 服务器可以适合该用例。
我最想要的是一个通用的 API 供不同类型的客户端将数据保存到云端。 Http有方法GET,POST,PUT,DELETE,所以我觉得RESTful API自然适合操作数据
我最后的解决方案是 Node.js(Express) + Mongodb (一个很常见的组),并且通过 Express web 服务器提供了一个 RESTful API,客户端可以使用http方便的操作数据。而且,它的重量很轻,很容易上手。
这里是一些教程:http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/
以下是我的用例的详细信息:
我的数据是什么.. 会有用户体验、错误报告、状态信息等。数据是零散的,将来可能会发生变化。所以我打算用NoSQL,可能mongodb,把数据存到服务器里
有哪些客户.. 它们是用不同语言编写的客户端,如 C#、C++、LabVIEW 等。有些甚至无法访问 mongodb 驱动程序,因此当然不能直接与数据库通信。并且需要像下面这样的框架。
客户端 ->(某些协议)-> 代理 -> 数据库。
由于这些客户端不是 Web 客户端,因此使用 http 的普通 Web 服务器可能不适合我的情况,对吗?对协议、代理和数据库有什么建议,甚至是一个新的框架。 我的目标是让客户端能够尽可能方便的发送数据。
谢谢!
这并不是什么新东西,而是一个消息驱动的应用程序,这是一个很好理解的模式。
我主要是在 Java 中这样做的,所以我会在这里坚持使用这种语言。
单靠经纪人是不够的。假设您使用 Apache ActiveMQ as you message broker, you would still need to get your data into the database, since MQ is... ...a message queue. So you need a part which gets the messages out of MQ, processes them according to your business rules and stores them in the (correct) database instance, and the correct collection/bucket/table. Of course you could write this part by hand, but that would be pretty much reinventing the wheel. There is a notion of a "message routing and mediation engine", and the most commonly suggested here is Apache Camel, which has quite some components 与数据库和其他所谓的消费者和生产者进行通信。这是关键点。一般来说,如果可能,您的客户应该将他们的数据直接发送到消息代理。但是,如果他们做不到,他们可以简单地发送文本文件或进行 REST 调用——实际上有太多选项无法在此处列出。传入的数据可以通过 Apache Camel 中的 "route" 进行预处理并标准化为您的标准格式(一组消费者、转换规则和生产者,以最简单的形式)并作为 AMQP 消息发送到 MQ。从那里,另一个 Camel 路由可以处理 AMQP 消息,应用您的业务规则并将数据存储在数据库中......或者您可能想到的任何其他内容(例如发送电子邮件)。
因此,此解决方案支持多种传入和传出消息协议(只要它们受 Camel 支持),并且您的业务规则位于集中且定义明确的位置。
为了实现这一点,我强烈建议使用 Apache ServiceMix,它是 ActiveMQ、Camel 和一个系统的分布,用于管理组件和业务规则。
最后,我认为具有 http 协议的 Web 服务器可以适合该用例。
我最想要的是一个通用的 API 供不同类型的客户端将数据保存到云端。 Http有方法GET,POST,PUT,DELETE,所以我觉得RESTful API自然适合操作数据
我最后的解决方案是 Node.js(Express) + Mongodb (一个很常见的组),并且通过 Express web 服务器提供了一个 RESTful API,客户端可以使用http方便的操作数据。而且,它的重量很轻,很容易上手。
这里是一些教程:http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/