目录
hbase作为一种非关系型数据库系统,提供海量存储的同时想要了解hbase,可以从非关系型数据库系统的各个维度进行出发进行研究。
维度
-
数据模型
数据有多种存储方式,key-value、文档存储、半结构化列式存储。用户应该如何存储数据?
-
存储模型
内存还是持久化? 内存模式怎么保证数据不丢失? 持久化存储是否影响访问?
-
一致性模型
严格一致性or最终一致性? 如何权衡利弊?
-
物理模型
分布式模式(distribut) or 单机模式(standlone) ? 是单机运行还是运行在多台机器上? 如何做分布式 ?
-
读or写性能
读多写少? 读写相当? 写多读少? 有些系统可能只对一种支持的特别好
-
辅助索引
辅助索引支持用户按不同的字段和排序方式来访问表。如果存储系统不支持,用户的应用可以自己应对或者自己模拟辅助索引?
-
故障处理
机器会奔溃是一个客观存在的问题,如何处理故障,故障处理完后,是否可以正常工作?
-
压缩
当用户需要存储TB级的数据时,尤其当这些数据差异性很小或由可读性文本组成时,压缩会带来很好的效果,能节省大量的原始数据存储。有可选择的压缩组件? 又有哪些压缩算法可用?
-
负载均衡
对读写有高吞吐的需求,就要考虑配置一套能够随着负载变化自动均衡处理能力的系统。
-
原子操作的读-修改-写
RDBMS提供很多类似的操作,但是在分布式系统中较难实现,这些操作可以帮助用户避免多线程造成的资源竞争,有了这个操作,在设计系统的时候有效降低客户端的复杂度。
-
加锁、等待和死锁
复杂的事务处理,如2PC,会增加多个客户端竞争的同一个资源的可能性,最糟糕的情况是死锁,这种情况很难解决。系统支持哪种锁模型? 这种锁模型能否避免等待和死锁?
没有硬性的说RDBMS不能很好的解决问题,NoSql就能完美解决问题。从实际业务场景和需求选择最合适的维度,来进行系统设计,也是日常所面临的抉择。接下来日程会随着这些维度来进行hbase的探究
