私の Python Web アプリケーションはデータストアとして DynamoDB を使用していますが、これはおそらく、インデックスの一貫性がアプリケーション層で行われる他の NoSQL テーブルにも当てはまります。検索を容易にするために、データを非正規化し、いくつかのテーブルにインデックスを作成しています。
たとえば、私の users テーブルの場合:
* Table 1: (user_id) email, employee_id, first name, last name, etc ...
Table 2: (email) user_id
Table 3: (employee_id) user_id
表 1 は、ユーザー情報が格納される「プライマリ テーブル」です。user_id がわかっている場合、ユーザーに関するすべての情報を 1 回の GET クエリで取得できます。
表 2 と 3 では、email または employee_id によるルックアップが可能です。最初にこれらのテーブルにクエリを実行して user_id を取得し、次に表 1 に 2 番目のクエリを実行して残りの情報を取得する必要があります。
私の懸念は、正規化されていないデータにあります。一致するデータがテーブル 2 + 3 から確実に削除されるようにするために、テーブル 1 からの削除を処理する最善の方法は何ですか? また、インサートを確保しますか?
現在、私の一連のイベントは次のようなものです。
1. Insert row in table 1
2. Insert row in table 2
3. Insert row in table 3
最後に「チェック」を追加するのは理にかなっていますか? 何かのようなもの:
4. Check that all 3 rows have been inserted.
5. If a row is missing, remove rows from all tables and raise an error.
他のテクニックは?