在创建新模型时,应该将自增分片计数器的代码放在哪里?

3 投票
1 回答
504 浏览
提问于 2025-04-15 14:06

我有一个模型叫 MyModel(它是从谷歌的 db.Model 扩展出来的),我想记录一下创建了多少个这样的模型。

我觉得谷歌在他们的 I/O 讲座中提到的关于 分片计数器 的代码挺不错的,所以我打算用那个。不过我不太确定在创建新模型的时候,应该在哪里调用增加计数的代码。(我在用 Django,并且保持了项目应用中常见的 models.py、views.py 等布局。)

我想到了一些可能放置增加计数代码的地方:

  1. 重写 Model.put() 方法,这样在模型第一次保存的时候就可以增加计数,同时重写 Model.delete() 方法来减少计数。

  2. 给保存和删除操作加一个监听器,检查保存的是否是新模型(GAE 有没有这样的监听器?)

  3. 把增加计数的代码放在 view.py 中负责创建/删除模型的函数里。

如果能给我一些建议和想法,告诉我怎么做最好(还有每个选项的优缺点),我会非常感激。

谢谢你的阅读。

祝好,
布莱恩

1 个回答

2

我建议你可以参考“App Engine Fan”提到的方法,这个方法和“面向切面编程”有点相似,具体可以看看他在这里的介绍(基本上就是“设置场景”),还有这里的内容(展示了正确的解决方案:不是“猴子补丁”,而是使用App Engine内置的“钩子”功能,这个设计得很好)。

他给出的两个“黑科技”示例和你的使用场景很接近,所以你应该能顺利实现你的代码——实际上,这和你考虑的“监听器”解决方案(子点2)差不多,只是更通用一些,因为“钩子”可以“干扰”操作(虽然在这里你不需要这样做),而且可以在操作之前或之后运行(在你的情况下,我觉得“之后”可能更好,以防put出现问题,这样你就不想把它算进去)。

撰写回答