モバイル アプリによって提供される登録 ID を格納するために MySQL を使用して、Google クラウド メッセージング メカニズムのサーバー側をセットアップしています。Google は最大 4,000 の登録 ID を発行できるため、それらを TEXT フィールドに格納する必要があります。これまでのところ問題はありませんが、問題は次のような状況を処理する必要があることです。
- ユーザーがアプリにログインする
- アプリが Google に登録 ID を要求します
- アプリは新しい登録 ID をアプリ サーバーに送信します。
- サーバーはその登録IDを保存し、現在ログインしているユーザーにリンクします
- そのユーザーがログアウトし、新しいユーザーがログインします
- アプリは以前と同じ登録 ID をサーバーに送信します
- サーバーは、登録IDがすでにデータベースにあるが、別のユーザーにリンクされていることを確認できる必要があります
- サーバーは、以前のユーザーから登録 ID のリンクを解除し、それを新しいログイン ユーザーにリンクします。
問題は、データベース内の登録 ID の一意性を確保する必要があることですが、その TEXT フィールドに UNIQUE インデックスを追加することはできません。
私が考えることができる可能な解決策:
- 登録 ID のハッシュを計算し、そのハッシュが一意になるように強制しますが、競合が発生する可能性があります。
- 一意のデバイス ID を登録 ID と共に保存し、そのデバイス ID を一意にすることができます。私が見ている問題は、AndroidデバイスIDがどのくらいの長さになるかわからないことであり、利用できない場合があると思います。
- 新しい登録 ID を受け取るたびに検索を実行することもできますが、これは非常にパフォーマンスの低い操作になると思います。
その問題に直面しているのは私だけではないと確信していますが、良い解決策が見つかりません。どうすればこれを解決できますか?