【问题标题】:How to read and write extremely large data from device如何从设备读取和写入超大数据
【发布时间】:2011-12-25 20:27:21
【问题描述】:

我正在为我们的一位客户构建位置跟踪系统。他们在车辆上安装了 GPS 设备,每个设备都编写了服务器 IP 和端口号,我们开发了一个 TCP 侦听器来侦听设备发送的请求。这些设备每分钟发送一个请求。

实际问题是,每分钟有 1,00,000 万个 GPS 设备发送请求,因此存储信息非常困难,我无法找出存储来自设备的数据的最佳方法,我应该存储在文件还是在 memcached 中?

请帮助我找到解决此问题的最佳方法。请记住,每个 GP 设备都启用了 GPRS,并且由于它们具有互联网连接,因此它们可以与我们的后端服务器通信。 有时这些设备无法找到互联网,因为车辆将在所有地方移动,但一旦设备连接互联网,它会一次性发送所有数据包,假设每分钟发送一次。

所以我正在寻找解决这个问题的最佳方法,我正在使用 Java 编程语言。

提前致谢!!!!

【问题讨论】:

  • 作为一个忠告——在国际论坛中使用“十万”作为一个单位并不是一个好主意;它没有被广泛使用。也不清楚您是要写“1,000,000 万”还是“100,000”十万 - 在 两个 0 之前放一个逗号是不寻常的。

标签: java architecture tcp hadoop memcached


【解决方案1】:

想到的一个选项是Apache Flume,作为将数据收集到 Hadoop 的一种方式。 另一个(商业)选项是Splunk

【讨论】:

    【解决方案2】:

    为了能够处理如此大量的数据,我设置了一组消息队列服务器来对所有传入数据进行排队,并设置一组侦听器来从这些队列中获取消息并解释它们。 ActiveMQ、RabbitMQ 和 HornetQ 理论上都可以每秒处理数千条消息。

    例如,HornetQ 有一个high performance journal,它将非常有效地平衡内存中的日志和文件系统的分页。在 Linux 上,它有一个 native integration with LibAIO 来优化文件系统交互。

    如果您设置了硬件负载平衡器,您可以配置 GPS 设备与负载平衡器通信,这些设备将转发到其中一个消息队列服务器。

    瓶颈可能是从消息队列侦听器获取数据到您的数据库。为避免这种情况,您可以使用MySQL Cluster's horizontal partitioning

    【讨论】:

    • 感谢 geryfairer,能否请您帮忙推荐 java 中的消息队列服务器,请让我知道每个 gps 设备在同一服务器和同一端口上通信,所以我如何同时处理百万个请求时间,所以超时一定不能发生?请建议我在哪里可以将所有传入数据存储在备忘录或文件系统中?我应该使用 memcached 吗?
    • 我知道 HornetQ 会在内存中保留尽可能多的消息,并在必要时分页到磁盘。
    • Cisco Catalyst 等硬件负载均衡器可以将所有传入数据传输到一个 IP 号码和端口,并将其重新分配到数百台服务器。我知道 HornetQ 会在内存中保留尽可能多的消息,并在必要时分页到磁盘。但这仅用于临时存储。接下来你想对数据做什么?
    • 由于GPS设备经常与服务器通信,我们在服务器端接收数据包,每个数据包都包含纬度和经度等信息,但是为了提取这些信息,我们需要解析传入的数据,因为数据包来了以不同的格式。所以我正在寻找一种方法 - 监听器类读取数据包 - 写入一些临时存储 - 然后写入 MYSQL 数据库,因为我们不能一起做这些所有活动,因为数百万 GPS 设备与同一台服务器通信。那么请建议我处理数百万个请求以及存储和解析的编写方式?
    • 查看更新的答案。如果您只需要一种用于传入数据的缓冲区,那么消息队列是完成这项工作的正确工具。您的 GPS 设备将使用什么协议,或者您可以决定吗?如果可以,请选择 STOMP:越来越多的 MQ 服务器支持它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2013-11-24
    相关资源
    最近更新 更多