从不同客户收集数据的最佳做法是什么?

时间:2016-01-30 08:30:38

标签: mongodb client-server database

以下是我的用例的详细信息:

  1. 我的数据是什么.. 会有用户体验,错误报告,状态信息等。数据分散,将来可能会发生变化。所以我计划使用NoSQL(可能是mongodb)来保存服务器中的数据。

  2. 有什么客户.. 它们是用不同语言编写的客户端,如C#,C ++,LabVIEW等。有些人甚至无法访问mongodb驱动程序,因此当然不能直接与数据库通信。需要像下面这样的框架。

  3. 客户 - > (一些协议) - >经纪人 - >数据库中。

    由于这些客户端不是Web客户端,因此使用http的常见Web服务器可能不适合我的情况,对吧?对协议,代理和数据库,甚至是新框架是否有任何建议。 我的目标是让客户尽可能方便地发送数据。

    谢谢!

2 个答案:

答案 0 :(得分:1)

这不是新的,而是一个消息驱动的应用程序,这是一个很好理解的模式。

我主要是用Java做的,所以我会在这里坚持使用这种语言。

仅凭经纪人在这里是不够的。让我们假设您使用Apache ActiveMQ作为消息代理,您仍然需要将数据放入数据库,因为MQ是...消息队列。因此,您需要一个从MQ获取消息的部分,根据您的业务规则处理它们并将它们存储在(正确的)数据库实例和正确的集合/存储桶/表中。当然你可以手工编写这个部分,但这将重新发明轮子。有一个“消息路由和中介引擎”的概念,这里最常建议的是Apache Camel,它有quite some components与数据库和其他所谓的消费者和生产者进行通信。这是关键点。通常,如果可能,您的客户端应直接将其数据发送到消息代理。但是,如果他们不能,他们可以简单地发送文本文件或进行REST调用 - 实际上有太多的选项可以在这里列出。这些传入的数据可以通过Apache Camel中的“route”进行预处理并标准化为标准格式(一组消费者,转换规则和生产者,最简单的形式)并作为AMQP发送消息给MQ。从那里,另一个Camel路由可以处理AMQP消息,应用您的业务规则并将数据存储在数据库中......或者您可能想到的任何其他内容(例如发送电子邮件)。

因此,此解决方案支持多种传入和传出消息协议(只要Camel支持它们),并且您的业务规则位于集中且定义明确的位置。

为了实现这一点,我强烈建议使用Apache ServiceMix,它是ActiveMQ,Camel和系统的分发版,用于管理组件和业务规则。

答案 1 :(得分:0)

最后,我认为使用http protocal的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/