历史时间序列的基于列的数据存储
corintick的Python项目详细描述
用于历史TimeSeries数据的基于列的数据存储。科林蒂克是 主要用于存储pandas 表示时间序列的数据帧。
快速启动
初始化Corintick:
fromcorintickimportCorintickcorin=Corintick()
现在我们需要一个数据帧来插入到Corintick中。用于演示 目的,我们将从Quandl:
importquandldf1=quandl.get('TSE/7203')
这里,df1看起来像这样:
Open High Low Close Volume Date 2012-08-23 3240.0 3270.0 3220.0 3260.0 4652200.0 2012-08-24 3225.0 3245.0 3210.0 3235.0 3659600.0 2012-08-27 3250.0 3280.0 3215.0 3220.0 3614600.0 2012-08-28 3235.0 3260.0 3150.0 3180.0 6759100.0 2012-08-29 3180.0 3195.0 3160.0 3175.0 2614800.0 2012-08-30 3180.0 3190.0 3160.0 3170.0 3291700.0 2012-08-31 3135.0 3155.0 3095.0 3095.0 5663800.0 ...
写作
将df1插入corentick很简单:
corin.write('7203.T',df1,source='Quandl',country='Japan')
传递给corintick.write的第一个参数是UID(通用 标识符),并且对于插入到给定时间序列中的每个时间序列都必须是唯一的 收藏。第二个参数是要插入的数据帧。这个 其余的关键字参数是可选的元数据标记,可以是 附加到数据框/文档以供查询。
读数
阅读科林蒂克的文章也很简单:
df2=corin.read('7203.T')
还可以将start和end指定为ISO-8601日期时间字符串
df2=corin.read('7203.T',start='2014-01-01',end='2014-12-31')
Open High Low Close Volume 2014-01-06 6360.0 6400.0 6280.0 6300.0 12249300.0 2014-01-07 6270.0 6340.0 6260.0 6270.0 7891400.0 2014-01-08 6310.0 6320.0 6260.0 6300.0 7184100.0 2014-01-09 6310.0 6340.0 6260.0 6270.0 8653000.0 2014-01-10 6260.0 6310.0 6250.0 6290.0 7815900.0 ... 2014-12-24 7645.0 7687.0 7639.0 7657.0 9287900.0 2014-12-25 7600.0 7655.0 7597.0 7611.0 5362700.0 2014-12-26 7629.0 7700.0 7615.0 7696.0 6069100.0 2014-12-29 7740.0 7746.0 7565.0 7662.0 9942800.0 2014-12-30 7652.0 7674.0 7558.0 7558.0 7821200.0
…以及要检索的列:
df2=corin.read('7203.T',columns=['Close','Volume'],start='2017-05-10')
Close Volume 2017-05-10 6081.0 7823700.0 2017-05-11 6123.0 13511900.0 2017-05-12 6047.0 8216600.0 2017-05-15 6009.0 5925200.0 2017-05-16 6093.0 6449300.0 ...
配置
默认情况下,corentick尝试使用在localhost:27017运行的mongodb实例。 这可以通过Corintick初始值设定项的host和port参数进行更改。 类似地,corentick使用的数据库默认为corintick,也可以使用 参数db。 假设db数据库中的所有数据都是corentick数据。避免任何 其他进程/应用程序向该数据库读/写数据
如果MongoDB安装程序需要身份验证,则可以使用^{TT14}$和^{TT15}$参数。
有关详细信息,请参见Corintick.__init__。
收藏
Corentick可以使用多个集合来更好地组织数据。一个 Corentick集合与MongoDB集合相同在每个 集合中,对于给定的UID,只能存在单个数据文件/文档。 在一段时间内。
如果需要为同一个UID存储两种不同类型的数据 在重叠的时间范围内(即 一个给定的股票),您应该将两种不同类型的数据分为 不同的收藏
默认情况下,数据会写入corintick集合。 可以通过将字符串分配给 Corintick.default_collection。
>>>corin.collection='another_collection'
也可以在方法调用的基础上指定集合:
df=corin.read('7203.T',collection='orderbook')
corin.write(df,collection='another_collection')
科林蒂克力学
在编写过程中,Corentick会执行以下操作:
- 获取输入数据帧并拆分成列
- 使用LZ4压缩算法序列化/压缩每个
- 生成包含二进制blob的MongoDB文档 对应于每个列和其他元数据
在阅读过程中,会发生相反的情况:
- 获取文档
- 数据被解压缩并转换回numpy数组
- 数据帧被重建并返回给用户
背景
科林蒂克的灵感来源于并致力于成为人类的简化版。 啊,我是Arctic。
与北极的差异
科林蒂克有一个单一的存储引擎,这是基于列的,而不是 版本化,类似于北极的滴答声。但是,不同于 tickstore,它确实支持非数字的objectdtype列 将它们解析为MessagePack字符串对象
命名
科林蒂克从一开始就瞄准了基于列的数据存储。 “科林斯”是“科林斯”(罗马柱风格)和 “勾选”。
基准
TODO
- vs流入B
- vs vanila MongoDB
- vs MySQL
- vs kdb+(32位)