database-design - Cassandra,设计用户喜欢的项目表

标签 database-design cassandra database nosql

我有一个项目列表,我想知道当前用户是否喜欢其中的一些项目。我想知道如何设计我的表,因为这是我用 C* 做的第一个表。所以我想知道我是否正朝着正确的方向前进:

我在考虑将 userID 作为主键,将 item liked 作为聚类列。

我看到的问题是,如果用户喜欢太多东西,分区将无法容纳在节点上(所以我会丢失数据?)。我不知道用户必须喜欢多少项目才会发生这种情况,但我猜这对人类来说甚至是不可能的。问题是不测事件仍然存在,这让我很困扰。此外,如果节点上已经有大量数据怎么办,这是否意味着用户必须喜欢的项目数量较低,以便分区对于节点来说太大(因为有可用内存较少)?

最佳答案

当您说所有数据都将在单个节点中并且如果该节点上的空间不足时,写入将失败,您的陈述是正确的。如果您担心这一点,您还可以在主键中添加诸如“时间戳”或“存储桶”列之类的内容,以减小分区的大小。

Cassandra 有每个分区 20 亿个单元的硬性限制,但实际上我认为建议是在 Cassandra 2.0 及更早版本中保持分区 <100 MB,在 Cassandra 2.1 及更高版本中保持 <200-300 MB。如果我是你,我会做一些计算,看看一个人需要喜欢多少项目才能接近这些限制,并决定这是否是你愿意接受的限制。你可以得到一个很好的描述如何做到这一点 here .

关于database-design - Cassandra,设计用户喜欢的项目表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118871/

相关文章:

sql-server - 数据库设计 : one large table versus several smaller tables

java - 从 Unix 时间戳生成随机 1 类 UUID 以与 Cassandra 一起使用

ruby-on-rails - Ruby on Rails 的 Cassandra、mongodb 或 couchdb

ssl - Datastax Cassandra SSL

mysql - 数据库表规范化问题

.net - DeleteAllOnSubmit 和 deleteonSubmit 之间的 asp.net mvc 差异

database - 安卓。如何保护你的数据库?

mysql - 多语言Web应用程序的数据库设计模式(MySQL)

sql - 如何使用相同的约束映射不同的多对多

database-design - 将 Firebase 用户 UID 用于相关数据库条目的键 - 好的还是坏的做法?