【问题标题】:cassandra timeseries data modelcassandra时间序列数据模型
【发布时间】:2017-02-08 05:49:48
【问题描述】:

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

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

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

  • 我们可以通过将二级索引放在时间戳上来做到这一点,例如 -
    • 如果stocks_51 (update_sequence) 上不存在则创建索引;
  • 但正如我所说,我将拥有数百万种产品,这个二级索引将是昂贵的,我的 cql 将是 select * from table where update_sequence > timestamp1 - (代价高昂)

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

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

提前致谢

【问题讨论】:

  • 您的问题很好但不清楚。什么是可用性,是数字还是 0/1 ?您是否希望根据可用性在一天、一个月、一年内提供所有产品?
  • 最好你也给你的表格定义。
  • 感谢您的即时回复。好的,很好目前我们没有创建表格 - 我想以更好的方式设计,所以咨询 是的,我们需要所有可用性从一段时间以来发生变化的产品.. 时间可以是任何时间(1 个月大 1 岁大 5 岁大)

标签: java cassandra nosql


【解决方案1】:

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

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)

基于更改值的范围查询 -

        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更新太多,分区就会不均匀。

【讨论】:

  • 嗯,我试过了,但正如你提到的,我们每天每个 id 都会有很多更新。
  • 物化视图在这里有用吗?
  • 是的,如果您使用的是 c*3 。
猜你喜欢
  • 2013-08-02
  • 2013-04-17
  • 2013-07-13
  • 2014-11-18
  • 2013-06-09
  • 1970-01-01
  • 2011-01-13
  • 2016-08-29
相关资源
最近更新 更多