- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分布式存储与TDDL
沈询(王晶昱)
shenxun@
你理解的存储有什么?
MYSQL/ORACLE/PGSQL/SQLSERVER ? HDFS/TFS/BIGTABLE
? TAIR/REDIS/MEMCACHED
? HBASE
? Cassandra/mongodb/Couchdb/voldmort
? neo4j
? / currently 122+
问题
ttp:/// [currently 122+] ? “I’m the fastest ”
? “but we are web scale well”
? 我们最安全,从不会失败
? 我们最简单
这个topic的目标
? 介绍一般性的分布式存储知识,以及一般
性做法
? 协助大家快速的从海量的存储引擎中选择
适合自己业务特点的引擎
? 介绍TDDL在上述关键节点上的选择和思考
? 失败经验
? 切分经验
? 未来,我们的饼是什么?
关系数据库
你在用关系数据库做什么?
关系数据库
用户
API
关系代数和
事务引擎
K-V存储
K-v存储
osql 与sql的核心区别就在于
– 数据库层是否应该全部的放弃关系代数,将所有关
系代数都交托给上层进行处理?
– 事务是否是必须应该被放弃的东西?
– 上层api,是否应该放弃sql引擎
? 永远正确定律:
– 计算机其实是个分形系统,将一系列的想法不断地
重复
– 越接近硬件和微元件,速度越快。
– 所以nosql一定会快于sql。但代价是方便性
K-v存储
所有数据存储的最基本和最底层的结构
? 与文件系统找指定的数据的作用相同,也
是根据指定的key查找到对应的数据。
? 回忆数据结构
– 处理查找,什么查找方式能达到比较好的效果?
? 二分查找
? 树
? hash
K-v存储
如何按照其他key找到对应的数据
– Second index
– 倒排索引
? 如何能够找到符合一组查询条件的查询语
句
– 组合索引 col1,col2
– Select * from tab where col1 = ? And col2 = ?
COL1 COL2
00 001
00 002
00 003
01 001
K-V分布式存储
? 很多东西可以复用,本质来说,从硬件到
软件,就是一个不断分形的过程
? 额外需要考虑的因素
– 网络延迟
? TCP/IP –公用网络,ip跳转慢,tcp包头大
? FIBRE CHANNEL – 专用 点对点传播 包头小 无ip协议
– 丢包
? Tcp 协议规范决定,努力送达但不保证一定可达
分布式场景下的存储
路由
本质来说还是个查找的过程
? 于是逻辑结构也就决定了。
– Hash
? O(1)效率
? 不支持范围查询(时间这样的查询条件不要考虑了)
? 不需要频繁调整数据分布
– Tree
? 主要是B-Tree ? O(logN)效率 ? 支持范围查询
? 需要频繁调整节点指针以适应数据分布
路由
ash
– Id % n
? 最普通的hash
? 如果id % 3 - id % 4 总共会有80%的数据发生移动,
最好情况下是倍分 id % 3 - id % 6 会有50%的数据发
生移动
? 但数据移动本身就是个要了亲命了。
路由
ash
– 一致性hash
Def idmod = id % 1000 ;
If(id = 0 and id 250)
return db1;
Else if (id = 250 and id 500)
return db2;
Else if (id = 500 and id 750)
return db3;
Else
return db4; 一致性hash
路由
ash
– 一致性hash
路由
ash
– 一致性hash
? 可以解决热点问题
? 但如果热点均匀,加机器基本等于n-2n方案
因为要在每个环上都加一台机器,才能保证所有节
点的数据的一部分迁移到新加入的机器上
路由
ash
– 虚拟节点
Def hashid = Id % 65536
Hash id Target node id
0 0
1 1
2 2
3 3
4 0
…. …
65535 3
路由
ash
– 虚拟节点
? 解决一致性hash的问题
– 解决热点问题,只需要调整对应关系即可
– 解决n-n+1问题,规则可以规定只移动需要移动的数据
? 但方案相对的复杂一些
? 一般推荐使用简单方案开始,使用n-2n方案扩容
? 只有需要的情况下,再考虑平滑的扩展到虚拟节点
方案即可
路由
-Tree
– Hbase使用的切分方法
? 支持范围查询
? 但方案过于复杂,对于大部分场景来说,引导列都
是pk.userid一类的单值查询,用树相对复杂。
? 需要频
文档评论(0)