将大量有序时间序列数据存储在大型衍生品中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将大量有序时间序列数据存储在大型衍生品中相关的知识,希望对你有一定的参考价值。
我试图弄清楚这些新的数据存储如bigtable,hbase和cassandra到底是什么。
我处理大量的股票市场数据,数十亿行价格/报价数据,每天可以累计达到100千兆字节(尽管这些文本文件通常压缩至少一个数量级)。这个数据基本上是一些数字,两个或三个短字符串和一个时间戳(通常是毫秒级)。如果我必须为每一行选择一个唯一的标识符,我将不得不选择整行(因为交换可能会在同一毫秒内为同一个符号生成多个值)。
我想将这些数据映射到bigtable(我包括它的衍生物)的最简单方法是按符号名称和日期(这可能会返回一个非常大的时间序列,超过百万个数据点并非闻所未闻)。通过阅读他们的描述,看起来这些系统可以使用多个密钥。我还假设十进制数不是键的好选择。
其中一些系统(例如Cassandra)声称能够进行范围查询。在给定的一天,上午11:00到下午1:30之间,我是否能够有效地查询MSFT的所有值?
如果我想搜索给定日期的所有符号,并请求所有价格在10美元到10.25美元之间的符号,那么该怎么办?所以我正在搜索这些值,并希望返回键作为结果?
如果我想得到两个系列,从另一个系列中减去一个,并返回两次系列及其结果,我将在自己的程序中做他的逻辑怎么办?
阅读相关论文似乎表明这些系统不适合大规模时间序列系统。但是,如果谷歌地图等系统基于它们,我认为时间序列也应该有效。例如,将时间视为x轴,将价格视为y轴,将符号视为命名位置 - 突然之间看起来像bigtable应该是时间序列的理想存储(如果整个地球可以存储,检索,放大和注释,股市数据应该是微不足道的)。
有些专家可以指出我正确的方向或澄清任何误解。
谢谢
我还不是专家,但我已经和Cassandra玩了几天了,我有一些答案给你:
- 不要担心数据量,如果您对大型硬件集群有$$$,则与Cassandra等系统无关。
其中一些系统(例如Cassandra)声称能够进行范围查询。在给定的一天,上午11:00到下午1:30之间,我是否能够有效地查询MSFT的所有值?
当您知道如何使用键时,Cassandra非常有用。它可以非常快速地通过键。因此,要在11:00到1:30之间搜索MSFT,您必须按如下方式键入行:
MSFT-timestamp,GOOG-timestamp,.. etc然后你可以告诉Cassandra找到所有以MSFT开头的密钥,以MSFT-now + 1hour结束。
如果我想搜索给定日期的所有符号,并请求所有价格在10美元到10.25美元之间的符号,那么该怎么办?所以我正在搜索这些值,并希望返回键作为结果?
我不是专家,但到目前为止,我意识到卡桑德拉根本没有按价值搜索。因此,如果您想要执行上述操作,则必须创建另一个专门针对此问题的表,并设计适合该案例的架构。但它与我上面描述的不会有太大的不同。这都是关于命名键和列的。卡桑德拉可以很快找到它们!
如果我想得到两个系列,从另一个系列中减去一个,并返回两次系列及其结果,我将在自己的程序中做他的逻辑怎么办?
正确,所有逻辑都在你的程序中完成。这不是mysql。这只是一个存储引擎。 (但我相信下一个版本会提供这些东西)
请记住,我是新手,如果我错了,请随时纠正我。
如果你正在处理一个庞大的时间序列数据库,那么标准是:
- KDB:http://www.kx.com/
- OneTick:http://www.onetick.com
- Vhayu:gasxswpoi
这些并不便宜,但它们可以非常有效地处理您的数据。
我尊重的人推荐了开放时间序列数据库。特别是,模式是他见过的最好的。
'站在同一座山前。我对cassandra的主要问题是我无法在结果集上获得流,例如以迭代器的形式。
我看起来已经在文档和网络上下,但没有。
我无法获取所有密钥然后获取行数十亿行使这不可能。
DataStax Java驱动程序允许自动分页,因此它将像迭代器一样流式传输结果,而且它都是内置的。这就是Cassandra 2.0.1顺便说一句 - http://opentsdb.net/
为了在2018年完整阅读,现在有一个特殊的数据库,仅用于名为TimescaleDB的时间序列数据
http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0
这个博客值得一读,它解释了为什么它优于Cassandra等解决方案的特殊情况以及为什么他们决定在关系PostgreSQL数据库之上构建它
以上是关于将大量有序时间序列数据存储在大型衍生品中的主要内容,如果未能解决你的问题,请参考以下文章