大数据挑战与NoSQL数据库技术
目录
概论
数据一致性理论
- CAP
- 最终一致性:
- 因果
- 读自己的写
- 会话
- 单调读
- 时间轴(单调写)
- ACID/BASE
- 一致性实现技术
- Quorum系统NRW策略
- 2PC(缺点:阻塞协议)
- 3PC:引入‘超时’
- 变种:树形2PC 动态2PC
- 时间戳
- Paxos
- 3种角色:提议者(proposer)、批准者(acceptor)、学习者
- 选择唯一的提议:一个批准者选择第一个提议 => 多个批准者进行超过半数(保证了只有1个选中)投票
- 一个批准者可以批准多个提议(使用版本号),只要它们内容相同
- =>如果一个提议被选中,那么以后任何提议者都只能提出相同值的提议(强一致性?)
- 版本号n的‘准备请求’?=> (n,v)提议
- 批准者可以接受版本号为n的提议 iff 它没有响应过版本号大于n的准备请求*
- * 如何让学习者主动获取最新提议?可让学习者充当一个提议者
- * 系统需要选出某个提议者作为唯一的提议者(防止不同的提议者互相竞争用尽版本号资源/死锁)
- p38 ZooKeeper使用这种策略,称为‘领导选取’
- me:真烦,感觉总是会有漏洞,可以使用同步协议吗?
- 向量时钟
存储模型
- CouchDB用JSON格式存储吗?那它怎么高效索引?
- GraphDB用C#开发?
分区与放置策略
- 分区:范围(基于比较操作?)、列表(基于离散的值,集合?)、Hash(某种非线性映射?怎么保证均匀分布?)
- 放置:顺序、随机
- 一致性Hash:引入‘虚拟节点’解决LB
- 所谓的‘虚拟环’可以理解为Hash值经过了模运算?
- 实际上,‘虚拟节点’与物理节点之间可以采用(固定的?)非线性映射,只要能够适应实际的数据即可
海量数据处理
- MaReduce
- MS Dryad
- Cosmos
- SCOPE
- DryadLINQ
复制与容错
- 海量数据的复制策略
- Dynamo:优先列表?
- CouchDB:(似乎挺适合文档同步?不过对小数目的文件,没有网盘好用)
- PNUTS:主从模式,更新提交到YMB后异步复制,‘修改操作呈现很强的局部性’?
- 海量数据的故障发现与处理
- Dynamo:Hinted Handoff?
数据压缩
- LZO
缓存
key-value
- redis
- v1.2:有序集合,ZRANGE
- LinkedIn的Voldemort*
列向
- BigTable
- Hypertable
- Hyperspace(~Chubby)
- RangeServer
- DFS Broker
- 只能按主键查询 => 索引:再建一张表
- HQL
- Cassandra
- 一致性Hash:Token、Range、Partitioner
- Gossip协议
- 备份机制:机架感知
- 读写机制:0 ANY 1 QUORUM ALL
文档
- CouchDB
- 历史:IBM的Damien Katz,C++ Append Only --> Erlang --> XML换成JSON,JS查询引擎 --> 支持Map/Reduce
- Futon
- MVCC:一个HTTP连接打开一个快照视图
- Design文档
- 存储结构:B+树,ID和序列号作为key
- 数据一致性机制:2个‘文件页脚’?
- 分布式:CouchDB Lounge?
- MongoDB
- 性能比CouchDB好
- 二进制协议
- 内存映射
- 面向集合的存储,同一集合中有序
- 直接修改,非MVCC
- C++编写
- 性能比CouchDB好
图
- Neo4j
- p257 图遍历的速度是常数,和图的规模无关?
GraphDBC#写的就算了- OrientDB(文档+图?)
- me:如何实现一个通用的B+树文件存储引擎,并支持大规模并发访问事务?
- 如何进一步在上面叠加一层GIS 2D查询,乃至更广泛的k-d层次索引?
- 并发下的性能:GeoHash?
- 如何在GIS 2D查询上再次叠加‘路径规划’功能?
- 现有的基于PostgreSQL的GIS插件功能和性能如何?
- 如何引入外部的矢量地图生成模块?(这应该是ArcGIS的核心功能?)
- 如何进一步在上面叠加一层GIS 2D查询,乃至更广泛的k-d层次索引?
基于Hadoop
- HBase
- Hive
- Pig
NewSQL
- MySQL Cluster
- 不是万能的:较大的JOIN性能不好、只支持读提交隔离级别
- 部署和调优困难
- sharding vs 分区(??)
- 用单独的DB保存数据库配置(O,i remember...)
- VoltDB(内存数据库)
分布式缓存
- Memcached
- MS Velocity
企业应用
- Facebook对HBase的使用
- 淘宝OceanBase
怎么感觉好像以前看过