【发布时间】:2011-08-01 10:55:44
【问题描述】:
在 sql 术语中,我们是这样存储数据的:
table events (
id
timestamp
dimension1
dimension2
dimension3
etc.
)
所有维度值都是整数。这张表变得非常大。
我们希望对这样的查询进行快速读取:
SELECT dimension1, dimension2, COUNT(*)
FROM events
WHERE dimension8 = 'foo'
AND dimension9 = 'bar'
GROUP BY 1, 2
我们想要快速写入,而不关心事务和一致性。我们关心最终的可用性和分区容错性。
我正在寻找“NoSQL”替代方案。 Casandra 可以做我正在寻找的那种查询吗?这在阅读他们的文档时并不是很明显......如果可以做到这一点,那么这些类型的查询的性能如何?
我也在研究 MongoDB,但他们的“group()”函数有严重的限制,据我所知(最多 10,000 行)。
您是否有使用这些数据库的经验,您会推荐它作为上述问题的解决方案吗?
我应该考虑哪些其他数据库可以快速执行此类查询?
干杯, 吉米
【问题讨论】:
-
你站在哪一边?你能处理 .NET 解决方案吗?
-
"""我也在看 MongoDB,但他们的“group()”函数在我能读到的范围内有严重的限制(最多 10,000 行)。""" - 改用 M/R !
-
这是您想要对数据执行的唯一查询吗?我会建议你以不同的方式组织你的数据,你可以以你想要的形式存储它们。这里的主题不是 NoSQL 是否可以执行您想要的查询,而是改变您的想法以适应 NoSQL 哲学。更改架构,您将不再需要分组...
-
@ALoR 用户最好能够过滤任何维度并选择最多 5 个维度(最多 30 个,包括时间维度)。我猜你建议为维度值的所有(排序)组合生成键,然后让这些值包含每个的所有度量计数器?如果我要避免分组,那么当更新包含 30 个维度值的 1 条记录时,我将不得不更新 174,436 个计数器(所有这些计数器的最大键长度为 5 个维度值)。在 MongoDB 或 Cassandra 中更新这么多计数器需要(大约)多长时间?