mongo分页查询方式

  闲下来,想了下准备总结下最近在mongo查询上所遇到的一些问题,我在这里罗列一下。redis

1.mongo使用shell的find查询:shell

 查询long型字段时,须要在查询条件里使用NumberLong("xxxx")包裹起来,这样才是精确查找,否则查找到的数据是不一致json

2.mongo添加一个字段:缓存

为mongo的每一条记录都添加一个字段时,使用uodate时,加入插入的字段默认值是int型的,那么直接填写值的话,插入后会变成double型的数据,后面自动添加“.0,必须用NumberInt(xx)来包裹;由于mongo是基于bason格式的,而bason里面是有int类型,而mongo的shell是基于json格式的,json格式中只有number类型,因此才使用int或者long型必须用number来包裹;并发

3.mongo分页方式讨论高并发

①通常的分页使用skip,limit来结合,这个方式实现起来很简单,而且前期问题也不打,可是当数据量上去之后就会愈来愈卡,我测试过10W数据量,当一次查询发起的时候会卡好久,建议小数据量时使用;性能

②第二种方式是基于瀑布流形式的下拉分页,其经过排序某个惟一字段,而后获取上一条记录大这个字段经过对比获取上一页或者下一页的数据,这个方式是咱们如今业务中广泛使用的,对于大数据量的状况下性能也很不错,可是其中有2各地方须要注意,第一点:在翻页是必须先排序,而后在获取,而后若是能够上下翻页的话,排序方式也须要根据相应的转换,否则获取的数据会错乱,具体须要根据本身实际测试来改动;第二点:排序的字段必须是惟一,这个条件很苛刻,因此通常状况下咱们都是用建立时间或者是mongo自带的主键来排序,固然当高并发状况下建立时间也是可能存在重复,那么当这个惟一属性存在重复的时候,在翻页时咱们将丢失某一条重复的数据(这个问题不知道如何解决)。个人业务场景中就有这么一个地方存在重复的,可是我在service那边作了redis的缓存,而后经过缓存的内存分页来解决了这一问题。(想到了一句话:遇到没法解决的问题那么就不去解决它^_^)测试

相关文章
相关标签/搜索