本文出自HBase权威指南,我觉得书中列举的这几种维度,真的是太棒了,从这几方面入手,可以根据场景选择适合自己的数据库。
数据模型
- 键值对(key-value) redis
- 半结构化的列式存储 hbase
- 文档存储 ELK
用户的应用程序如何存/取数据,数据模式是否随时间而变化。
存储模型
- 内存
- 持久化(硬盘)
- 半持久化
相应的访问模式??
一致性模型
- 严格一致性
- 顺序一致性
- 因果一致性
- 最终一致性
- 弱一致性
物理模型
- 单机模式
- 分布式
读/写性能
需要了解自己的程序读/写情况:
- 读多写少,通常情况
- 读写相当
- 读少写多
辅助索引
辅助索引可以使用户使用不同的字段和排序访问表。
故障处理
- 机器崩溃是必须考虑的问题。
- 数据空洞如何应对
压缩
内容差异小,冗余信息多的,需要压缩算法支持
均衡负载
高吞吐场景,经典的案例就是redis的轮询
原子操作的读-修改-写
- 避免多线程造成的竞争
- compare and swap | set and check (CAS)
加锁/等待和死锁
多个客户端争夺一个资源会触发锁机制
- 悲观锁/乐观锁
- 死锁
- 锁的优先级