2016-11-30 2 views
0

私はrethinkdbする新たなんだと私はそれを愛するが、私は私のクエリを最適化し、それがより大きなデータセット上で動作させるためにしようとしたとき、私はいくつかの問題を発見しました。 問題は簡単です。RethinkdbのgetAll、インデックスの[並べ替え - タグ

"イベント"テーブルをタイムスタンプ(row.to)、タグ(row.tags)、タイムスタンプ(row.from)で並べ替え、ページ分割するためにスライスする必要があります。

row.tagsには複数のインデックスがあり、うまく機能します。

row.fromとrow.toは、イベントの開始/終了時間です。

(100Kエントリにtesteded)スロークエリはこれです:

r.db("test").table("event") 
.getAll(r.args(["148a6e03-b6c3-4092-afa0-3b6d1a4555cd","7008d4b0-d859-49f3-b9e0-2e121f000ddf"]), {"index": "tags"}) 
.filter(function(row) {return row("to").ge(r.epochTime(1480460400));}) 
.orderBy(r.asc("from")) 
.slice(0,20) 

私は 'から' のインデックスを作成し、

.orderBy(r.asc("from"),{index:'from'}) 

を実行しようとしましたが、私は

を取得

e:インデックス付きorder_byは、TABLEまたはTABLE_SLICEでのみ実行できます。

多分この単純なタスクを行う方法があり、私はすでにRethinkdbのインデックス交差点に関する問題について読み、多分私は何かを欠場。

ありがとうございます。

答えて

0

理由はRethinkDBはこれが文句です: getAllselectionを返します。 filterselectionに適用すると、selectionが返されます。 orderByindexパラメータを使用することができないselectionに適用した場合(orderBytableに適用する場合にのみ使用することができます)。

orderByは、table,sequenceまたはselectionに適用できます。 tableに適用された場合はのみ、indexパラメータを使用できます。これは、行がテーブルに追加されたり削除されたりしたときにインデックスが更新されるので意味があります。

filterの結果にorderByが適用されています(selection)。

  1. (デフォルト最大10万個の要素である)メモリにすべての要素を読んでソート彼らはそれができる提供される機能やフィールド

を使用して:データベースがする必要がある選択をソートするためには、この場合、インデックスを使用しないでください。

最初のテーブルをソートして、フィルタを適用するかもしれないあなたのクエリを改善する方法。この場合、インデックスを使用することができます。

+0

ご迷惑をおかけして申し訳ありません。私はすでにそれをしましたが、インデックスでソートすれば、もうgetAllを使うことはできません! – xtian

関連する問題