我试图为下面的问题定义cassandra表。
我有以下关系:
用户(用户id)可以看到许多添加(添加id)。
一个add(add_id)可以被多个用户看到。
我想在卡桑德拉做以下的问题:
给定一个用户(用户id)给我用户看到的所有添加(添加id)
给定一个add(add_id)给我所有看到这个add的用户(user_id)
我采取的办法是用这两个关系表

CREATE TABLE adds_by_user (
    user_id text,
    add_id text,
    PRIMARY KEY (user_id, add_id)
);

CREATE TABLE user_by_add (
    add_id text,
    user_id text,
    PRIMARY KEY (add_id, user_id)
);

我的算法执行以下操作
给定用户ID:
把用户看到的所有add_id都给我。
对于每个add_id,给我所有关注该add_id的用户id
对于每个用户的id,给我每个用户观看的所有add_id
另一种图形方式是:
(一)用户ID->(多个)添加ID->(多个+)用户ID->(多个++)添加ID
当我有很多关系,并且算法花费大量时间来执行所有查询时,问题就出现了(尽管每个查询都在0.5毫秒或更短的时间内完成,但是有很多查询)
我已经在使用异步查询了
是否有一个模型可以使查询更快?
是否有一个模型可以使算法减少查询并遵守Cassandra标准?
谢谢!!

最佳答案

数据模型示例:

CREATE TABLE user_address_user(
    user_id text,
    address_id text,
    user_level2 text,
    address_level2 text,
    PRIMARY KEY((user_id), address_id, user_level2, address_level2)
);

这个表结构可以看作
Map<user_id, SortedMap<address_id, SortedMap<user_level2, SortedSet<address_level2>>>>

10-08 02:35