Cassandra,设计用户喜欢的项目 table
Cassandra, Design user liked item table
我有一个项目列表,我想知道当前用户是否喜欢其中的一些。我想知道如何设计我的 table,因为这是我用 C* 做的第一个。所以我想知道我是否正朝着正确的方向前进:
我正在考虑将 userID 作为主键,并将喜欢的项目作为聚类列。
我看到的问题是,如果用户非常喜欢东西,分区将无法容纳在节点上(所以我会丢失数据?)。我不知道用户必须喜欢多少项目才会发生这种情况,但我猜这对人类来说甚至是不可能的。问题是不测事件仍然存在,这让我很困扰。另外,如果节点上已经有很多数据怎么办,这是否意味着用户必须 喜欢 的项目数量较低,以便分区对于节点来说太大了(因为可用内存较少)?
当您说所有数据都将在单个节点中并且如果该节点上的 space 不足时,您的陈述是正确的,写入将失败。如果您担心这一点,您还可以在主键中添加类似 "timestamp" 或 "bucket" 的列,以减小分区的大小。
Cassandra 有每个分区 20 亿个单元的硬限制,但实际上我认为建议是在 Cassandra 2.0 及更早版本中保持分区 <100 MB,在 Cassandra 2.1 及更高版本中保持 <200-300 MB。如果我是你,我会做一些计算,看看一个人需要喜欢多少项目才能接近这些限制,并决定这是否是你愿意接受的限制。你可以得到一个很好的描述如何做到这一点 here.
我有一个项目列表,我想知道当前用户是否喜欢其中的一些。我想知道如何设计我的 table,因为这是我用 C* 做的第一个。所以我想知道我是否正朝着正确的方向前进:
我正在考虑将 userID 作为主键,并将喜欢的项目作为聚类列。
我看到的问题是,如果用户非常喜欢东西,分区将无法容纳在节点上(所以我会丢失数据?)。我不知道用户必须喜欢多少项目才会发生这种情况,但我猜这对人类来说甚至是不可能的。问题是不测事件仍然存在,这让我很困扰。另外,如果节点上已经有很多数据怎么办,这是否意味着用户必须 喜欢 的项目数量较低,以便分区对于节点来说太大了(因为可用内存较少)?
当您说所有数据都将在单个节点中并且如果该节点上的 space 不足时,您的陈述是正确的,写入将失败。如果您担心这一点,您还可以在主键中添加类似 "timestamp" 或 "bucket" 的列,以减小分区的大小。
Cassandra 有每个分区 20 亿个单元的硬限制,但实际上我认为建议是在 Cassandra 2.0 及更早版本中保持分区 <100 MB,在 Cassandra 2.1 及更高版本中保持 <200-300 MB。如果我是你,我会做一些计算,看看一个人需要喜欢多少项目才能接近这些限制,并决定这是否是你愿意接受的限制。你可以得到一个很好的描述如何做到这一点 here.