我们正在考虑将用户交互与用户表交错,唯一的问题是每个用户将有数万个交互,因此64MB的一个键值范围很可能很少适合。
CockroachDB文档声明:
如果为任何主键值存储的交错数据量 根表大于键值范围的最大大小(64MB 默认情况下,交错优化将会减少。
用户和交互表会更大一些,我们目前估计大约5到10TB。将会有大量聚合查询,需要在交互和用户表之间进行连接,然后在某些用户列上进行聚合。
Elasticsearch已经让我们失望,因为它的父子连接性能非常糟糕(并且没有让我开始强制过滤 - 重新排序...),所以也许有人在这种情况下拥有使用CockroachDB的生产经验?
答案 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中超出非交错表以进行父子连接查询。正如文档中所提到的,您将牺牲表扫描的性能(读取:需要表扫描的查询)来处理交错表。