Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra数据模型中的同步_Cassandra_Nosql - Fatal编程技术网

Cassandra数据模型中的同步

Cassandra数据模型中的同步,cassandra,nosql,Cassandra,Nosql,我正在创建一个社交网络应用程序,我将创建时间线的数据反规范化为包含所有字段的帖子列表,以便只使用一个查询。问题是,如果每篇文章都有计数器喜欢、共享、评论,那么每次更新计数器时,我如何同步时间线中的所有帖子记录?或者我应该在timeline中只有id,所以我只更新一个帖子表,timeline查询由两个查询而不是一个查询组成 感谢您的支持,您可以存储单个帖子,然后使用单个范围查询检索所有帖子-这将允许您使用计数器数据轻松更新单个帖子,但您仍然可以使用一个查询检索时间线中的所有帖子。有关在气象站使用温

我正在创建一个社交网络应用程序,我将创建时间线的数据反规范化为包含所有字段的帖子列表,以便只使用一个查询。问题是,如果每篇文章都有计数器喜欢、共享、评论,那么每次更新计数器时,我如何同步时间线中的所有帖子记录?或者我应该在timeline中只有id,所以我只更新一个帖子表,timeline查询由两个查询而不是一个查询组成


感谢您的支持,您可以存储单个帖子,然后使用单个范围查询检索所有帖子-这将允许您使用计数器数据轻松更新单个帖子,但您仍然可以使用一个查询检索时间线中的所有帖子。有关在气象站使用温度记录的示例,请参见

CREATE TABLE posts (
  post_id text,
  post_time timestamp,
  post text,
  timeline_id set<text>,
  comments_count counter,
  PRIMARY KEY (post_id,post_time)
);

我一直在考虑类似的任务,以下是我的想法:

时间线数据必须同步。在时间轴中只存储一个id并在帖子中查找是一个坏主意:您不希望通过20次查找来生成一个时间轴页面。此外,它不会扩展:一旦您向服务器体系结构中添加了更多节点,不同的帖子可以存储在不同的节点上,这将使查询速度变慢

似乎最好使用计数器数据类型来存储计数器。这需要创建一个单独的仅计数器表。更多信息。据我所知,使用这种类型可以提高更新的可伸缩性

如果使用每一个新的like/comment/share写入timeline变得过于昂贵,可以使用内存缓存:计数器存储在缓存中,并在生成timeline时查找。然后,时间线存储值更新可能会延迟,并作为不在缓存中的计数器的回退。我认为,从RAM中查找20次单个请求是可以的


如果计算入口视图,则3可能很有用。因为你不计算浏览量,所以我认为在每个like/comment/share上更新timeline是可以的。

在最后一句话中,哪个是timeline的数据模型?Thanks@user3443051这就是帖子——我已经更新了我的答案,我使用推送的方法,所以每一篇帖子都会被插入到所有追随者的时间表中。只使用一个表帖子对这有好处吗?@user3443051我错了,我以为是每个时间线一篇帖子。请参阅我的更新答案-如果您的每篇文章都有多条时间线,那么您可以使用一个集合或集合或任何时间线id,然后在查询中使用包含来检索具有给定时间线的所有文章。您认为集合的可伸缩性是否足以管理多个并发插入,具体取决于关注者的数量和选择包含?谢谢。这与我的解决方案类似,我怀疑的是每个like/comment/share的计数器的更新。此外,内存缓存是我的想法之一,但在内存中缓存所有帖子的计数器对许多用户来说需要太多的RAM。。。你不觉得吗?你不需要把所有帖子的计数器都存储在缓存中。通常,这只是时间线中经常变化的一部分——通常是最新的条目。例如,您可以仅存储小于2天的项目的计数器。数字也不会占用太多空间。存储10000个24字节元组需要240KB。好的,这是真的。在缓存Redis中存储计数器的最佳方式是什么。。。?如果我只存储小于2天的项目,如果用户在其时间线中看到大于2天的项目,我是否应该从Cassandra获得计数器,不是吗?您需要通过尝试选择最佳存储方式。我认为,最基本的方法是将post_id映射到计数器。是的,超过2天的物品计数器可以来自卡桑德拉的时间线。我认为这个答案是个好主意,redis可以在这种情况下提供帮助。
CREATE INDEX timeline_id_index ON posts (timeline_id);
SELECT post, comments_count
FROM posts
WHERE timeline_id CONTAINS ’foo’
AND post_time > ’2013-04-03 07:01:00′
AND post_time < ’2020-04-03 07:04:00′;
UPDATE posts
SET comments_count = comments_count + 1
WHERE post_id='bar';