如何在Cassandra 3.0中建立多对多关系模型并考虑性能

时间:2016-04-06 13:23:31

标签: algorithm performance database-design cassandra

我正在尝试为以下问题定义cassandra表 我有以下关系:
用户(user_id)可以看到许多添加(add_id) 更多的用户可以看到添加(add_id)。

我想在cassandra中进行以下查询:

  1. 鉴于用户(user_id)向我提供用户看到的所有添加(add_id)
  2. 给定一个add(add_id)给我看到添加
  3. 的所有用户(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)
    );
    

    我的算法执行以下操作 给定 user_id

    1. 向我提供用户观看的所有 add_id
    2. 为每个add_id ,给我看了 add_id
    3. 的所有 user_id
    4. for each user_id ,为我提供每个用户观看的所有 add_id
    5. 另一种看待它的图形方式是:

      (一)user_id - > (很多)add_id - > (很多+)user_id - > (很多++)add_id

      当我有很多关系并且算法花费大量时间来完成所有查询时出现问题(尽管事实上每个单独的查询都在0.5毫秒或更短的时间内完成,但是有很多它们

      我已经在使用异步查询

      是否有可以让查询更快的模型?

      是否有一个模型可以使算法减少查询并尊重Cassandra标准?

      谢谢!

1 个答案:

答案 0 :(得分:1)

数据模型示例:

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>>>>