google-app-engine - 如何实现 "Sharding Counters"以在 Cloud Datastore 中创建或更新每秒超过 5 次写入的单个实体?

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

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

要求:

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

但是,我遇到了一个写入争用的问题。

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

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

1.是否可以应用“分片计数器”来创建或更新 ndb 的用户模型?

2.你能提供一些示例代码吗?

最佳答案

我做了一些研究,想分享如下 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。

关于google-app-engine - 如何实现 "Sharding Counters"以在 Cloud Datastore 中创建或更新每秒超过 5 次写入的单个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43605922/

相关文章:

java - 按键查询谷歌数据存储并按另一个属性排序

java - 为什么我拥有的一对多关系没有持久保存到 GAE 数据存储中?

java - GWT + Spring : NullPointerException on getServletContext() call

python - appengine DateTimeProperty auto_now=真正的意外行为

python - 安卓工作室 : IncorrectOperationException when 'Add as Library' is clicked whilst trying to configure Google Apps Endpoints client libraries

google-app-engine - 线程中的异常 "main"java.lang.NullPointerException : No API environment is registered for this thread getCurrentAppId

python - 谷歌 NDB 模型验证

java - 如何在 Google App Engine (JAVA) 中写入控制台?

java - GAE/Java : Are Transactions Thread-Safe?

google-app-engine - 应用引擎 : Query datastore for columns with a hyphen in its name