解决mongo大数据量下复杂查询的性能问题
本篇背景是我们获取应用运行时产出的日志,做展示。比如机器人运行时日志,用户问句对应意图这些信息,对于业务方是关注的,
他可以检索相关日志信息,对不正确问句意图进行重新标注。然而该机器人运行日志每小时千万级,当时我们系统也只保存2个月数据,
并存放在mongo中的,最终日志会同步给数据平台,所有我们并没有使用hbase和hive这类存储。
mongo 游标
游标不是查询结果,而是查询的一个返回资源或者接口,通过这个接口,可以逐条读取数据。
就类似java中的读取文件流一样,使用readLine()方法一行一行去读。
-
batchSize(int size):每次网络请求返回的document条数,比如你需要查询1000条数据,mongodb不会一次性全部load并返回给client,
而是每次返回batchSize条,遍历完之后后再通过网路IO获取直到cursor耗尽。默认情况下,首次批量获取101个document或者1M的数据,此后每次4M,
当然我们可以通过此方法来覆盖默认值,如果文档尺寸较小,则建议batchSize可以大一些。 -
skip(int number)、limit(int number):同SQL中的limit字句,即表示在符合匹配规则的结果集中skip一定数量的document,并最终返回limit条数据。可以实现分页查询。
-
sort(Bson bson):根据指定field排序,参与排序的字段最好是索引,如