【发布时间】:2017-10-08 04:23:48
【问题描述】:
概述
我想在 cassandra 中确定金融报价数据的正确架构。
数据和架构
我在 csv 中有以下示例数据:
SYMBOL,DATE,TIME,PRICE,SIZE
A,2011-01-03,9:28:00,41.46,200
A,2011-01-03,9:28:00,41.46,100
A,2011-01-03,9:30:00,41.56,1300
A,2011-01-03,9:30:00,41.56,1300
A,2011-01-03,9:30:00,41.55,100
A,2011-01-03,9:30:19,41.55,200
A,2011-01-03,9:30:23,41.5169,100
A,2011-01-03,9:30:29,41.44,66534
A,2011-01-03,9:30:29,41.45,225
A,2011-01-03,9:30:30,41.44,100
A,2011-01-03,9:30:30,41.43,100
A,2011-01-03,9:30:30,41.49,100
A,2011-01-03,9:30:30,41.45,200
我存储到下表中:
CREATE TABLE tickdata (
symbol text,
date date,
time time,
price float,
size int,
PRIMARY KEY ((symbol,date),time)
);
这是一张SELECT 的一张表:
symbol | date | time | price | size
--------+------------+--------------------+---------+-------
A | 2011-01-03 | 09:28:00.000000000 | 41.46 | 100
A | 2011-01-03 | 09:30:00.000000000 | 41.56 | 1300
A | 2011-01-03 | 09:30:19.000000000 | 41.55 | 200
A | 2011-01-03 | 09:30:23.000000000 | 41.5169 | 100
A | 2011-01-03 | 09:30:29.000000000 | 41.45 | 66534
用例
数据将被写入 Cassandra 一次,并且主要在 date 和 symbol 上的条件下读取,例如给定时间段的一组符号。
问题
元组
(symbol,date,time)不是正确的PRIMARY KEY,因为我的粒度限制为秒。因此,COPY FROM例如由于键中的重复,在导入期间删除了 csv 的第二行。 如何保存记录?假设
PRIMARY KEY是唯一的,我如何避免存储SYMBOL和DATE的重复值?还是分区在幕后解决了这个问题?-
我正在考虑使用以下架构:
CREATE TABLE tickdata ( symbol text, date date, time blob, price blob, size blob, PRIMARY KEY ((symbol,date)) );存储原始数据。这是解决上述问题的正确方法吗?
当我
SELECT它时,根据PRIMARY KEY的定义,数据是未排序的。这与上面提到的非唯一性问题有关吗?我是否应该坚持使用我的二进制 file-store 来保存符号和日期的地图并根据要求加载相关文件?这避免了每行重复符号和日期,并且与时间戳的有限粒度(重复)无关。
【问题讨论】:
-
日期和时间是怎么产生的?你用现在的时间吗??
-
而你的用例不清楚
-
数据按原样给出,用例示例可能是:
select * from tickdata where date > 2012-01-01 and symbol in (...)。
标签: cassandra time-series schema