2016-09-09 2 views
2

私はGAEに関する本を読んでいます。トランザクションに関する章では、次のように述べています。トランザクション(競合)のエンティティグループ

グループ内のエンティティを更新すると、別のプロセスによってグループ内の他のエンティティへの更新がキャンセルされる可能性があります。エンティティグループを多数のユーザーが同時に更新する必要がないように、データモデルを設計する必要があります。アプリケーションはより多くのユーザーを取得するよう 単一のグループへの同時更新の数が増大した場合

は特に注意してください。この場合、通常 複数のエンティティグループに負荷を分散し、 ユーザーグループ が増加すると自動的にエンティティグループの数を増やします。このようなデータリソースのスケーラブルな分割は、 シャーディングとして知られています。

エンティティグループのよく使用される例は、メッセージボードです。このボードは、そのボードに属するメッセージの祖先です。

しかし、メッセージを更新する(つまり編集する)ことで競合が発生し、ユーザベースが拡大するほど頻繁にボードを祖先とする巨大なメッセージグループを作成するのは悪い設計ですか?エンティティグループの書き込み速度は1秒あたり1に制限されています。これは、ボード内のすべてのメッセージを最大で1秒に1回更新できることを意味しますか?

また、単にも「更新」と原因競合としてカウント(すなわち、新しいメッセージを投稿する)グループにエンティティを追加するのでしょうか?

答えて

1

はい、このようなデザインは、ユーザー数によってはうまく調整されないため、悪いとみなされる可能性があります。私はメッセージが祖先としてボードを必要とする正当な理由は見当たらない。

はい、グループに新しいエンティティを作成するエンティティグループの更新としてカウントし、すべての更新が競合に貢献することができます。

サイドノート:あなたはこの明確化が役立つかもしれません:https://stackoverflow.com/a/39309022/4495081(ただし、マルチエンティティグループを使用するための十分な理由を持っているデザインのため)。