我有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特定问题。有线索吗?
答案 0 :(得分:1)
我以一种天真的方式解决了这个问题:
我没有依赖Flask-PyMongo,而是像往常一样在烧瓶应用中使用普通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>