2016-09-09 4 views
0

ダイナモには約2,800万レコードのライブテーブルがあります。
テーブルにはLSIになるために変更したいGSIがありますが、LSIを作成できるのはテーブル作成時のみです。GSIの代わりにLSIを使用するために大きなダイナモブロックテーブルを変更してください

新しいテーブルを作成し、ダウンタイムを最小限にしてデータを移行する必要があります。私は次のことをやろうと思っていた: 正しいインデックスで新しいテーブルを作成する。 レコードを古いテーブルと新しいテーブルに書き込むようにコードを更新します。これが始まると、最初のレコードのタイムスタンプを書き留めます。 私の最初の日付より前の作成日のものについて、既存のデータを同期する簡単なプロセスを作成します。
既存のレコードが更新されたときの競合状態を防ぐために、新しいテーブルにロックフィールドを追加する必要があります。 すべてが同期されると、新しいテーブルを使用するように切り替わります。

私はうまくいくと思いますが、それはかなり複雑でエラーが発生しやすいと感じています。誰かがこれを行う良い方法を見つけましたか?ここで

答えて

0

はアプローチです:

(のはoldTableとしてGSISを持つテーブルとNEWTABLEなどのLSIを持つ新しいテーブルを参照してみましょう)。

  1. 必要なLSIでnewTableを作成します。
  2. oldTableの新しいレコードがすべてnewTableに同じレコードを挿入するように、oldTableのためにDynamoDB tirggerを作成します。 (このロジックはAWSラムダにある必要があります)。
  3. アプリケーションがnewTableを指しているようにします。
  4. すべてのレコードをoldTableからnewTableに移行します。
+0

トリガーについてはわかりませんでしたが、実験して更新します。 – mark

関連する問題