文档章节

利用MongoDb进行分页方案

奋斗到天明
 奋斗到天明
发布于 2015/08/27 18:17
字数 631
阅读 61
收藏 1

MongoDb的一个应用方案,具体场景是,框架是 Play1.x后端+Delphi前端,查询是数据过多,所以有用缓存减小网络压力,前端利用类似瀑布流的技术拉取数据,后端一次查出数据,分页返回。

这里提出两个方案,具体如下: 

一、分析 

综合上次开会,在缓存方面有两种意见,即是否将sessionid作为计算缓存hashkey的条件之一。其实这两种意见可以将此次的服务端的缓存分为两种作用。 

第一种,只做数据的反向缓冲,有减小网络压力之用。将数据从数据库取出,分批取回客户端。这种情况就是用sessionid计算hashkey的情况。如果只做反向的缓冲,则不须考虑数据的时效性。因为用缓冲与不用缓冲的区别只是在于是否一次加载完成。

另一种,就是不计算sessionid。这时将起反向缓冲与数据缓存作用,同时减小网络与数据库的。多个用户的多个请求只要请求参数一致,即hashkey一致,则取同一缓存。 

二、方案 

在后端,采用mongoDB作为缓存,将第一次请求结果缓存下来。缓存的地方在play的Controller层中,利用反射取值,这样可减少代码量。在数据返回时,带有livetime,可让客户端知道数据是否过期。 针对分析中的两种情况,提出下面两种方案: 

 A、 针对缓冲

图片1

缓存策略: 使用 url + requestParam + sessionid + timestamp 做hashkey。根据具体需求,将数据分成N段。每次请求取最前一段的数据,取完后缓存删除此段,当数据超过livetime点之后MongoDB也会自动删除此hashkey的所有数据。   

B、 针对缓冲加缓存

图片2

缓存策略: 

1、使用 url + requestParam 做hashkey 建立一个列表,将这次查询结果加入列表前面中,并设置每个数据项的成活时间点livetime与有效保鲜时间点activetime。 

2、返回hashkey、livetime和nextpage。第二次查询时可以用三个参数拉取数据。如果nextpage为空表示已经没有数据。 

3、如果第二个用户过来,同样的hashkey,会读取相应列表中最后一项的数据,计算是否在其activetime时间点前,如果在,则返回hashkey、livetime、nextpage。如果没有则重复1。

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
大偏移量下Redis、MongoDB分页/排名性能比较

题目其实并不太准确,因为数据库并不会提供分页、排名等功能,提供的只是数据的存取,分页排名这些都是我们基于数据库的实用案例而已。然而无论是Redis还是MongoDB,通常都有一些常规的做分页...

红薯
2012/06/26
1K
3
MongoDB 如何限制结果和分页显示

在这篇文章我们将看一下怎样在MongoDB限制结果同样怎样去分页显示。MongoDB使用limit去限制许多返回结果,MongoDB使用skip去跳转来自结果集中的记录,使用limit并结合skip能使你在MongoDB中做...

oschina
2013/01/27
5.2K
5
MongoDB最佳实践畅谈-计费系统

版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/20536623 MongoDB最佳实践畅谈-计费系统 作者:chszs,转载需注明。博客主页:...

chszs
2014/03/05
0
0
MongoDB让人挠破头的分页问题

我们已经知道MongoDB的skip分页方式是效率低下的,很多社区里都有前人做过测试。问题是:如果不用skip,到底如何做分页? 很多人,包括《MongoDB权威指南》中给出的解决方案是:获取上一页的...

空想家
2013/08/02
3.4K
13
MongoDB —— 使用Spring Data MongoDB操作数据库

本文代码示例参见:https://gitee.com/imlichao/MongoDB-example 我们使用Spring Data MongoDB可以方便的在Spring boot项目中操作MongoDB 文档地址:https://docs.spring.io/spring-boot/do...

哼_哼
01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部