mysql分库 分页查询 Mysql海量数据分表分库如何列表分页? 1.现在使用ElasticSearch了。基于Lucene的解决方案 2.必须将mysql里的数据写入到类似hbase这样的分布式数据库,查询快。但分页、查询的话,可以在hbase前加一层solr,用于建立数据索引 如何对分库后的数据进行分页查询? yeyingsheng 发布于 2015/04/21 10:18 阅读 7K+ 收藏 1 答案 7 Spring iBATIS si项目,现在连接6台mysql数据库,路由分库算法是根据id的hash值%6,根据值不同分别存入6台数据库。现在不知道如何做分页查询列表,请问有谁知道吗 收藏 (1) 分享 举报 最多投票最新 0 三阶魔方 2015/04/21 13:50 1、直接使用跨库的多表联合查询。不建议。 2、向6台数据库server均发送一个查询请求,然后对所有查询结果进行汇总,再处理分页逻辑。 3、建立一个总数据库,只负责维护主键和必要的索引,以供分页查询。 4、使用redis维护一个主键序列,分页操作就是截取该序列的一部分,其结果就是主键id集合。拿到id后便可以映射到多台mysql服务器上查询数据了。但毕竟数据被分布式存储了,取到完整结果集必须要多次、多台的数据库访问,这个肯定是避免不了。 注:“多台”数据库访问的问题无解,但同台“多次”数据库访问的问题可以通过程序优化。 评论 (1) 引用此答案 举报 yeyingsheng 2015/04/21 14:35 感觉使用redis维护一个主键序列比较靠谱一点,但是没有用过 回复 举报 0 hylent 2015/04/21 13:07 另建一个主库,有所有分库的数据 评论 (3) 引用此答案 举报 yeyingsheng 2015/04/21 14:45 回复 @hylent : 你说的也挺有道理,不知道大家采取最多的方式是什么? 回复 举报 hylent 2015/04/21 14:38 回复 @1157624952 : 嗯,单点,可以主备。最佳答案中的,在redis里维护索引的方法,也不错,不过,就要和业务挂钩了,多种排序方式需要维护多个序列。不过我还是觉得,数据放在内存中不太稳妥。。 回复 举报 yeyingsheng 2015/04/21 14:32 这样的话就会出现主机单点问题了 回复 举报 0 Jack_Q 2015/04/21 13:20 有没有使用cobar或mycat 评论 (1) 引用此答案 举报 yeyingsheng 2015/04/21 14:33 没有使用 回复 举报 0 Brin想写程序 2015/04/21 14:28 复杂查询情况下,只去前20页的内容。。也就是默认取200条,然后200*10做好排序,然后去前200条,分20页给用户显示出来。 对于基于日期,序号的有序数组的分页,可以记录当前分页最后一个的被分页的值,作为stub,然后往后组装。 评论 (4) 引用此答案 举报 Brin想写程序 2015/04/21 16:58 回复 @1157624952 : 直接查各个数据库啊。。跟路由算法没关系。。 回复 举报 yeyingsheng 2015/04/21 15:52 @Brin想写程序 额,我是根据路由算法插入相应的数据库的,没法每个查啊 回复 举报 Brin想写程序 2015/04/21 15:24 回复 @1157624952 : limit 200,每个表都执行一遍。。 回复 举报 yeyingsheng 2015/04/21 14:46 但是我如何去取前二十页呢 回复 举报 0 hylent 2015/04/21 14:42 单纯就索引来说的话,可以试试一些专门做全文索引的服务软件。 不过这个只是我的想法,功能上应该可以,没实际中这样跑过,不知道稳定性怎么样 评论 (1) 引用此答案 举报 yeyingsheng 2015/04/21 14:47 这个没有试过 回复 举报 0 郭幻程 2015/04/21 16:24 向每个库发送同样的数据,汇总,排序,分页 为毛不用mycat 评论 (0) 引用此答案 举报 0 匿名t3a 2015/04/21 21:18 你需要一个中间件 试试 Amoeba for MySQL 看看行不行 评论 (0) 引用此答案 举报
1、直接使用跨库的多表联合查询。不建议。
2、向6台数据库server均发送一个查询请求,然后对所有查询结果进行汇总,再处理分页逻辑。
3、建立一个总数据库,只负责维护主键和必要的索引,以供分页查询。
4、使用redis维护一个主键序列,分页操作就是截取该序列的一部分,其结果就是主键id集合。拿到id后便可以映射到多台mysql服务器上查询数据了。但毕竟数据被分布式存储了,取到完整结果集必须要多次、多台的数据库访问,这个肯定是避免不了。
注:“多台”数据库访问的问题无解,但同台“多次”数据库访问的问题可以通过程序优化。
复杂查询情况下,只去前20页的内容。。也就是默认取200条,然后200*10做好排序,然后去前200条,分20页给用户显示出来。
对于基于日期,序号的有序数组的分页,可以记录当前分页最后一个的被分页的值,作为stub,然后往后组装。
单纯就索引来说的话,可以试试一些专门做全文索引的服务软件。
不过这个只是我的想法,功能上应该可以,没实际中这样跑过,不知道稳定性怎么样
向每个库发送同样的数据,汇总,排序,分页
为毛不用mycat
你需要一个中间件
试试 Amoeba for MySQL 看看行不行