Performance Cassandra添加行与添加列性能对比

Performance Cassandra添加行与添加列性能对比,performance,cassandra,Performance,Cassandra,我想将来自多个不同设备的时间序列日志存储到cassandra中 我有两种策略: 第一个,为每个新事件添加一列 --------------------------------------------------------------- device1 | 2016-4-3, "visit /" | 2016-4-4, "exit /" | ... ---------------------------------------------------------------- d

我想将来自多个不同设备的时间序列日志存储到cassandra中 我有两种策略: 第一个,为每个新事件添加一列

---------------------------------------------------------------
device1 | 2016-4-3, "visit /"     | 2016-4-4, "exit /"     | ...
----------------------------------------------------------------
device2 | 2016-4-3, "visit /home" | 2016-4-4, "exit /home" | ...
----------------------------------------------------------------
第二个,为每个新事件添加一行,就像sql一样

--------------------------------
device1 | 2016-4-3 | "visit /" |
--------------------------------
device1 | 2016-4-4 | "exit /"  |
--------------------------------
....    | ...      | ....

哪一个能提供更高的插入性能

这实际上是对Cassandra工作原理的混淆。在Cassandra中,我们将数据建模视为“分区”和“行”

分区包含许多我们称之为“行”的列的逻辑分组。
分区
中的行排序基于
集群键
,该键是该行中的一组列

在物联网用例中,这通常表现为表示单个设备的
分区。然后是分区中表示该设备发出的事件的行。
Clustering键
被设置为事件的发射时间(通常是
TIMEUUID

DeviceID -> [TimeUUID_1, (DataA, DataB, DataC) ], [TimeUUID_2, (DataA, DataB, DataC) ] ...
该分区将由以下模式描述:

CREATE TABLE timeseries (
  DeviceID UUID, 
  EventTime TIMEUUID, 
  DataA Text, 
  DataB Text, 
  DataC Text, 
  PRIMARY KEY (DeviceID, EventTIme)
)
有关更多示例,请参见


详细介绍了基于这些概念的时间序列数据建模的几种不同样式。

您正试图对一个不存在的问题进行建模。您应该仅基于查询进行建模

典型(反向)时间序列模型为:

CREATE TABLE mytable(
    device int, 
    ts ts, 
    event text,
    PRIMARY KEY (device , ts)
) WITH CLUSTERING ORDER BY (ts DESC);
您可以轻松(高效)检索特定设备的所有事件

SELECT * FROM mytable WHERE device = ?;
您还可以进一步将结果限制在特定的时间窗口内

SELECT * FROM mytable WHERE device = ? AND ts >= ? AND ts <= ?;
从mytable中选择*,其中设备=?和ts>=?和ts