cassandra时间序列数据模型

时间:2017-02-08 05:49:48

标签: java cassandra nosql

我已经看到站数据模型是否作为时间序列,因为我们将多个tempratures存储为一列rowkey的多列,即是否为stationId。 https://academy.datastax.com/resources/getting-started-time-series-data-modeling

但现在我的查询是 - 我需要数百万产品的商店可用性(可能在1分钟内改变10次)。 我将创建一个API,以便客户通过时间戳读取产品可用性。

因此,客户可以询问自时间戳(t1)以来所有可用的更改文章,然后我需要提供它们。

  • 我们可以通过将二级索引放在时间戳上来实现这一点,例如 -
    • 如果stock_51(update_sequence)上没有创建索引;
  • 但正如我所说,我将拥有数百万的产品,这个二级索引将是我的cql将是昂贵的 select * from table update_sequence> timestamp1 - (这将是昂贵的)

所以请建议一些可靠且足够快的数据模型

目前我们还没有创建表格 - 我想以更好的方式进行设计,因此请先咨询。 更具体一点 - 我们需要所有产品的可用性已经改变了一段时间..时间可以是任何(1个月大1岁,5岁)

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您只想保存产品日志,请使用以下数据模型 -

create table product_log(
    productid int,
    changedon bigint,
    availability int, 
    primary key (productid,changedon)
)WITH CLUSTERING ORDER BY (changedon DESC);

插入查询 -

insert into product_log (productid,changedon,availability) values (100,1486562259037,28);-- oldest time stamp value for changedon
insert into product_log (productid,changedon,availability) values (100,1486562296492,29); 
insert into product_log (productid,changedon,availability) values (200,1486562322372,30);
insert into product_log (productid,changedon,availability) values (200,1486562332019,31);
insert into product_log (productid,changedon,availability) values (300,1486562340851,32);
insert into product_log (productid,changedon,availability) values (300,1486562348963,33); -- latest time stamp value for changedon

选择*查询---

        cqlsh:nasa> select * from product_log;

 productid | changedon     | availability
-----------+---------------+--------------
       200 | 1486562332019 |           31
       200 | 1486562322372 |           30
       100 | 1486562296492 |           29
       100 | 1486562259037 |           28
       300 | 1486562348963 |           33
       300 | 1486562340851 |           32

(6 rows)

基于changeon值的范围查询 -

        cqlsh:nasa> select * from product_log where changedon > 1486562259037 and changedon < 1486562348963 ALLOW FILTERING;

 productid | changedon     | availability
-----------+---------------+--------------
       200 | 1486562332019 |           31
       200 | 1486562322372 |           30
       100 | 1486562296492 |           29
       300 | 1486562340851 |           32

(4 rows)

允许对群集列进行范围查询。只有这个设计的问题是,它会创建宽行。如果您对同一产品ID的更新太多,则分区将不均匀。