首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加行和添加列性能的Cassandra

添加行和添加列性能的Cassandra
EN

Stack Overflow用户
提问于 2017-01-06 04:26:45
回答 2查看 738关注 0票数 2

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

代码语言:javascript
复制
---------------------------------------------------------------
device1 | 2016-4-3, "visit /"     | 2016-4-4, "exit /"     | ...
----------------------------------------------------------------
device2 | 2016-4-3, "visit /home" | 2016-4-4, "exit /home" | ...
----------------------------------------------------------------

第二个,为每个新事件添加一行,就像sql一样。

代码语言:javascript
复制
--------------------------------
device1 | 2016-4-3 | "visit /" |
--------------------------------
device1 | 2016-4-4 | "exit /"  |
--------------------------------
....    | ...      | ....

哪一个会提供更多的插入性能

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-06 05:46:48

这实际上是一个混乱的卡桑德拉工作方式。在Cassandra中,我们认为数据建模是“分区”和“行”。

一个分区包含许多我们称之为“行”的列的逻辑分组。Partition中行的排序是基于行中的一组列的Clustering Key

在IOT用例中,这通常表现为表示单个设备的Partition。然后,分区中表示该设备发出的事件的行。Clustering Key设置为发射时间(更多情况下是事件的TIMEUUID )。这样构建的分区看起来像

代码语言:javascript
复制
DeviceID -> [TimeUUID_1, (DataA, DataB, DataC) ], [TimeUUID_2, (DataA, DataB, DataC) ] ...

这个分区应该由如下的架构来描述

代码语言:javascript
复制
CREATE TABLE timeseries (
  DeviceID UUID, 
  EventTime TIMEUUID, 
  DataA Text, 
  DataB Text, 
  DataC Text, 
  PRIMARY KEY (DeviceID, EventTIme)
)

有关更多示例,请参见时间序列数据建模

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

票数 3
EN

Stack Overflow用户

发布于 2017-01-06 05:52:56

你在试图模拟一个根本不存在的问题。您应该只根据您的查询进行建模。

一个典型的(反向)时间序列模型是:

代码语言:javascript
复制
CREATE TABLE mytable(
    device int, 
    ts ts, 
    event text,
    PRIMARY KEY (device , ts)
) WITH CLUSTERING ORDER BY (ts DESC);

中,您可以轻松(高效)检索特定设备的所有事件。

代码语言:javascript
复制
SELECT * FROM mytable WHERE device = ?;

您可以将结果进一步限制为特定的时间窗口。

代码语言:javascript
复制
SELECT * FROM mytable WHERE device = ? AND ts >= ? AND ts <= ?;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41498938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档