在bigtable衍生物中存储大量的有序时间序列数据

问题描述:

我想弄清楚这些新的数据存储如bigtable,hbase和cassandra到底是什么。在bigtable衍生物中存储大量的有序时间序列数据

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

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

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

如果我想在给定日期的所有符号上进行搜索,并请求价格介于10美元和10.25美元之间的所有符号(因此我正在搜索这些值,并希望返回键),该怎么办?

如果我想得到两个系列,从另一个减去一个系列,并返回两个系列及其结果,我将不得不在自己的程序中执行他的逻辑?

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

有些专家可以指导我正确的方向或清除任何误解。

感谢

我不是专家还,但我一直在玩卡桑德拉了几天,我有一些答案给你:

  1. 不要担心关于数据量,与Cassandra等系统无关,如果对于大型硬件集群有$$$。

一些这样的系统(卡桑德拉,例如)声称能够做范围查询。在上午11点到下午1点30分之间的某一天,我是否能够高效地查询MSFT的所有值?

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

MSFT时间戳,GOOG时间戳,..etc 然后您可以告诉Cassandra找到所有密钥从MSFT开始 - 现在以MSFT结束 - 现在为1小时。

如果我想要搜索某个特定日期的所有符号,并请求价格介于10美元和10.25美元之间的所有符号(因此我正在搜索这些值并希望返回键),该怎么办?

我不是专家,但到目前为止,我意识到卡桑德拉并不是'按价值搜索。所以,如果你想要做到这一点,你将不得不为另一个表格专门处理这个问题,并设计你的模式以适应这种情况。但是它与我上面所描述的没有什么不同。这完全是关于命名你的键和列。 Cassandra可以很快找到它们!

如果我想获得两次系列,减去从另一个,并返回两个时间序列及其结果,我会做他的逻辑在我自己的计划?

正确的,所有的逻辑是你的程序中完成的。这不是MySQL。这只是一个存储引擎。 (不过,我相信在未来的版本将提供这些类的东西)

请记住,我是一个新手,在这一点,如果我错了,请随时指正。

+1

当你说“你可以告诉Cassandra找到所有以MSFT开头的密钥 - 现在结束于MSFT-now + 1hour” - 你的意思是RowSclice Query?我的意思是如果我问卡桑德拉给我所有的t1和t2之间的行键,t是一个时间戳,是否有效。我听说在Cassandra中rowSlices不如列切片效率高? – Peter 2014-09-17 13:45:46

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

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

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

http://opentsdb.net/

+0

除了很好,它的免费! – 2012-10-18 14:25:52

+1

OpenTSDB非常好,不幸的是它不适合财务数据,特别是如果您试图以超过一秒的分辨率存储刻度数据(OpenTSDB目前只有最高分辨率)。 – Datageek 2013-03-02 21:43:31

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

我期待已向上和向下的文档和网络,但没有。

我不能获取所有的键,然后得到的行数十亿行的使这不可能的。

+0

刚刚遇到同样的问题。我希望有一个简单的方法来创建一个查询结果流。我可以快速通过它们,不能一次把它们都记忆在心里......你有没有找到任何解决方案? – em70 2012-03-25 21:39:28

+0

嗨emaster70,不,我没有找到解决方案。干杯 – user1052080 2012-07-23 10:25:46

的DataStax Java驱动程序允许自动分页,以便将流的结果,就像一个迭代器,这一切都建立在,这是在卡桑德拉2.0。1顺便说一句 - http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-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