在多个键值范围的父性能中交织

时间:2017-12-18 10:16:25

标签: cockroachdb

我们正在考虑将用户交互与用户表交错,唯一的问题是每个用户将有数万个交互,因此64MB的一个键值范围很可能很少适合。

CockroachDB文档声明:

  

如果为任何主键值存储的交错数据量   根表大于键值范围的最大大小(64MB   默认情况下,交错优化将会减少。

  • 那么,性能下降有多糟糕?
  • 我们是否应该费心交错我们的桌子?

用户和交互表会更大一些,我们目前估计大约5到10TB。将会有大量聚合查询,需要在交互和用户表之间进行连接,然后在某些用户列上进行聚合。

Elasticsearch已经让我们失望,因为它的父子连接性能非常糟糕(并且没有让我开始强制过滤 - 重新排序...),所以也许有人在这种情况下拥有使用CockroachDB的生产经验?

1 个答案:

答案 0 :(得分:2)

有一个微基准https://github.com/cockroachdb/loadgen#interleave用于衡量CockroachDB中交错表和非交错表的性能。 v1.1.3中的交叉连接远不是最优的,但是已经为v2.0版本significant improvements做了(如果你想测试交错表并将查询作为实验加入,你可以构建来自主分支的二进制文件)。

在基准测试中,您可以通过在基准测试中指定--merchants--products的行数来模拟父子关系。注意:由于products已交错存入merchants,因此会将products行统一分配到merchants

通常,您应该期望交叉表总是在CockroachDB v2.0中超出非交错表以进行父子连接查询。正如文档中所提到的,您将牺牲表扫描的性能(读取:需要表扫描的查询)来处理交错表。