GAE 数据存储:“总计”属性与添加行项目?

发布于 2024-10-02 05:08:06 字数 516 浏览 5 评论 0 原文

这是另一个 Google App Engine 数据存储问题。

假设我的应用程序跟踪一群老鼠以及它们吃了多少奶酪。每个Rat 实体都有一系列Meal 实体——每个实体跟踪老鼠何时进食以及吃了多少片奶酪(slices 属性)。每只Rat还有一个total_slices属性,每当记录新的膳食时该属性都会更新。

每当我需要知道总数时,是否应该放弃 total_slices 属性,转而简单地将每份 Mealslices 加起来?数据存储文档称查询很便宜,而高频更新实体是有问题的(谷歌将“高频”定义为以持续的速率每秒更新一次实体以上)。因此,如果我有一些非常贪婪的老鼠,每秒进食不止一次,那么当我更新 Rattotal_slices 时,我就会冒着超时的风险。

对于如何最好地设计这个场景有什么建议吗?

This is another Google App Engine Datastore question.

Let’s say my app tracks a bunch of rats and how much cheese they’ve eaten. Each Rat entity has a series of Meal entities -- each tracks when the rat ate and how many slices of cheese (slices property). Each Rat also has a total_slices property that is updated whenever a new meal is logged.

Should I abandon the total_slices property in favor of simply adding up the slices of each Meal whenever I need to know the total? The Datastore documentation says that queries are cheap, while updating an entity at a high frequency is problematic (Google defines “high frequency” as updating an entity more than once a second at a sustained rate). So if I have some really voracious rats that feast more than once a second, I’m risking a timeout when I update the Rat’s total_slices.

Any suggestions how to best design this scenario?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青衫负雪 2024-10-09 05:08:06

您的问题包含两个单独的问题:

1。您是否应该将 total_slices 反规范化为 Rat 实体?

要回答这个问题,您必须分析应用程序的数据访问模式。例如:

  • Rat 获取 total_slices
    共同任务?
  • 你是否需要
    total_slices列出或排序Rats
  • 将每顿加起来仍然是
    多年数据后的高效
    已经积累了?

2.如果您的实体需要更新速度超过 1 秒,您会在 GAE 中做什么?

使用 分片计数器

There are two separate issues wrapped up in your question:

1. Should you de-normalize total_slices to the Rat entity?

To answer this you must analyze the data access patterns of your application. For example:

  • Is getting total_slices for a Rat a
    common task?
  • Will you ever need to
    list or sort Rats by total_slices?
  • Will adding up each Meal still be
    efficient after several years of data
    have accumulated?

2. What do you do in GAE if you have an entity that needs to be updated more than 1/sec?

Use a Sharded Counter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文