【综合报道】围巾,编织围巾——这是什么?冬天来了,针织围巾暖和吗?错了,这是网络流行语。这就是我们的生活方式,我们对生活的态度。“找我?来我微博!”我身边的朋友最近都在织毛衣,你不织吗?你是“奥特曼”。那么你知道微博的发展模式吗?数据库是如何部署的?它是如何优化的?一旦出现这些问题,我们就必须找专家来为我们解决。有幸邀请到新浪***DBA杨海潮先生为我们解答以上疑惑。面试人介绍杨海潮,新浪***DBA,在大规模、高并发、海量访问方面有丰富的管理经验。热衷于数据库设计、性能优化、分布式部署方案和高可用研究。此前从事高访问量网站的部署和优化工作,加入新浪后主要负责整个公司的数据库管理工作。:新浪现在的开发模式还是LAMP吗?杨海潮:目前大部分业务还是采用LAMP方式,也有部分采用LNMP方式。:新浪数据库是怎么部署的?杨海潮:目前NoSQL和MySQL是结合使用的,要根据应用的特点选择合适的存储方式。:Shardingstrategy是一个很好的数据库扩容方案,但是这个方案并不完美。新浪如何选择分片的形式来适应不同的应用场景?杨海潮:如图:分片只用于数据量大、性能瓶颈的图书馆,大部分图书馆不做分片处理。对于数据量较大的图书馆,从一开始就考虑分片策略,比如分别设计索引数据和内容数据,根据业务逻辑为每一类数据库选择合适的分区键,拆分成一定的表的数量。然后,随着压力的增加,进行垂直分裂。当垂直拆分库遇到性能瓶颈时,首先考虑使用硬件来解决。水平拆分只有在硬件无法解决的情况下才考虑。选择分片解决方案时仔细考虑业务逻辑。对于读密集型应用,基本通过添加slave来解决,对于写密集型应用,进行纵横拆分。:跨越的分片越多,开销越大。这个数字是怎么控制的?杨海潮:目前我在设计前避免跨表操作,选择合适的partitioningkey,也就是合适的拆分维度,避免对后期业务造成影响。根据业务逻辑的重要程度,如果业务逻辑是查询某个用户的信息,会按照用户进行拆分,保证某个用户的数据落在一个表中。按照时间维度拆分,然后分析数据的冷热,将80%以上的数据放在一个表中,避免过多的跨表查询。当这种拆分维度不能满足业务需求时,我们会用空间换时间的思想,将同一份数据拆分成多个维度,让业务逻辑的每条查询语句都具有高效率。:许多用户将分片与分区混淆。你能告诉我们你是如何区分分片和分区之间的相同点和不同点的吗?杨海潮:Sharding通常指的是垂直拆分和水平拆分,这是一个整体的概念。MySQL分区是一种实现分片的技术。:新浪现在采用SQL+NoSQL数据库部署,那么如何分别优化两个数据库呢?杨海潮:目前NoSQL和MySQL是结合使用的,要根据应用的特点选择合适的存储方式。例如:关系型数据,如:索引存储在MySQL中,非关系型数据库,如:一些K/V要求,对并发要求比较高,存储在NoSQL产品中,或者通过将关系型数据复制到NoSQL(redis)不同的应用需求。MySQL的优化有很多,从硬件(使用SSD,Fusion-IO,Cachecade等),文件系统(试试XFS),调整IO调度,优化参数,调整索引,减少应用程序对数据库的访问和交换。NoSQL(redis)通过修改源码满足自身业务需求:改进复制机制,加入position概念,维护更简单,故障转移能力也大大增强。改进rdb中Hashset的存储方式,提高复杂数据类型的加载速度。:如何保证数据库的安全?杨海潮:主要考虑几个方面:只能通过内网访问。限制源IP。使用一定复杂度的密码策略。从程序的角度检查输入,比如使用绑定变量来防止SQL注入。一些敏感信息会记录在操作日志中,并定期以报表的形式发送给相关人员。【小编推荐】这些事你注意了吗?数据库优化注意事项探讨MySQL数据库优化(上)单机MySQL数据库优化MySQL数据库优化(下)MySQL数据库高可用架构方案数据库分片Lookup技术探讨
