【问题标题】:Flask exceedingly slow to query MongoLabFlask 查询 MongoLab 的速度非常慢
【发布时间】:2015-12-03 10:26:51
【问题描述】:

我有一个包含小型时间序列文档集合的 Mongolab 数据库。

每个文档都包含特定时间序列的一部分(每个文档中特定股票的 250 个每日价格值)。集合在查询字段中被索引。

我需要查询链接到一个特定股票的所有切片,如下所示:

cursor = db.timeseries.find({'stock':'IBM'})    # this line executes in very small time
slices = [slice for slice in cursor]            # this line takes 10 seconds

# to give an idea, cursor.count() could be anywhere between 10 and 40

如果我在 python 解释器中运行这段代码,它会在 300 毫秒内完成。

如果我在本地运行的 Flask 中在同一个数据库上运行相同的代码,则需要 10 秒 (!!!)。问题不在于使用find() 选择数据,它工作正常,而是查询所有数据。

值得注意的是,如果我将本地 Flask 应用程序连接到 本地 mongodb,它运行良好

我没有发现网上提到的类似 Flask 特定问题。有什么线索吗?

【问题讨论】:

  • 您是否指定了主机名?还是 IP 地址?
  • 在应用程序的开头我指定app.config['MONGO_URI'] = 'mongodb://<username>:<password>@dsxxxxxx.mongolab.com:55802/<dbname>'
  • 这可能是 DNS 查找问题。尝试连接到 IP 而不是主机名,例如 50.19.86.168 而不是 dsxxxxxx.mongolab.com。解析 IP 可能需要很长时间。
  • 谢谢,很有趣。请参阅下文了解我解决它的方式,flask-pymongo 中的问题是否可以链接?
  • 奇怪。尝试使用固定 IP 的慢速代码,看看是否有帮助。

标签: python mongodb flask pymongo mlab


【解决方案1】:

我以一种有点幼稚的方式解决了这个问题:

我没有像往常一样依赖Flask-PyMongo,而是在flask 应用程序中简单地使用了pymongo,它的运行速度非常快:

快速 - pymongo 版本

# use pymongo in a classic way

mongolab_uri = 'mongodb://<username>:<password>@dsxxxxxx.mongolab.com:55802/<dbname>'
connection = pymongo.MongoClient(host=mongolab_uri)        
db = connection['<dbname>']
coll = db.<collection_name>

# from here query and do whatever you need to  

慢 - Flask-Pymongo 版本

from flask.ext.pymongo import PyMongo
app.config['MONGO_URI'] = 'mongodb:...'
mongo = PyMongo(app)
coll = mongo.db.<collection_name>

【讨论】:

  • 你知道为什么会这样吗?
  • 不是,我用 pymongo 重新进行了概念验证,效果很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2015-11-21
  • 2013-01-30
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多