gpt4 book ai didi

社交网络的 Cassandra 数据建模

转载 作者:行者123 更新时间:2023-12-04 12:51:23 25 4
gpt4 key购买 nike

我们正在为我们的社交网络使用 Datastax Cassandra,我们正在设计/数据建模我们需要的表,这让我们感到困惑,我们不知道如何设计一些表,我们遇到了一些小问题!

据我们了解,对于每个查询,我们必须有不同的表,例如,用户 A 关注用户 C 和 B。

现在,在 Cassandra 中我们有一个表是 posts_by_user:

user_id      |  post_id       |  text  |  created_on  |  deleted  |  view_count  

likes_count | comments_count | user_full_name

我们有一个根据用户关注者的表,我们将帖子的信息插入到名为 user_timeline 的表中,当关注者用户访问第一个网页时,我们从数据库中获取帖子user_timeline 表。

这是user_timeline 表:

follower_id      |      post_id      | user_id (who posted)  |  likes_count  |  

comments_count | location_name | user_full_name

首先,此数据建模是否适用于关注基础(关注者,关注行为)社交网络?

现在我们要计算帖子的点赞数,如您所见,我们在两个表中都有点赞数(user_timeline, posts_by_user),假设一个用户有 1000 个关注者,那么通过每个点赞操作,我们必须更新 user_timeline 中的所有 1000 行和 posts_by_users 中的 1 行;这是不合逻辑的!

那么,我的第二个问题是应该如何?我的意思是(最喜欢的) table 应该如何?

最佳答案

考虑使用 posts_by_user 作为帖子信息的元数据。这将允许您容纳 user_idpost_idmessage_text 等,但您将抽象view_count、< em>likes_count 和 comments_count 到一个计数器表中。这将允许您获取帖子的元数据或计数器,只要您有 post_id,但您只需更新一次 counter_record。

DSE 柜台文件: https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html

但是,

下面的文章是与 Cassandra 数据建模相关的非常好的起点。也就是说,在回答这个问题时需要考虑一些事情,其中​​很多取决于系统的内部结构以及查询的结构。前两条规则表述为:

规则 1:在集群周围均匀分布数据

规则 2:最小化读取的分区数

花点时间考虑“user_timeline”表。

  1. user_id 和 created_on 作为复合键* - 这将是理想的,如果

    • 您想查询某个用户的帖子,并假设您有一定数量的用户。这个会平均分配记录,您的查询只会命中一次分区。
  2. user_id 和 hash_prefix 作为复合键* - 这将是理想的如果

    • 您的用户数量较少但帖子数量较多,这将使您的数据均匀分布在簇。但是,您冒着不得不查询的风险多个分区。
  3. follower_id 和 created_on 作为复合键* - 这将是理想的如果

    • 您想查询某个关注者关注的帖子。记录将被分发,你将最小化跨分区查询

这些是 1 个表的 3 个示例,我想传达的要点是围绕要执行的查询设计表。也不要害怕跨多个表复制数据,这些表被设置为处理各种查询,这就是 Cassandra 的建模方式。花一点时间阅读下面的文章并观看 DataStax Academy 数据建模类(class),以熟悉其中的细微差别。我还在下面提供了一个示例架构,以涵盖我之前指出的基本计数器架构。

* 使用复合键的原因是您的 PRIMARY KEY 必须是唯一的,否则具有现有 PRIMARY KEY 的 INSERT 将成为 UPDATE。

http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling https://academy.datastax.com/courses

CREATE TABLE IF NOT EXISTS social_media.posts_by_user (
user_id uuid,
post_id uuid,
message_text text,
created_on timestamp,
deleted boolean,
user_full_name text,
PRIMARY KEY ((user_id, created_on))
);
CREATE TABLE IF NOT EXISTS social_media.user_timeline (
follower_id uuid,
post_id uuid,
user_id uuid,
location_name text,
user_full_name text,
created_on timestamp,
PRIMARY KEY ((user_id, created_on))
);
CREATE TABLE IF NOT EXISTS social_media.post_counts (
likes_count counter,
view_count counter,
comments_count counter,
post_id uuid,
PRIMARY KEY (post_id)
);

关于社交网络的 Cassandra 数据建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com