大型WEB数据库分布秘籍。

网站在Web 2.0时代,时常面临迅速增加的访问量(这是好事情),但是我们的应用如何满足用户的访问需求,而且基本上我们看到的情况都是性能瓶颈都是在数据库上,这 个不怪数据库,毕竟要满足很大访问量确实对于任何一款数据库都是很大的压力,不论是商业数据库Oracle、MS SQL Server、DB2之类,还是开源的MySQL、PostgreSQL,都是很大的挑战,解决的方法很简单,就是把数据分散在不同的数据库上(可以是硬 件上 的,也可以是逻辑上的),本文就是主要讨论如何数据库分散存储的的问题。

数据库分布基本介绍

  • 01

    目前主要分布存储的方式都是按照一定的方式进行切分,主要是垂直切分(纵向)和水平切分(横向)两种方式,当然,也有两种结合的方式,达到更到的切分粒度。

  • 02

    1. 垂直切分(纵向)数据是数据库切分按照网站业务、产品进行切分,比如用户数据、博客文章数据、照片数据、标签数据、群组数据等等每个业务一个独立的数据库或者数据库服务器。

  • 03

    2. 水平切分(横向)数据是把所有数据当作一个大产品,但是把所有的平面数据按照某些Key(比如用户名)分散在不同数据库或者数据库服务器上,分散对数据访问的压力,这种方式也是本文主要要探讨的。

