随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了。
读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。
能实现数据实时同步的技术很多,基于OS层(例如VERITAS VVR),基于存储复制(中高端存储大多都支持),基于应用分发或者基于数据库层的技术。因为数据同步可能并不是单一的DB整库同步,会涉及到业务数据选择以及多源整合等问题,因此OS复制和存储复制多数情况并不适合做读写分离的技术首选。
基于日志的Oracle复制技术,Oracle自身组件可以实现,同时也有成熟的商业软件。采用Oracle自身组件功能,无外乎Logical Standby、Stream以及11g的Physical Standby(Active Data Guard),对比来说,Stream最灵活,但最不稳定,11g Physical Standby支持恢复与只读并行,但由于并不是日志的逻辑应用机制,在读写分离的场景中最为局限。如果技术团队对相关技术掌握足够充分,而选型方案的处理能力又能支撑数据同步的要求,采用Oracle自身的组件完全可行。
选择商业化的产品,更多出于稳定性、处理能力等考虑。市面上成熟的Oracle复制软件也无外乎几种,无论是老牌的Shareplex,还是本土DSG公 司的RealSync和九桥公司的DDS,或是Oracle新贵Goldengate,都是可供选择的目标。随着GoldenGate被Oracle收购 和推广,个人认为GoldenGate在容灾、数据分发和同步方面将大行其道。mysql也有自己的同步数据技术。mysql主要通过二进制日志来复制数据。通过日志在从数据库重复主数据库的操作达到复制数据目的。
主数据库同步到从数据库后,从数据库一般由多台数据库组成这样才能达到减轻压力的目的。读的操作怎么样分配到从数据库上?应该根据服务器的压力把读的操作分配到服务器,而不是简单的随机分配。mysql提供了MySQL-Proxy实现读写分离操作。不过MySQL-Proxy好像很久不更新了,可以考虑换Amoeba,专注分布式数据库proxy开发。坐落于Client、DB Servers之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。oracle可以通过F5有效分配读从数据库的压力。
相关推荐
• 读写分离,解决“数据库读性能瓶颈”问题 • 水平切分,解决“数据库...• 对于互联网大数据量,高并发量,高可用要求高,一致性要求高,前端面向用户的业务场景,微服务缓存架构,可能比数据库读写分离架构更合适
数据库读写分离解决方案--DG实施方案.docx
springboot数据库读写分离,代码实现一主两从的读写分离,业务代码不影响,正常写就可以。可以根据自己需要修改
本代码为C#语言实现Redis数据库读写分离的实例。
SQLServer 2016,ASP.NET Core 2.1,Entity Framework Core 2.1.1。 读写分离案例
MYSQL数据库读写分离实验的mysql-proxy包
java mysql 读写分离demo mybatis作为数据库访问层,实现数据库读写分离的解决方案
springaop多数据库读写分离
最近项目要支持读写分离, 网上找了很多,但都是不太完整,我自己整理了下供大家参考。 我的项目使用的框架: springMvc+spring+hibernate+springJPA+maven, 数据库连接池用阿里的druid。
使用JAVA aop技术,实现mysql 数据库读写分离(密码:111111)
springboot+mybatis+druid+redis实现数据库读写分离和缓存
JAVA数据库读写分离项目源码(MYSQL),非常详细的注解,ssm框架开发,能使你快速掌握读写分离技术!!!
amoeba和mycat方式实现 数据库读写分离的详细步骤
使用Oracle Active Data Guard实现PMS2.0数据库读写分离初探.pdf
aop方式实现数据库读写分离
spring+springmvc+mybatis的整合以及数据库读写分离的测试
在应用层通过spring特性解决数据库读写分离代码
数据库读写分离mycat-conf内容
数据库读写分离的demo
技术分享:在应用层透过spring解决数据库读写分离