- 浏览: 1159215 次
- 性别:
- 来自: nibiru
文章分类
- 全部博客 (407)
- lucene (1)
- java (147)
- j2se (1)
- javascript (2)
- spring (5)
- hibernate (1)
- mysql (1)
- oracle (10)
- 工作 (10)
- JPA (13)
- 网站 (5)
- xml (2)
- mina (3)
- 思想 (16)
- httpclient (10)
- JFreeChart (1)
- 多线程 (0)
- swing (2)
- socket (0)
- 网络 (3)
- protocol buffer (0)
- jmx (2)
- jboss/weblogic (1)
- flex3 (12)
- 设计模式 (1)
- apache (0)
- php (4)
- struts1&2 (2)
- oracle SOA (2)
- 微博短链接的生成算法(Java版本) (1)
- htmlparser (3)
- quartz (2)
- mail (1)
- 乱码 (2)
- txt (1)
- eclipse (7)
- 分类 (0)
- 数据库 (1)
- svn (1)
- 日志 (1)
- struts2 (4)
- jquery (2)
- 编码 (1)
- 路径,java (1)
- SOHO (1)
- 娱乐 (2)
- frameset (1)
- maven (1)
- 反射 (1)
- truts2 (1)
- 敏捷,scrum (1)
- OA (1)
- english (1)
- oralce (1)
- wampserver (1)
- 会计 (1)
- springmvc (1)
- js (1)
- CMA (1)
最新评论
-
ludabing:
[/color][color=yellow]
spring @component的作用 -
netwelfare:
EL表达式中null和empty的区别,可以看这篇文章:htt ...
EL表达式中empty的用法 -
wjs王结胜:
...
spring @component的作用 -
di1984HIT:
哈哈。真不错啊。~
微博短链接的生成算法(Java版本) -
di1984HIT:
不错,不错。。。
spring @component的作用
“怎么样扩展关系数据库?”,我经常问别人这个问题。说到降低数据库的负载,有很多的方法:缓存,分片等等,但是数据库扩展问题的答案经常是我们不扩展 … 。是的,关系数据库( SQL Databases )本质上是不具有可扩展性的!没有什么魔法能让它忽然可以具有可扩展性。
什么是可扩展性
我想真正的可扩展性必须符合以下的准则:
1、 水平可扩展:越多的服务器带来越多的负载。
2、 对应用程序的透明性:服务器的扩展性实现必须与业务的应用逻辑无关,对之透明。
3、 容错性,节点可拆卸:不允许单个服务器节点的当机导致应用的错误、失败。
可以从电脑硬件方面举个例子: RAID 磁盘阵列就提供了可扩展性:
1、 水平扩展性:你可以用 4 个或者 12 个、 20 个磁盘组成 RAID5 ,更多的磁盘带来更的的存储空间和更高的性能。
2、 对应用程序的透明性,在应用程序看来 RAID 磁盘阵列就像是一个单独的设备,如文本编辑器根本就不知道它存储的文件被分割到多个磁盘。
3、 容错性,你可以从 RAID 磁盘阵列中取出一个磁盘,但它还是可以正常的工作(虽然损失了性能),重新装入磁盘,它会恢复自己状态,应用 RAID 的程序并不知道所有这些过程(拔出、装入),所以应用程序的逻辑也不会受到干扰。
现在让我们回顾下一些以往研究的用于数据库“扩展”的技术,并探讨它们为什么不能满足可扩展性的 3 个标准。
垂直扩展
一个扩展数据库的方法就是“扩展”服务器,提供一个更高性能,更佳存储的服务器,这经常被称为“垂直扩展”,有时候我们也称之为“摩尔定律”扩展。这种扩展的问题是什么呢?
l 扩展过程比较复杂,经常需要人的人工参与,也经常导致服务器的停机。
l 被替换的服务器变得没有价值,这导致了资源的浪费,并可能“鼓励”你超支的购买了你并不想买的高性能服务器。
l 服务器性能再高也有个瓶颈!
经常有很多公司碰到了最后一个问题(即使用的是 256 核的 SUN 服务器),并走入了死角。
所以,你可以把数据库装在一个更高性能的服务器上来获得更多的负载,但是垂直扩展的方式并不满足可扩展要求的第一点(水平可扩展)。
分区,或者说分片
分片就是更加应用程序制定的“界限”把数据切分到不同的数据库上。比如,你可能根据用户名的开头字母, 把 A-M 开头的用户存储到一个数据库,把 M-Z 的用户存储到另一个数据库。(这个划分的标准有很多,用户的 ID 划分也可以)。
这次方式的扩展需要和应用程序的逻辑紧密的结合起来,并且要精心的设计划分的模式和数据库的模式,和系统可能有的查询方式,总的一句话:令人痛苦的事!!
所以,分片的方式虽然是一个水平扩展的方式,但是却违反了可扩展性的第二个准则:它对应用程序的业务逻辑不透明。
分片引起的更深的问题是与关系数据库的本质有关的,关系数据库中的的表一般维护者关系模式,如果记录被切分到不同的服务器上,这相当于你需要维护者多个模式,也意味着你很可能要更改客户端的程序,分片的扩展方式使得关系数据库带来的很多优点荡然无存。
读写分离
MySQL 就可以简单的配置主从复制的方式来实现读写分离,数据库的“主”服务器实时的把数据分发复制到“从”服务器,“从”服务器提供只读的功能。这样就就可以在客户端和服务器之间制定一个智能的路由代理(或者在客户端的类库中实现这一个智能路由):把一切的读操作( SELECT )分发到一个只读的“从”服务器,把一切的写操作( INSERT, UPDATE, DELETE )分发到“主”服务器。
Postgres 数据库也提供这种复制的方式(通过 Slony ),但是它的配置比 MySQL 的配置方式复杂得多。复制的方式是行得通,但也带来了不同程度配置、维护的头痛。
对于关系数据库的扩展技术来说,读写分离可能是最好的方式了,在读方面它提供了水平的可扩展性,并且对于应用程序来说它也是透明的,这也是很多大型关系数据库系统采用的方式。
但是,读写分离最终还是一个受限的技术,它的瓶颈在于“主”服务器,特别对于一些写操作频繁的应用。并且对于可扩展性的第三个准则,它也不满足:“主”服务器当机,应用肯定出现错误。不止是在数据库挂掉的情况,在日常的数据库维护过程也会比较麻烦,利用只读“从”服务器,可以很方便的恢复另一个服务器的数据,但这也要对“从”服务器的状态时刻地做监视。
什么是可扩展性
我想真正的可扩展性必须符合以下的准则:
1、 水平可扩展:越多的服务器带来越多的负载。
2、 对应用程序的透明性:服务器的扩展性实现必须与业务的应用逻辑无关,对之透明。
3、 容错性,节点可拆卸:不允许单个服务器节点的当机导致应用的错误、失败。
可以从电脑硬件方面举个例子: RAID 磁盘阵列就提供了可扩展性:
1、 水平扩展性:你可以用 4 个或者 12 个、 20 个磁盘组成 RAID5 ,更多的磁盘带来更的的存储空间和更高的性能。
2、 对应用程序的透明性,在应用程序看来 RAID 磁盘阵列就像是一个单独的设备,如文本编辑器根本就不知道它存储的文件被分割到多个磁盘。
3、 容错性,你可以从 RAID 磁盘阵列中取出一个磁盘,但它还是可以正常的工作(虽然损失了性能),重新装入磁盘,它会恢复自己状态,应用 RAID 的程序并不知道所有这些过程(拔出、装入),所以应用程序的逻辑也不会受到干扰。
现在让我们回顾下一些以往研究的用于数据库“扩展”的技术,并探讨它们为什么不能满足可扩展性的 3 个标准。
垂直扩展
一个扩展数据库的方法就是“扩展”服务器,提供一个更高性能,更佳存储的服务器,这经常被称为“垂直扩展”,有时候我们也称之为“摩尔定律”扩展。这种扩展的问题是什么呢?
l 扩展过程比较复杂,经常需要人的人工参与,也经常导致服务器的停机。
l 被替换的服务器变得没有价值,这导致了资源的浪费,并可能“鼓励”你超支的购买了你并不想买的高性能服务器。
l 服务器性能再高也有个瓶颈!
经常有很多公司碰到了最后一个问题(即使用的是 256 核的 SUN 服务器),并走入了死角。
所以,你可以把数据库装在一个更高性能的服务器上来获得更多的负载,但是垂直扩展的方式并不满足可扩展要求的第一点(水平可扩展)。
分区,或者说分片
分片就是更加应用程序制定的“界限”把数据切分到不同的数据库上。比如,你可能根据用户名的开头字母, 把 A-M 开头的用户存储到一个数据库,把 M-Z 的用户存储到另一个数据库。(这个划分的标准有很多,用户的 ID 划分也可以)。
这次方式的扩展需要和应用程序的逻辑紧密的结合起来,并且要精心的设计划分的模式和数据库的模式,和系统可能有的查询方式,总的一句话:令人痛苦的事!!
所以,分片的方式虽然是一个水平扩展的方式,但是却违反了可扩展性的第二个准则:它对应用程序的业务逻辑不透明。
分片引起的更深的问题是与关系数据库的本质有关的,关系数据库中的的表一般维护者关系模式,如果记录被切分到不同的服务器上,这相当于你需要维护者多个模式,也意味着你很可能要更改客户端的程序,分片的扩展方式使得关系数据库带来的很多优点荡然无存。
读写分离
MySQL 就可以简单的配置主从复制的方式来实现读写分离,数据库的“主”服务器实时的把数据分发复制到“从”服务器,“从”服务器提供只读的功能。这样就就可以在客户端和服务器之间制定一个智能的路由代理(或者在客户端的类库中实现这一个智能路由):把一切的读操作( SELECT )分发到一个只读的“从”服务器,把一切的写操作( INSERT, UPDATE, DELETE )分发到“主”服务器。
Postgres 数据库也提供这种复制的方式(通过 Slony ),但是它的配置比 MySQL 的配置方式复杂得多。复制的方式是行得通,但也带来了不同程度配置、维护的头痛。
对于关系数据库的扩展技术来说,读写分离可能是最好的方式了,在读方面它提供了水平的可扩展性,并且对于应用程序来说它也是透明的,这也是很多大型关系数据库系统采用的方式。
但是,读写分离最终还是一个受限的技术,它的瓶颈在于“主”服务器,特别对于一些写操作频繁的应用。并且对于可扩展性的第三个准则,它也不满足:“主”服务器当机,应用肯定出现错误。不止是在数据库挂掉的情况,在日常的数据库维护过程也会比较麻烦,利用只读“从”服务器,可以很方便的恢复另一个服务器的数据,但这也要对“从”服务器的状态时刻地做监视。
发表评论
-
每个程序员都应读的书
2013-10-26 22:18 15721. 《代码大全》 史蒂夫 ... -
好久没更新了,我回来了
2013-04-25 16:20 60好久没更新了,我回来了好久没更新了,我回来了好久没更新了,我回 ... -
谷歌正式推出Google Drive
2012-04-25 13:17 1750北京时间4月25日早间消息,谷歌公司正式推出在线云存储服 ... -
CVS,GIT,Mercurial和SVN比较
2012-04-12 09:59 1496特征CVSGitMercurialSubversion是否原 ... -
我曾经得到的一个最好的编程建议
2011-11-30 14:00 1384我加入了这 个疯狂的sk ... -
如果一件事情的成功率是1%,那么反复100次至少成功1次的概率是多少?
2011-11-14 12:55 3812【如果一件事情的成功 ... -
一位ALS患者在生命走到尽头前用脚贡献了最后一个代码补丁!!!!
2011-08-26 16:34 1688一个把自己的生命和代码和为一体的人,看了报道后自己又找了一些相 ... -
IT行业怎么赚钱
2011-07-28 11:42 6193思考的引发点是最后中 ... -
在IT界取得成功应该知道的10件事
2011-07-25 11:21 1138导读:人人似乎都同意I ... -
以后有问题尽量看官方原文档,baidu来百度去,都是些采集!
2011-07-11 16:41 1133以后有问题尽量看官方原文档,baidu来百度去,都是些采集文章 ... -
工信部发布2011年软件收入百强名单 华为居首
2011-07-01 11:43 37656月28日消息,工信部今天发布了2011年中国软件业务收入 ... -
Godaddy创始人:成就亿万富翁的10条规则
2011-07-01 11:41 1933GoDaddy是一家主要向用户提供域名注册、网站空间租赁等 ... -
中国修改个人所得税法 个税起征点调至3500元
2011-06-30 16:42 1047十一届全国人大常委会第二十一次会议30日表决通过关于修改个 ... -
明天把登陆问题搞定!!
2011-06-27 17:39 986明天把登陆问题搞定!!明天把登陆问题搞定!! -
回首10年前的30个最受欢迎的网站
2011-06-27 09:41 140210年前的Web技术还比较落后,浏览器功能也非常有限,你知 ... -
net htmlparse
2011-06-27 09:09 938net htmlparse net htmlparse ... -
利用校内网人人网做淘宝客
2011-06-24 17:32 6我去年的时候接触校园网还有开心网,当时注册了就只是当做WEB3 ... -
淘宝皇冠卖家过劳死 大家一定要劳逸结合啊,别太拼命啦
2011-06-24 16:56 1413近日,一篇《淘宝皇冠卖家过劳死》的帖子在微博、淘宝网 ... -
最新jhost邀请码 20110724151753_931440 结束时间 2011-07-24 15:17:53
2011-06-24 15:20 140820110724151753_931440 ... -
java 好书 推荐
2011-05-13 08:36 1191项目百态:深入理解软件项目行为模式 设计原本:计算机科学巨匠F ...
相关推荐
OceanBase是一个企业分布式关系数据库,具有高可用性,高性能,水平可扩展性和与SQL标准的兼容性。 数据库是一个分布式关系数据库。它完全由蚂蚁集团开发。OceanBase 数据库建立在公共服务器集群上。基于Paxos协议...
在数据库设计中,确保表结构具有良好的扩展性是至关重要的,因为这直接影响到系统的灵活性、维护性和性能。本文将深入探讨如何为数据库表设计可扩展的字段,以便在未来的需求变化或业务扩展时能够轻松应对。 首先,...
CPPC++_OceanBase是一个企业级分布式关系数据库,具有高可用性、高性能、水平可扩展性和SQL标准兼容性
Oracle 的关系数据库产品具有多种特点,如: * 兼容性 * 可移植性 * 可联结性 * 高生产率 * 开放性 Oracle 数据库服务器产品 Oracle 数据库服务器产品包括标准服务器和许多可选择的服务器选件,选件用于扩展标准...
面向对象编程方法的核心理念是封装和可扩展性,这在OODBS中体现为对象的特性。 对象是OODBS的基本单位,它们具有唯一的对象标识符(OID),封装了状态(属性)和行为(方法)。对象可以通过类来定义,类是一个共享...
关系数据库-关系演算 关系数据库是指使用关系模型来组织和存储数据的...关系数据库和关系演算是对关系数据库进行操作和处理的方式,具有灵活性高、可扩展性强和数据一致性高的优点,但也存在复杂性高和成本高的缺点。
选择合适的OID分配策略,直接影响到系统的性能和可扩展性。 #### 关系数据库常用技术 - **索引(Indices)**:加速查询响应时间,通过创建索引来提高数据检索效率。 - **存储过程(Stored Procedures)**:封装一...
非关系型数据库通常具有更好的可扩展性和灵活性。 2. 优缺点对比 关系型数据库的优点在于其结构化的数据模型,提供ACID事务保证,拥有成熟的技术和工具。然而,它在处理大规模数据时表现不佳,模式不灵活,且商业...
NoSQL数据库的设计理念在于灵活性、可扩展性和高性能,它允许快速开发并处理大规模数据。 1. 数据模型: NoSQL数据库支持多种数据模型,包括文档型数据库(如MongoDB)、键值对存储(如Redis)、列族数据库(如...
"关系数据库习题" 关系数据库是指使用关系模型来存储和管理数据的数据库系统。关系模型是基于集合论和谓词演算的数学理论基础之一。...* 关系数据库中的未来发展趋势是提高性能、安全性和可扩展性。
它们通常以键值对、文档、列族或图形等形式存储数据,不强制固定的模式,从而在处理大规模数据时表现出更高的性能和可扩展性。常见的非关系型数据库有MongoDB、Redis、Cloudant和HBase。非关系型数据库的特点在于...
NoSQL 数据库则是指非关系型的数据库,如 MongoDB、Cassandra 等,它们注重于数据的灵活性和可扩展性。 关系型数据库是一种基于关系模型的数据库,它遵循 ACID 事务特性,支持高级查询语言和标准化的数据结构。关系...
ROLAP的优势在于其灵活性和可扩展性,能够在已有的关系型数据库基础上构建多维分析能力,适用于大型企业级应用。 #### 三、多维数据库的应用场景 多维数据库的应用主要集中在数据分析领域,尤其是在业务智能...
PostgreSQL 是一个功能强大且免费的关系数据库管理系统,具有高效的数据处理能力和良好的可扩展性。它的优点在于免费、可靠、功能强大等。但是,它的缺点在于配置较复杂、需要专业的数据库管理员等。 MySQL 是一个...
空间数据库不同于关系数据库,它具有以下特征: 1. 数据量庞大:空间数据库存储的数据量非常大,一个城市的数据可以达到几十 G,影像数据可以达到几百 G。 2. 高可访问性:空间信息系统要求具有强大的信息检索和...
非关系型数据库(NoSQL,Not Only SQL)是近年来在大数据处理、分布式系统等领域广泛应用的一种数据库类型,它与传统的关系型数据库(RDBMS)相比,具有更高的可扩展性、灵活性和性能。本实验报告主要关注两个知名的...
SUNDB 高性能分布式关系型数据库是一款由北京科蓝软件系统股份有限公司开发的数据库管理系统,旨在满足企业对高性能、可靠性和可扩展性的数据库需求。本白皮书旨在介绍 SUNDB 关系型数据库的技术架构、产品优势、...
这使得NoSQL在处理大规模、动态结构数据时表现出较高的性能和可扩展性。例如,MongoDB是一种文档型数据库,支持JSON格式的bson数据,模式自由,查询能力强,特别适合处理复杂数据类型和海量数据的快速访问。MongoDB...
文档数据库不强求数据的严格结构化,而是侧重于灵活性和可扩展性。 文档数据库与文件系统不同,文件系统通常与特定应用程序紧密关联,导致数据冗余和管理困难。而文档数据库允许跨应用程序的数据共享,减少了冗余并...