【问题标题】:Cassandra data modeling queryCassandra 数据建模查询
【发布时间】:2016-08-20 17:09:50
【问题描述】:

我目前正在学习 apache cassandra,并且是 nosql 数据建模方面的新手。目前我正在尝试构建一个具有以下字段的系统:

 latitude | time_forecast       | longitude  | forecast_request | rh                 | swflx              | temp
----------+---------------------+------------+------------------+--------------------+--------------------+--------------------
    41.45 | 2016-04-26 17:00:00 | -8.6166667 |  2016-04-26_0000 | 0.6161368489265442 |  397.4789733886719 | 290.44512939453125
    41.45 | 2016-04-26 18:00:00 | -8.6166667 |  2016-04-26_0000 |  0.673031210899353 |  261.1000061035156 |  289.3315734863281
    41.45 | 2016-04-26 19:00:00 | -8.6166667 |  2016-04-26_0000 | 0.8489508032798767 | 27.700000762939453 |  286.8634948730469
    41.25 | 2016-04-26 17:00:00 | -8.6166667 |  2016-04-26_0000 | 0.6555368900299072 |  395.1789855957031 |  289.8011169433594
    41.25 | 2016-04-26 18:00:00 | -8.6166667 |  2016-04-26_0000 | 0.7271312475204468 | 203.39999389648438 |  288.5975646972656
    41.25 | 2016-04-26 19:00:00 | -8.6166667 |  2016-04-26_0000 | 0.8572507500648499 | 30.989999771118164 |  286.7254943847656
   41.456 | 2016-04-26 17:00:00 | -8.6166667 |  2016-04-26_0000 | 0.6161368489265442 |  397.4789733886719 | 290.44512939453125
   41.456 | 2016-04-26 18:00:00 | -8.6166667 |  2016-04-26_0000 |  0.673031210899353 |  261.1000061035156 |  289.3315734863281
   41.456 | 2016-04-26 19:00:00 | -8.6166667 |  2016-04-26_0000 | 0.8489508032798767 | 27.700000762939453 |  286.8634948730469

这就是我创建表格的方式:

create table if not exists forecast 
(   
    latitude varchar,
    longitude varchar,
    time_forecast varchar,
    forecast_request varchar,       
    swflx varchar,      
    temp varchar,
    rh varchar,

    PRIMARY KEY(latitude, time_forecast, longitude)
)

WITH CLUSTERING ORDER BY (time_forecast ASC);

使用此模型,time_forecast 不能成为我的主键,因为它不会是唯一的。

这是我可以在不进行更新插入的情况下插入数据的唯一方法,但我现在面临的问题是我不能仅通过 time_forecast 查询数据库。

在这个例子中,对于每个坐标(纬度和经度),我都在预测接下来的 3 小时,我无法避免使用复合键。

您将如何对数据库进行建模,以便我只能从time_forecast 值的范围内检索坐标和变量

【问题讨论】:

  • 您查看过timeuuid 数据类型吗?使用这种类型,您可以使您的时间戳独一无二,并将它们用作主键。

标签: database-design cassandra nosql


【解决方案1】:

您将如何以一种我可以仅从 time_forecast 值范围内检索坐标和变量的方式对数据库进行建模?

create table if not exists forecast 
(   
    location text,
    latitude varchar,
    longitude varchar,
    time_forecast varchar,
    forecast_request varchar,       
    swflx varchar,      
    temp varchar,
    rh varchar,

    PRIMARY KEY((location), time_forecast)
) WITH CLUSTERING ORDER BY (time_forecast ASC);

那么就可以按time_forecast的范围查询了:

SELECT * FROM forecast
WHERE location = 'California'
AND time_forecast >= 'xxx' 
AND time_forecast <= 'yyy';

【讨论】:

  • 不错的解决方案!如果我想按特定的纬度或经度进行搜索,我想我必须建立另一个表?你觉得呢?
  • 是的,要按纬度或经度搜索,您可以:1) 使用另一个表手动非规范化 2) 使用物化视图进行自动非规范化
  • 这是非常强大的东西。请问您,在 InfluxDB 或 Cassandra 之间,您个人会选择什么来处理大量数据,基本上是时间序列天气预报?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2015-12-25
  • 2015-04-09
  • 2014-03-04
相关资源
最近更新 更多