Lar*_*zix 2 database-design cassandra datastax
我目前正在尝试使用Cassandra数据库.我正在使用DataStax开发中心和DataStax C#驱动程序.
我的当前模型非常简单,仅包含:
我将拥有1000(不多,不少)参数,从1 - 1000.并将获得每个参数一次pr的条目.第二,并将运行多年.
我的问题是关于创建表格是否更好的做法:
CREATE TABLE keyspace.measurement (
parameterId int,
value bigint,
measureTime timestamp,
PRIMARY KEY(parameterId, measureTime)
) WITH CLUSTERING ORDER BY (measureTime DESC)
Run Code Online (Sandbox Code Playgroud)
或者最好创建1000个仅包含值和measureTime的表,如果是这样,我可以在我的MeasureTime上查询范围吗?
你打算用这个来打很宽的行.我会反对你的表格格式,我会选择一些允许你控制行的宽度的东西.
根据您的查询要求,我会写下一个更合适的架构(恕我直言):
CREATE TABLE keyspace.measurement (
parameterId int,
granularity timestamp,
value bigint,
measureTime timestamp,
PRIMARY KEY((parameterId, granularity), measureTime)
) WITH CLUSTERING ORDER BY (measureTime DESC)
Run Code Online (Sandbox Code Playgroud)
这与您的非常相似,但它有一个主要优点:您可以配置行的宽度,并且您没有任何热点.这个想法很简单:两个字段parameterId和granularity字段都创建了分区键,因此它们可以告诉您数据的去向,同时measureTime保持数据的有序性.假设您想要每天查询,您将存储到您granularity的值yyyy-mm-dd中measureTime,将同一天的所有度量组合在一起.
这允许您使用有效的范围查询检索位于同一分区上的所有值(因此,每个给定parameterId和granularity字段对).在日常配置中,每个分区最终会有86400条记录.这个数字可能仍然很高(建议的限制是10k IIRC),你可以通过逐个小时的分组来降低这个yyyy-mm-dd HH:00数值.
这种方法的缺点是,如果您需要来自多个分区的数据(例如,您每天都要进行分组,但是您需要连续两天的数据,例如1月19日的最后6个小时,以及前6个小时1月20日的小时),那么你需要执行多个查询.