微博 请问你是怎么优化数据库的?

【51CTO综合报道】围脖,织围脖——这是什么?冬天到了,织条围脖保暖吗?错,这是网络流行用语。这还是大家的生活方式,生活态度。“找我?来我微博啊!”最近身边的朋友都在织啊织,你不织?你就是“奥特曼”。那么大家是否知道微博的开发 模式吗?数据库是如何部署的?又是如何优化的?这些问题一出,必要找达人为我们解惑。51CTO有幸请到新浪首席DBA杨海潮先生来为我们解一解上述的疑惑。

专访人物介绍

杨海潮,新浪首席DBA,在大规模高并发,海量访问有丰富的管理经验。热衷于数据库设计,性能优化,分布式部署方案和高可用性方面的研究。

之前从事大访问量网站的部署以及优化工作,加入新浪后主要负责整个公司的数据库管理工作。

 


51CTO:新浪现在的开发模式还是 LAMP 吗?

杨海潮:目前大部分业务还是使用LAMP方式,也有部分采用LNMP方式。

51CTO:新浪数据库是如何 部署 的?

杨海潮:目前NoSQL和MySQL是结合使用的,根据应用的特点选择合适存储方式。
 
51CTO: Sharding策略 是很好的数据库扩展方案,但是这种方案也不是万能的,新浪是如何选取sharding的形式,来适应不同的应用场景?

杨海潮:如图:

 

sharding只用于数据量大同时有性能瓶颈的库,大部分库不进行sharding处理。

对于数据量比较大的库,在一开始就考虑sharding策略,例如索引数据和内容数据分开设计,每类数据库根据业务逻辑选择恰当的partitioning key,拆分成一定数量的表。

然后随着压力的增加进行垂直拆分,垂直拆分后的库再遇到性能瓶颈时首先考虑用硬件来解决。

当硬件解决不了时才开始考虑水平拆分。

在选择sharding方案时仔细考虑业务逻辑。对于读密集型应用,基本上通过增加slave来解决,对于写密集型应用才进行垂直和水平拆分工作。
 
51CTO:跨越越多的sharding,带来的开销就越大,这个数量是如何控制的?

杨海潮:目前我在设计之前就避免跨表操作,选择适当的paritioning key ,也即合适的拆分维度,避免对后期业务的影响。

根据业务逻辑的重要程度,如果业务逻辑是查询某一个用户的信息,那么会按用户进行拆分,那么保证一个用户的数据是落在一张表里面。按时间维度进行拆分,那么会分析数据的冷热程度,把80%以上的数据放在一个表,避免过多的跨表查询。

在这种拆分维度满足不了业务需求时,我们会利用空间换时间的思想,同一份数据按多种维度进行拆分,让每种业务逻辑的查询语句都有很高的效率。

51CTO:很多用户都会把sharding和partitioning混淆,您能讲讲您是怎么区分sharding与partitioning的异同。

杨海潮:sharding通常是指垂直拆分和水平拆分,是一个总体的概念,mysql的partitioning是实现sharding的一种技术。
 
51CTO:新浪现在采用SQL+NoSQL结合的数据库部署,那么对于两种数据库,分别是如何进行优化的呢?

杨海潮:目前NoSQL和MySQL是结合使用的,根据应用的特点选择合适存储方式。譬如:关系型数据,例如:索引使用MySQL存储,非关系数据 库,例如:一些K/V需求的,对并发要求比较高的放入NoSQL产品存储,或者通过关系数据复制到NoSQL(redis)来显示不同的应用需求。

针对MySQL做的优化 比较多,从硬件(使用SSD,Fusion-IO,Cachecade等),文件系统(尝试XFS),调整IO调度,优化参数,调整索引到减少应用对数据库的访问和交换等。

NoSQL(redis)通过修改源码满足自己的业务需求:完善它的replication机制,加入position的概念,让维护更容易,同时failover能力也大大增强。改善Hashset在rdb里面的存储方式,提升复杂数据类型的加载速度。

 

51CTO:如何保证数据库的安全性的呢?

杨海潮:主要通过几个方面进行考虑:

  1. 只通过内网进行访问。
  2. 对来源IP做限制。
  3. 使用一定复杂度的密码策略。
  4. 从程序的角度对于输入进行检查,例如使用绑定变量防止SQL注入。
  5. 对一些敏感的信息会记录上操作日志,定期以报表的形式发给相关人员。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2012-05-27 11:07 3,045,963 '工程师应该掌握的20个模拟电路.',doc_type,pdf.pdf 2012-05-27 11:03 5,876,128 Android中文API.pdf 2012-05-27 11:03 1,349,809 Business Objects入门教程(1).pdf 2012-05-27 11:03 1,349,809 Business Objects入门教程.pdf 2012-05-27 11:02 22,486,569 C++语言的设计和演化.zip 2012-05-27 11:04 1,611,736 Erlang深度分析.pdf 2012-05-27 11:07 749,950 HTML5 Canvas 2D API 规范 1.0 中文版.pdf 2012-05-27 11:08 180,401 Java基础复习笔记05数据结构-栈.pdf 2012-05-27 11:05 834,613 jqueryui-API(最完整).pdf 2012-05-27 10:58 31,758,963 Linux程序设计(原书第2版).pdf 2012-05-27 11:03 2,023,736 refactoring-improving the design of existing code.pdf 2012-05-27 11:11 0 s.txt 2012-05-27 11:09 1,360,020 Spring3_权威开发指南.pdf 2012-05-27 10:55 1,139,200 《Linux内核修炼之道》精华版.doc 2012-05-27 11:04 3,606,411 交互设计实用指南.pdf 2012-05-27 11:02 28,672 任正非:管理的灰度.doc 2012-05-27 11:09 803,222 弟控是怎样炼成的.txt 2012-05-27 10:54 147,007 微博的搜索引擎优化价值分析.pdf 2012-05-27 11:11 74,675,547 微博的搜索引擎优化价值分析等资料.rar 2012-05-27 10:55 272,896 有源晶振原理.doc 2012-05-27 10:58 11,620,070 深入浅出MFC.pdf 2012-05-27 11:00 2,115,864 程序员应该知道的97件事.pdf 2012-05-27 10:59 112,211 第16章 Unicode.pdf 2012-05-27 11:06 429,034 等一个晴天[1].txt 2012-05-27 10:56 50,176 计算机知识-双核处理器 VS 单核处理器.doc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值