Saturday, March 05, 2011

数据库的读写分离(ZT)

这些题目比较细节哦,有些还真不知道,我做了很多年项目,觉得出这些题目让别人好发挥些,能考察出哪些人经验丰富:
1. 一个算法题(递归,字符串处理或急转弯)
2. 如果让你设计一个登陆系统(安全,验证,sso,用户表的设计)
3. 你所熟悉的一个设计模式以及在.net源码里哪里用到了(foreach-iterator, DBFactory...., Provider-strategy)
4. 列举下你熟悉的几种事务使用(DB,SqlTransaction,TransactionScope,DTC,事务提升,wcf分布式事务)
5. 你熟悉的多线程的实现方式(异步委托,thread,threadpool,backgroundworker,4.0里的task,AsyncEnumerator)
6. .net的编译过程(clr,pe,il,jit)
7. 你熟悉的DB优化技巧(读写分离,负载均衡,横向竖向切分)
8. 聊聊你最近使用的一个新技术,用的怎么个爽法
9. 如果给你几个人带,你怎么管理他们的工作(document,coding rule,tfs, scrum,bug track,Daily Build...)
10. 用英语随便写下来你对WebOS的看法.

 

 

 
文章分类:数据库

      随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了。ebay就做得非常好。ebay用的是oracle,听说是用Quest Share Plex 来实现主从复制数据。

     读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。Quest SharePlex就是比较牛的同步数据工具,听说比oracle本身的流复制还好,mysql也有自己的同步数据技术。mysql只要是通过二进制日志来复制数据。通过日志在从数据库重复主数据库的操作达到复制数据目的。这个复制比较好的就是通过异步方法,把数据同步到从数据库。

      主数据库同步到从数据库后,从数据库一般由多台数据库组成这样才能达到减轻压力的目的。读的操作怎么样分配到从数据库上?应该根据服务器的压力把读的操作分配到服务器,而不是简单的随机分配。mysql提供了MySQL-Proxy实现读写分离操作。不过MySQL-Proxy好像很久不更新了。oracle可以通过F5有效分配读从数据库的压力。

ebay的读写分离(网上找到就拿来用了)


mysql的读写分离
       上面说的数据库同步复制,都是在从同一种数据库中,如果我要把oracle的数据同步到mysql中,其实要实现这种方案的理由很简单,mysql免费,oracle太贵。好像Quest SharePlex也实现不了改功能吧。好像现在市面还没有这个工具吧。那样应该怎么实现数据同步?其实我们可以考虑自己开发一套同步数据组件,通过消息,实现异步复制数据。其实这个实现起来要考虑很多方面问题,高并发的问题,失败记录等。其实这种方法也可以同步数据到memcache中。听说oracle的Stream也能实现,不过没有试过。

0 Comments:

Post a Comment

<< Home