当前位置: 首页 > 知识库问答 >
问题:

对cassandra数据建模的困惑

濮阳功
2023-03-14

过去几天,我一直在浏览在线文章、视频,甚至是堆叠帖子,以了解如何在cassandra中建模数据。我理解需要根据查询模式对数据进行建模,但我不理解的是cassandra中的列族和列关系,如果这适用于它们,我想查询数据。

我有一个关系数据库表,其中包含以下内容

CUST_ID | ACCT_ID | CUST_ADDRS | ACCT_ADDRS | CUST_ST | ACCT_ST | CUST_FRAUD_IND | ACCT_DAYS_OPEN | ACCT_TYPE | CUST_CARD_IND | etc...

本质上,它是一个包含客户 ID 及其账户 ID 的表,因此唯一键将cust_id acct_id。每个客户可以有多个 1 个或多个帐户。有一些基于客户 ID 的属性,如地址、状态、客户是否有卡等。并且有基于帐户的属性,例如地址,状态,帐户类型等...

我们将运行的一些查询将告诉我特定客户(CUST_ID=xxxx)是否有任何卡账户(ACCT_TYPE='card')。或者如果客户的任何账户开立时间超过180天。

我看过这个链接:

http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/#.VH-OezHF_6M

我对选项4很好奇,因为它看起来像应该建立的东西。所以在我的例子中,我的表有一个CUST ID的键,然后有一个名为“卡账户”、“支票账户”等的超级列..包含这些列的所有属性。

我现在的问题是,这是正确的选择吗,如果是这样,我将如何在cassandra中html" target="_blank">构建该表?然后,如何将数据加载到具有超级列的表中?

共有1个答案

葛承嗣
2023-03-14

当您阅读Cassandra数据模型时,必须根据查询模式。但您没有遵循该模式。您必须根据查询创建许多表。不要担心数据冗余,Cassandr会处理它。

cassandra的结构如下:-

         Map<Rowkeys, SortedMap<ClusteringKeys ,OtherColumns>> 

就像一张桌子在这里

创建表温度 ( id1 整数 , id2 文本 , id3 整数 , id4 文本, id5 整数 ID6 文本, 主键((id1,id2) , id3, id4) );

然后卡桑德拉行将根据:-

ID1,ID2

一个表的列将根据:-

id3,id4。

。因此,根据查询建立您的数据模型

如果您想查看cassandra如何存储数据,请打开bin/cassandra cli,然后使用任意键空间,然后运行命令:-list tablename

它将给出输出,显示有多少行以及每行有多少列。

 类似资料:
  • 我目前有一个应用程序,它将事件驱动的实时流数据持久化到一个列系列,该系列建模为: 每个帐户ID每X秒发送一次数据,因此我们每次收到事件时都会覆盖现有行。此数据包含当前实时信息,我们只关心最近的事件(不使用旧数据,这就是我们插入已经存在的键的原因)。从应用程序用户端-我们通过account_id语句查询选择。 我想知道是否有更好的方法来模拟这种行为,并查看了Cassandra的最佳实践和类似的问题(

  • 表1: 表1的键和数据大小: 我的分区密钥为enterprise_id+campaign_id。每个企业可以有几个活动。datastore可能有几百个活动的数据。每个活动可以有多达200万-300万的记录。因此,在100个企业中可能有3000个分区,每个分区有2-3个miilion记录。 Cassandra查询:查询始终使用分区键+主键直到日期时间。订阅id包含在主键中,以保持每个记录的唯一性,因

  • 任何一个都可以,要求数据是一个字符串化的JSON对象。我的查询将返回用户在给定时间范围内的所有数据。哪种模式更有意义,或者有更好的方法来解决这个问题?

  • 我从一个用spark-kafka-cassandra(在kubernetes上)重写猛犸象spark-kafka-hbase应用程序的初步想法开始。 我有以下数据模型,一个支持全时插入,另一个支持upserts 办法1: 创建表test.inv_positions( location_id int, item bigint, time_id timestamp, sales_floor_qty i

  • 我阅读了cassandra数据建模,除了非规范化数据可能会发生变化之外,一切都很清楚。我如何同步它?当用户电子邮件更改时,更新的方法是什么: < code>groupname是组的一部分,数据模型中的用户可能不知道任何组,因此在用户更改后无法更新电子邮件。 下面描述的解决方案是否合适? 向用户模型中添加一列(类型

  • 我在处理Cassandra时学到的第一件事是,您需要非常小心您的数据模型,因为Cassandr不支持联接、聚合等。因此,您可以根据查询对数据进行建模,使用广泛的去规范化等。 但是,假设我已经决定在Cassandra上运行Spark。Spark将允许对数据进行连接和聚合,以及不同的计算。 所以我的问题是,当在Cassandra中对我的数据建模并考虑到我将在其上运行Spark时,我需要改变我的模型以使