Hello   , NOSQL 2011-4-12
About me 常优  www.auu.name weibo.com/changyou52 网络电视事业部
<ul><li>CAP 理论 </li></ul><ul><li>什么是 NOSQL? </li></ul><ul><li>为什么使用  NOSQL? </li></ul><ul><li>从 MYSQL 到 NOSQL </li></ul><u...
CAP 理论 一致性 可用性 分区容忍性 consistency  一致性 availability  可用性 tolerance of network partition  分区容错性 一个分布式系统不可能满足一致性、可用性、分区容错性这三个...
<ul><li>Next   Generation Databases  mostly addressing some of the points : </li></ul><ul><li>being non-relational </li></...
Why NOSQL ? <ul><li>时髦?  </li></ul><ul><li>系统瓶颈带来的革命 </li></ul><ul><li>从  MYSQL  开始 </li></ul>
MYSQL 应用层 读 写 <ul><li>优化表结构 </li></ul><ul><li>优化 sql 语句 </li></ul><ul><li>优化索引 </li></ul><ul><li>优化 query cache </li></ul>...
Mysql memcache 读 写 读缓存失败 应用层 删除 / 更新 <ul><li>好处: </li></ul><ul><li>简单易用 </li></ul><ul><li>不用调整数据库相关架构 </li></ul><ul><li>坏处...
Mysql memcached 读 写 删除 / 更新 / 写 读缓存失败 应用层 <ul><li>通过 UDF 调用 memcached API  实现数据的写入,更新,删除  </li></ul>2.  memcached 3.  repl...
2.  memcached 3.  replication 4 .  sharding 1. mysql <ul><li>基于 libevent  </li></ul><ul><li>LRU  算法保证了 “热门数据”的缓存 </li></ul...
node K node <ul><li>哈希算法: </li></ul><ul><li>应用层的负载均衡算法  (  无法满足增加节点后的缓存命中率) </li></ul>K node K K node K K hash(K)  % N   n...
32 0 ~ 2 node node node node 32 0 ~ 2 node node node node node <ul><li>一致性哈希算法: </li></ul><ul><li>在  增加  /  减少  服务器时降低数据移动...
32 0 ~ 2 node node node node <ul><li>分布式一致性哈希算法: </li></ul><ul><li>在大数据量的分布式环境中,将  数据迁移  的压力均匀分散到各个节点 </li></ul>node node ...
应用层 Master slave slave slave repl 写 读 <ul><li>主 - 从 </li></ul><ul><li>通过读写分离解决部分写压力 </li></ul>2.  memcached 3.  replicatio...
应用层 Master A slave slave slave 写 读 Master B repl repl 2.  memcached 3.  replication 4 .  sharding 1. mysql <ul><li>双主 - 从 ...
2.  memcached 3.  replication 4 .  sharding 1. mysql <ul><li>Relication 的问题: </li></ul><ul><li>延迟 </li></ul><ul><li>大数据量下的...
<ul><li>垂直切分  ( 适合耦合度低,业务逻辑清晰的场景 )  </li></ul>应用层 user message group events 垂直切分 DB 2.  memcached 3.  replication 4 .  sha...
Id%3 Id%3 Id%3 DB 水平切分 应用层 2.  memcached 3.  replication 4 .  sharding 1. mysql <ul><li>水平切分  (需要找到各表能够相关联的字段,根据某算法进行切分 ) ...
2.  memcached 3.  replication 4 .  sharding 1. mysql <ul><li>使用中间层来屏蔽应用程序的复杂性 </li></ul>Amoeba Mysql proxy
<ul><li>扩展性差强人意 </li></ul><ul><li>跨表  JOIN  效率低下 </li></ul><ul><li>应用层越来越复杂  </li></ul><ul><li>在线  DDL  如同噩梦 </li></ul>瓶颈依...
再看看 CAP <ul><li>实现一个满足最终一致性  (Eventually Consistency)  和  AP  的系统是可行的 </li></ul><ul><li>对所有的数据访问,总返回一个结果  </li></ul><ul><l...
BASE ACID <ul><li>Atomicity  [  原子性  ] </li></ul><ul><li>Consistency  [  一致性  ] </li></ul><ul><li>Isolation  [  隔离性  ] </l...
NOSQL 2.  memcached 3.  replication 4 .  sharding 1. mysql ACIC  BASE <ul><li>最终一致性代替强一致性,提升系统可用性,扩展性 </li></ul>
NOSQL  参考 <ul><li>Amazon Dynamo </li></ul><ul><li>Gossip  </li></ul><ul><ul><li>每个节点都随机地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一...
代替 MYSQL ? <ul><li>NOSQL 应用场景少 </li></ul><ul><li>Mysql 依然可以搭建可扩展架构 </li></ul><ul><li>性能只是架构的一部分 </li></ul><ul><li>KISS 原则 ...
NOSQL  选择 <ul><li>各种异常是否会丢失数据? </li></ul><ul><li>何种一致性策略? </li></ul><ul><li>系统的可控性? </li></ul><ul><li>社区支持度? </li></ul>
Thanks
Upcoming SlideShare
Loading in...5
×

