0

0

网站建设-数据库横向扩展

php中文网

php中文网

发布时间:2016-06-07 17:38:41

|

1681人浏览过

|

来源于php中文网

原创

数据库横向扩展 在网站建设的过程中,一个高扩展性的架构设计可以保证当网站业务量和访问量达到零界点时我们能够以较低的成本对现有系统进行扩展。而网站系统最难扩展的部分通常是数据库或者持久化存储。当今最流行的RDBMS数据库,如Oracle,Sql Server等,

数据库横向扩展

         在网站建设的过程中,一个高扩展性的架构设计可以保证当网站业务量和访问量达到零界点时我们能够以较低的成本对现有系统进行扩展。而网站系统最难扩展的部分通常是数据库或者持久化存储。当今最流行的rdbms数据库,如oracle,sql server等,都是关系型数据库。大多数数据库都有依赖基于acid属性的外键,如下表,

 

php商城系统
php商城系统

PHP商城系统是国内功能优秀的网上商城系统,同时也是一个商业的PHP开发框架,有多套免费模版,强大的后台管理功能,专业的网上商城系统解决方案,快速建设网上购物商城、数码商城、手机商城、办公用品商城等网站。 php商城系统v3.0 rc6升级 1、主要修复用户使用中出现的js未加载完报错问题,后台整改、以及后台栏目的全新部署、更利于用户体验。 2、扩展出,更多系统内部的功能,以便用户能够迅速找到需

下载

属性

说明

原子性(Atomicity)

要么完成事务中的所有操作,要么一个都不执行

一致性(Consistency)

事务开始和结束时,数据库的所有数据都要保持状态一致

隔离性(Isolation)

事务的表现就像它是对数据库执行的唯一操作

持久性(Duration)

事务完成时,操作将不能更改

 

         不管是使用哪种类型的外键,原则是只要写和读操作在同一时间发生就会出现两种情况,

  • 读出来的数据与真实数据存在差异,因为数据在读出来的同时已经发生改变了;
  • 必须保证读和写操作不能同时发生,操作必须等待另外一项操作完成后才能进行;
  • 基于这个原则,当网站访问量达到一定数量时,根据使用的ACID外键属性的不同,就会出现数据存在较大差异或者操作等待时间过长的问题,因此我们就必须对数据库进行扩展来解决这一的问题。

     

             在90%以上的网站建设项目中,数据库的读操作远远大于写操作,特别是企业的网站制作,99%都是读操作,只有管理员对网站信息进行增删改查时才会对数据库有写操作。对于这种高读/写比例的网站应用,创建只读数据库副本就可以轻松地扩展这类系统。这种通过创建数据库副本来横向扩展数据库的技术叫做“读写分离”。

    时间敏感度

             根据数据的时间敏感度,,有两种方法可以分布数据的只读副本。什么叫时间敏感度?我们为什么要在乎它?时间敏感度指的是相对于数据库的写副本来说,只读副本有多新,还是完全同步的。因为对于读写分离的数据库来说,理论上可以做到读写副本完全同步,但是成本非常高,对于利益相关者来说这往往不是他们想要的性价比。因此,我们在这里讨论实际上是你到底能容忍多大的读写数据差异。

    查询缓存

    这种方法是在数据或应用层建立缓存层,每次查询可以先检查缓存中是否已存在对象,而不是每次都去读取数据库。当进行写操作后必须将数据标示为过期,下次读取时才需要查询事务数据库获取数据,更新缓存。现在有那么多优秀的键值存储系统可以作为缓存系统,如memcache,redis,couchbase等,所以先强烈推荐这种方法。

    缓存机制

    复制数据库

             除了建立缓存层外,还可以通过复制数据库来拆分数据,大多数关系数据库都有某种类型的复制功能。Sql Server是通过主-从数据库的概念来实现复制功能的。所谓的主数据库就是只进行写操作的数据库,从数据库是主数据库的只读副本。主数据库会把更新,插入,删除等操作记录在二进制日志中,每个从数据库则是从主数据库中请求这些日志,在自身重现这些操作。如下图,

    数据库读写分离

     

             还记得我们上面提到的,在90%以上的网站建设项目中,数据库的读操作远远大于写操作,这意味着我们可以通过这样的数据库扩展,将很少量的写操作在一台主数据库中完成,而大量的读操作由多台从数据库承担,这样可以很好的将用户读取操作分摊到多台从数据库上,大大减轻了单台数据库的负担,理论上还可以通过无限扩展从数据库的数量来适应无限增加的网站用户访问量。

     

             大多数的网站建设项目都可以通过这两种方法来增强网站扩展性,不仅仅是数据库,web服务器通常也能通过类似的原理轻松扩展,这样就能够把事务平均分配到多个服务器上进行横向扩展。但是遗憾的是,几乎没有一款现有的建站系统或建站软件原生支持这样的横向扩展,程序员必须对代码和数据库进行二次开发后才能实现。

     

             但是对于某些必须保证实时同步的数据而言,这种方法就不适用了。在内存中缓存客户的专有数据或者不同功能的特有数据可能会造成扩展服务瓶颈,很难在不影响客户响应时间的前提下扩展这些服务。要解决这种内存限制,就需要我们对系统进行纵深扩展了。

    相关专题

    更多
    php与html混编教程大全
    php与html混编教程大全

    本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.13

    PHP 高性能
    PHP 高性能

    本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.13

    MySQL数据库报错常见问题及解决方法大全
    MySQL数据库报错常见问题及解决方法大全

    本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.13

    PHP 文件上传
    PHP 文件上传

    本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

    5

    2026.01.13

    PHP缓存策略教程大全
    PHP缓存策略教程大全

    本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.13

    jQuery 正则表达式相关教程
    jQuery 正则表达式相关教程

    本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

    1

    2026.01.13

    交互式图表和动态图表教程汇总
    交互式图表和动态图表教程汇总

    本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

    15

    2026.01.13

    nginx配置文件详细教程
    nginx配置文件详细教程

    本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

    4

    2026.01.13

    nginx部署php项目教程汇总
    nginx部署php项目教程汇总

    本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

    5

    2026.01.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Vue 教程
    Vue 教程

    共42课时 | 6.4万人学习

    Django 教程
    Django 教程

    共28课时 | 3万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 2.9万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号