基于orderedBy from-to处理锁步的2个表时的性能问题

时间:2015-08-17 15:20:50

标签: rethinkdb

标题可能不是很清楚所以让我解释一下。

我想在2个表*,SessionSessionAction上处理进程间连接(nodeJs)。 (1-N)

由于这些表相当大(两百万条记录),我的想法是根据orderBy sessionId(它们共享的)获取切片,并且按批次锁定两个表。

然而,这被证明是非常缓慢的。我正在使用以下两个伪代码来获取批次:

table('x').orderBy({index:"sessionId"}.filter(row.sessionId > start && row.sessionId < y)

似乎即使我实际上是对具有索引的属性sessionId进行过滤,查询规划器也不够聪明,看不到这一点,并且每个查询都会执行完整的表扫描,以便在过滤之前执行orderby之后(或者看起来如此)

当然,这非常浪费,但我没有看到另一种选择。例如:

  1. Rethink不支持过滤后的订单。
  2. 获取有序表的切片也不起作用,因为缺少更好的工作的slice-enumeration(即:xth直到第y条记录)不会在2个表之间相加。
  3. 问题:

    1. 由于必须在每次迭代/批次中进行表扫描,我的方法确实预计会变慢吗?
    2. 如果是这样,我如何设计查询以使其更快地运行?
    3. *)使用Rethink Reql只能使用Rethink Reql。

1 个答案:

答案 0 :(得分:0)

filter永远不会在RethinkDB中编入索引。 (通常,如果您将index作为其可选参数之一传递,则特定命令将仅使用辅助索引。)您可以像这样编写该查询以避免扫描整个表:

r.table('x').orderBy({index: 'sessionID'}).between(start, y, {index: 'sessionId'})