From: https://www.cnblogs.com/yejg1212/p/3584094.html
NoSQL数据库发展迅猛,据说现在已经有上百种NoSQL数据库了,下面来了解下常见的一些NoSQL数据库
先来看张表,了解下典型的NoSQL数据库的分类
临时性键值存储 | 永久性键值存储 | 面向文档的数据库 | 面向列的数据库 |
Memcached | Tokyo Tyrant | MangoDB | Cassandra |
Redis | Flare | CouchDB | HBase |
ROMA | HyperTable | ||
Redis |
Memcached
- 挥发性(临时性)的键值存储
- 一般作为关系型数据库的缓存来使用
- 具有非常快的处理速度
- 由于存在数据丢失的可能,所以一般用来处理不需要持久保存的数据
- 用于需要使用expires时(需要定期清除数据)
- 使用一致性散列(Consistent Hashing)算法来分散数据
Tokyo Tyrant
- 持久性的键值存储
- 用来处理需要持久保存,高速处理的数据
- 具有非常快的处理速度
- 用于不需要定期清除的数据
- 使用一致性散列(Consistent Hashing)算法来分散数据
Redis
- 兼具Memcached和Tokyo Tyrant优势的键值存储
- 擅长处理数组类型的数据
- 具有非常快的处理速度
- 可以高速处理时间序列的数据,易于处理集合运算
- 拥有很多可以进行原子操作的方法
- 使用一致性散列(Consistent Hashing)算法来分散数据
MongoDB
- 面向无需定义表结构的文档数据
- 具有非常快的处理速度
- 通过BSON的形式可以保存和查询任何类型的数据
- 无法进行JOIN处理,但是可以通过嵌入(embed)来实现同样的功能
- 使用sharding(范围分割)算法来分散数据
上面多次提到了一致性散列,那到底什么是一致性散列呢?请参考这里 ,我就不赘述了
不过,当server数量很少时,很可能他们在圆周上的分布不是特别均匀,
导致cache不能均匀分布到所有的server上。
这时候,就该请出虚拟节点了
为每个物理节点(服务器)在圆上分配100~200个点,
这样就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布,
用户数据映射在虚拟节点上,就表示用户数据真正存储位置是在该虚拟节点代表的实际物理服务器上。