BigTable:一排长排与许多短排
BigTable: One long row vs many short ones
我正在设计一项服务,将数据存储在 Cloud Big Table 中。我想知道以下哪个(等效)数据模型的性能更高:
- 具有许多稀疏列的单行
- 许多短行只有一列。在此选项中,行键将组合在一起,因此获取它们应该很容易。
例如:
- 我正在使用的服务会将 IP 映射到子域
选项 1:
row-key "1.2.3.4", row-value: "mail.google.com"|empty|"ball.google.com"|"red.google.com"
选项 2:
row-key "1.2.3.4@<timestamp for uniqueness>", row-value: "mail.google.com"
row-key "1.2.3.4@<timestamp for uniqueness>", row-value: "ball.google.com"
row-key "1.2.3.4@<timestamp for uniqueness>", row-value: "red.google.com"
在选项 1 下获取需要获取单个(大)行。
在选项 2 下获取需要获取多行(短且分组)。
就性能而言,哪个更好?
我的猜测是选项 1,因为没有像选项 2 那样的行键开销,但我想听到更多答案。
(是的,我知道行大小限制,这在我的用例中不是问题)。
如果如您所说,行大小限制在您的用例中不是问题,我会说选项 1 更好。
事实上,official documentation 推荐这样做以获得更好的读取性能:
Limiting the number of rows that your nodes have to scan is the first step toward improving time to first byte and overall query latency.
选项 2 会在您的查询中引入不必要的行,这肯定会导致您的查询性能下降。
我正在设计一项服务,将数据存储在 Cloud Big Table 中。我想知道以下哪个(等效)数据模型的性能更高:
- 具有许多稀疏列的单行
- 许多短行只有一列。在此选项中,行键将组合在一起,因此获取它们应该很容易。
例如:
- 我正在使用的服务会将 IP 映射到子域
选项 1:
row-key "1.2.3.4", row-value: "mail.google.com"|empty|"ball.google.com"|"red.google.com"
选项 2:
row-key "1.2.3.4@<timestamp for uniqueness>", row-value: "mail.google.com"
row-key "1.2.3.4@<timestamp for uniqueness>", row-value: "ball.google.com"
row-key "1.2.3.4@<timestamp for uniqueness>", row-value: "red.google.com"
在选项 1 下获取需要获取单个(大)行。 在选项 2 下获取需要获取多行(短且分组)。
就性能而言,哪个更好? 我的猜测是选项 1,因为没有像选项 2 那样的行键开销,但我想听到更多答案。
(是的,我知道行大小限制,这在我的用例中不是问题)。
如果如您所说,行大小限制在您的用例中不是问题,我会说选项 1 更好。
事实上,official documentation 推荐这样做以获得更好的读取性能:
Limiting the number of rows that your nodes have to scan is the first step toward improving time to first byte and overall query latency.
选项 2 会在您的查询中引入不必要的行,这肯定会导致您的查询性能下降。