近几年WEB2.0的火爆,带动了Mysql的使用热潮,不管是小企业还是大网站,都有意无意的开始使用Mysql来搭建新数据平台,传统网站随着业访问 量,数据量的急剧膨胀,集中式的数据库也越来越成为瓶颈,很难做进一步的扩展,做读写分离,而这些都是Mysql的优势所在,容易扩展使Mysql渐渐成 为了企业新的选择。
说到可扩展性,和APP一样,当数据库压力上来时,只要通过不断增加数据库服务器来解决,尽量不去调整应用程序,服务器硬件坏掉了,直接拿台新的服务器顶 上就可以了,这是我设计的初衷。下面我会通过Mysql来浅谈SNS数据库的设计思路(注:只是我的理解),SNS关注的是个体(userid),比如我 的好友,我的日志,我的相册,我的帮派等等,强调人的个体行为,现在很火的SNS网站如51.com,Facebook都是通过Mysql来搭建的,接下 来我将尝试探讨这种业务类型的设计轨迹,如何做到可扩展性。
先从如何分库开始,考虑按用户(userid)属性来分库,用户有好友,有博客,有相册等,只要是用户的行为,都跟着用户走,单库中包含了用户的所有行 为,这种分法定位起来很容易,找到某个库后就找到了用户的所有行为,很方便。也可以按业务类型来分库,每个业务独立成库,分成好友库,博客库,相册库等, 不同业务模块各自独立,这种分法思路很清晰,分库的规则可以不同业务灵活多变,开发起来也相对比较简单。
接下来讨论分表的设计,Mysql上设计数据库我力求做到小快灵的原则,单库数据量要比较小,数据库要做到快速响应,表设计要非常灵活,不同的业务可以选 择相应的分表规则,小快灵的思想要求表设计很容易做水平扩展,数据量过大时很容易进行表拆分。从设计思路上来说,可以使用配置表(元数据)来存储分表的配 置信息,假设今年的注册用户规划在2000万左右,考虑分成4张表,table1存储1-500万的数据,500万-1000万存储在 table2,。。。每个表保留500万的数据,分表规则和查询路由通过配置表来维护,某天我们发现table1的数据量过于活跃,数据库压力很大,同样 的开始考虑拆表,修改分表配置信息,同时把table1拆成两张表存到两台服务器来分担压力,当然也不一定说是访问压力才导致分表,当表的记录数大到一定 的数量,同样也需要拆表。采用配置信息来维护分表的规则非常灵活,一切以配置信息为准,不过太灵活也意味这风险点很高,配置信息的重要性不言而喻。接下来 我提到的是采用mod取模来分表,初期考虑采用mod(4)分成4张表,根据取模的结果0,1,2,3分成4张表,随着业务发展的带来数据量的膨胀,访问 压力加大,需要对表作进一步拆分,因为取模带来的特殊性以及拆表尽量不做数据迁移的原则,我建议通过倍数来扩展,采用mod(8)来扩展表,接下来考虑使 用mod(16)来拆分,不断的通过倍数来做扩展。相对于配置信息分表,取模设计相对来说并不是那么的灵活,不过灵活也不一定全是好事,万一配置信息被人 误调整过,那就麻烦了。
经常看到很多表中没有主键,这对于严谨的系统设计来说,通常是不可接受的,大部分表会使用自增id来做主键,刚开始可能是单表,接下来可能拆成多张表,用 auto incremental很难保证在多个表中保持唯一性,那如何保证分表(user_table1,user_table2,…)之间id的唯一性呢?考虑 oracle使用序列来保证id的唯一性,序列是凌驾于表之上的,同样考虑在Mysql数据库中增加一张序列表,模拟oracle的序列实现方式,需要自 增的表都可以在这里面添加一条记录,对于分表来说,每个子表调用的是同一条记录,应用程序直接调用这条记录来做自增,来保证id的唯一性。这仅仅是一种实 现方式,如果只要求id的唯一性,可以使用函数来生成,也可以按照某种规则如时间精确到毫秒来保证id的唯一,方法太多了。
围绕可扩展性,简单提了一些分库,分表,id生成的设计思路,这仅仅是整个网站中的冰山一角,还有太多的细节上需要我们去思考,如基础数据表,仅仅几十条 数据不做分表分库,当其他表拆成多个库时这些数据保存在哪儿,专门建个基础库还是每个库都保留一份呢,分表,到底分多少个合适,是用Myisam存储引擎 还是用Innodb呢?这些都需要我们细细的思索,细节决定成败,关注每个细节,每个表的实现方式,尽量多参与到业务中去,多了解产品经理,开发的想法, 多去了解Mysql的实现方式,Mysql自身的优势,Mysql可扩展性的优势,多了解业界成熟的设计思路,结合自身的业务模式,设计出更合理的系统。
分享到:
相关推荐
综上所述,使用MySQL搭建可扩展的SNS网站,需要综合考虑数据库设计、数据分片、查询优化、用户关系管理等多个方面。通过合理规划和优化,可以有效应对SNS网站带来的大规模数据处理挑战,实现高效、稳定的服务运行。...
Elgg是一款强大的开源SNS框架,以其灵活性和可扩展性受到开发者的青睐。本文将深入探讨Elgg的架构特点、安装流程以及如何利用它快速搭建属于自己的SNS网站。 ### Elgg简介 Elgg是一款基于PHP的开源社交网络平台,...
Elgg的设计理念是灵活性和可扩展性,因此开发者可以根据需求添加或修改功能。 2. **社交网络基础功能** SNS源码通常包含以下核心功能: - **用户注册与登录**:用户可以创建账户,设置个人资料,进行身份验证。 ...
系统支持多语言,具有良好的可扩展性和定制性,可根据需求进行二次开发。 2. **安装与配置** 解压“iwebsns.zip”后,您将得到iWebSNS的源代码文件。通常,您需要将这些文件上传到服务器的根目录,然后通过Web...
这个开源项目旨在提供一个可定制、可扩展的社区建设解决方案,适用于搭建各类社交网络服务,如论坛、博客、个人空间等多元化交流环境。其核心功能包括用户注册、登录、个人资料管理、好友系统、动态分享、评论互动等...
OpenSNS系统的一大优点是其高度的可扩展性。它支持插件机制,开发者可以通过编写插件来扩展其功能,例如实现电子商务、直播、问答等特色功能。同时,OpenSNS还提供了API接口,方便与其他系统集成,实现数据的交互。 ...
总之,iwebSNS v0.9.9 繁体中文版是一个为构建社交网络而设计的开源软件,它集成了多种社交功能,并采用PHP和MySQL作为技术栈,具有高度的可扩展性和定制性。无论是对个人开发者还是企业团队,它都提供了一个优秀的...
这个压缩包文件“iWebSNS社交网络平台.7z”包含了一整套用于搭建在线社交网络的源代码,使得开发者或网站管理员能够快速地创建具有互动性、个性化和社交功能的网站。 在深入探讨iWebSNS之前,我们需要了解一些基本...
- **MySQL存储**:Elgg使用MySQL数据库存储数据,确保了良好的性能和稳定性。 - **RESTful API**:提供RESTful API接口,方便与其他系统集成,实现数据交换和交互。 - **OOP设计**:采用面向对象编程,提高代码的...
THINK SNS源码是一款基于PHP开发的社会化网络软件(Social ...总的来说,THINK SNS源码提供了一套完整的社交网络平台解决方案,让开发者能够快速构建并维护自己的社区网站,同时提供了丰富的扩展和定制可能性。
在PHP的环境下,iWebSNS提供了丰富的功能和高度可定制性,使开发者能够轻松搭建和管理社交网络。 **iWebSNS的核心特性:** 1. **用户系统**:iWebSNS内置了完整的用户注册、登录、个人资料管理等功能,支持多语言...
这款软件允许开发者构建自定义的社交网络应用,提供丰富的功能和高度的可扩展性,使得用户可以创建个性化的社区网站。 **1. PHP基础** PHP(Hypertext Preprocessor)是一种广泛使用的服务器端脚本语言,尤其在Web...
Elgg是一个开源的SNS系统,它提供了丰富的功能和高度的可定制性,为开发者提供了构建社交网络平台的强大工具。本文将深入探讨Elgg系统的核心概念和PHP开发技巧。 1. **Elgg框架介绍** Elgg是一款基于PHP的开源社交...
- **可扩展性**:通过安装插件,可以添加新的功能,如论坛、问答、电子商务等。 - **多语言支持**:Elgg内置多语言包,便于构建全球化社交网络。 3. **v1.11.2版本更新** - **安全增强**:修复了多个潜在的安全...
这种高度模块化的设计使得Elgg具有极高的可扩展性和定制性。 **5. 主题定制** 除了插件,Elgg还支持主题定制,允许开发者改变网站的外观和布局,以适应不同品牌或设计风格。这对于构建企业内部的社交平台或提供...
rs-blog是一个稳定、安全、可扩展的社区系统,可以帮您搭建与众不同的交流社区。 如果您要需要搭建一个论坛,那么您可以用rs-blog 如果您需要一个群组,那么您可以用rs-blog 如果您需要因为某个话题来汇聚人群,那
它采用PHP语言开发,提供了丰富的功能和灵活的定制能力,让开发者能够快速搭建起自己的社区网站。Oxwall的设计理念是让用户能够在不编码的情况下也能实现基本的自定义,同时对于有编程基础的用户,它还提供了深入的...
* LAMP(Linux、Apache、MySQL 和 PHP)是一种常用的开源软件栈,用于搭建动态网站和服务器。 * LAMP 技术栈的优点包括免费、开源、灵活和高效等。 知识点七:基于 Web 的作业管理系统 * 基于 Web 的作业管理系统...
mixi.jp:使用开源软件搭建的可扩展SNS网站 51 总概关键点: 51 1,Mysql 切分,采用Innodb运行 52 2,动态Cache 服务器 -- 52 美国Facebok.com,中国Yeejee.com,日本mixi.jp均采用开源分布式缓存服务器Memcache ...