通过阅读 mongolite 手册https://jeroen.github.io/mongolite/query-data.html,它指出如果我索引我最常过滤的列,我应该会看到速度提升。
我有一个股票开盘价、Hi、Lo、收盘价的数据框。df 约为 60k 行。这是一瞥。
head(df.ts$find())
price_open price_high price_low price_close ref_date ticker SMA200
1 279.64 279.80 278.84 279.34 2018-07-16 SPY 267.8959
2 278.47 280.91 278.41 280.47 2018-07-17 SPY 268.0465
3 280.56 281.18 280.06 281.06 2018-07-18 SPY 268.1956
4 280.31 280.74 279.46 280.00 2018-07-19 SPY 268.3340
5 279.77 280.48 279.50 279.68 2018-07-20 SPY 268.4681
6 279.45 280.43 279.06 280.20 2018-07-23 SPY 268.6033
我只做一个查询,按库存过滤并收集其余数据集。
system.time({
df = df.ts$find(
query = '{"ticker" : "SPY" }',
fields = '{"_id" : false, "price_close" : true, "ref_date" : true, "SMA200" : true}'
)
})
Imported 267 records. Simplifying into dataframe...
user system elapsed
0.00 0.00 0.13
如您所见,这需要我大约 0.15 秒的时间来检索。听手册,我将代码设置为索引列。
df.ts$index(add = '{"ticker" : 1}')
我现在重新运行代码以期待速度提升。
system.time({
df = df.ts$find(
query = '{"ticker" : "SPY" }',
fields = '{"_id" : false, "price_close" : true, "ref_date" : true, "SMA200" : true}'
)
})
Imported 267 records. Simplifying into dataframe...
user system elapsed
0.00 0.00 0.14
你可以看到没有速度提升。这个问题有解决方案吗?在手册中,作者能够看到巨大的速度提升。