选择哪个数据库(Cassandra,MongoDB,?)来存储和查询事件/日志/指标数据?

Jim*_*oho 10 mongodb cassandra nosql

在sql术语中,我们存储的数据如下:

table events (
  id
  timestamp
  dimension1
  dimension2
  dimension3
  etc.
)
Run Code Online (Sandbox Code Playgroud)

所有维度值都是整数.这张桌子变得非常大.

我们想要对这样的查询进行愚蠢的快速读取:

SELECT dimension1, dimension2, COUNT(*) 
FROM   events
WHERE  dimension8 = 'foo'
AND    dimension9 = 'bar'
GROUP BY 1, 2
Run Code Online (Sandbox Code Playgroud)

我们想要快速写入,而不关心事务和一致性.我们关心最终的可用性和分区容差.

我在看"NoSQL"替代品.Casandra可以做我正在寻找的那种查询吗?通过阅读他们的文档,这并不是很明显......如果它可以做到这一点,那些类型的查询的性能是什么?

也在看MongoDB,但他们的"group()"功能在我能阅读时有很多限制(最多10,000行).

您是否有使用这些数据库的经验,您是否会建议将其作为上述问题的解决方案?

我应该考虑哪些其他数据库可以快速完成这些查询?

干杯,吉米

jbe*_*lis 12

"分组依赖"和"愚蠢的快速"不一起去.这就是那种野兽的本质......因此对Mongo集团运作的局限性; Cassandra本身甚至不支持它(虽然它通过Hadoop为Hive或Pig查询...但这些并不是非常愚蠢的快速).

像Twitter的Rainbird(使用Cassandra)进行实时分析的系统通过非规范化/预先计算计数来实现:http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011

  • 我看到你在一句话后停止阅读. (3认同)

Gat*_* VP 6

也在看MongoDB,但他们的"group()"功能在我能阅读时有很多限制(最多10,000行).

为了澄清,这是返回的10,000行.在您的示例中,这将适用于最多10,000个组合dimension1/dimension2.如果那个太大,那么你也可以使用较慢的Map/Reduce.请注意,如果您运行的查询结果超过10k,则最好使用Map/Reduce并保存此数据.10k是一个大的查询结果,否则只是"扔掉".

您是否有使用这些数据库的经验,您是否会建议将其作为上述问题的解决方案?

许多人实际上使用MongoDB来"实时"地进行这种类型的汇总,但他们使用"计数器"而不是"聚合"来完成.它们不是"滚动"详细数据,而是进行常规插入,然后它们会增加一些计数器.

特别是,使用像&这样的原子修饰符在单个请求中以原子方式更新数据.$inc$push

现在看看有人这样做的蜂鸟.还有一个由MongoDB支持的开源事件记录系统:Graylog2.ServerDensity还执行MongoDB支持的服务器事件日志记录.

查看这些内容可能会为您想要执行的日志记录类型提供一些灵感.