【问题标题】:How to implement "Sharding Counters" to create or update single entity more than 5 writes per second in Cloud Datastore?如何实现“分片计数器”以在 Cloud Datastore 中创建或更新超过每秒 5 次写入的单个实体?
【发布时间】:2017-04-25 08:53:48
【问题描述】:

我需要通过增加 Google Cloud Datastore 中的写入吞吐量来提高服务器的性能。

要求:

当服务器同时收到超过 5 个创建用户数据的请求时,服务器需要创建或更新这些实体。

但是,我遇到了写作争用问题。

我知道一个可能的解决方案是使用后写缓存机制将可能导致争用的写入操作移动到 Memcache 和降低 Cloud Datastore 命中率的任务队列。

但我想并行执行,没有任何延迟时间。

1.是否可以应用“Sharding Counters”来创建或更新ndb的用户模型?

2.您能否为此提供任何示例代码?

【问题讨论】:

  • 您通常只会在使用实体组时遇到这种情况。你是?如果是这样,请考虑重新审视您的模型并使用祖先。您也没有真正提供足够的信息来提供具体的答案
  • 对。我发现一个解决方案是在 memcache 中完成所有操作,并创建一个任务队列来更新 Data Store 中的数据。

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


【解决方案1】:

我做了一些研究,想分享如下 https://weishihhsun.blogspot.com/search/label/Google%20App%20Engine

关键是我们可以使用随机唯一 id 对实体组进行分片,如下所示。

NUM_SHARDS = 1000

shard_string_index = str(random.randint(0, NUM_SHARDS - 1))

FriendShip(id=shard_string_index,
           user_key='user Id', 
           friend_key='frind Id')

要同时并行写入一千个Friendship实体,我们只需将NUM_SHARDS的数量设置为1000即可。

【讨论】:

    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2016-12-11
    • 2021-04-05
    • 2021-07-05
    相关资源
    最近更新 更多