MySQL-有什么方法有效解决数据分布式存储后的排序问题

MySQL-有什么方法有效解决数据分布式存储后的排序问题

夜无邪 发布于 2017-10-04 字数 593 浏览 1086 回复 6

在前段时间做的一个项目中,开发过程中遇到了一个数据分库后的数据按条件排序的问题。

做分库存储主要是考虑到后期用户增多后,减少对单个数据库操作访问会压力。

但做分库处理后,再想把多台数据库上的数据做排序处理时就费劲了。听说传统的做法是做一个大的索引表,把要做排序的条件做冗余处理。但后期数据量积增到一个数量级时,大数据量的分页也是个问题。

最后我们选择的是时下比较时髦Redis,来处理排序排行的问题。主要还是看中它的性能。虽然可以满足我们需求,但如果服务器宕机了,数据的快速恢复也是我们担心的。
所以想问问大家,在解决数据分布存储的排序排行方面,有什么好的经验分享。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

瑾兮 2017-11-11 6 楼

我们以前的做法,是用Luence对分库之后的数据进行整合,在luence中进行排序,不过对于服务器宕机的问题,只能通过双机互备的方式解决了。

晚风撩人 2017-11-05 5 楼

1.关系DB支持分布式,直接使用SQL语句排序。
2.非关系DB,如memcache也支持分布式存取,调用接口。
3.使用Hadoop分布式集群,其有自己的一套SQL查询语句。
4.先对各服务器DB,各数据库先进行排序,保存到内存中。然后使用“多路归并”排序,效率与“快速排序”差不多。

浮生未歇 2017-11-01 4 楼

你的方案跟应用耦合后把要排序的丢进redis,已经能解决问题了,不放心redis的话
做redis cluster即可。

其实数据库不是特别巨大的话,读写分离用mysql cluster 也能解决问题,逻辑还简单
一些。

不然的话就要考虑MongoDB类的NOSQL解决方案

浮生未歇 2017-10-26 3 楼

这确实是个问题,你可以:
1、做个大的索引表(如你所说)
2、分别排序,再汇总排序,缺点:慢,复杂
3、根据业务,在分布存储时已经排好序,取出来合并即可,缺点:跟业务耦合

各有利弊吧

归属感 2017-10-20 2 楼

小弟不才,瞎说下。
是否可以做到各个分库的id唯一性?
这样取各分库的数据自然按id排序了。

新答案:
1.通过条件可以类似:

SELECT GROUP_CONCAT(id) FROM table WHERE $where

这里取出来的id都已经排序好了。
2.把所有记录通过memcache存储 类似 (key:id)这样速度非常快。

灵芸 2017-10-18 1 楼

redis不是有持久化么,那么快速恢复就不是问题了吧;
另外,既然数据量大到要分布式了,统一排序,而且用的redis,需要很大的内存,这样redis服务器应该是在独立的机器上吧,所以宕机指的是这台redis机器,稳妥的做法是再加一台独立机器做slave。