首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件系统监测数据的Cassandra表数据建模

事件系统监测数据的Cassandra表数据建模
EN

Database Administration用户
提问于 2021-02-17 09:33:50
回答 1查看 109关注 0票数 1

我一直在一个cassandra数据库中工作,以保存事件/监视系统的实时数据,该系统每小时有相当多的事件(100k+),而且我遇到了一个特殊的需要:我需要一种方法来按事件状态(打开、关闭)获取所有事件的数据。

每个事件都有以下字段:id(由事件系统生成)、状态、start_date、end_date、节点、描述。

我的第一步是拥有一个状态作为分区键,id作为集群的表:

代码语言:javascript
复制
CREATE TABLE alarms_by_state (
id,state,start_date,end_date,node, 
PRIMARY KEY((state),id))

这是无效的,因为它为每个id保留了2个状态。

我需要的是,例如,我们接收id=1和state=open的事件,然后应用程序将它保存到数据库中,然后用id=1和state=closed保存另一个事件,并替换以前的记录。

我知道这一切都可以在应用程序端完成,但由于每小时收到的事件数量,我试图将该控件保持在最低限度。

谢谢您抽时间见我

EN

回答 1

Database Administration用户

发布于 2021-02-17 16:54:50

这不起作用,因为它为每个id保留了2个状态。

我喜欢你试过这个。对于将来看到这篇文章的人来说,它将强调卡桑德拉的主键是独一无二的。

我会这么做的。

代码语言:javascript
复制
CREATE TABLE alarms_by_date (
    id UUID,
    state TEXT,
    start_date DATE,
    end_date DATE,
    node TEXT, 
    PRIMARY KEY((day,hour,m15),start_date,id))
WITH CLUSTERING INDEX ON (start_date DESC,id ASC);

CREATE INDEX ON alarms_by_date(state);

这样做的目的是:

  • 每隔15分钟存储数据分区。在100 K/小时的情况下,这对于单个分区来说太大了。把它分成四个部分,可以防止它长得太大。只要键是由这些组件组成的(例如: 202102171045),就可以用一个分区键来完成这一任务。
  • 应用start_dateid的聚类索引。不确定这两个日期中哪个日期(开始/结束)对您的业务情况更重要。但是这样的话,数据就会按时间递减。另外,我喜欢使用id列作为最后一个集群键,以帮助确保唯一性。
  • 对状态应用二级索引实际上是解决这个问题的方法。是的,卡桑德拉的二级指数有很多问题。但是,它们的主要问题是,它们可能导致对多个节点的扫描。通过使用日期/分区使用该索引抢占查询,查询将仅限于一个节点。所以我觉得这是最好的选择。
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/285538

复制
相关文章

相似问题

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