- 浏览: 421972 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (318)
- js (20)
- JQuery (2)
- Java (46)
- Oracle (4)
- mysql (21)
- ExtJs (17)
- Excel (2)
- Linux (8)
- Sql (8)
- Jsp (2)
- hibernate (12)
- jbpm (17)
- eclipse (8)
- 名博收藏 (1)
- Junit (2)
- 应用集成 (3)
- web (10)
- jboss (3)
- Rest (3)
- 其它 (7)
- 磁盘分区管理 (1)
- spring (18)
- SSO (4)
- tomcat (4)
- CSS (7)
- MemCached (6)
- EhCache (4)
- weblogic (1)
- apache (6)
- Exception design (1)
- db (1)
- 分析模式 (1)
- jstl (1)
- jsf (0)
- firefox (2)
- MongoDB (4)
- androidpn (1)
- hadoop (1)
- cvs (1)
- 微信公众号 (2)
- 高并发 (4)
- 技术论坛 (1)
- CDN (1)
- JVM (16)
- 加密 (4)
- maven (2)
- jenkins (1)
- hessian (1)
- 大数据处理 (2)
- NIO (0)
- netty (1)
- redis (1)
- git (1)
- Elastic Job (0)
最新评论
-
zgw06629:
或者<pre>aaaabbbbcccc</p ...
javaDoc注释换行 -
ddnzero:
...
StringBuffer换行 -
maosijun:
。。。。
EXT CExt.form.ComboBox选择一次后只剩一个选项 -
ysa198584:
你这有问题,当我的代码出现User.class的时候,反编绎的 ...
java的class文件批量反编译 -
dongj0325:
看到您的博客,很受启发,但还有关于jbpm4.4 timer使 ...
JBPM定时器(Timer)之Repeat属性不能使用变量
转自:http://eddysheng.iteye.com/blog/461393
sharding是将一个大数据库按照一定规则拆分成多个小数据库的一门技术.
当我们的应用数据量越来越多,访问量越来越大的时候,我们会作何选择?继续提升数据库服务器的性能还是采用一项技术让数据库平滑扩展?虽然伴随着服务器的更新换代,性能越来越好,更换更加豪华的服务器能暂时解决这个问题,但是无论是从花费和可控都无法让人满意。这时数据库sharding是一个更加可行的方案。
常用的sharding方案有以下几种,
1。按功能划分(垂直切分)
将不同功能相关的表放到不同的数据库中,譬如将用户管理相关表放到shard 1上,将blog相关表放到shard 2上。。。这样做的好处是非常直观,当需要用户列表时,我就到shard 1上获取。。。。这样也有一个问题,当某一部分的功能其数据量或性能要求超出了可控的范围,我们就需要继续对其进行深入的sharding。
2。按表中某一字段值的范围划分(水平切分)
当伴随着某一个表的数据量越来越大,以至于不能承受的时候,就需要对她进行进一步的切分。一种选择是根据key的范围来做切分,譬如userID为1-10000的放到shard 10上,userID为10000到20000的放到shanrd 11上。。。这样的扩展就是可预见的。另一种是根据某一字段值得来划分,譬如根据用户名的首字母,如果是a-d,就属于shard 20,e-h就属于shard 21。。。这样做也存在不均衡性,当某个范围超出了shard所能承受的范围就需要继续切分。还有按日期切分等等,
3。基于hash的切分
类似于memcached的key hash算法,一开始确定切分数据库的个数,通过hash取模来决定使用哪台shard。这种方法能够平均的来分配数据,但是伴随着数据量的增大,需要进行扩展的时候,这种方式无法做到在线扩容。每增加节点的时候,就需要对hash算法重新运算,数据需要重新割接。
4。基于路由表的切分
前面的几种方式都是跟据应用的数据来决定操作的shard,基于路由表的切分是一种更加松散的方法。它单独维护一张路由表,根据用户的某一属性来查找路由表决定使用哪个shard,这种方式是一种更加通用的方案。譬如我们在系统中维护一张表-(用户所属省-〉shard),这样每个用户我们知道是哪个省的,去路由表查找,就知道它所在的shard。因为每次数据操作的时候都需要进行路由的查找,所以将这些内容存储到一台独立cache上是一个非常好的方式,譬如memcached。这种切分的方式同时也带来了另一个好处,当需要增加shard的时候,可以在不影响在线应用的情况下来执行,当然这也跟应用程序的架构设计相关,你的设计必须适用这种增加。
虽然应用sharding会带来显而易见的好处,但是它也有一些固有的问题需要我们了解,这些问题大致分成以下几类,
1。shard的扩容
当当前的shard已经不能适用当前的应用需求时,就需要对shard数据库进行扩容,增加shard意味着需要对原有的shard数据进行迁移,这个过程是非常复杂,而且可能会导致数据的不一致(一边写、一边迁移)或者其他应用问题,因此扩容一般选择在凌晨等时间进行。
2。联合多个shard的表数据查询
这个是shard固有的问题,当遇到这样的问题时,你需要获取各个shard的数据,然后对这些数据进行汇总,很多时候因为现在的网络速度比较发达这个问题可以几乎被忽略掉。但是如果要进行数据的分析或挖掘,shard就会存在问题,通常面对这种对于数据要求不是那么实时的情况下,可以采用将shard数据同步到汇总数据库的方案,olap可以在这台汇总数据库上进行,这就需要在每台shard上进行数据的定时同步,这增加了程序的复杂性;如果要求实时的情况下,采用sharding方案会是一个毁灭性打击。
3。其他
我们现在做的系统就是采用的按照路由表切分的sharding方案,而且我们需要要求不是那么实时的汇总数据以提供数据的分析和挖掘,同时我们的基础数据都是在汇总数据库中进行管理,通过oracle的高级复制到shard节点上。在shard数据库向汇总数据库同步数据的时候,我们是通过oracle数据库的存储过程实现的,这种架构方式导致了数据库非常的复杂,同时还存在了一些其他问题,譬如同步会无缘无故的断掉。。。这就需要采用一些其他手段来维持数据的延迟一致性。
我们的sharding还在改进,我们的shard还在增加,我们还需要不断努力使我们的应用更加高效。
有时候觉得我们的社会就像一个巨大的多层sharding方案,中央、省(自治区)、市。。。
-------------------------------------------------------------
还有一种数据库方案是master-slave,一台master主要负责数据的更新,然后通过高级复制等手段将数据复制到各个slave节点,slave节点负责查询。这种结构是不管master和slave都拥有全部的数据,master到slave的数据存在一定的延迟。可以跟sharding方案结合使用。
发表评论
-
Mysql Too Many Open Files彻底解决办法
2017-02-09 18:19 5132Mysql Too Many Open Files彻底解决办 ... -
mysql快速执行超大sql脚本方法
2015-07-16 16:09 1728使用mysql数据库时,经常会碰到这个问题,特别是sql脚本 ... -
使用MySQL Proxy解决MySQL主从同步延迟
2015-05-13 11:14 539使用MySQL Proxy解决MySQL ... -
构建高性能web之路------mysql读写分离实战
2012-11-16 10:37 1077转自:http://blog.csdn.net/cutesou ... -
MySQL主从服务器的原理和设置
2012-11-16 10:24 776一 主从配置的原理 mysql的Replic ... -
MySQL索引分析和优化
2012-04-10 11:02 727什么是索引? 索引用 ... -
MySQL分区表的使用介绍
2012-04-10 10:27 1197MySQL使用分区表的好处: 1,可以把一些归类的数据放在一 ... -
[Err] 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes
2011-10-10 19:07 919mysql> show global variables ... -
2006 - MySQL server has gone away
2011-10-10 19:05 1336命令:show global variables like ' ... -
mysql varchar长度过大引起hibernate原生态SQL错误:No Dialect mapping for JDBC type: -1错误的解决方法
2010-08-31 15:20 1718先把异常抛出来: Hibernate: select sum ... -
Mysql索引
2010-02-23 17:30 1022行, 表及文件 每个文件可以划分为数据页(Data ... -
MySQL索引类型一览 让MySQL高效运行起来
2010-02-08 10:08 2708本文介绍了七种MySQL ... -
MySQL中的ORDER BY排序实现方式
2010-02-08 09:51 1334总的来说,在 MySQL 中的ORDER BY有两种排序 ... -
MySQL导入导出.sql文件
2010-02-04 14:37 800MySQL导入导出: http://blog.csdn.ne ... -
Mysql:InnoDB行锁特点
2010-02-03 14:13 965InnoDB行锁特点: http://blog.chin ... -
Mysql:ROW_COUNT()返回前一个SQL进行UPDATE,DELETE,INSERT操作所影响的行数
2010-02-03 14:09 5546在Mysql中ROW_COUNT()返回前一个SQL进行UPD ... -
JDBC调用存储过程详解
2010-02-01 14:47 882最近用到在JDBC中调用Mysql存储过程: try { ... -
Mysql:存储过程中动态SQL返回多个值的写法
2010-01-30 17:48 3010DROP PROCEDURE IF EXISTS TEST; ... -
MySQL错误:Out of range value adjusted for column ...
2010-01-30 17:24 2112写Mysql存储过程时碰见了这样的错误:Out of rang ... -
“0x005346c4”指令引用的“0x00786000”内存,该内存不能为读
2009-11-08 10:43 2001Mysqld-nt.exe应用程序错误: “0x00534 ...
相关推荐
随着数据量的快速增长,传统的单机数据库处理能力往往无法满足需求,因此需要通过改变架构设计,增强系统的扩展性,以组合多台低性能硬件来达成高性能系统,即所谓的“Scale Out”或“横向扩展”。 **12.1 可扩展性...
通过scale up(硬件升级)和scale out(添加节点)两种方式实现扩展。scale up适用于初期的集中化管理,但成本高昂且受限于单点故障;而scale out则具有更好的扩展性和容错性,虽然运维复杂度增加,但更适合大规模...
3. ** Scaleout 和 Scaleup**:DRDS支持多机水平扩展,通过廉价数据库阵列满足用户需求,优势在于低成本、重构方便,但也存在重构成本、分布式查询限制等问题。理想状态下,结合Scaleout与Scaleup可以兼具两者的优点...
数据库Sharding是另一种优化策略,分为水平分区和垂直分区。水平分区是将数据按某个字段值分散到多个数据库中,每个数据库包含所有列,但只负责一部分行;垂直分区则是按照列进行分割,将经常一起查询的列放在同一份...
现代企业更倾向于采用分布式数据库,如Sharding、Partitioning等技术,以实现数据的水平分割和负载均衡。 高性能是数据库系统的生命线。优化查询性能通常包括合理设计数据库模式、使用索引、调整SQL语句、缓存策略...
6. **数据库架构优化**:水平扩展(Sharding)和垂直扩展(Scale-up/Scale-out)是应对大数据量的两种常见策略。理解分布式数据库原理,熟悉主从复制、读写分离、分片策略等技术。 7. **缓存策略**:利用内存缓存如...
例如,从传统的Scale-Up(垂直扩展)到Scale-Out(水平扩展),数据库设计开始强调并行和分布式处理。分片技术成为扩展大型网站的重要手段,它将数据分散到多个数据库,通过读写分离、数据表和数据库拆分来提升性能...
扩展性有两种主要方式:Scale Out(横向扩展)和Scale Up(纵向扩展)。Scale Out是通过添加更多相对廉价的设备来提高处理能力,而Scale Up则是通过升级现有设备的硬件配置。前者更适用于web 2.0网站,后者更适合于...
扩展性有两种主要方式:Scale Out和Scale Up。Scale Out通过增加更多廉价设备实现横向扩展,适合大型网站的需求;而Scale Up则是升级现有设备,提升单台服务器性能,更适用于传统应用。在选择扩展策略时,需要考虑...
1. **Scale-up vs Scale-out**:Scale-up指的是通过增强单台服务器的能力来提高系统的处理能力;而Scale-out则是通过增加更多的服务器来分散负载,提高系统的整体处理能力。 2. **后期改造成本高**:如果一开始没有...
数据库扩展通常有两种方式:垂直扩展(Scale-up)和横向扩展(Scale-out)。垂直扩展是指通过提升单个服务器的硬件性能,如增加CPU、内存或硬盘容量来提高数据库处理能力。然而,这种方法存在物理限制,且成本高昂。...
MySQL支持水平扩展(Sharding)和垂直扩展(Scale-up/Scale-out),工商银行可能利用这些技术来应对日益增长的数据量和并发请求。 5. **运维自动化**:通过自动化工具,工商银行能实现数据库的自动监控、自动备份、...
它涵盖了非功能性需求、scale-up(垂直扩展)与scale-out(水平扩展)的区别、后期改造的成本以及价格性能曲线对系统性能的影响。这些因素共同决定了数据库系统的伸缩能力和运行效率。 接下来,复制结构是MySQL...
这可以通过横向扩展(Scale Out)或纵向扩展(Scale Up)来实现。横向扩展是指添加更多的廉价设备,如服务器,来分摊负载;纵向扩展则是升级现有设备的硬件配置。在大规模网站中,通常更倾向于横向扩展,因为它更...
这包括横向扩展(Scale Out)和纵向扩展(Scale Up)两种方式。横向扩展是通过增加更多的服务器来分散负载,纵向扩展则是通过升级现有服务器的硬件资源。 3. 高性能(High Performance):系统响应速度快,处理能力强,...
这通常通过横向扩展(Scale Out)来实现,即增加更多的廉价设备,而不是升级单一设备(Scale Up)。例如,使用分布式系统,将数据和服务分散到多个节点上,以分担负载。 高性能(High Performance)则要求系统具有...