我是Redis的新手,到目前为止我都喜欢它.我有一个关于在Redis中实现图形的想法,查看它,果然,它已经完成了,但我有几个问题.
Twitter使用FlockDB和Redis (源代码)将他们的键和值与推文,粉丝等联系起来.Pinterest使用Redis列表为每个用户(他们的追随者,别针等)通过列表和抓取来加载所请求的数据(源)请求的密钥.
我对Pinterest的使用方式非常感兴趣.我在这里找到了代码说明.
这是我无法弄清楚的:
所有这些数据(跟随者列表,引脚列表等)都需要存储在可以保留数据的第二个数据库中.难道不需要花费大量的工作/维护来不断保持Redis的列表数据和其他数据库的数据同步吗?是否有捷径可寻?
对于像Pinterest这样的每个用户,不会使用Redis列表,与像FlockDB这样的解决方案相比,会占用大量内存吗?
如果我误解了任何源信息,我会道歉.如果有人对此概念有所了解,那将会很有帮助.提前致谢.
PS:我的应用程序关系和提要是社交网络式的.与前面提到的Twitter/Pinterest完全不同.
更新:
我不确定这个问题是否会得到解答,但我会用我学到的信息来更新它.我已经配置了一个Cassandra集群写入表中的所有物理对象和Redis集群来存储高度流量的列表(数据关系),否则它们将成为SQL或CQL中的自己的连接表(许多关系表之类conversation_users
).这非常有效,因为A. Cassandra对二级索引不是很好,并且无法在单个查询中查找多个二级索引值,因此使用Redis设置,我基本上可以为Cassandra提供所需的主ID的列表阅读,B. Cassandra最好用作写作>阅读工具,因此Redis通过为Cassandra提供必要的主要ID来消除大量的负担,几乎消除了对单个信息集C的多个查询.(再次使用二级索引)考虑扫描整个表的值与获取简单密钥及其设置值的性能.D.(维护)这是可能的,我正在构建后台脚本,将近乎过期的从低使用率的Redis集合序列化为Cassandra列(再次使用Redis,因为它的优势:内存,Cassandra为其strength:logging),然后在请求时(过期后)将这些序列化集合写回Redis.
我仍然想知道在Redis中缓存哪些信息以及在Cassandra中保留什么.我无法在Redis中保留所有数据关系(虽然我愿意),因为我的潜在社交图已经非常庞大.例如,我应该在Redis中保留最近读取/写入的对象以及具有这些对象ID的提要吗?这将占用大量内存,但它会降低Cassandra对较新对象的读取.或者我应该在Redis中保持主要关系(关注者,关注提要,阻止用户,喜欢的帖子等)?我更喜欢第二条路线,但它意味着更多的查询Cassandra的实际物体,我想消除它而不需要每月在RAM中支付一百万美元.我应该选择在Redis中保留哪些对象/关系?我从代码示例中学到了很多,所以如果你碰巧找到类似的东西,我会很感激.如果您有任何想法,请告诉我您的想法!谢谢.