【问题标题】:How to structure friend relation in cassandra如何在cassandra中构建朋友关系
【发布时间】:2013-08-21 04:49:51
【问题描述】:

我目前在 Cassandra 中有一个用户表。

我想创建一个朋友关系表,但我不确定最好的方法是什么。 首先,我想把like key作为当前用户,把column作为朋友,但我想实现发送朋友请求的功能,所以我认为应该有另一个名为accepted的对象来处理两个人是不是真正的朋友,或者不是其他人是否接受了好友请求。 我认为这将是多对多表。例如在友谊关系中。

Friendship: {
John Dow: {
10: Mark Seldon,
8: Julian Hendrix,
...
},
Mark Seldon: {
9: John Dow,
...
},
...
}

任何方向表示赞赏。

【问题讨论】:

    标签: cassandra cassandra-0.7


    【解决方案1】:

    这似乎可以通过创建一个新表“friends”来实现,您可以(例如)在 CQL 中使用“复合键”{userid,friendid}:

    CREATE TABLE friends(    
    userid varchar,
    friendid varchar,
    PRIMARY KEY (userid, friendid)
    );
    

    这将定义两个用户之间的“友谊”关系(在用户表中都有一个条目)...这将允许您查询几件事:

    • 获取“userid”的所有好友
    • 检查用户 ID 和“用户 x”(具有给定的朋友 ID)是否存在

    这也意味着,无论何时存储关系,都需要在表中创建两个“条目”:{user1, user2} 和 {user2, user1}...

    【讨论】:

    • 如果两者都是主键,为什么它需要像评论最后一行中描述的那样存储两种方式。
    • 确实有可能...但是您需要进行两次查询才能获得给定“用户”的所有朋友(我认为您不能使用 OR 语句...),即:select * from friends where userid = 'user'select * from friends where friendid = 'user' allow filtering(这第二个查询可能导致 Cassandra 报告的“不可预测的性能”)......所以这是一个设计决策:“两次写入”或“两次查询”。我自己会写两次(因为我想要查询性能,当我使用 Cassandra/NoSQL 时写“我不太关心”)。也许我错了,还在学习:)
    • 您能否指导我了解我的 Pojo 课程应该是什么样子才能拥有您所描述的所需表格。我直接从我的 pojo 类创建表。
    • 我没有使用 Hector 的经验,所以无法帮助您...我使用 Kundera (github.com/impetus-opensource/Kundera),这是一个非常好用且易于使用的 Cassandra 客户端和其他数据库技术...这是使用“复合键”的示例:github.com/impetus-opensource/Kundera/wiki/…
    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多