解释Google Datastore(GAE)上的读/写性能注意事项?

Rya*_*yan 5 google-app-engine bigtable google-cloud-datastore

我很难理解Google App Engine数据存储区的机制.
我想了解机制,以便以数据库的最佳方式构建数据库.

鉴于下面的例子,有人可以帮助我:

  1. 最佳地构建数据库
  2. 理解给定结构的读写 性能

示例:
假设我有N个棒球运动员,每个人都有一个唯一的ID.
我想保持每个玩家击中本垒打的每日记录(存储"每日全部归属"属性)并且当本垒打被击中时基本上增加它.
所以,随着时间的推移,我想每年为每位棒球运动员展示一份本垒打图表.

Player 1
1/21/2011 - 2 homeruns
1/22/2011 - 0 homeruns
1/23/2011 - 1 homeruns
Run Code Online (Sandbox Code Playgroud)

阅读要求:阅读特定玩家每日"本垒打"数据的最近5年?

写要求:增加某个棒球运动员的每日本垒打数.

我想了解如何构建数据以及读写的机制?这个简单的存储任务会扩展吗?谢谢大家.

sys*_*out 3

我会用这样的一对多关系来模拟您的需求:

\n\n
class Player(db.Model):\n  name = db.StringProperty()\n\nclass DailyHomeruns(db.Model):\n  date = db.DateProperty()\n  counter = db.IntegerProperty()\n  player = db.ReferenceProperty(Player)\n
Run Code Online (Sandbox Code Playgroud)\n\n

要检索给DailyHomeruns定的所有内容,Player您可以通过以下方式执行此操作:

\n\n
daily_homeruns = DailyHomeruns.all().filter(\'player =\', player)\n                                    .filter(\'date >\', date_start)\n                                    .filter(\'date <=\', date_end)\n                                    .order(\'date\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

阅读要求

\n\n
\n

Google App Engine 性能查询\n 随着结果集的大小而变化,\n 而不是数据集的大小。

\n
\n\n

这意味着,如果您最近 5 年的本垒打查询集平均包含 800 个实体*,则无论此查询搜索超过一千个实体还是一百万个实体,其执行效果都是相同的。

\n\n

写入要求
\nGoogle App Engine 中的写入速度很慢,但您的场景似乎很微不足道,而且我没有看到任何可能的争用/超时问题;毕竟,您只需要DailyHomeruns每天连续更新少量的计数器增量即可。

\n\n

其他想法
\n如果您需要计算一些统计数据,例如给定的本垒打总数Player,甚至不要考虑使用GQL来实现此目的,因为它不提供任何聚合函数 \xc3\xa0 laSQL
\n相反,您必须预先设计数据库,定义一个模型来存储每个玩家的本垒打总数。
\n使用事务API,每次增加 时,DailyHomeruns您都需要增加该玩家的 TotalHomeruns 实体。

\n\n

* 我估计每周 3 场比赛,持续 52 周,每 5 年乘以一次

\n