私は Cassandra を初めて使用し、アカウント登録とログイン用の単純なユーザー テーブルを設計することから始めています。これは非常に簡単です:
行キー: ユーザー名; 列: 電子メール、名前、パスワード、ソルト。
または、次のようにします。
行キー: uuid; 列: ユーザー名、電子メール、名前、パスワード、ソルト。
この単純な構造に関して、2 つの質問があります。
- メール (およびユーザー名) を検索するためのインデックスが必要です。セカンダリ インデックスを使用するか、手動でインデックスを作成できます。電子メール/ユーザー名列のカーディナリティが高いため、2 番目のオプションを選択する必要がありますか? セカンダリ インデックスは、カーディナリティの低い列を対象としているようです。
- さらに重要なことに、キーをテーブルに同時に挿入するという問題にすぐに遭遇します。ユーザー名 (または電子メール) がデータベースにまだ存在しないことを確認するために、書き込み前に読み取りを行う必要があります。潜在的な競合状態を回避する方法はありますか (たとえば、2 人のユーザーが同じユーザー名/電子メールを同時に登録するなど)? それとも、ユーザー登録を処理するために追加のリレーショナル データベースを使用し、ログインやその他の目的でユーザー アカウントの詳細を cassandra データベースにコピーするのが正しい解決策ですか?