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

原创
数据库 MySQL 数据库运维
大家是否知道微博的开发模式吗?数据库是如何部署的?又是如何优化的?这些问题一出,必要找达人为我们解惑。51CTO有幸请到新浪首席DBA杨海潮先生来为我们解一解上述的疑惑。

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

专访人物介绍

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

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

[[22260]] 

 
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. 对一些敏感的信息会记录上操作日志,定期以报表的形式发给相关人员。

【编辑推荐】

  1. 这些事项你注意了吗? 浅谈数据库优化注意事项
  2. MySQL数据库的优化(上)单机MySQL数据库的优化
  3. MySQL数据库的优化(下)MySQL数据库的高可用架构方案
  4. 数据库sharding Lookup技术探讨
责任编辑:艾婧 来源: 51CTO
相关推荐

2011-04-28 11:17:17

微博数据库设计

2019-07-23 09:40:42

MySQL数据库索引数据结构

2011-06-30 16:57:03

数据压缩

2015-04-16 10:35:08

微博微博如何实现

2011-03-08 08:49:55

MySQL优化单机

2015-06-02 16:16:17

mysql优化mysql读写分离mysql主从复制

2017-06-16 21:36:14

2011-03-03 17:56:52

MySQL数据库优化

2011-05-19 10:29:40

数据库查询

2013-09-17 10:32:08

Android性能优化数据库

2014-07-18 09:33:53

数据库数据库优化

2011-03-31 09:19:54

数据库优化

2010-08-26 14:39:54

Infobright数

2013-01-04 10:00:12

MySQL数据库数据库查询优化

2013-05-21 10:06:11

数据库查询优化

2009-05-15 10:11:55

数据库查询查询性能分页浏览

2010-05-10 15:50:39

Oracle数据库性能

2010-07-29 09:44:35

DB2数据库优化

2020-07-20 08:00:29

数据库

2018-08-06 10:50:02

新浪微博短视频
点赞
收藏

51CTO技术栈公众号