セカンダリ インデックスを持つ書き込み負荷の高いテーブルでの upsert のパフォーマンスについて大まかに把握したいと思います。
インデックスには、テーブルのすべてのフィールドがあります (実際には、非行キー フィールドの数は 1 つ、これは varbinary 型です)。
大まかなテストを実行しましたが、結果は次のとおりです。
- セカンダリ インデックスを持つテーブル: 4.3 分
- セカンダリ インデックスのないテーブル: 53 秒
このテストは、PhoenixInputFormat を使用した Apache Spark プログラムで行われます。
セカンダリ インデックスはグローバルに変更可能です。
結果は、私にとっては、セカンダリ インデックスのないテーブルに比べてやや遅すぎます。
約 4.7 倍遅いです。2~2.5倍くらいにしてほしいです。(実際には2つのテーブルに書き込むため)
これは典型的なパフォーマンスの低下ですか?
もしそうなら、書き込みの多いテーブルの (グローバルで変更可能な) セカンダリ インデックスをあきらめる必要があると思います。
アップデート
私のテスト クラスタは、1 つの名前ノードと 3 つのデータ ノードで構成されています。(小さいです)
データ ノード マシンの仕様は次のとおりです: (決して強力ではありません)
- CPU: Core i7-4790 (コア数: 4、スレッド数: 8)
- RAM:32GB(8GB×4)
- HDD:8TB(2TB×4)
- ネットワーク: 1Gb
ソフトウェア仕様:
- Hadoop: Hortonworks HDP 2.2 (Hadoop 2.6)
- アパッチ スパーク: 1.3.0
- アパッチ フェニックス: 4.3.1
アップサートされたレコードの数は約 600 万です。列が 1 つしかなく (データ型は varbinary)、小さいです。(1k を大きく下回る)