0

MyIsam エンジンで MySQL を使用しており、ユーザーがまだデータベースにアクセスしている間に膨大な数 (数百万) の行を毎日更新する必要がある状況があります。

米国、英国、インド、中国のさまざまなタイムゾーンのユーザーがいます。ユーザーが最初にサインアップすると、サードパーティのソースからデータがダウンロードされます。すべてのユーザーは同じテーブル セットを共有しますが、データは重複しません。つまり、ユーザーが別のユーザーと同じ行にアクセスすることはありません。

サード パーティのシステムはデータを変更するため、データベースを最新の状態に保つために、ユーザー データの新しいスナップショットを毎晩ダウンロードします。ユーザーのデータは、そのユーザーのタイムゾーンを基準にして真夜中に更新されます。

すべてのユーザーが同じテーブルを共有するため、英国のユーザーがアクティブにデータを参照している間に、データ更新プロセスがアメリカのタイムゾーンのユーザーのデータを更新できることを意味します。ここに問題があります。何百万ものデータを更新する必要がありますが、実行できません。

データベースにアクセスしている他のユーザーに影響を与えることなく、ユーザーのデータを更新する最善の方法を提案してください。データベースに格納されているデータは数値で、すべての列は整数です。

4

1 に答える 1

0

2 つの解決策があります。

  • InnoDB データベース エンジンへの変更 - これにより、テーブル レベルではなく行レベルのロックが提供されます。挿入は一般的に遅いことに注意してください。
  • テーブルを地域ごとに分割します。テーブルが地域ごとにセグメント化されている場合、状況に基づいて、テーブルを同時に読み書きすることは決してありません。
于 2012-11-04T15:12:30.537 に答える