1

私は 2 つのプロセスを持つシステムを持っています。そのうちの 1 つは単一の挿入を行い、もう 1 つは一括挿入を行います。明らかに 2 番目のプロセスの方が高速であり、最初のプロセスを一括挿入メカニズムに移行する作業を行っていますが、今朝、同僚から「なぜ一括挿入は単一の挿入よりも高速なのか」という質問に困惑しました。

では、一括挿入が単一挿入よりも速いのはなぜでしょうか?

また、データベース アーキテクチャが完全に異なることを考えると、MySQL と HBase の一括挿入と単一挿入には違いがありますか? 私は自分のプロジェクトで両方を使用していますが、これら 2 つのデータベースの一括挿入と単一挿入に違いがあるかどうか疑問に思っています。

4

2 に答える 2

2

私の知る限り、これはHbase構成にも依存します。通常、一括挿入は をList of Puts一緒に使用することを意味します。この場合、挿入 ( flushinghabse レイヤーで呼び出されます) は、 を呼び出すと自動的に行われますtable.put。単一の挿入は、中間層でバッチフラッシュを実行するために、他の挿入呼び出しを待機する場合があります。ただし、これも構成によって異なります。

もう 1 つの理由は、一度により多くのジョブを処理する場合、タスクの容易さ、より効率的な Map および Reduce である可能性があります。ファイル チャンクの移行は、すべての入力に対して一度に決定されます。しかし、個々のインサートでは、これが重要なポイントになります。

于 2013-02-08T09:29:36.477 に答える
1

つまり、バルクロード操作は通常の書き込みパスをバイパスします。だからこそ速い。
では、単純な行ごとの書き込み操作を行う場合、通常の書き込みプロセス中に何が起こるのでしょうか?
すべてのデータは WAL と memstore に同時に書き込まれ、memestore がいっぱいになると、データは新しい HFile にフラッシュされます。
ただし Bulkload の場合は、実行中の hbase クラスターの StoreFile に直接書き込みます。NO中間のもの... クイック ヒント- クラスターに追加の負担をかける短いバーストで頻繁にバルクロードを使用したくない場合は、タイミングを節約するために使用して WAL false に書き込むことができます。ただし、これによりデータ損失の可能性が高くなります..
Put.setWriteToWal(false)

于 2014-03-19T17:43:13.953 に答える