gpt4 book ai didi

cassandra - cassandra 中的 Instagram 时间轴数据模型

转载 作者:行者123 更新时间:2023-12-02 23:35:33 24 4
gpt4 key购买 nike

我想要像 Instagram 一样的设计时间线(主页),但大多数采样如 "twissandra-j"使用以下模式:

     -- Users user is following
CREATE TABLE following (
username text,
followed text,
PRIMARY KEY(username, followed)
);

-- Users who follow user
CREATE TABLE followers (
username text,
following text,
PRIMARY KEY(username, following)
);

-- Materialized view of tweets created by user
CREATE TABLE userline (
tweetid timeuuid,
username text,
body text,
PRIMARY KEY(username, tweetid)
);

-- Materialized view of tweets created by user, and users she follows
CREATE TABLE timeline (
username text,
tweetid timeuuid,
posted_by text,
body text,
PRIMARY KEY(username, tweetid)
);

在此设计中,每插入一个新帖子,每个关注者都会在时间轴上插入一条新记录。如果一个用户有 10k 关注者并且 1000 个用户使用应用程序,程序失败,有更好的方法吗?

// Insert the tweet into follower timelines
for (String follower : getFollowers(username)) {
execute("INSERT INTO timeline (username, tweetid, posted_by, body) VALUES ('%s', %s, '%s', '%s')",
follower,
id.toString(),
username,
body);

最佳答案

我想,这两个解决方案/建议之一可能会有所帮助:

1)- 第一个建议,例如以 1000 个插入语句的批处理模式插入到 TIMELINE 中。

execute("
BEGIN BATCH
INSERT INTO timeline (username, tweetid, posted_by, body) VALUES ('%s', %s, '%s', '%s')", follower, id.toString(), username, body);
INSERT INTO timeline (username, tweetid, posted_by, body) VALUES ('%s', %s, '%s', '%s')", follower, id.toString(), username, body);
INSERT INTO timeline (username, tweetid, posted_by, body) VALUES ('%s', %s, '%s', '%s')", follower, id.toString(), username, body);
...
// n statements
APPLY BATCH");
  • 批处理多个语句可以节省客户端/服务器和服务器协调器/副本之间的网络交换。

  • 还有一件事,默认情况下批处理是原子的(在 Cassandra 1.2 及更高版本中)。在 Cassandra 批处理操作的上下文中,原子意味着如果任何批处理成功,则所有批处理都会成功,否则全部失败。

2)-第二个建议,以异步方式实现插入TIMELINE(前端有成功回调函数):

当然,也许您可​​以将两者结合起来。

关于cassandra - cassandra 中的 Instagram 时间轴数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28117256/

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