cassandra db结构建议(两个表对一个表)

rfbsl7qr  于 2021-06-09  发布在  Cassandra
关注(0)|答案(1)|浏览(352)

我是cassandra数据库的新手,我正在创建一个数据库结构,我想知道我的选择是否适合我的需求。
我需要获得关于唯一用户的信息,每个唯一用户将有多个页面视图。
我的两个选项是将数据反规范化为一个大表,或者创建两个不同的表。
我最常用的查询是:
搜索具有特定cookie\u id的所有页面。
搜索具有特定cookie\u id和客户端\u id的所有页面。如果cookie没有客户端,它将被标记为客户端\u id=0(这将是大部分数据)。
找到第一个包含额外数据的cookie\u id(例如data\u type\u 1+data\u type\u 2)。
我建议的两个模式是:两个表-一个用于用户,一个用于访问的页面。这将允许我在另一个表中保存一个新用户,并将每个重复请求保存在另一个表中。

CREATE TABLE user_tracker.pages (
    cookie_id uuid,
    created_uuid timeuuid,
    data_type_3 text,
    data_type_4 text,
    PRIMARY KEY (cookie_id, created_uuid)
);

CREATE TABLE user_tracker.users (
    cookie_id uuid,
    client_id id,
    data_type_1 text,
    data_type_2 text,
    created_uuid timeuuid,
    PRIMARY KEY (cookie_id, client_id, created_uuid)
);

这个数据是标准化的,因为我没有为每个请求输入用户的数据。
一个表-用于保存的所有数据,第一个请求作为键。第一个请求将具有数据类型1和数据类型2。我还可以将“data\u type\u 1”和“data\u type\u 2”保存为hashmap,因为它们表示多个列,并且它们始终位于单个数据集中(是否认为这样更好?)。“first”列将是一个二级索引。

CREATE TABLE user_tracker.users_pages (
    cookie_id uuid,
    client_id id,
    data_type_1 text,
    data_type_2 text,
    data_type_3 text,
    data_type_4 text,
    first boolean,
    created_uuid timeuuid,
    PRIMARY KEY (cookie_id, client_id, created_uuid)
);

事实上,我们有超过4个专栏,这是写得很简短。
就我所了解的Cassandra的最佳实践而言,我倾向于选项2,但请务必启发我:-)

v7pvogib

v7pvogib1#

cassandra中的数据建模是基于您将要进行的查询类型来完成的。您应该能够使用分区键进行查询。你提到的第二种选择是可以的。
1.搜索具有特定cookie\u id的所有页面
搜索具有特定cookie\u id和客户端\u id的所有页面。如果cookie没有客户端,它将被标记为客户端\u id=0(这将是大部分数据)。
对于第三个查询
找到第一个包含额外数据的cookie\u id(例如data\u type\u 1+data\u type\u 2)。
不知道你所说的第一个cookie\u id加上额外数据是什么意思。在cassandra中,所有数据都是按分区键存储的,不进行排序。因此,您的所有数据都将使用cookie\u id作为分区键存储,并且具有相同cookie\u id的所有未来示例将不断添加到此行。

相关问题