Nosql理论

1,636

Published on

nosql理论基础,从mysql架构变化到CAP,BASE

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,636
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
46
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Nosql理论

  1. 1. Hello , NOSQL 2011-4-12
  2. 2. About me 常优 www.auu.name weibo.com/changyou52 网络电视事业部
  3. 3. <ul><li>CAP 理论 </li></ul><ul><li>什么是 NOSQL? </li></ul><ul><li>为什么使用 NOSQL? </li></ul><ul><li>从 MYSQL 到 NOSQL </li></ul><ul><li>从 AICD 到 BASE </li></ul><ul><li>4. 代替 mysql ? </li></ul>分享
  4. 4. CAP 理论 一致性 可用性 分区容忍性 consistency 一致性 availability 可用性 tolerance of network partition 分区容错性 一个分布式系统不可能满足一致性、可用性、分区容错性这三个需求;最多只能同时满足两个。 C A P
  5. 5. <ul><li>Next Generation Databases mostly addressing some of the points : </li></ul><ul><li>being non-relational </li></ul><ul><li>distributed </li></ul><ul><li>open-source </li></ul><ul><li>horizontal scalable </li></ul>What is NOSQL ?
  6. 6. Why NOSQL ? <ul><li>时髦? </li></ul><ul><li>系统瓶颈带来的革命 </li></ul><ul><li>从 MYSQL 开始 </li></ul>
  7. 7. MYSQL 应用层 读 写 <ul><li>优化表结构 </li></ul><ul><li>优化 sql 语句 </li></ul><ul><li>优化索引 </li></ul><ul><li>优化 query cache </li></ul><ul><li>优化存储引擎 </li></ul>2. memcached 3. replication 4 . sharding 1. mysql
  8. 8. Mysql memcache 读 写 读缓存失败 应用层 删除 / 更新 <ul><li>好处: </li></ul><ul><li>简单易用 </li></ul><ul><li>不用调整数据库相关架构 </li></ul><ul><li>坏处: </li></ul><ul><li>应用层的代码量增加 </li></ul><ul><li>维护时的系统复杂度增加 </li></ul>2. memcached 3. replication 4 . sharding 1. mysql 方式 I > 作为 cache 工具
  9. 9. Mysql memcached 读 写 删除 / 更新 / 写 读缓存失败 应用层 <ul><li>通过 UDF 调用 memcached API 实现数据的写入,更新,删除 </li></ul>2. memcached 3. replication 4 . sharding 1. mysql 方式 II > 和 mysql 整合,作为一个整体对外提供服务
  10. 10. 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>基于 libevent </li></ul><ul><li>LRU 算法保证了 “热门数据”的缓存 </li></ul><ul><li>仅当无空间才会进行数据清除 </li></ul><ul><li>新浪开源: Memcached DB=BerkeleyDB+ Memcached (持久化) </li></ul>
  11. 11. node K node <ul><li>哈希算法: </li></ul><ul><li>应用层的负载均衡算法 ( 无法满足增加节点后的缓存命中率) </li></ul>K node K K node K K hash(K) % N   node K K node K K node K K K K hash(K) % N+1   MYSQL MYSQL 2. memcached 3. replication 4 . sharding 1. mysql
  12. 12. 32 0 ~ 2 node node node node 32 0 ~ 2 node node node node node <ul><li>一致性哈希算法: </li></ul><ul><li>在 增加 / 减少 服务器时降低数据移动规模,让尽可能多的数据保留在原有服务器上 </li></ul>2. memcached 3. replication 4 . sharding 1. mysql
  13. 13. 32 0 ~ 2 node node node node <ul><li>分布式一致性哈希算法: </li></ul><ul><li>在大数据量的分布式环境中,将 数据迁移 的压力均匀分散到各个节点 </li></ul>node node node node node node node node node node node node node node node Hash 算法 2. memcached 3. replication 4 . sharding 1. mysql
  14. 14. 应用层 Master slave slave slave repl 写 读 <ul><li>主 - 从 </li></ul><ul><li>通过读写分离解决部分写压力 </li></ul>2. memcached 3. replication 4 . sharding 1. mysql 从库故障解决 主库故障解决
  15. 15. 应用层 Master A slave slave slave 写 读 Master B repl repl 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>双主 - 从 </li></ul><ul><li>提高系统容错性 </li></ul>
  16. 16. 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>Relication 的问题: </li></ul><ul><li>延迟 </li></ul><ul><li>大数据量下的扩展性 ( 从库读锁阻塞写请求 ) </li></ul>
  17. 17. <ul><li>垂直切分 ( 适合耦合度低,业务逻辑清晰的场景 ) </li></ul>应用层 user message group events 垂直切分 DB 2. memcached 3. replication 4 . sharding 1. mysql
  18. 18. Id%3 Id%3 Id%3 DB 水平切分 应用层 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>水平切分 (需要找到各表能够相关联的字段,根据某算法进行切分 ) </li></ul>
  19. 19. 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>使用中间层来屏蔽应用程序的复杂性 </li></ul>Amoeba Mysql proxy
  20. 20. <ul><li>扩展性差强人意 </li></ul><ul><li>跨表 JOIN 效率低下 </li></ul><ul><li>应用层越来越复杂 </li></ul><ul><li>在线 DDL 如同噩梦 </li></ul>瓶颈依旧存在!
  21. 21. 再看看 CAP <ul><li>实现一个满足最终一致性 (Eventually Consistency) 和 AP 的系统是可行的 </li></ul><ul><li>对所有的数据访问,总返回一个结果  </li></ul><ul><li>如果期间没有报文丢失,那么返回一个满足 consistency 要求的结果   </li></ul><ul><li>现实中的一个例子是 Cassandra 系统 </li></ul><ul><li>朝 A 、 P 的方向设计,然后通过其它手段保证一致性 </li></ul>
  22. 22. BASE ACID <ul><li>Atomicity [ 原子性 ] </li></ul><ul><li>Consistency [ 一致性 ] </li></ul><ul><li>Isolation [ 隔离性 ] </li></ul><ul><li>Durability [ 持久性 ] </li></ul><ul><li>Basically Available [ 基本可用 ] </li></ul><ul><li>Soft state [ 软状态 ] </li></ul><ul><li>Eventually consistent [ 最终一致 ] </li></ul>ACID & BASE 在单机里 ACID 是数据的属性,而在分布式环境中, BASE 就是数据的属性
  23. 23. NOSQL 2. memcached 3. replication 4 . sharding 1. mysql ACIC BASE <ul><li>最终一致性代替强一致性,提升系统可用性,扩展性 </li></ul>
  24. 24. NOSQL 参考 <ul><li>Amazon Dynamo </li></ul><ul><li>Gossip </li></ul><ul><ul><li>每个节点都随机地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一致 </li></ul></ul><ul><ul><li>Gossip 是一个带冗余的容错算法,更进一步, Gossip 是一个最终一致性算法 。 </li></ul></ul>#!/usr/bin/env python example.py import mincemeat data = [ &quot;Humpty Dumpty sat on a wall&quot;, &quot;Humpty Dumpty had a great fall&quot;, &quot;All the King's horses and all the King's men&quot;, &quot;Couldn't put Humpty together again&quot;, ] def mapfn(k, v): for w in v.split(): yield w, 1 def reducefn(k, vs): result = 0 for v in vs: result += v return result s = mincemeat.Server() # The data source can be any dictionary-like object s.datasource = dict(enumerate(data)) s.mapfn = mapfn s.reducefn = reducefn results = s.run_server(password=&quot;changeme&quot;) print results <ul><li>Map / Reduce </li></ul><ul><ul><li>Map :将大的计算量分片,以便并行计算 </li></ul></ul><ul><ul><li>Reduce :将并行计算的结果进行组合, </li></ul></ul><ul><ul><li>以便得到一个最终的输出 </li></ul></ul>MapReduce 的 python 实现: sh# python example.py 另起终端运行: sh# python mincemeat.py -p changeme localhost {‘a’: 2, ‘on’: 1, ‘great’: 1, ‘Humpty’: 3, ‘again’: 1, ‘wall’: 1, ‘Dumpty’: 2, ‘men’: 1, ‘had’: 1, ‘all’: 1, ‘together’: 1, “King’s”: 2, ‘horses’: 1, ‘All’: 1, “Couldn’t”: 1, ‘fall’: 1, ‘and’: 1, ‘the’: 2, ‘put’: 1, ’sat’: 1}
  25. 25. 代替 MYSQL ? <ul><li>NOSQL 应用场景少 </li></ul><ul><li>Mysql 依然可以搭建可扩展架构 </li></ul><ul><li>性能只是架构的一部分 </li></ul><ul><li>KISS 原则 keep it sample stupid </li></ul><ul><li>没有最好的架构,只有最合适的架构 </li></ul><ul><li>NOSQL = Not Only SQL </li></ul>
  26. 26. NOSQL 选择 <ul><li>各种异常是否会丢失数据? </li></ul><ul><li>何种一致性策略? </li></ul><ul><li>系统的可控性? </li></ul><ul><li>社区支持度? </li></ul>
  27. 27. Thanks
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×