如果想了解更多这个方面的,我建议你花点时间读一些mongoDB存储的工作方式的资料。
预加载数据
正如我之前所说的,优化技术的选择和使用建立在对当前数据的了解的基础上。前一篇帖子有关于虚拟化项目的介绍,我们只是在匹配阶段使用了索引。在获取数据的时候,我们只是加载数值,并没有索引。因为数据的大小完全适合RAM。我们可以只选择预加载数据,而没有选择索引。
这是一个很好的访问数据的方法,考虑到我们目前收集的索引:
"indexSizes" : {
"_id_" : 1460021024,
"created_on_1" : 1257869424
}
可以看出我们根本用不到id 的索引。在具体的例子中,加载索引实际上有可能是降低性能。所以有时候只加载数据就可以了。
| db.runCommand({ touch: "randomData", data: true, index:false }); | ||
| D:\wrk\vladmihalcea\vladmihalcea.wordpress.com\mongodb-facts\aggregator\timeseries>mongo random touch_data.jMongoDB shell version: 2.4.6connecting to: random Touch {data: true} took 14.025s | ||
总结
和我的前一篇文章的数据比较,在minutes-in-hour 中已经有了五个时间的减少,但是我们还没有完成它。通过这个简单的优化,可以看出它减少了我之前的0.209s和JOOQ Oracle中0.02秒的差距。尽管他们的结果已经非常不错了。
我们的结论是,目前的结构不利于我们对大型数据集。我的下一篇文章
将为你带来一种改进压缩数据模型的方法,这将允许我们每个分片存储更多的文件碎片。
代码可以在GitHub 中找到
如果你喜欢我的文章,并且期待及时得到我最新帖子的邮件通知,你只需关注我的博客。