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