NoSQL概念理解
一 NoSQL与RDBMS的九点区别联系(Ref:http://blog.sina.com.cn/s/blog_5373fb0b0101ft8a.html)
1 理解ACID与BASE的区别(ACID是关系型数据库强一致性的四个要求,而BASE是NoSQL数据库通常对可用性及一致性的弱要求原则,它们的意思分别是,ACID:atomicity, consistency, isolation, durability;BASE:Basically Available, Soft-state, Eventually Consistent。同时有意思的是ACID在英语里意为酸,BASE意思为碱)
2 理解持久化与非持久化的区别。这么说是因为有的NoSQL系统是纯内存存储的。
3 你必须意识到传统有关系型数据库与NoSQL系统在数据结构上的本质区别。传统关系型数据库通常是基于行的表格型存储,而NoSQL系统包括了列式存储(Cassandra)、key/value存储(Memcached)、文档型存储(CouchDB)以及图结构存储(Neo4j)
4与传统关系数据库有统一的SQL语言操作接口不同,NoSQL系统通常有自己特有的API接口。
5 在架构上,你必须搞清楚,NoSQL系统是被设计用于成百上千台机器的集群中的,而非共享型数据库系统的架构。
6在NoSQL系统中,可能你得习惯一下不知道你的数据具体存在何处的情况。
7 在NoSQL系统中,你最好习惯它的弱一致性。”eventually consistent”(最终一致性)正是BASE原则中的重要一项。比如在Twitter,你在Followers列表中经常会感受到数据的延迟。
8 在NoSQL系统中,你要理解,很多时候数据并不总是可用的。
9 你得理解,有的方案是拥有分区容忍性的,有的方案不一定有。
二 BASE理解(http://blog.csdn.net/historyasamirror/article/details/4458369)
最早发现 soft state这个词,是在 brewer一篇 PPT中(不熟悉brewer的,可以看我前面写的一篇文章 ),里面提到了著名的 BASE 准则 :
Basically Available,Soft-state,Eventual Consistency
当时对 soft state百思不得其解,查了很多资料,解释也是千奇百怪。其中,查阅了 brewer自己写的 paper【1】,里面的解释更加让人稀里糊涂。而在著名的 DBAnote的一篇 blog 中,则将 soft state理解为“无连接的”,这样的解释也没有太强的说服力。
直到最近,我才找到了一个比较合理的理解。在《Distributed Systems Principles and Paradigms, 2nd》的 3.4节,谈到 client-server架构中的 server端的设计,提出了一个很重要的问题,那就是 whether or not the server is stateless。
所谓的 stateless,指的就是在 client与 server交互过程中, server端是否保存这个 client的 state(状态信息)。如果不保存,就是 stateless。注意,这里提到的 stateless,只是指 server端没有保存 client的状态信息,并不是说这个交互不存在状态信息。事实上,这个状态信息可以在 client端维护,在交互的时候,如果有必要, client可以将 state作为参数传递给 server。而在 server端一边,由于不需要保存 client的状态信息,可以极大地提高自身的 scalability和 performance(想象一下,如果一个 stateful的 server突然崩溃了,那么它要重新恢复到崩溃前的状态是多么的难,因为它不仅需要重启 server程序,还要找回所有 client的状态信息)。
在现在很流行的 REST架构风格中,就明确提出,“所有的操作都是无状态的( stateless)”。
与 stateless对应的就是 stateful server。这两者概念上完全相反,就不多解释了。
然而,除了 stateless和 stateful之外,还存在另外一种方式,就是我们之前提到的 soft state。其实,你可以将 soft state看做是 stateless的一个特殊情况,它的定义就是“ the server promises to maintain state on behalf of the client, but only for a limited time. After that time has expired, the server falls back to default behavior, thereby discarding any information it kept on account of the associated client”,简单翻译就是, server端会以 client的名义维护状态,但是仅仅维持一小段时间,过了这段时间, server就会将这些状态信息扔掉(听着有点像 cache)。
书中还提到, soft state这个概念最早来源于计算机网络中的协议设计( protocol design),现在则被用于 server设计中。更多的资料可以参考【2】。
顺带提一句,在DBAnote的那篇blog中,还将basically available翻译成“基本可用”,我觉着也不妥。basically在这里翻译成“主要地”更合适,表明BASE准则侧重于满足系统的可用性。事实上,BASE的基本思想就是牺牲数据的一致性来满足系统的高可用性。
(其实,到这我也只是对 soft state有了一个模糊地概念,离深入理解还差得远,不过毕竟找到了对应的资料,以后有空的话,可以直接读 paper。)
浙公网安备 33010602011771号