为什么我的dynamodb请求通过boto:get\_item如此缓慢而且经常非常慢? AWS控制台报告我的获取延迟达到了12.5毫秒的高位.我的要求都没有接近那么低的水平.

Python 2.7.5
AWS区域us-west-1
boto 2.31.1
dynamodb表大小~180k记录

码:

from boto.dynamodb2.fields import HashKey
from boto.dynamodb2.table import Table
from boto.dynamodb2.types import STRING
import boto.dynamodb2
import time

REGION = "us-west-1"
AWS_KEY = "xxxxx"
AWS_SECRET = "xxxxx"

start = time.time()
peeps = ("cefbdadf518f44da8a68e35b2321bb1f", "7e3a691df6134a4f83d381a5507cbb18")
connection = boto.dynamodb2.connect_to_region(REGION, aws_access_key_id=AWS_KEY, aws_secret_access_key=AWS_SECRET)
users = Table("users-test", schema=[HashKey("id", data_type=STRING)], connection=connection)
for peep in peeps:
    user = users.get_item(consistent=True, id=peep)
    print time.time() - start

结果:


(botot)➜  ~  python test2.py
0.056941986084
0.0681240558624
(botot)➜  ~  python test2.py
1.05709600449
1.06937909126
(botot)➜  ~  python test2.py
0.048614025116
0.0575139522552
(botot)➜  ~  python test2.py
0.0553398132324
0.064425945282
(botot)➜  ~  python test2.py
3.05251288414
3.06584000587
(botot)➜  ~  python test2.py
0.0579640865326
0.0699849128723
(botot)➜  ~  python test2.py
0.0530469417572
0.0628390312195
(botot)➜  ~  python test2.py
1.05059504509
1.05963993073
(botot)➜  ~  python test2.py
1.05139684677
1.0603158474

更新2014-07-11 08:03太平洋标准时间
实际的用例是为每个Web请求查找用户.正如@gamaat所说,DynamoDB的成本是第一次查找,因为那是在进行HTTPS连接时.因此,似乎我可以在请求之间存储DynamoDB连接并重用它,事情会更快.所以我使用werkzeug.contrib.cache.FileSystemCache来存储连接但它似乎永远不会存储连接以进行检索.其他值得到妥善存储,而不是这个连接对象.有任何想法吗?如果这不是存储请求之间连接的好方法,那么它是什么?

更新2014-07-11 15:30太平洋标准时间
由于我使用supervisor和uwsgi来管理我的Flask应用程序,似乎问题实际上是如何在我的Flask应用程序的请求之间共享连接对象.

解决方法:

问题的解决方案似乎产生了更好的响应时间(在平均响应时间为~500ms之前,并且在约50ms之后)是做两件事:

1)将Boto DynamoDB连接对象放在default\_settings.py中,以便每次应用程序加载时将其加载到app.config [“DYNDB\_CONN”]中一次;和

2)配置uwsgi有一个更便宜的num\_proccesses值 – 1,更便宜 – num\_proccesses的初始值 – 1.这告诉uwsgi总是有num\_processes – 1个uwsgi进程一直在运行,并且可以选择在启动时再启动一个进程需要它.

我这样做是为了最小化将重新启动的uwsgi进程的数量,从而创建一个新的Boto DynamoDB连接对象(产生HTTP连接设置成本).

标签: python, amazon-web-services, boto, amazon-dynamodb

相关文章推荐

添加新评论,含*的栏目为必填