【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:如何保证数据库的安全性的呢?
杨海潮:主要通过几个方面进行考虑:
- 只通过内网进行访问。
- 对来源IP做限制。
- 使用一定复杂度的密码策略。
- 从程序的角度对于输入进行检查,例如使用绑定变量防止SQL注入。
- 对一些敏感的信息会记录上操作日志,定期以报表的形式发给相关人员。
分享到:
相关推荐
【Java微博项目源码与MySQL数据库】是一个基于Java技术栈,使用JSP、Servlet和MySQL构建的微型社交媒体平台。这个项目对于学习Java Web开发、理解Web应用的基本架构以及数据库设计有很好的参考价值。以下是该项目...
### 微博数据库设计 #### 一、系统概述与背景 微博作为一种新兴的社交媒体形式,以其独特的信息传播方式迅速在全球范围内获得了广泛的应用。其核心功能包括:用户发布简短的信息(通常不超过140个字符)、关注其他...
微博数据库设计是一个复杂而精细的过程,它涉及到多个表的构建以支持微博平台的功能。以下是根据提供的文件信息...通过合理设计和优化,这样的数据库可以高效地处理大量并发的读写操作,确保微博服务的稳定性和性能。
校园微博系统是大学生交流互动的重要平台,它的核心组成部分就是数据库,而在这个场景下,MySQL成为了数据存储和管理的首选数据库系统。MySQL是一种广泛使用的开源关系型数据库管理系统,以其高效、稳定和易用性著称...
在本文中,我们将深入探讨基于MVC架构的简单微博项目,以及如何利用Entity Framework(EF)作为数据库访问层。...通过实践和学习,你可以进一步优化这个项目,例如引入缓存、优化查询性能、实现更复杂的业务逻辑等。
2. **MySQL数据库管理**:项目中包含的数据库部分,让你了解如何使用MySQL存储和管理微博数据。这涉及到创建数据库、定义表结构、执行SQL查询以及处理数据插入、更新和删除操作。 3. **用户认证与授权**:微博平台...
微博系统设计方案 数据库 微博,又称为微博客,是一种基于用户关系的信息分享、传播和获取平台。用户通过WEB、WAP或各种客户端发布140字以内的文字更新,实现即时分享。在企业微博的场景中,其主要作用是迅速发布...
整个微博数据库的设计是一个迭代的过程,从需求分析到应用开发,每个环节都至关重要,需要反复验证和优化,以确保微博平台的稳定运行和用户体验。在设计过程中,还需要考虑到系统的扩展性和性能优化,以便应对未来...
【微博数据库设计思想的三个变迁阶段...微博数据库的历程为其他互联网企业提供了宝贵的经验,如何在面对业务快速增长时做出正确的架构决策,以及如何通过技术手段来优化数据库性能,这些都是值得深入学习和探讨的话题。
微博管理系统是一种基于网络的社交平台,它允许用户发布、阅读和分享短消息,与朋友、关注者进行互动...通过研究这个项目,不仅可以提升编程技能,还能学习到项目管理、数据库设计和用户体验优化等相关领域的重要概念。
### Redis在微博场景下的优化实践 #### 一、引言 随着互联网的快速发展,微博作为中国领先的社交媒体平台之一,面临着海量用户数据处理的挑战。为了应对这些挑战,微博团队不断探索并采用各种高效的数据库解决方案...
4. **SQL Server 2008**:SQL Server是微软的商业级数据库系统,支持T-SQL语言,具有高可用性、安全性及性能优化等功能。在微博应用中,它可能用于存储用户信息、微博内容、关注关系等数据。 5. **ADO.NET**:这是...
【标题】"手把手教你开发微博" 在信息技术领域,微博作为一种社交媒体平台,其开发涉及到许多关键技术与流程。这篇教程——《手把手教你用Android开发新浪微博客户端》将带你深入理解如何构建一个功能齐全的微博...
4. **数据库设计**:如何设计适合微博系统的数据结构,包括用户表、微博表、关注关系表等,以及如何优化查询性能。 5. **安全机制**:如用户认证和授权,防止SQL注入和跨站脚本攻击。 6. **Session和Cookie**:在Web...
【基于jsp和mysql的个人微博】是一个典型的Web应用程序开发项目,它使用JavaServer Pages(JSP)技术作为前端展示层,结合MySQL数据库进行数据存储,实现了个人微博的创建、管理和交流功能。在这个系统中,用户可以...
《Redis在微博场景下的优化实践》 Redis,全名Remote Dictionary Server,是一种开源的、高性能的键值存储系统,常用于缓存、消息队列、计数器等多种场景。在微博这种海量用户、高并发的社交平台中,Redis 的作用尤...
"微博视频分析"可能涉及到了对微博视频播放机制的深入理解和优化。"调用微博视频"则表示源码包含了调用微博视频接口的方法。 【压缩包子文件的文件名称列表】中的文件如下: 1. ku.js 和 ckplayer.js:这两个文件很...
优化文章浏览量的统计; 优化图片上传的后缀检查逻辑; 优化管理页面中各种数据在移动设备上面的体验; 调整安装完成后默认生成文章的文案; 调整部分圆角的问题; 默认主题部分细节优化。 修复: 修改editormd流程...
在构建一个微博系统的过程中,涉及多个技术领域和关键知识点,包括前端开发、后端开发、数据库设计、用户界面与用户体验、社交网络分析、数据存储与处理等。 一、前端开发 前端是用户与微博系统交互的界面,主要...
这个源代码提供了腾讯微博客户端的实现细节,让开发者有机会深入理解大型社交应用的架构设计、功能实现以及性能优化。通过分析和研究这份源代码,开发者能够提升在Android平台上的编程技能,特别是在构建类似社交...