学习NoSQL

    NoSQL的全称是Not Only SQL,不仅仅是SQL,它是跟数据库存储有关的思想。google的bigtable和amazon的dynamo是对该思想的两个优秀实现。


数据非关系化

    上一代的数据库都是关系型数据库,突出表的结构。NoSQL数据库不采用关系型,而是用key-value来存储数据,数据之间的依赖变得更加稀疏。


分布式存储

    在海量数据的数据库存储上,一般是人为的进行数据库的分布存储,依据数据的某一项属性来存储到不同的结点上。这样的划分是人为实现的,单个数据库并不知道整个数据存储分布情况。NoSQL希望把这个过程承包下来自己解决的,于是Map/Reduce,一致性Hash都应用到这里来。扩展性是分布式系统的一个重要要求,非关系型的数据库是方便扩容的。另外为了保证数据的可靠性,数据至少要有2份副本。


     以MySQL为代表的关系型数据库所遵守的规则是ACID,即原子性、一致性、独立性、持久性。而NoSQL所遵守的规则是BASE,即基本可用、软状态、最终一致性。NoSQL认为,对于分布式系统来说,系统一致性、可用性、容错性这三点的同时满足是不显示的,更不会满足高可用性。可以针对不同的场景需要,满足其中的两点,放宽对第三点的要求。


分布式哈希表DHT,一致性哈希

    哈希空间是0~2^64的数值空间,一致性哈希的思想是把要存储的数据和存储用的机器结点都映射到哈希空间,然后再做选择。把数据value映射到哈希空间,得到value的key值;把所有服务器结点映射到哈希空间,得到各node值;然后要做的就是在这个哈希空间里做key值到node值的映射。0~2^64的空间可以看作是环形的,并且再约定一个正方向,那么映射关系就可以是key值在正方向上最近的node值。

    这样一来,服务器结点的增和减(即node值的添加和移除)只会影响其最近的key值数据的存储。

    如果各服务器结点的负载不够均衡,可以添加“虚拟结点”,即添加node值使得node值在环形空间分布的更加均匀,而新添加的node值其实是已有的服务器结点。这就需要在服务器结点到node值空间的映射之间再加一层映射,让同一个服务器结点能映射到多个node值上去。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章