查询MongoLab

时间:2015-09-07 20:50:11

标签: python mongodb flask pymongo mlab

我有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特定问题。有线索吗?

1 个答案:

答案 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>