cassandra上tick数据的模式 概述
我想在cassandra中为财务数据确定正确的模式 数据和模式 我有以下csv格式的示例数据:cassandra上tick数据的模式 概述,cassandra,time-series,schema,Cassandra,Time Series,Schema,我想在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
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)
);
这是表的选择的一部分:
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一次,并且主要在日期
和符号
条件下读取,例如给定时间段内的一组符号
问题
- 元组
(符号、日期、时间)
不是正确的主键,因为我的粒度限制为秒。因此,从
复制,例如,在导入过程中,由于键重复,会删除csv的第二行如何保存记录
- 假设
主键
是唯一的,我如何避免存储符号
和日期
的重复值?还是分区在引擎盖下处理
- 我正在考虑使用以下模式:
CREATE TABLE tickdata (
symbol text,
date date,
time blob,
price blob,
size blob,
PRIMARY KEY ((symbol,date))
);
存储原始数据。这是解决上述问题的正确方法吗
- 根据
主键
的定义,当我选择
时,数据未排序。这与上面提到的非唯一性问题有关吗
- 我是否应该继续使用二进制文件存储,它保存符号和日期的地图,并根据请求加载相关文件?这避免了为每一行重复符号和日期,并且和时间戳的有限粒度(重复)无关
元组(符号、日期、时间)不是合适的主键,因为我的
粒度限制为秒。因此,来自(例如)的副本会删除
在导入过程中,由于在
钥匙我如何保存记录
第一个表定义中的主键是((符号,日期),时间)
而不是(符号,日期,时间)
。在卡桑德拉,两者都是不同的
((符号,日期),时间)
=>将在一个节点中存储相同符号(A)和日期的所有记录。对于相同的符号(A),但其他日期可能在其他节点上。
行键将为符号+日期
物理数据布局(示例)
(符号、日期、时间)
=>同一符号的所有记录将驻留在一个节点上。这可能会导致宽行。
行键将是符号
物理数据布局(示例)
为了避免记录丢失,您可以再添加一列,如uuid
或timeuuid
CREATE TABLE tickdata (
symbol text,
date date,
time time,
price float,
size int,
id timeuuid
PRIMARY KEY ((symbol,date),time,id)
);
假设主键是唯一的,如何避免重复存储
符号和日期的价值?还是分区在处理这个问题
在引擎盖下
基于上面解释的物理存储结构,这个问题已经得到解决
您正在讨论的备用模式对于一个符号和一个日期只有一条记录。您必须在应用程序端处理blob。。。我想这可能是开销
数据不是按照主键的定义排序的
当我选择它的时候。这与非唯一性问题有关吗
上面提到过吗
默认情况下,数据是按集群键按升序排序的(在您的情况下是按时间排序的)。虽然您可以通过将表的属性的集群顺序更改为降序来更改顺序
例如:
CREATE TABLE tickdata (
symbol text,
date date,
time time,
price float,
size int,
id timeuuid
PRIMARY KEY ((symbol,date),time,id)
) WITH CLUSTERING ORDER BY(time desc,id desc);
我应该坚持使用二进制文件存储,它保存符号地图吗
和日期,并根据要求加载相关文件?这避免了
为每行重复符号和日期,与限制无关
时间戳的粒度(重复)
您可以自己决定:)
元组(符号、日期、时间)不是合适的主键,因为我的
粒度限制为秒。因此,来自(例如)的副本会删除
在导入过程中,由于在
钥匙我如何保存记录
第一个表定义中的主键是((符号,日期),时间)
而不是(符号,日期,时间)
。在卡桑德拉,两者都是不同的
((符号,日期),时间)
=>将在一个节点中存储相同符号(A)和日期的所有记录。对于相同的符号(A),但其他日期可能在其他节点上。
行键将为符号+日期
物理数据布局(示例)
(符号、日期、时间)
=>同一符号的所有记录将驻留在一个节点上。这可能会导致宽行。
行键将是符号
物理数据布局(示例)
为了避免记录丢失,您可以再添加一列,如uuid
或timeuuid
CREATE TABLE tickdata (
symbol text,
date date,
time time,
price float,
size int,
id timeuuid
PRIMARY KEY ((symbol,date),time,id)
);
假设主键是唯一的,如何避免重复存储
符号和日期的价值?还是分区在处理这个问题
在引擎盖下
基于上面解释的物理存储结构,这个问题已经得到解决
您正在讨论的备用模式对于一个符号和一个日期只有一条记录。您必须在应用程序端处理blob。。。我想这可能是开销
数据不是按照主键的定义排序的
当我选择它的时候。这与非唯一性问题有关吗
上面提到过吗
默认情况下,数据是按集群键按升序排序的(在您的情况下是按时间排序的)。虽然您可以通过将表的属性的集群顺序更改为降序来更改顺序
例如:
CREATE TABLE tickdata (
symbol text,
date date,
time time,
price float,
size int,
id timeuuid
PRIMARY KEY ((symbol,date),time,id)
) WITH CLUSTERING ORDER BY(time desc,id desc);
我应该坚持使用二进制文件存储,它保存符号地图吗
和日期,并根据要求加载相关文件?这避免了
为每行重复符号和日期,与限制无关
时间戳的粒度(重复)
您可以自己决定:)日期和时间是如何生成的?您是否使用当前时间?并且您的用例不清晰?数据按原样给出