用例:车辆在场地上运行,它们不断发送遥测数据,如温度,纬度,经度和速度。我必须建立一个系统来保存这些数据,并提供分析查询,如超速的车辆数量,每辆车行驶的总距离-每天,每月,每年,在超速的情况下发送警报
我打算用Cassandra来保存车辆数据
CREATE TABLE vehicle_data_by_day (
vehicle_id VARCHAR,
vehicle_number VARCHAR static,
speed INT,
latitude DOUBLE,
longitude DOUBLE
year INT,
month INT,
day INT,
time timestamp,
PRIMARY KEY ((vehicle_id, year, month, day), time)
) WITH CLUSTERING ORDER BY (time DESC)
AND compaction = {'class': 'TimeWindowCompactionStrategy',
'compaction_window_size': 1,
'compaction_window_unit': 'DAYS'};
字符串
为了提供分析查询,我将通过以特定频率查询vehicle_data_by_day来运行后台作业,从而填充下表
create table vehicle_report (
vehicle_id VARCHAR,
vehicle_number VARCHAR static ,
distance_covered_per_day int,
year INT,
month INT,
day INT,
PRIMARY KEY ((vehicle_id, year, month, day),
distance_covered_per_day)
)
WITH CLUSTERING ORDER BY (distance_covered_per_day DESC);
AND compaction = {'class': 'TimeWindowCompactionStrategy',
'compaction_window_size': 1,
'compaction_window_unit': 'DAYS'};
select distance_covered_per_day from vehicle_report where vehicle_id = ka01 and vehicle_type=car
型
这种设计是否可以扩展,或者我使用分析数据库会更好?
1条答案
按热度按时间ntjbwcob1#
这取决于在一天内读取了多少读数。但从数据分布和扩展的Angular 来看,这对我来说很好。它看起来确实很难查询(只能通过确切的日期),但是的,这是权衡。
通常情况下,Cassandra不是基于OLAP的查询的好解决方案,这通常需要一些动态查询参数。但是只要可以在不使用
ALLOW FILTERING
指令的情况下查询第二个表,就应该没问题。