我正在尝试设计创建基于云的系统(IaaS),该系统将从传感器收集数据(与水污染相关的活动),并且在某些事件将决定处理特定传感器的数据。 数据特征是: 1.对于每个传感器,数据每两天发送一次(每月最多6次) 2.每个传感器读数包含大约5000个事件,这些事件被封装在发送到服务器的50-100条消息中(这样的“会话”大约需要20分钟,每5秒发送一次消息) 3.我正在构建系统以处理每秒30,000条消息的速率。 4.处理数据不应该是实时的,我有大约10分钟一旦“会话”完成后再进行处理。 5. 90%的会话都不是很有趣,一旦完成就可以扔掉。其他10%的事件或事件封装在消息中,根据它们我需要决定是否需要处理整个会话数据并向传感器发送有污染的警报。
我创建了一个每秒生成5000条消息的工具,我试图弄清楚哪个数据库对我的方案来说是最优的。 这些是我想要尝试的数据库:
Cassandra - 我将为每个会话保存一个内存密钥集合。密钥用于存储在cassandra中的消息。一旦我检测到包含错误读数的消息,我将需要在“会话”中提取所有其他消息并处理它们(这意味着对cassandra的50-100个请求)。我关注的是写性能(因为我有很多读写操作)+我没有一个好的策略来删除90%不需要的会话。
Couchbase - 我将根据sensorID为每个“会话”保存一个文档,并将每条消息附加到文档中。一旦我检测到包含错误读数的消息,我只需要发送一个文档请求。我关注的是读取性能。
Redis - 像cassandra一样使用它。我认为性能是最好的,但我需要自己处理数据的分片和复制,以免达到内存限制
我很想知道哪种选择最合适
感谢
答案 0 :(得分:2)
注册。 Redis - 您可以考虑使用DAAS(数据即服务)。该服务将为您管理所有实例,群集,扩展,数据持久性和高可用性设置。 一个例子是Redis Cloud by Redis Labs
答案 1 :(得分:-1)
这是一个有趣的问题。如果我们了解CAP定理的基础知识,并尝试根据一致性,可用性和分区容差的需要选择一个数据库。
高一致性和可用性 - 选择MySQL,PostgreSQL,Greenplum,Vertica,Neo4J。
高可用性和分区容忍度 - 使用Cassandra,Voldemort,Dynamo,CouchDB,Riak
对于高一致性和分区容忍度 - 使用HBase,Redis,MongoDB, BerkeleyDB,BigTable
所以我的投票是为了Cassandra。