- 浏览: 2084220 次
- 性别:
- 来自: NYC
-
文章分类
- 全部博客 (628)
- Linux (53)
- RubyOnRails (294)
- HTML (8)
- 手册指南 (5)
- Mysql (14)
- PHP (3)
- Rails 汇总 (13)
- 读书 (22)
- plugin 插件介绍与应用 (12)
- Flex (2)
- Ruby技巧 (7)
- Gem包介绍 (1)
- javascript Jquery ext prototype (21)
- IT生活 (6)
- 小工具 (4)
- PHP 部署 drupal (1)
- javascript Jquery sort plugin 插件 (2)
- iphone siri ios (1)
- Ruby On Rails (106)
- 编程概念 (1)
- Unit Test (4)
- Ruby 1.9 (24)
- rake (1)
- Postgresql (6)
- ruby (5)
- respond_to? (1)
- method_missing (1)
- git (8)
- Rspec (1)
- ios (1)
- jquery (1)
- Sinatra (1)
最新评论
-
dadadada2x:
user模型里加上 protected def email ...
流行的权限管理 gem devise的定制 -
Sev7en_jun:
shrekting 写道var pattern = /^(0| ...
强悍的ip格式 正则表达式验证 -
jiasanshou:
好文章!!!
RPM包rpmbuild SPEC文件深度说明 -
寻得乐中乐:
link_to其实就是个a标签,使用css控制,添加一个参数: ...
Rails在link_to中加参数 -
aiafei0001:
完全看不懂,不知所然.能表达清楚一点?
"$ is not defined" 的问题怎么办
这个东西一面试就有人想问,还不明着问,开个帖子收集相关的东西
简单介绍
我们IE上有个实践讨论讨论很不错
http://argan.iteye.com/blog/368453
摘要:
数据库的sharding技术作为一个“新瓶装旧酒”的概念,在新的应用环境中被赋予了新的意义。随着云计算的发展,sharding在最近几年是越来越火热,越来越多的产品开始声称自己支持sharding功能。那么到底什么是sharding,sharding到底能为你的数据库应用带来哪些好处。另外最重要的,如何实现一个sharding系统,有哪些sharding算法可供选择。本文将为你解决这些问题。
一. 简介
1. 背景
数据库的扩展是一个永恒的话题。对于传统的关系数据库,采用的是纵向扩展(Scale Up)的方式,即买更好的机器添加更多的资源来取得更好的性能(如硬件升级、更快更多的CPU、更大的内存、更多更大的磁盘等)。而形式上采用的是并行数据库、分布式数据库的模式,具体细节依赖水平分区或者垂直分区的技术。关系数据库通过ScaleUp方式已在传统的企业应用环境中统治了将近三十多年。
但是近年来随着数据量的暴增尤其是云计算模式的出现,这种扩展模式对于某些应用已经不太适合,这时便出现了横向扩展(Scale Out)模式。这种方式采用一些Ad-hoc的技术,比如说对数据库进行主从配置(Master-Slave)、采用数据库复制(Replication)技术以及服务器的缓存(Server Cache)等,来将负载分布到多个物理节点上去。另外sharding技术也逐步发展,并在近年来吸引了众人的眼球。
2. 什么是Sharding
Sharding 是把数据库Scale Out到多个物理节点上的一种有效的方式。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做sharding,可以翻译为分片。
形式上,Sharding可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个shard,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。一个shard可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个shard被放置在一个数据库服务器上。一个数据库服务器可以处理一个或多个shard的数据。系统中需要有服务器进行查询路由转发,负责将查询转发到包含该查询所访问数据的shard或shards节点上去执行。
3. Sharding与分区的比较
Sharding与分区有着千丝万缕的联系,它们所采取的技术本质上是类似的,可以说sharding的概念就是由分区而来。在某些情况下sharding可能指的就是水平分区。另外有些文档中使用了fragment(也是碎片的意思)的术语(在并行数据库中的这些分区称为partition,在分布式数据库中则称为fragment)。\ref footnote 1
Foot note 1:
[[
Daniel C. Zilio. Physical Database Design Decision Algorithms and ConcurrentReorganization for Parallel Database Systems. PhD thesis 1997.
M. Tamer Özsu, Patrick Valduriez. Principles ofDistributed Database Systems, Third Edition. Springer. 2011
]]
但是我们所说的sharding和分区还是有很大区别的。下面罗列一下:
(1)扩展方式不同。Sharding属于scaleout,而分区则属于scale up方式。
(2)目的不同。分区的目的是为了将一个查询进行并行处理,这样所有的节点能并行处理一个查询;而sharding是让每个节点尽量处理不同的查询。
(3)应用场景:分区适用与传统的企业应用,尤其是OLAP的应用,基本上每个查询都需要访问大部分的数据;而sharding适用于云Web应用,特征是有大量的用户和查询,但是每个查询访问到的元组是非常少的,sharding可以将负载分散到多个物理节点上。
(4)可用性:对于分布式数据库基本上每个查询都需要所有的节点参与,如果某些节点down掉后,系统会大受影响;而sharding所处理的应用一般只涉及到少数几个节点,所以可用性上sharding要好一些。另外分布式数据库需要有一个主节点来生成执行计划并协调相关节点执行等,很容易形成单点瓶颈。
(5)分割粒度:分区一般只针对于一个数据库内部进行分割;而sharding可以以数据库为粒度进行分割,因此可用来构建多租房数据库系统(multi-tenantdatabase)。
4.Sharding的优点
对于Sharding来说,主要有以下主要的优点:
(1)提高了数据库的可扩展性,可以随着应用的增长来增加更多的服务器,只需要将新增加的数据以及负载放到新加的服务器上就可以。
(2)提高了数据库的可用性。其中几个shard服务器down掉之后,并不会使整个系统对外停止服务,而只会影响到需要访问这几个shard服务器上的数据的用户。
(3)小的数据库的查询压力比较小,查询更快,性能更好。
(4)系统有更好的可管理性。对系统的升级和配置可以按照shard一个一个来做,并不会对服务产生大的影响。
http://qing.weibo.com/2294942122/88ca09aa330004tp.html
简单介绍
我们IE上有个实践讨论讨论很不错
http://argan.iteye.com/blog/368453
引用
摘要:
数据库的sharding技术作为一个“新瓶装旧酒”的概念,在新的应用环境中被赋予了新的意义。随着云计算的发展,sharding在最近几年是越来越火热,越来越多的产品开始声称自己支持sharding功能。那么到底什么是sharding,sharding到底能为你的数据库应用带来哪些好处。另外最重要的,如何实现一个sharding系统,有哪些sharding算法可供选择。本文将为你解决这些问题。
一. 简介
1. 背景
数据库的扩展是一个永恒的话题。对于传统的关系数据库,采用的是纵向扩展(Scale Up)的方式,即买更好的机器添加更多的资源来取得更好的性能(如硬件升级、更快更多的CPU、更大的内存、更多更大的磁盘等)。而形式上采用的是并行数据库、分布式数据库的模式,具体细节依赖水平分区或者垂直分区的技术。关系数据库通过ScaleUp方式已在传统的企业应用环境中统治了将近三十多年。
但是近年来随着数据量的暴增尤其是云计算模式的出现,这种扩展模式对于某些应用已经不太适合,这时便出现了横向扩展(Scale Out)模式。这种方式采用一些Ad-hoc的技术,比如说对数据库进行主从配置(Master-Slave)、采用数据库复制(Replication)技术以及服务器的缓存(Server Cache)等,来将负载分布到多个物理节点上去。另外sharding技术也逐步发展,并在近年来吸引了众人的眼球。
2. 什么是Sharding
Sharding 是把数据库Scale Out到多个物理节点上的一种有效的方式。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做sharding,可以翻译为分片。
形式上,Sharding可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个shard,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。一个shard可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个shard被放置在一个数据库服务器上。一个数据库服务器可以处理一个或多个shard的数据。系统中需要有服务器进行查询路由转发,负责将查询转发到包含该查询所访问数据的shard或shards节点上去执行。
3. Sharding与分区的比较
Sharding与分区有着千丝万缕的联系,它们所采取的技术本质上是类似的,可以说sharding的概念就是由分区而来。在某些情况下sharding可能指的就是水平分区。另外有些文档中使用了fragment(也是碎片的意思)的术语(在并行数据库中的这些分区称为partition,在分布式数据库中则称为fragment)。\ref footnote 1
Foot note 1:
[[
Daniel C. Zilio. Physical Database Design Decision Algorithms and ConcurrentReorganization for Parallel Database Systems. PhD thesis 1997.
M. Tamer Özsu, Patrick Valduriez. Principles ofDistributed Database Systems, Third Edition. Springer. 2011
]]
但是我们所说的sharding和分区还是有很大区别的。下面罗列一下:
(1)扩展方式不同。Sharding属于scaleout,而分区则属于scale up方式。
(2)目的不同。分区的目的是为了将一个查询进行并行处理,这样所有的节点能并行处理一个查询;而sharding是让每个节点尽量处理不同的查询。
(3)应用场景:分区适用与传统的企业应用,尤其是OLAP的应用,基本上每个查询都需要访问大部分的数据;而sharding适用于云Web应用,特征是有大量的用户和查询,但是每个查询访问到的元组是非常少的,sharding可以将负载分散到多个物理节点上。
(4)可用性:对于分布式数据库基本上每个查询都需要所有的节点参与,如果某些节点down掉后,系统会大受影响;而sharding所处理的应用一般只涉及到少数几个节点,所以可用性上sharding要好一些。另外分布式数据库需要有一个主节点来生成执行计划并协调相关节点执行等,很容易形成单点瓶颈。
(5)分割粒度:分区一般只针对于一个数据库内部进行分割;而sharding可以以数据库为粒度进行分割,因此可用来构建多租房数据库系统(multi-tenantdatabase)。
4.Sharding的优点
对于Sharding来说,主要有以下主要的优点:
(1)提高了数据库的可扩展性,可以随着应用的增长来增加更多的服务器,只需要将新增加的数据以及负载放到新加的服务器上就可以。
(2)提高了数据库的可用性。其中几个shard服务器down掉之后,并不会使整个系统对外停止服务,而只会影响到需要访问这几个shard服务器上的数据的用户。
(3)小的数据库的查询压力比较小,查询更快,性能更好。
(4)系统有更好的可管理性。对系统的升级和配置可以按照shard一个一个来做,并不会对服务产生大的影响。
http://qing.weibo.com/2294942122/88ca09aa330004tp.html
发表评论
-
Destroying a Postgres DB on Heroku
2013-04-24 10:58 951heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3270reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3315alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1486问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1398这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1368以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1920首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2287这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2288开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1259class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8165TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2044刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
rails面试碎碎念
2011-11-12 23:51 1962面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17258git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2751简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 963第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1708开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12976Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2148又是这个date format的错误。 上次出错忘了,记录下 ... -
ruby面试系列五,面试题及其他
2011-11-05 21:18 7423周六早晨,因为早了所 ...
相关推荐
原来很多项目都是单体的,随着瓶颈要扩的,之前说的应用的拆分,这次说说数据库层级的。 如果我们使用单个数据库,容量是在500万(单表条数),但是如果mysql的调优,数据可以达到1000万,然而单个库好像是不能超过...
说说分库与分表的设计: 1. 水平分库:以字段为依据,按照一定策略(hash、range 等),将一个库中的数据拆分到多个库中。 2. 水平分表:以字段为依据,按照一定策略(hash、range 等),将一个表中的数据拆分到多...
说说分库与分表的设计: 分库分表方案: 1. 水平分库:以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中 2. 水平分表:以字段为依据,按照一定策略(hash、range等),将一个表中的...
在数据库领域,"Sharding"是指将大数据分布到多个数据库节点上的技术,目的是为了提高可扩展性和性能。水晶碎片可能就是这个客户端库实现的分布式连接池,用于管理多个Tarantool数据库实例的连接。连接池是一种资源...
Redis集群是一种分布式的部署方案,通过分区(sharding)和复制(replication)机制实现数据的水平扩展和高可用性。每个节点负责一部分数据,客户端请求会被重定向到正确的节点。集群中的节点间通过Gossip协议维护元...