数据库详细分布介绍

  • 01

    【一、基于散列的分布方式 】 1. 散列方式介绍 基 于散列(Hash)的分布存储方式,主要是依赖主要Key和散列算法,比如以用户为主的应用主要的角色就是用户,那么做Key的就可以是用户ID或者是用 户名、邮件地址之类(该值必须在站点中随处传递),使用这个唯一值作为Key,通过对这个Key进行散列算法,把不同的用户数据分散在不同的数据库节点 (Node)上。 我们通过简单的实例来描述这个问题:比如有一个应用,Key是用户ID,拥有10个数据库节点,最简单的散列算法是我们 用户ID数模以我们所有节点数,余数就是对应的节点机器,算法:所在节点 = 用户ID % 总节点数,那么,用户ID为125的用户所在节点:125 % 10 = 5,那么应该在名字为5的节点上。同样的,可以构造更为强大合理的Hash算法来更均匀的分配用户到不同的节点上。 我们查看一下采用散列分布方式的数据结构图:

  • 02

    【 二、基于全局节点分配方式 】 1. 全局节点分配方式介绍 就是把所有Key信息与数据库节点之间的映射关系记录下来,保存到全局表中,当需要访问某个节点的时候,首先去全局表中查找,找到以后再定位到相应节点。全局表的存储方式一般两种: (1) 采用节点数据库本身(MySQL/PostgreSQL)存储节点信息,能够远程访问,为了保证性能,同时配合使用 Heap(MEMORY) 内存表,或者是使用 Memcached 缓存方式来缓存,加速节点查找 (2) 采用 BDB(BerkeleyDB)、DBM/GDBM/NDBM 这类本地文件数据库,基于 key=>value 哈希数据库,查找性能比较高,同时结合 APC、Memcached 之类的缓存加速。 第 一种存储方式是容易查询(包括远程查询),缺点是性能不太好(这个是所有关系型数据库的通病);第二种方式的有点是本地查询速度很快(特别是hash型数 据库,时间复杂度是O(1),比较快),缺点是无法远程使用,并且无法在多台机器中间同步共享数据,存在数据一致的情况。 我们来描述实施 大概结构:假如我们有10个数据库节点,一个全局数据库用于存储Key到节点的映射信息,假设全局数据库有一个表叫做 AllNode ,包含两个字段,Key 和 NodeID,假设我们继续按照上面的案例,用户ID是Key,并且有一个用户ID为125的用户,它对应的节点,我们查询表获得: Key NodeID 13 2 148 5 22 9 125 6 可以确认这个用户ID为125的用户,所在的节点是6,那么就可以迅速定位到该节点,进行数据的处理。 我们来查看一下分布存储结构图:

  • 03

    【 三、存在的问题 】 现在我们来分析和解决一下我们上面两种分布存储方式的存在的问题,便于在实际考虑架构的时候能够避免或者是融合一些问题和缺点。 1. 散列和全局分配方式都存在问题 (1) 散列方式扩容不是很方便,必须修改散列算法,同时可能还需要对数据进行迁移,它的优点是从Key定位一个节点非常快,O(1)的时间复杂度,而且基本不需要查询数据库,节约响应时间。 (2) 全局分配方式存在的问题最明显的是单点故障,全局数据库down掉将影响所有应用。另外一个问题是查询量大,对每个Key节点的操作都必须经过全局数据库,压力很大,优点是扩容方便,增加节点简单。 2. 分布存储带来的搜索和统计问题 (1) 一般搜索或统计都是对所有数据进行处理,但因为拆分以后,数据分散在不同节点机器上,无法进行全局查找和统计。解决方案一是对主要的基础数据存储在全局表中,便于查找和统计,但这类数据不宜太多,部分核心数据。 (2) 采用站内搜索引擎来索引和记录全部数据,比如采用 Lucene 等开源索引系统进行所有数据的索引,便于搜索。 对于统计操作可以采用后台非实时统计,可采用遍历所有节点的方式,但效率低下。 3. 性能优化问题 (1) 散列算法,节点概率和分配等为了提高性能都可以使用编译语言开发,做成lib或者是所有php扩展形式。 (2) 对于采用 MySQL 的情况,可以采用自定义的数据库连接池,采用 Apache Module 形式加载,能够自由定制的采用各种连接方式。 (3) 对于全局数据或都频繁访问的数据,可以采用APC、Memcache、DBM、BDB、共享内存、文件系统等各种方式进行缓存,减少数据库的访问压力。 (4) 采用数据本身的强大处理机制,比如 MySQL5 的表分区或者是 MySQL5 的Cluster 。另外建议在实际架构中采用InnoDB表引擎作为主要存储引擎,MyISAM作为一些日志、统计数据等场合,不论在安全、可靠性、速度都有保障。

    总结

    • 01

      本文泛泛的分析了在网站项目(特别是Web2.0)中关于数据库分布存储的一些方式方法,基本上上面提到的两种分布方案笔者都经过实验或者是使用过类似成型 的项目,所以在实践性方面是有保障的,至于在具体实施过程中,可以按照具体的应用和项目进行选择性处理,这样,让你的网站速度飞快,用户体验一流。同时本 文有些概念和描述不一定准确,如果有不足之处,请谅解并且提出来,不胜感谢。另外,如果有更好的方案或者更完善的解决方式,非常希望能够分享一下,本文更 希望起到抛砖引玉的作用。

    (0)

    相关推荐

    • Web应用系统测试内容都有哪些?

      操作方法 01 Web应用系统的测试与传统的软件测试很不一样,那么Web的应用系统测试和软件测试有什么不一样呢? 我们可以通过以下的内容区看一下他们之间的区别. 面向Web应用系统的测试与传统的软件测 ...

    • Web应用系统测试内容包括哪些?

      操作方法 01 面向Web应用系统的测试与传统的软件测试不同,不仅需要检查和验证是否按照需求规格说明书的要求运行,而且还要测试Web应用系统在不同浏览器上显示是否符合要求,与不同的数据库连接是否有效. ...

    • MySQL教程(MySQL数据库入门教程)

      一.MySQL基础1.1.MySQL概述数据库顾名思义,就是存储数据的仓库,这些数据是有组织存储的(DataBase简称DB).而数据库管理系统,即操作和管理数据的大型软件(DataBase Mana ...

    • 联动天下:Mysql数据库有什么优势?

      操作方法 01 联动天下作为全国虚拟主机十强的服务商72e.net,对于产品的质量要求是非常高的,因此在选用虚拟主机ide数据库时候也是选用Mysql数据库,那么我们的数据库有什么优势让那么多用户都点 ...

    • PLSQL操作Oracle数据库之单表查询SQL语句

      Orcale数据库作为商业级的大型关系型数据库管理系统,以其较高的安全性和强大的可移植性赢得了市场的广泛认可,而PLSQL作为操作Oracle的编程语言的最佳选择,掌握其编程原理及基本的sql操作是掌 ...

    • 搜索引擎原理(二)

      操作方法 01 早在 Web     出现之前,互联网上就已经存在许多旨在让人们共享的信息资源   .那些资源当时主要存在于各种允许匿名访问的FTP 站点(anonymous   ftp), 内容以学 ...

    • 计算机领域的15种编程语言

      计算机领域的15种编程语言

    • 天然气管线泄露监测系统方案

      操作方法 01 一.系统概述 天然气计量间用于计量用户的用气量,以此作为收费的依据.传统的人工抄表方式由于天然气计量间地域分布较广,每次统计单位的用气量需要耗费大量人力及物质等自资源,工人工作效率低, ...

    • Win2008如何安装iis Windows2008安装iis方法图文教程

      Windows Server 2008的安全性不仅仅体现在一个方面,安全已经形成了一个整体,几乎系统的每一块都考虑到了安全机制,在使用它的时候您可以感受到。 2008安全性提升了这么多,我们用来做网站 ...