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) 引用此答案 举报

原文地址:https://www.cnblogs.com/zhongchang/p/10272380.html

时间: 2024-07-28 17:26:37

mysql分库 分页查询的相关文章

oracle 的分页查询与mysql 的分页查询

oracle 的分页查询: select * from (select o.*,rownum rn  from Persons o) where rn >40 and rn <=60 : mySQL 的分页查询: select o.*  from Persons o limit 40,20 ;              limit (偏移条数,数据条数) SQLServer :top  select top 4 * from order by hiredate      自注: 显示第一个到第

MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下: 比如: 查询第1条到第10条的数据的s

用MySQL实现分页查询

MySQL中实现分页查询语句: //定义分页需要的变量 int pageNow=2;//当前页 int pageSize=3;//指定每页显示3条记录 int pageCount=1;//该值是计算出来的 int rowCount=1;//表示共多少条记录,从数据库得到 ... ps=ct.prepareStatement("select * from users LIMIT "+(pageNow-1)*pageSize+" ,3"); ... 注意:limit字句

MySql实现分页查询的SQL,mysql实现分页查询的sql语句

一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下: 比如: 查询第1条到第10条的数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1

MySQL数据库分页查询,Oracle数据库分页查询,SqlServer数据库分页

DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `pass` varchar(255) NOT NULL, `sex` varchar(255) NOT NULL, `age` int(11) NOT NULL, `address` varchar(255) DEFAULT NULL, PRIMA

MySQL 的分页查询 SQL 语句

MySQL一般使用 LIMIT 实现分页.基本语句为: SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... 在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引. 举例来说,如果实际SQL类似下面语句,那么在 category_id, id两列上建立复合索引比较好: SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10 ; 随

mysql 之分页查询

分页查询(limit 起始行,查询几行) 如果 我只想插入 第一第二行的数据 该怎么做那 select from student limit 0,2; 分页查询当前页数的数据 select * from student(当前页-1)*每页多少条记录,每页显示多少条记录      重点 (假如每页显示2条) 需求: 查询第1,2条记录(第1页的数据) SELECT * FROM student LIMIT 0,2; -- 查询第3,4条记录(第2页的数据) SELECT * FROM studen

sqlServer数据库与mysql数据库分页查询语句

sqlServer: --8代表每页显示行数pagesize,4代表第几页,currentpage select top 8 * from(SELECT [ProjectID],[ProjectName]FROM [ReportingSystemDB].[dbo].[Projects]where [ProjectID] not in (select top (4*8) [ProjectID] from [Projects]) ) as a =================== mysql: s

mysql sql分页查询语句

SELECT * FROM 'table' ORDER BY 'condition' DESC LIMIT '开始索引','记录数' 原文地址:https://www.cnblogs.com/jinhai-wow/p/8375873.html