我定义了如下定义的表结构,
CREATE TABLE sensor_data (
asset_id text,
event_time timestamp,
sensor_type int,
temperature int,
humidity int,
voltage int,
co2_percent int
PRIMARY KEY(asset_id ,event_time)
) WITH CLUSTERING ORDER BY (event_time ASC)
此表捕获来自传感器的数据,并根据传感器的类型 - 列sensor_type,某些列将具有其他一些不具有的值。示例温度仅适用于温度传感器,湿度传感器适用于湿度传感器等。
现在,当我使用越来越多的传感器时,我的意图是使用alter table命令添加其他列。这是一个正确的策略,还是有更好的方法来设计此表以供将来使用?
答案 0 :(得分:2)
我几小时前回答了类似的问题:here
假设您已准备好Cassandra 2.X,您的情况更容易处理,执行您需要的地方我会使用地图
CREATE TABLE sensor_data (
asset_id text,
event_time timestamp,
sensor_type int,
sensor_info map<text, int>,
PRIMARY KEY(asset_id ,event_time)
) WITH CLUSTERING ORDER BY (event_time ASC)
优点是,即使有新的传感器进入您的世界,您的架构也将保持不变。缺点是您将无法从集合中检索特定数据,您将始终完全检索该集合。如果您在Cassandra 2.1中,集合上的二级索引可能会有所帮助。
HTH, 卡罗