【问题标题】:Is there an Entity Group Max Size?是否有实体组最大大小?
【发布时间】:2017-09-26 02:34:26
【问题描述】:

我有一个代表付款方式的实体。我希望为使用该付款方式执行的所有付款尝试创建一个实体组。

每秒写入 1 次的限制很好,实际上对我的用例有好处,因为没有充分的理由比这更频繁地向特定信用卡收费,但我找不到关于最大大小的任何规范一个实体组。

我担心一个非常活跃的公司帐户是否会在实体组内的记录数量方面遇到任何限制(当他们与我们执行第 100 万笔交易时)?

【问题讨论】:

    标签: google-app-engine google-cloud-datastore


    【解决方案1】:

    不,实体组大小没有限制,所有与数据存储相关的限制都记录在Limits

    但请注意,实体组大小在数据争用方面很重要,请参阅Keep entity groups small。请注意,不仅在写入实体时会发生争用,而且在事务内部读取它们时也会发生争用(请参阅Contention problems in Google App Engine),有时甚至可能会出现在事务外部(请参阅TransactionFailedError on GAE when no transaction)。

    恕我直言,您的用例不值得冒险处理这些问题(相当难以调试和解决),在这种情况下我不会使用单个实体组。

    【讨论】:

    • 我希望在这里使用实体组来防止多个请求/线程同时向用户收费。目前我有一个单独的实体,我称之为“支付锁”,它与它锁定的帐户共享相同的密钥 ID。在尝试付款之前,我尝试在交易中将帐户标记为“锁定”,然后执行付款,然后在交易中解锁。我不时注意到争用错误。那么最好的方法是什么?
    • 您通常不需要显式锁定,事务环境的存在应该照顾到这一点。除非交易的持续时间是不可接受的。这里的交易是指数据存储交易,而不是收费交易。尝试 1:1 映射它们。
    • 如果您将实体组祖先限制为付款人,那么您可以扩展系统并仍然实现交易组的交易能力,除非您能想出一张卡会支付多个并发的原因付款;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多