【发布时间】:2015-07-17 02:30:44
【问题描述】:
我正在尝试设计创建一个基于云的系统 (IaaS),该系统将从传感器(与水污染相关的活动)收集数据,并在某些事件时决定处理特定传感器的数据。 数据特征是: 1. 对于每个传感器,数据每隔几天发送一次(每月最多 6 次) 2. 每个传感器读数包含大约 5000 个事件,这些事件封装在 50-100 条消息中发送到服务器(这样的“会话”大约需要 20 分钟,其中消息每 5 秒发送一次) 3. 我正在构建每秒处理 30,000 条消息的系统。 4.数据的处理不应该是实时的,一旦“会话”完成,我有大约10分钟的时间来进行处理。 5. 90% 的课程没有兴趣,一旦完成就可以扔掉。其他 10% 有事件或封装在消息中的事件,我需要根据它们决定是否需要处理整个会话数据并向传感器发送存在污染的警报。
我创建了一个每秒生成 5000 条消息的工具,我试图找出最适合我的场景的数据库。 这些是我想尝试的数据库:
Cassandra - 我将为每个会话保存一个内存中的密钥集合。密钥用于存储在 cassandra 中的消息。一旦我检测到包含错误读数的消息,我将需要提取“会话”中的所有其他消息并处理它们(这意味着 50-100 个对 cassandra 的请求)。我关心的是写入性能(因为我有很多读写操作)+ 我没有删除 90% 不需要的会话的好策略。
Couchbase - 我将根据 sensorID 为每个“会话”保存一个文档,并将每条消息附加到文档中。一旦我检测到包含错误读数的消息,我只需要发送一个文档请求。我关心的是读取性能。
Redis - 像 cassandra 一样使用它。我认为性能会是最好的,但我需要自己处理数据的分片和复制,以免达到内存限制
我很想知道哪个选项最合适
谢谢
【问题讨论】:
-
Couchbase 具有出色的读取性能(我认为它优于 Cassandra),请参阅 blog.couchbase.com/dissecting-nosql-benchmark
标签: cassandra redis couchbase iot nosql