Your SlideShare is downloading. ×
0
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Nosql理论
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Nosql理论

1,626

Published on

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

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

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

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Hello , NOSQL 2011-4-12
  • 2. About me 常优 www.auu.name weibo.com/changyou52 网络电视事业部
  • 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. CAP 理论 一致性 可用性 分区容忍性 consistency 一致性 availability 可用性 tolerance of network partition 分区容错性 一个分布式系统不可能满足一致性、可用性、分区容错性这三个需求;最多只能同时满足两个。 C A P
  • 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. Why NOSQL ? <ul><li>时髦? </li></ul><ul><li>系统瓶颈带来的革命 </li></ul><ul><li>从 MYSQL 开始 </li></ul>
  • 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. 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. Mysql memcached 读 写 删除 / 更新 / 写 读缓存失败 应用层 <ul><li>通过 UDF 调用 memcached API 实现数据的写入,更新,删除 </li></ul>2. memcached 3. replication 4 . sharding 1. mysql 方式 II > 和 mysql 整合,作为一个整体对外提供服务
  • 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. 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. 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. 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. 应用层 Master slave slave slave repl 写 读 <ul><li>主 - 从 </li></ul><ul><li>通过读写分离解决部分写压力 </li></ul>2. memcached 3. replication 4 . sharding 1. mysql 从库故障解决 主库故障解决
  • 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. 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>Relication 的问题: </li></ul><ul><li>延迟 </li></ul><ul><li>大数据量下的扩展性 ( 从库读锁阻塞写请求 ) </li></ul>
  • 17. <ul><li>垂直切分 ( 适合耦合度低,业务逻辑清晰的场景 ) </li></ul>应用层 user message group events 垂直切分 DB 2. memcached 3. replication 4 . sharding 1. mysql
  • 18. Id%3 Id%3 Id%3 DB 水平切分 应用层 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>水平切分 (需要找到各表能够相关联的字段,根据某算法进行切分 ) </li></ul>
  • 19. 2. memcached 3. replication 4 . sharding 1. mysql <ul><li>使用中间层来屏蔽应用程序的复杂性 </li></ul>Amoeba Mysql proxy
  • 20. <ul><li>扩展性差强人意 </li></ul><ul><li>跨表 JOIN 效率低下 </li></ul><ul><li>应用层越来越复杂 </li></ul><ul><li>在线 DDL 如同噩梦 </li></ul>瓶颈依旧存在!
  • 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. 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. NOSQL 2. memcached 3. replication 4 . sharding 1. mysql ACIC BASE <ul><li>最终一致性代替强一致性,提升系统可用性,扩展性 </li></ul>
  • 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. 代替 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. NOSQL 选择 <ul><li>各种异常是否会丢失数据? </li></ul><ul><li>何种一致性策略? </li></ul><ul><li>系统的可控性? </li></ul><ul><li>社区支持度? </li></ul>
  • 27. Thanks

×