【发布时间】: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