使用哪种技术 (SQL/NoSQL) 进行实时数据聚合

Posted

技术标签:

【中文标题】使用哪种技术 (SQL/NoSQL) 进行实时数据聚合【英文标题】:Which technology ( SQL/NoSQL) to use for real-time data aggregation 【发布时间】:2012-02-04 06:59:46 【问题描述】:

我需要设计一个近乎实时的系统,将文档(带有字段:id、关键字、时间戳)添加到系统中。要求是从最近 x 分钟内添加到系统的文档中获取前 k 个关键字。典型的文档添加速率约为 100 个文档/秒,未来可能会增加(因此技术应该是水平可扩展的)。

我正在考虑使用 solr-facets (with sharding) 来生成 top-k 关键字,我有点担心 solr 的高写入/秒。另一种选择是使用 Cassandra,但不确定它将如何扩展范围查询(以计算聚合),因为 OrderPreservingPartitioner 可能难以分配负载。

【问题讨论】:

【参考方案1】:

这听起来像是Complex Event Processing 问题,而不是数据库或搜索问题。您并不关心保留数据,而是关心实时获取关键字趋势或类似的东西。您想要查看的一些供应商/库是(有很多遗漏):

微软/.NET:

StreamInsight - Microsoft 的 CEP 产品

Reactive Extensions for .NET - 用于流处理的 .NET 扩展

Java:

Esper - 非常流行的OSS流处理库

Storm - Hadoop 上的流处理,可能扩展到非常大的数据量

第 3 方/专有(不会评论这些,对它们了解不够):

StreamBase

Aleri

【讨论】:

只是好奇,solr-facets 可能有什么问题? 完全没有问题。它似乎不是适合这项工作的工具。 Facets,AFAIK(格兰特英格索尔可以在这里纠正我)让您可以通过搜索属性深入研究搜索结果,这对于网站上的产品搜索等非常有用。你只关心最后几分钟的事件——在那之后你丢弃旧的东西。【参考方案2】:

同时使用sql和nosql。

查询使用sql,复杂数据使用nosql。

编写 x2 代码。并根据他们的需求解决每一个问题。

【讨论】:

以上是关于使用哪种技术 (SQL/NoSQL) 进行实时数据聚合的主要内容,如果未能解决你的问题,请参考以下文章

SQL/NoSQL两大阵营激辩:谁更适合大数据

我应该使用哪种通信技术将数据流推送给网站用户[关闭]

NoSQL之一:Memcached

HLS与WebRTC,哪种技术能带来最佳的实时视频流体验?

NoSQL是啥意思

如何创建流式 Web api?或者我们可以实施哪种技术来在 .NET 中创建流式 API?