mysql中间件有哪些?
mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源中间件产品,Atlas,cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。AtlasAtlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。Altas架构:Atlas是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。以下是一个可以参考的整体架构,LVS前端做负载均衡,两个Altas做HA,防止单点故障。
mysql数据库,分表后,怎么进行分页查询?Mysql分库分表方案?
Mysql分库分表方案
1.为什么要分表:
当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。
mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。
2. mysql proxy:amoeba
做mysql集群,利用amoeba。
从上层的java程序来讲,不需要知道主服务器和从服务器的来源,即主从数据库服务器对于上层来讲是透明的。可以通过amoeba来配置。
3.大数据量并且访问频繁的表,将其分为若干个表
比如对于某网站平台的数据库表-公司表,数据量很大,这种能预估出来的大数据量表,我们就事先分出个N个表,这个N是多少,根据实际情况而定。
某网站现在的数据量至多是5000万条,可以设计每张表容纳的数据量是500万条,也就是拆分成10张表,
那么如何判断某张表的数据是否容量已满呢?可以在程序段对于要新增数据的表,在插入前先做统计表记录数量的操作,当<500万条数据,就直接插入,当已经到达阀值,可以在程序段新创建数据库表(或者已经事先创建好),再执行插入操作。
4. 利用merge存储引擎来实现分表
如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了。用merge存储引擎来实现分表, 这种方法比较适合.
es查询和oracle哪个快?
es是倒排索引,底层跟solr一样使用lucene,适合于nosql场景,例如分本分词搜索这种
oracle是二叉树索引,适用于sql场景
抛开数据量和业务场景去单独讨论哪个快,是耍流氓的行为
例如早些年,mysql开源还没有这么成熟的时候 es也还是2.2版本的时候,分库分表中间件也只是大厂的专利,几千万数据量的复杂查询都是首选oracle和db2
现在无论是mysql/分库分表中间件/es性能自己周边大数据产品,一年好几个台阶,互联网行业大部分都开始上云,最近几年的云原生,k8s 弹性扩缩容,spring系列/spring cloud/spring boot全家桶
个人觉得,更多的还是应该以云原生的思考方式去考虑架构以及业务场景,文本搜索如果没有太大定制化,首推es oracle就不要用了,云数据库,弹性扩缩容,异地多活,主从冷备,各种都有,况且oracle老板还经常发表歧视中国言论 不跟他玩