2017-12-18 3 views
0

ユーザインタラクションをユーザテーブルとインタリーブすることを考えていますが、唯一の問題はユーザごとに数万のインタラクションが発生するため、値の範囲はほとんど適合しないでしょう。インターリーブされたデータの量が の任意の主キー値のために保存した場合、ルートテーブルは、キーと値の範囲の最大サイズ(デフォルトでは64メガバイト )より大きい複数のキー値の範囲で親のパフォーマンスをインターリーブする

CockroachDBドキュメントの状態ことインターリーブされた最適化は減少する。

  • パフォーマンスが低下するのはどれくらいですか?
  • テーブルをインターリーブする必要がありますか?

ユーザーとインタラクションテーブルは少し大きくなりますが、現在の見積もりは約5~10TBです。対話とユーザー表の間の結合を必要とする重い集約照会が発生し、ユーザー列に集約されます。

Elasticsearchは親子の参加パフォーマンスが悪かったので(私は強制的なフィルタ並べ替えを開始しませんでした)、このようなシナリオではCockroachDBの制作経験がありますか?

答えて

2

CockroachDBのインタリーブされていないテーブルとノンインタリーブされたテーブルのパフォーマンスを測定するためのマイクロベンチマークhttps://github.com/cockroachdb/loadgen#interleaveがあります。 v1.1.3のインタリーブ結合は最適化されていませんが、v2.0リリースではsignificant improvementsが作成されています(インタリーブ表をテストし、実験として結合する場合は、マスターブランチからバイナリを作成できます)。

ベンチマークでは、ベンチマークで--merchants--productsの行数を指定することで、親子関係をモックできます。注:productsmerchantsにインターリーブされているため、merchantsに均一に配信されます。

一般的に、インターリーブドテーブルは、CockroachDB v2.0では、親子ジョインのクエリで、インターリーブされていないテーブルよりも常に優れたパフォーマンスを発揮することが期待されます。ドキュメントで述べたように、インターリーブされたテーブルのテーブルスキャン(テーブルスキャンが必要なクエリ)のパフォーマンスを犠牲にしています。

+0

お返事ありがとうございます。私たちがインタリーブでロールしているように見えますが、データが2.0ヒット前にあまりにも速く成長することはないと思っていますが、私はいつも問題にもっと多くのマシンを投げることができると思います:-) – ACimander

関連する問題