¶动因
之前使用Man-Group的Arctic系统(老Arctic,基于MongoDB的那个)存储各种交易标的的数据,但发现比较慢。测试下传说中的KDB+看能否替换。目前并不期望能使用KDB+强项的内部计算(由于q
语言学习成本过高),只是简单作为时序数据库使用,支持读取写入增删改查即可。
¶架构
使用一台Linux主机作为数据库服务器,与客户机在同一个局域网(千兆以太网)下。具体配置过程略。
¶简单测试
使用数据是浦发银行(600000.SSE)的1分钟数据,长度大约10年,一共599280行x9列。
-
写入
KDB+:1
t = con('{`:trade/ set x}', df1)
CPU times: total: 844 ms
Wall time: 574 msArctic:
1
barlib.write("test_1m", df1)
CPU times: total: 1.48 s
Wall time: 1.62 s -
整体读取
KDB+:1
2
3%%time
a = con('get `:trade')
df_get = a.pd().set_index("date")CPU times: total: 297 ms
Wall time: 338 msArctic:
1
barlib.read("test_1m")
CPU times: total: 2.08 s
Wall time: 3.24 s -
部分读取
KDB+1
2a_p = con("select date, open, close from `:trade where date within 2023.01.01T10:00 2024.03.01T14:00")
df_get_p = a_p.pd().set_index("date")CPU times: total: 15.6 ms
Wall time: 18 msArctic
1
barlib.read("test_1m", chunk_range=DateRange("2023.01.01 10:00", "2024.03.01T14:00"), columns=["open", "close"])
CPU times: total: 188 ms
Wall time: 332 ms