SimpleDB 文档中有一条评论基本上指出,如果您需要更多并行性,那么您应该使用多个域。
这让我想到了这个问题。SimpleDB 是否会序列化所有请求,即使它们来自多个客户端应用程序?
有人对此有明确的答案吗?
SimpleDB 文档中有一条评论基本上指出,如果您需要更多并行性,那么您应该使用多个域。
这让我想到了这个问题。SimpleDB 是否会序列化所有请求,即使它们来自多个客户端应用程序?
有人对此有明确的答案吗?
SimpleDB(根据 Netflix 的首席工程师,在博客中介绍了他们的过渡)似乎对每个域的帐户进行了速率限制。因此,您可能有 1 个帐户,并且正在从 10 个线程到单个域进行查询或插入,而这些(根据我收集的)将被限制为每秒大约 40-70 个请求(我看到了不同的报告)。
另一件要考虑的事情是您的域规模扩大,查询性能下降。
由于这两种行为,建议对于大数据,跨多个域“分片”数据。
因此,考虑一个跟踪推文的社交应用程序,您可能会创建以下 5 个域:TWEETS_0、TWEETS_1、TWEETS_2、TWEETS_3、TWEETS_4
然后在它们之间分割你的插入: int domainIndex = tweet.getId() % 5; simpleDB.doInsert(domainIndex, arguments...)
或一些这样的伪代码。Aws 最近将每个客户的域限制提高到 250 个,因此似乎预计会使用这种分片设计。
SimpleDB 的梦想承诺是“我们扩展,您担心代码”,但现实是我们还没有实现。
您仍然需要担心一些细节。
不,当然 SimpleDB 不会“序列化所有请求”;但是,它必须进行一定量的锁定以确保事务一致性。跨域分片是一种将其影响降至最低的简单方法。