Python 单个事务中有许多不同的分片计数器

Python 单个事务中有许多不同的分片计数器,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我必须在一次交易中增加三个不同的计数器。除此之外,我还必须操纵其他三个实体。我明白了 too many entity groups in a single transaction 我已经使用了来自的recipie来实现我的计数器。我根据业务逻辑在一些模型(类)方法中增加计数器 作为一种解决方法,我实现了一个延迟增量方法,该方法使用任务更新计数器。但是,如果计数器的数量进一步增加,那么这就不能很好地扩展,因为单个事务中的任务也有限制(我认为是5个),我想这不是最有效的方法 我还发现,即使在通过m

我必须在一次交易中增加三个不同的计数器。除此之外,我还必须操纵其他三个实体。我明白了

too many entity groups in a single transaction
我已经使用了来自的recipie来实现我的计数器。我根据业务逻辑在一些模型(类)方法中增加计数器

作为一种解决方法,我实现了一个延迟增量方法,该方法使用任务更新计数器。但是,如果计数器的数量进一步增加,那么这就不能很好地扩展,因为单个事务中的任务也有限制(我认为是5个),我想这不是最有效的方法

我还发现,即使在通过memcache发生db错误的情况下,这似乎也能确保更新计数器。但是如果事务失败,我不想增加计数器

另一个想法是记住在web请求期间必须增加的计数器,并在单个延迟任务中增加它们。我不知道如何在不将请求中创建的对象传递给模型方法的情况下,以干净且线程安全的方式实现这一点。我认为这段代码很难看,而且不在同一个代码中:

def my_request_handler():
    counter_session = model.counter_session()
    model.mylogic(counter_session, other_params)
    counter_session.write()
有什么经验或想法吗

顺便说一句:我正在使用python、ndb和flask 如果计数器不是100%准确就可以了。

如中所述:

最简单的方法是确定需要创建哪些实体 能够在同一事务中处理。然后,当你创建这些 实体,通过使用 共同祖先。然后,它们将全部位于同一实体组中,并且 您将始终能够以事务方式更新和读取它们


这可能是一个评论,而不是一个答案