0

我正在尝试设计创建一个基于云的系统(IaaS),该系统将从传感器(水污染相关活动)收集数据,并在某些事件时决定处理特定传感器的数据。数据特征是: 1. 对于每个传感器,数据每隔几天发送一次(每月最多 6 次) 2. 每个传感器读数包含大约 5000 个事件,这些事件封装在发送到服务器的 50-100 条消息中(这样的“会话”大约需要 20 分钟,其中每 5 秒发送一次消息) 3. 我正在构建系统以处理每秒 30,000 条消息的速率。4.数据的处理不应该是实时的,一旦“会话”完成,我有大约10分钟的时间来进行处理。5. 90% 的课程没有兴趣,一旦完成就可以扔掉。

我创建了一个每秒生成 5000 条消息的工具,我试图找出哪个数据库最适合我的场景。这些是我想尝试的数据库:

  1. Cassandra - 我将为每个会话保存一个内存中的密钥集合。密钥用于存储在 cassandra 中的消息。一旦我检测到包含错误读数的消息,我将需要提取“会话”中的所有其他消息并处理它们(这意味着对 cassandra 的 50-100 个请求)。我在这里关心的是写入性能(因为我有很多读写操作)+我没有一个好的策略来删除 90% 不需要的会话。

  2. Couchbase - 我将根据 sensorID 为每个“会话”保存一个文档,并将每条消息附加到文档中。一旦我检测到包含错误读数的消息,我只需要发送一个文档请求。我关心的是读取性能。

  3. Redis - 像 cassandra 一样使用它。我认为性能将是最好的,但我需要自己处理数据的分片和复制,以免达到内存限制

我很想听听哪个选项最合适

谢谢

4

2 回答 2

2

注册。Redis – 您可以考虑使用 DAAS(数据即服务)。该服务将为您管理所有实例、集群、扩展、数据持久性和高可用性设置。一个例子是Redis Labs 的 Redis Cloud

于 2015-05-10T07:17:16.680 回答
-1

这是一个有趣的。如果我们去了解 CAP Theorem 的基础知识,并尝试根据一致性、可用性和分区容错性的需要来选择一个 DB。

为实现高一致性和可用性 - 选择 MySQL、PostgreSQL、Greenplum、Vertica、Neo4J。

对于高可用性和分区容错 - 使用 Cassandra、Voldemort、Dynamo、CouchDB、Riak

高一致性和分区容错——使用 HBase、Redis、MongoDB、BerkeleyDB、BigTable

所以我在这里投票给 Cassandra。

于 2015-05-07T00:11:47.433 回答