2017-06-30 12 views
0

データストアのエンティティごとに整数/ロングタイプの180個のインデックスされていないプロパティ(列)を持つのは悪いですか?180個のプロパティを持つシャーディングカウンタ

私は分析上の理由から、日によってユーザー省あたり6つのリクエストをカウントする必要があると私はシャーディングカウンタの記事およびウェブキャストに基づいて、すべてをやっている:だから、基本的にはすべての新しい要求をインクリメント日あたり6つの値です https://cloud.google.com/appengine/articles/sharding_counters

ので、私は持つに思っている:月あたり

1種類の分析の 6種類*ヶ月の日数= 180

Googleのデータストアのプロパティにすぎどのくらいですか?

ありがとうございました

答えて

1

おそらく良い考えではありません。

すなわち、データストアから取得した直列化復元、更新、再直列化に再送信される(あなたが1つのプロパティ値を更新するたびに全体エンティティが再書き込みされなければならないことに留意してくださいデータストア)。エンティティが大きいほど、パフォーマンスは遅くなります。

IMHOこのような場合、大きなものよりも小さい複数のエンティティを持つ方がよいでしょう。 1つの大きなエンティティを複数の小さなエンティティに分割し、効率的に関連付けることができます。re-using an entity's ID for other entities of different kinds - sane idea?

同じ行に沿って、曜日情報とユーザーIDをエンコードする方法もあります独自のカスタムキーIDを使用して簡単にアクセスできます。 <userid>_YYMMDDまたはちょうど<userid>_DD

+1

のようなものですが、Googleは読み書きされたデータの*サイズ*ではなく、読み書きされたエンティティの*番号*を請求します。 1つのフィールドで180個のエンティティを読み書きするには、180個のフィールドを持つ1つのエンティティよりも180倍のコストがかかります。パフォーマンスとコスト:1つを選んでください: – BareNakedCoder

+0

@BareNakedCoder Hm、厳密にはそうではありません - 料金はエンティティの数ではなく、読み取り/書き込み操作の数です。 1つのエンティティを180回書くことは、180の異なるエンティティに1回書くことと同じくらいコストがかかります。 –

+0

笑!あなたは100%正しいです。しかし、誰も私が言ったことを間違って解釈するとは思っていませんでした。明らかにエンティティの作成時に、DSは履歴ログを調べて、このエンティティが最近書き込まれたかどうかを確認していないため、現在の書き込みに対して請求しません。 (私が失われていないことを願っている)要点は、180回の読み書き操作では、1回の大規模な操作よりも多くのコストがかかります。 – BareNakedCoder

関連する問題