如何对数据建模以检索Cassandra中用户朋友列表的详细信息?

kgsdhlau  于 2022-11-29  发布在  Cassandra
关注(0)|答案(2)|浏览(165)

最近我开始学习Cassandra。我需要为我的Web应用程序设计数据库。所以,我准备了概念数据模型以及应用程序工作流,目前我在一些事情上卡住了...
让我为您提供一些细节的问题。好吧,我想显示所有的朋友目前登录用户与个人资料图片和他们的全名。
所以我可能需要两张table:
Fragment of Application Workflow
第一个
现在,假设我想在列表中显示所有朋友,但问题是用户希望应用程序显示他们的个人资料图片和全名(而不仅仅是朋友的用户ID),这样用户就可以识别出谁是谁(很符合逻辑,对吧?)所以,我该怎么做呢?2我的意思是我可以得到用户的id,然后查询用户表,最后分别得到全名和个人资料图片。3尽管如此,我不认为这会是非常有效的(因为如果用户有数百个朋友呢?!)
解决这个问题的正确方法是什么?提前感谢!

fgw7neuy

fgw7neuy1#

解决这个问题的正确方法是反规范化,不要害怕重复数据。您应该在应用程序的每个屏幕上都有一个带有一个匹配表的查询。
您的数据表应该如下所示:按用户标识列出的好友

  • user_id分区关键字
  • 好友标识
  • 配置文件图像
  • 全名

我建议您可以使用friend_id作为此表的聚簇列,这样您就可以在同一分区中存储给定用户的所有朋友信息。然后,您可以只使用user_id来检索它。检索朋友列表时不需要聚簇列。

epggiuax

epggiuax2#

这比你想象的要简单得多。因为你想检索某个用户的所有好友,我们知道:
1.我们需要根据用户的属性(用户ID)进行筛选。
1.查询将返回一行或多行朋友。
1.对于每个朋友,您希望列出他们的全名和个人资料图片。
基于(1),您希望按用户ID对表进行分区。基于(2),您希望得到一个友元簇/友元组(簇关键字)。
到目前为止,该表的设计如下所示:

CREATE TABLE friends_by_userid (
    userid text,
    friendid text,
    ...
    PRIMARY KEY ((userid), friendid)
)

为了充实表的其余部分,我们需要存储上面(3)中朋友的全名和图片。现在表看起来像这样:

CREATE TABLE friends_by_userid (
    userid text,
    friendid text,
    fullname text,
    picture blob,
    PRIMARY KEY ((userid), friendid)
)

若要查询表格,请执行下列动作:

SELECT fullname, picture FROM friends_by_userid WHERE userid = ?

如果用户在表中有朋友,它将返回多行姓名和个人资料图片。干杯!

相关问题