Database design “建立正确的存储”;“最后一次见到的产品”;

Database design “建立正确的存储”;“最后一次见到的产品”;,database-design,cassandra,redis,Database Design,Cassandra,Redis,想知道什么是构建“最后一次看到的产品”功能的最佳存储,就像许多电子商务网站(比如亚马逊)一样 以下是一些要求: 活跃用户:2亿 按类别列出的最后一次见到的产品(即:鞋、电子产品等)。大约有500个类别 每个类别存储10种产品(但并非所有类别都会被访问) 最后一次看到的产品必须被持久化,这样每当用户重新登录时,就可以获取并构建列表。 检索列表的时间应小于100ms 我在想雷迪斯或卡桑德拉。看起来两者都为这项功能提供了很好的功能(某种时间线),但我不确定它们的优缺点。想法 谢谢如果您的数据模型是按以

想知道什么是构建“最后一次看到的产品”功能的最佳存储,就像许多电子商务网站(比如亚马逊)一样

以下是一些要求: 活跃用户:2亿 按类别列出的最后一次见到的产品(即:鞋、电子产品等)。大约有500个类别 每个类别存储10种产品(但并非所有类别都会被访问) 最后一次看到的产品必须被持久化,这样每当用户重新登录时,就可以获取并构建列表。 检索列表的时间应小于100ms

我在想雷迪斯或卡桑德拉。看起来两者都为这项功能提供了很好的功能(某种时间线),但我不确定它们的优缺点。想法


谢谢

如果您的数据模型是按以下方式构建的,那么Cassandra应该可以很好地为您工作(根据我上面的理解)

  • 列族:用户\u Lat\u已看到
  • 分区键:用户+类别
  • 附加列:上次查看的项目类型列表

然后,您可以轻松查询用户最后浏览的任何类别的项目,并在项目更改时更新列表(可能在用户会话结束时)

谢谢Gautam,这与我的想法非常一致。。。我的问题是,我不知道这样做比使用Redis排序集和类似于您建议的数据分区(用户+cat上的分区)有什么好处。这也给了我一个查询和更新的简单方法。关于使用Cassandra而不是Redis的好处有什么想法吗?我不想讨论性能,现在每个人在性能基准测试方面都有偏见。此外,这些都是商业产品,性能不会那么差。所以接下来要考虑的是您的用例是什么。你对失败的胃口如何?C*在正常情况下不会失败,Redis主从架构可以。Redis在锁方面有一定程度的事务支持,而C*没有。但是,你需要吗?更新中的一些遗漏(不应该发生这种情况)不会带来太大的影响(猜测您正在构建某种推荐引擎)。对我来说,它将是C*。此外,如果您的应用程序分布在多个地理位置,C*可能会为您提供更好的数据复制和分发。