0

そのため、Web アプリケーションがマシンにログインするデータを挿入するだけの "挿入" マシンが 2 つ以上あるという状況です (それらはすべてロード バランサーの背後にあります)。数時間ごとに、1 台ずつマシンがロード バランサーから切断され、その情報が「マスター」データベース マシンにアップロードされます。マシンには、収集しているすべてのデータの比較的最新のバージョンが必要です。

当初は mysqldump を使用する予定でしたが、auto_increment id 列を取得しないようにコマンドを指定できないことがわかりました (主キーで衝突が発生する可能性があります)。一時テーブルを使用してデータを入れてから列を削除することを推奨する別の投稿を見ましたが、「挿入」マシンの仕様は非常に低く、データ量は 50,000 行のオーダーでかなり大きくなる可能性があります。一度にx行を取得してリモートの「マスター」データベースに挿入するだけでなく、これを行う簡単な方法はありますか? 現在、「挿入」マシンにphpがインストールされています。

ご意見ありがとうございます。

4

1 に答える 1

1

マスター データベース レコードの各レコードに、スレーブ データベースと同じ主キーを持たせたいと思いませんか? そうでない場合、クエリが実行されているマシンによって異なる結果が生成されるという問題が発生する可能性があります。

衝突を回避する任意の主キーが必要な場合は、自動インクリメント ID を削除し、各サーバーのすべてのレコードに対して一意であることが保証される ID を作成することを検討してください。たとえば、Unix 時間 (マイクロ秒単位) と、サーバーごとに異なる識別子を連結できます。少し怠惰な解決策は、時間 + ランダムな 10 桁の数字か何かを連結することです。PHP の uniqid() 関数は、このようなことを自動的に行います。

ID を使用する予定がない場合は、テーブルから削除してください。すべてのテーブルに主キーが必要であるというルールはありません。これを使用しないが、各レコードがいつ挿入されたかに関する情報をエンコードしたい場合は、代わりにタイムスタンプ列を追加します (キーにはしないでください)。

于 2012-07-02T19:59:58.400 に答える