わかりました、より効率的に行う方法を見つけたと思います。アプリケーション側でもう少し作業が必要ですが、ソースに加えられた変更に関係なく機能し、削除できます。
問題をもう一度定義するだけです。
- 相互に参照する 2 つのエンティティがあります。例 - ユーザーとその他のユーザー。ユーザーは他のユーザーをフォローし、他のユーザーはユーザーがフォローします。
- 関連するエンティティを水平に格納したいと考えています。そのため、各行にユーザーのすべてのフォロワーを格納する CF UserFollowers があります。
- このユーザーがフォローしているすべてのユーザーを格納する逆 CF UserFollowing もあります。
- 実際に保存するのは、名前が firstname:lastname:uuid で構成されるキーであり、値がユーザーのコンパクトな json である、フォローまたはフォローしている各ユーザーの列です。
- フォロワーを取得したり、ユーザーをフォローしたりするのは、名前の範囲クエリで十分簡単です。
- ただし、リストのいずれかからユーザーを削除するのは、保存されていた元のキーを使用して削除メッセージを送信する必要があるため、より注意が必要です。
例: sam:jones:safg8sdfg が abe:maxwell:fh2497h9 の後に続いた場合、次のようになります -
in UserFollowers: fh2497h9 | sam:jones:safg8sdfg<json for sam>
and in UserFollowing: safg8sdfg | abe:maxwell:fh2497h9<json for abe>
sam が自分の名前を sammy に変更して abe のフォローを解除しようとすると、実際に格納されている列が sam:jones:safg8sdfg である場合に、削除メッセージが sammy:jones:safg8sdfg という名前の UserFollowers の列を削除しようとするため、機能しません。
したがって、これに対する私の解決策は、保存されたjsonを含むreverseKeyを両側に保存して、実際に反対側に保存されているキーを各側が認識し、それを使用してそこから自分自身を削除できるようにすることでした。
次のようになります。
in UserFollowers: fh2497h9 | sam:jones:safg8sdfg<json for sam.. reversKey:abe:maxwell:fh2497h9>
and in UserFollowing: safg8sdfg | abe:maxwell:fh2497h9<json for abe..reverseKey:sam:jones:safg8sdfg>
サムがフォローから abe を削除したい場合、reverseKey:sam:jones:safg8sdfg を使用して abes フォロワー リストから自分自身を削除できます。
そして誰もが幸せです。