【发布时间】: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