3

我有一个模型 MyModel(扩展了 Google 的 db.Model),我想跟踪已创建的模型数量。

我认为 Google I/O talk on Sharding Counters中的代码非常好,所以我正在使用它。但是我不确定在创建新代码时应该在哪里调用增量。(我使用的是 Django,并且我将熟悉的 models.py、views.py 等布局保留到项目的应用程序中。)

对于将递增代码放在哪里,似乎有几种可能性:

  1. 重载 Model.put() 以便在第一次保存模型时递增计数器,并类似地重载 Model.delete() 以递减计数器

  2. 将某种监听器附加到保存/删除,并检查保存是否为新模型(GAE 是否有这样的监听器?)

  3. 将计数器递增代码放入创建/删除模型的 view.py 函数中

我非常愿意就如何做到最好(以及每个选项的优缺点)提出建议和想法。

感谢您的阅读。

最好的,布赖恩

4

1 回答 1

2

我建议“App Engine Fan”在这里(本质上是“设置场景”)建议的方法(奇怪地接近“面向方面的编程” ),尤其是在这里(显示正确的解决方案:不是“猴子补丁”而是使用App Engine 的架构完善的内置“钩子”工具)。

他作为示例给出的两个“黑客”与您的用例足够接近,您应该可以毫无困难地实现您的代码——事实上,它与您考虑的子点 (2) 的“侦听器”解决方案并没有那么远,只是更多一般因为“钩子”实际上可以“干扰”操作(不是你需要在这里)以及能够在操作本身之前或之后运行(在你的情况下,我怀疑“之后”可能会更好,就在万一以put某种方式失败,在这种情况下,我想您不想计算它)。

于 2009-09-06T22:25:53.283 回答