已文大神可以略过。
当一台服务器已不能满足日益膨胀的站点时,就应该对数据库进行扩展。
一、主从复制
几乎所有的主流数据都支持复制,在mysql中,配置如下
1、开户服务器上的二进制日志(log-bin)
2、在主服务器和从服务器上分别进行简单的配置和授权。
具体可参看官方手册。
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
注意:
1、从服务器本身也可以充当主服务器,从而可以构成链式复制服务器,采用多级复制策略,避免多个从服务器同时复制一个主服务器带来的磁盘压力。
2、当你进行复制时,所有对复制中的表的更新都必须在主服务器上进行,否则可能会造成主从数据的冲突。
二、读写分离
当主服务器的压力不断增大时,由于更新操作必须在主服务器上进行,因此我们应当尽量让主服务器不做读操作,以减轻它的压力,读操作就交给从服务器。
那么问题来了,程序如何决定使用哪台从服务器进行read呢?这可以看作是一个从服务器的负载均衡的操作,程序必须合理地发送不同的SQL到从服务器,让它们的工作量相对均衡,更重要的是,如果某台服务器发生了故障,程序得知道并做出相应的操作。这样程序代码看来需要修改很多,且实现不简单,幸运的是,我们可以将这工作交给数据库反向代理。
针对mysql可以尝试使用mysql proxy,它就像WEB反向代理服务器一样,可以在SQL语句转发到后端的mysql服务器之前对它进行修改,比如将对数据库a的操作修改为数据库b,更厉害的是,mysql proxy还对可以多个从服务器实现负载均衡以及可用性检测。
三、垂直分区
对于数据库写操作频繁的站点来说,仅仅采用主从和读写分离并不能对主服务器负载有多少影响。这个时候最简单的方法就是将数据根据业务不相关性进行垂直分区。比如一个商城可以将商品数据库和用户数据库分别存储到独立的数据库服务器上。
四、水平分区
现在我们的商城越来越大,用户越来越多,发现用户服务器虽然独立一台服务器也有点吃不消了,用户太多了。这时,我们不得不对其进行水平分区。当然在此之前,经常会先尝试进行分表,将用户表按照取余法分为10个或者100个用户表,如果这样仍然不能满足站点的需要,分区便派上用场。注意这里的分区,并不是partition,而是分布式分区。
那么应该如何分区呢?
首先我们得先确定分区索引字段,比如userId,它必须和所有的记录都存在关系。如果使用主键,你得保证它不能使用auto_increment自增类型,接下来要考虑就是采用什么分区算法了,这个算法必须拥有良好的扩展性,并且让各个分区的工作量相对均衡。
1、哈希算法
前面提到的userid%10取余,是最简单的哈希,它可以对分区均衡地分配工作量。但是它对于扩展并不友好。一旦我们需要从10个分区扩展到20个,这便需要将所有数据重新分区,你不得不暂停站点,waiting。
2、范围
这种算法是指按照分区索引字段的范围进行分区,比如将userId0-100000的记录存储在一个分区中,将100000-200000存储在另一个分区中,以此类推。显然这样扩展性很好,但是各个分区的工作量会存在较大的差异,比如老用户所在的分区压力相对较大,或者一部分ID比较靠近的热点用户导致所在的分区压力过大。
3、映射关系
这种算法将对分区索引字段的每个可能的结果创建一个分区映射关系,可以想像,userId有多少,那么映射关系就有多少,因此需要将它写入到数据库,通过查询数据库得到用户的分区,当然,我们会使用缓存来提高性能。
这样映射关系,使得各个分区具有较强的可伸缩性,我们可以灵活地控制它们的规模,并且轻松地将数据从一个分区迁移到另一个分区,这也使得各个分区通过灵活的动态调节来保持平衡。
幸运的是分区也可以反向代理,在读写分离时提到了mysql proxy,另一个开源产品spock proxy可以帮助应用程序实现水平分区的访问调度,这意味着我们不需要在应用程序中维护那些分区的对应关系了。
相关推荐
通过《Web数据库技术实用教程》,你可以系统地学习到从基本的数据库概念到高级的Web应用开发技术,为构建复杂的Web数据库应用打下坚实基础。无论你是学生还是开发者,这本书都将是你宝贵的参考资料。
Web数据库设计是构建基于Web的应用程序的关键组成部分,它允许用户通过Web界面与数据库进行交互。在Web数据库设计中,有几种主要的技术用于实现这一目标,包括CGI(Common Gateway Interface)、ODBC(Open Database...
它包含了ASP.NET、HTML、CSS和JavaScript编辑器,以及调试工具,便于构建Web数据库应用。 4. **.NET Framework 2.0**:这是一个用于开发和运行应用程序的平台,提供了许多服务,如内存管理、类型安全、异常处理等。...
它可能涵盖了如何构建、操作和维护一个简单的Web数据库的基本步骤和概念。 【标签】:“web_数据库”指的是在Web环境中使用的数据库,这可能包括了使用HTTP或其他Web协议来访问和操作数据的技术。“web数据库”强调...
总的来说,选择Web数据库时需考虑性能、安全性、可扩展性、成本等因素。 1.4 脚本程序与数据库连接的常用方法 - PHP:广泛用于Web开发,支持多种数据库,如MySQL、PostgreSQL等,语法简单,易于学习。 - ...
Web数据库是互联网应用中的核心组成部分,它涉及到网页与数据库之间的交互,使得用户可以通过网页界面查询、更新和管理存储在数据库中的信息。本课件重点探讨Web数据库的基本概念、设计原则以及实现技术,旨在帮助...
【描述】这个Web版本的数据库连接工具是用Java和Angular技术栈构建的,这是一种现代化的开发组合,确保了高性能和良好的用户体验。Java作为后端服务器语言,提供强大的数据处理能力以及丰富的开源库,支持与多种...
在“Web数据库课程开发设计”这个主题中,我们主要探讨的是如何在Web环境中构建和设计数据库系统,以及如何将这些系统融入到课程教学中。Web数据库不仅涉及到前端用户界面的设计,还包括后端数据库的架构、数据存储...
总的来说,Web数据库设计涵盖了从数据库系统模型、连接技术到数据库产品选择的多个方面,它是构建Web应用程序的关键组成部分,使得用户可以通过Web页面无缝地访问和操作数据。了解这些知识点对于Web开发者来说至关...
通过理解PHP 4.0的关键特性和Web数据库架构的原理,开发者可以构建高效、稳定且安全的Web应用。随着技术的发展,尽管PHP 4.0已不再被支持,但其基础概念和方法对于理解现代Web开发仍然至关重要。
本文将深入探讨如何使用PHPWeb数据库备份和搬家工具,确保数据的安全性和迁移的便捷性。 首先,我们需要理解数据库备份的重要性。数据库备份是为了防止数据丢失,这可能是由于硬件故障、软件错误、恶意攻击或人为...
【Web数据库技术】是互联网发展中的重要组成部分,它结合了数据库管理系统(DBMS)与Web技术,使得...随着技术的不断发展,Web数据库的效率、安全性和可扩展性都在持续提高,为用户提供更加丰富和个性化的网络体验。
这使MySQL深 刻地了解到扩展Web数据库的挑战,从而推动了对MySQL集群的开发,用一些关键技术实现有大量写操作Web数据库的升级,包括: 自动分区技术,有很强的写操作可扩展性。 实时性能。 active/active式跨地域...
Java Web数据库系统应用开发是构建基于互联网的交互式应用程序的关键技术,主要涉及到Web服务器、数据库服务器和编程语言的集成。本资源"Java Web数据库系统应用开发与实例源代码"提供了实际操作中的源代码,帮助...
### 基于ISAPI的Web数据库技术及其应用 #### 特别说明 本文档旨在深入探讨基于ISAPI(Internet Server Application Programming Interface)的Web数据库技术,并对其在实际场景中的应用进行详细的分析与讨论。...
它在Web数据库中的应用极大地提升了网站交互性和数据处理能力。本文将深入探讨ASP技术的基本原理、特点以及与数据库的结合方式,同时也会对比CGI和ISAPI等其他相关技术,帮助读者全面理解其在Web开发中的角色。 1. ...
【Web数据库设计】是互联网技术中的一个重要组成部分,它涉及到如何在Web环境中构建和管理数据库以满足用户需求。这一章主要讲解了Web数据库的基本概念、选择、连接和管理。 首先,【Web数据库概述】中提到,Web...
在Linux操作系统上构建Web数据库系统已经成为一个重要的研究领域。Linux以其开放源码、稳定性和低成本的优势,逐渐在企业级应用中占据了一席之地。本文主要探讨在Linux环境下,如何利用PHP和Oracle构建Web数据库系统...
《Web数据库技术》是关于如何在Web环境下设计、构建和管理数据库的重要参考资料。该压缩包包含高晗编著的电子教案,为读者提供了深入理解Web数据库技术的基础和实践指导。以下将详细介绍Web数据库技术的相关知识点。...
在ASP中,我们可以与各种数据库进行交互,如Access、SQL Server等,以实现Web数据库应用。 在“ASP & Web 数据库经典教程”中,重点可能包括以下几个关键知识点: 1. **ASP基础**:首先,教程可能会讲解ASP的基本...