M98*_*M98 2 cassandra datastax-enterprise datastax datastax-startup
我们正在为我们的社交网络使用 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
Run Code Online (Sandbox Code Playgroud)
我们有一个根据用户关注者的表,我们将帖子的信息插入到表中,称为user_timeline当关注者用户访问第一个网页时,我们从user_timeline表中的数据库中获取帖子。
这是user_timeline表:
follower_id | post_id | user_id (who posted) | likes_count |
comments_count | location_name | user_full_name
Run Code Online (Sandbox Code Playgroud)
首先,这个数据建模对于关注基础(关注者,关注行为)社交网络是否正确?
现在我们要计算帖子的点赞数,正如您看到的,我们在两个表中都有点赞数( user_timeline, posts_by_user),并假设一个用户有 1000 个关注者,然后通过每个点赞操作,我们必须更新所有 1000 行user_timeline和 1 行posts_by_users; 这不合逻辑!
然后,我的第二个问题是它应该如何?我的意思是(最喜欢的)桌子应该如何?
考虑使用posts_by_user作为帖子信息的元数据。这将允许您容纳user_id、post_id、message_text等,但您会将view_count、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”表。
user_id 和 created_on 作为复合键* - 这将是理想的,如果
user_id 和 hash_prefix 作为复合键* - 这将是理想的,如果
follower_id 和 created_on 作为 COMPOUND KEY* - 这将是理想的,如果
这些是 1 个表的 3 个示例,我想传达的一点是围绕要执行的查询设计表。也不要害怕在设置为处理各种查询的多个表中复制数据,这就是 Cassandra 的建模方式。花一点时间阅读下面的文章并观看 DataStax Academy 数据建模课程,以熟悉细微差别。我还在下面包含了一个示例架构,以涵盖我之前指出的基本计数器架构。
* 使用复合键的原因是因为您的 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)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1679 次 |
| 最近记录: |