当一个人创建一个新模型时,应该在哪里放置代码以在 Google App Engine/Django 上自动增加一个分片计数器?
Posted
技术标签:
【中文标题】当一个人创建一个新模型时,应该在哪里放置代码以在 Google App Engine/Django 上自动增加一个分片计数器?【英文标题】:Where should one place the code to autoincrement a sharded counter on Google App Engine/Django when one creates a new model? 【发布时间】:2010-11-25 23:26:01 【问题描述】:我有一个模型 MyModel(扩展 Google 的 db.Model),我想跟踪已创建的模型数量。
我认为来自 Google I/O talk on Sharding Counters 的代码非常好,所以我正在使用它。但是我不确定在创建新代码时应该在哪里调用增量。 (我使用的是 Django,我已经将熟悉的 models.py、views.py 等布局保留到项目的应用程序中。)
对于将递增代码放在哪里,我想到了几种可能性:
重载 Model.put() 以便在第一次保存模型时递增计数器,同样重载 Model.delete() 以递减计数器
将某种侦听器附加到保存/删除,并检查保存是否属于新模型(GAE 是否有此类侦听器?)
将计数器递增代码放入view.py中创建/删除模型的函数中
我非常乐意就如何做到最好(以及每个选项的优缺点)提出建议和想法。
感谢您的阅读。
最好, 布赖恩
【问题讨论】:
您可以使用 Datastore Statistics API,而不是保留已创建模型的计数器吗? code.google.com/appengine/docs/python/datastore/stats.html 【参考方案1】:我建议“App Engine Fan”here(本质上是“设置场景”)特别是here(显示正确的解决方案:不是“猴子补丁”)建议的方法(奇怪地接近“面向方面的编程”) ”,而是使用 App Engine 架构完善的内置“钩子”工具)。
他作为示例给出的两个“黑客”与您的用例非常接近,您应该可以毫无困难地实现您的代码——事实上,它与您考虑的子点 (2) 的“监听器”解决方案并没有那么远,只是更笼统一些,因为“钩子”实际上可以“干扰”操作(不是您在这里需要)以及能够在操作本身之前或之后运行(在您的情况下,我怀疑“之后”可能会更好,以防万一 put
以某种方式失败,在这种情况下,我想您不想计算它)。
【讨论】:
有人知道我们什么时候可以从 java 访问 hook api 吗?以上是关于当一个人创建一个新模型时,应该在哪里放置代码以在 Google App Engine/Django 上自动增加一个分片计数器?的主要内容,如果未能解决你的问题,请参考以下文章
在哪里放置代码以在 Vue.js 中设置 Firebase 身份验证状态持久性?
在哪里放置不是模型、视图、控制器或助手的 Rails 代码?