如何设计cassandra架构,以便以后可以轻松添加其他列?

时间:2014-08-03 05:03:26

标签: cassandra cassandra-2.0

我定义了如下定义的表结构,

 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命令添加其他列。这是一个正确的策略,还是有更好的方法来设计此表以供将来使用?

1 个答案:

答案 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, 卡罗