NoSQL学习笔记--基本概念
近开始学习NoSQL,因为一直在做关系型数据库维护工作(Oracle),所以在学习过程中,有很多东西需要转变。先做好这个心理准备。
什么是NoSQL?
在一本书上看到的定义是“Not not SQL”,而在百度百科上说的定义如下:
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”。
怎么理解?
以前都是通过SQL(Structured Query Language)语句和数据库打交道,现在来个不仅仅SQL,难道还有其他?
是的,这些数据库,不通过SQL语句照样可以交互,用shell,类Java语言的方式可以交互(MongoDB):
db.goodsbaseinf.insert(
[
{ item: "小学生教材",name:"《小学一年级语文(上册)》",price:12 },
{ item: "初中生教材",name:"《初中一年级语文(上册)》",price:15},
{ item: "高中生教材",name:"《高中一年级语文(上册)》",price:20},
{ item: "外语教材",name:"《英语全解\nABC(五年级上)》",price:30}
]
)
这个看着还熟悉点,不管怎么说出现了insert关键字。
更新:
use goodsdb
db.order.insert(
{title:"商品购物单1"
,amount:35,
detail:[{name:"苹果",price:22},{name:"面粉",price:18}]
}
)
db.order.update({title:"商品购物单1"},{$set:{title:"商品购物单2"}}) //改订单名称
db.order.find().pretty()
这个也还行,出现了update。
查询:
db.goodsbaseinf.find(
{name:"《C语言编程》"},
{name:1,price:1,_id:0})
?咋回事?不是查询吗?select呢?
还有一点,Not Only SQL,也就意味着,通过SQL也可以和数据库交互。这个是NoSQL后来的发展方向,慢慢想关系型数据库“靠拢”,靠拢的结果是出现了NewSQL。
提到NewSQL,不得不说MySQL和PostgreSQL,真的是开源数据库的常青树,什么都可以扯上关系,特别是MySQL(HandlerSocket)。
NoSQL数据库四大分类:
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存(Column Families)储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型(Document)数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.
NoSQL数据库在以下的这几种情况下比较适用:
1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境。
NoSQL普遍存在下面一些共同特征:
不需要预定义模式:
不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
无共享架构:
相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
弹性可扩展:
可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
分区:
相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
异步复制:
和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
BASE:
相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是终一致性和软事务。
NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL
来源 https://www.modb.pro/db/171322
相关文章