哪个性能更好的 bigtable 模式:单列多单元格与多列单单元格?

Which is better performant bigtable schema: Single column multi cells vs Multi columns single cell?

我需要在行键为用户标识符的现有 BigTable table 中存储 7 天的用户交互。有两种类型的交互,我们应该能够按时间顺序检索每个用户的交互历史。很明显,列族应该有 7 天作为 TTL,并且列应该包含交互类型。 我正在考虑该列的两个选项,{interaction_type}:{timestamp} 包含最新的 1 个单元格,{interaction_type} 包含多个单元格。由于 GCP bigtable doc 不建议连续列太多,所以后者看起来更合理。 但是,该列应该与前一个模式设计的其他现有列一起检索(包括列中的时间戳和最新的 1 个单元格),如果我选择后一个,查询应该使用交错过滤器,因为单元格数量不同列。 所以我想知道哪一个会显示出更好的读取性能。还想知道在 BigTable 的性能方面,具有多个单元格的一列与具有一个单元格和链过滤器的多列与交错过滤器的含义。

您所说的来自 https://cloud.google.com/bigtable/docs/schema-design#row-keys 并且根据您所说的,这是您设计列数的方式,一般来说,交错会降低性能并且查询会导致进一步提取。

最好的设计是确定可用的最小数据集。即,将元素组合到一个列中,其中该元素具有该结果的所有必要字段,而无需额外的列查询。这是针对需要唯一存储公共元素的需要设置的,即不需要将相同的字段内容存储在多个列中(使用更多 space),但有时它会更好,即进行查询 return 一个特定的列而不处理另一列(可以更快)。

第二个选项肯定更好,但问题还是取决于访问模式,但如果纯粹基于性能,避免交错过滤器会更好。

您的场景的另一个考虑因素是:https://cloud.google.com/bigtable/docs/using-filters#cells-per-column-limit

这里是对开销的支持性提及: https://cloud.google.com/bigtable/docs/using-filters#interleave