39

我试图弄清楚这些新奇的数据存储,如 bigtable、hbase 和 cassandra 到底是什么。

我处理大量的股票市场数据,数十亿行的价格/报价数据,每天可以添加多达 100 GB 的数据(尽管这些文本文件通常至少压缩一个数量级)。这些数据基本上是一些数字、两三个短字符串和一个时间戳(通常是毫秒级)。如果我必须为每一行选择一个唯一标识符,我将不得不选择整行(因为交换可能会在同一毫秒内为同一符号生成多个值)。

我想将这些数据映射到 bigtable(我包括它的派生词)的最简单方法是通过符号名称和日期(这可能会返回一个非常大的时间序列,超过一百万个数据点并非闻所未闻)。从阅读他们的描述来看,这些系统似乎可以使用多个键。我还假设十进制数字不是键的好候选者。

其中一些系统(例如 Cassandra)声称能够进行范围查询。例如,我是否能够在上午 11:00 到下午 1:30 之间有效地查询给定日期的 MSFT 的所有值?

如果我想搜索给定日期的所有符号,并请求价格在 10 美元到 10.25 美元之间的所有符号(所以我正在搜索值,并希望返回键作为结果)怎么办?

如果我想得到两个时间序列,从另一个中减去一个,然后返回两个时间序列及其结果,我是否必须在我自己的程序中执行他的逻辑?

阅读相关论文似乎表明这些系统不太适合大规模时间序列系统。但是,如果像谷歌地图这样的系统是基于它们的,我认为时间序列应该也可以工作。例如,将时间视为 x 轴,将价格视为 y 轴,将符号视为命名位置——突然之间,bigtable 似乎应该是时间序列的理想存储(如果可以存储、检索整个地球) ,缩放和注释,股市数据应该是微不足道的)。

一些专家可以指出我正确的方向或消除任何误解。

谢谢

4

6 回答 6

21

我还不是专家,但是我已经和Cassandra一起玩了几天了,我有一些答案给你:

  1. 不要担心数据量,如果您有大型硬件集群的 $$$,它与 Cassandra 之类的系统无关。

其中一些系统(例如 Cassandra)声称能够进行范围查询。例如,我是否能够在上午 11:00 到下午 1:30 之间有效地查询给定日期的 MSFT 的所有值?

当您知道如何使用密钥时,Cassandra 非常有用。它可以非常快速地通过按键。因此,要在晚上 11:00 到下午 1:30 之间搜索 MSFT,您必须像这样键入行:

MSFT-timestamp, GOOG-timestamp, ..etc 然后你可以告诉 Cassandra 找到所有以 MSFT-now 开头并以 MSFT-now+1hour 结尾的键。

如果我想搜索给定日期的所有符号,并请求价格在 10 美元到 10.25 美元之间的所有符号(所以我正在搜索值,并希望返回键作为结果)怎么办?

我不是专家,但到目前为止,我意识到 Cassandra 根本不按值进行搜索。因此,如果您想执行上述操作,则必须创建另一个专门用于解决此问题的表,并设计您的架构以适应这种情况。但这与我上面描述的没有太大区别。这完全是关于命名你的键和列。Cassandra 可以很快找到它们!

如果我想得到两个时间序列,从另一个中减去一个,然后返回两个时间序列及其结果,我是否必须在我自己的程序中执行他的逻辑?

正确,所有逻辑都在您的程序中完成。这不是 MySQL。这只是一个存储引擎。(但我相信下一个版本会提供这些东西)

请记住,我是这方面的新手,如果我错了,请随时纠正我。

于 2009-11-03T22:08:28.493 回答
13

如果您正在处理一个庞大的时间序列数据库,那么标准是:

这些并不便宜,但它们可以非常有效地处理您的数据。

于 2009-11-03T22:43:12.013 回答
12

我尊敬的人推荐了开放时间序列数据库。特别是,该模式是他见过的最好的。

http://opentsdb.net/

于 2011-03-25T02:23:11.240 回答
2

'我站在同一座山前。我对 cassandra 的主要问题是我无法在结果集上获取流,例如以迭代器的形式。

我已经在文档和网络上上下查找,但什么也没有。

我无法获取所有键然后获取行,因为数十亿行使这成为不可能。

于 2012-01-30T16:46:46.763 回答
1

DataStax Java 驱动程序允许自动分页,以便像迭代器一样流式传输结果,并且它都是内置的。顺便说一下,这是在 Cassandra 2.0.1 中 - http://www.datastax.com/dev/blog/client -side-improvements-in-cassandra-2-0

于 2013-12-18T12:09:36.807 回答
0

只是为了在 2018 年阅读本文的完整性,现在有一个专门用于时间序列数据的特殊数据库,称为TimescaleDB

http://www.timescale.com/

这个博客值得一读,它解释了为什么它在这种特殊情况下优于 Cassandra 等解决方案,以及为什么他们决定在关系 PostgreSQL 数据库之上构建它

https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c

于 2018-03-01T10:34:37.403 回答