什么是nosql

本文介绍了NoSQL数据库的基本概念,包括CAP原则及NoSQL数据库的主要类型,如键值存储、列存储、文档型和图形数据库。此外,还详细对比了几种NoSQL数据库产品,如Redis、Riak、HBase、Cassandra、CouchDB、MongoDB和Neo4J的特点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NoSQL不仅仅是No SQL,还是Not only SQL
这里写图片描述
CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

分类Examples举例典型应用场景数据模型优点缺点
键值(key-value)Tokyo Cabinet/Tyrant;Redis;Voldemort;Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。Key指向 Value 的键值对,通常用hash table来实现查找速度快数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库Cassandra;HBase;Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库CouchDB;MongoDbWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。
图形(Graph)数据库Neo4J;InfoGrid;Infinite Graph社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

这里写图片描述
NoSQL具体产品种类有:
Google:Bigtable
Amazon:DynamoDB
Amazon:SimpleDB
Yahoo:HBase
Microsoft:Dynomite
Facebook:Cassandra
LinkedIn:Voldemort

Redis

关键点:超快Blazing fast ,IM data structure
engine,支持五种,Key-value最简单。只有Redis有事务机制 。
适合:不支持第二索引,在可以控制的数据库大小情况下(放得下整个内存),快速改变数据,快速写数据。 案例:股票价格系统
分析,实时数据收集,联系等等。

Riak

关键点: 容错性Fault tolerance 失败恢复 内置全文本搜索 适合: 如果你希望有类似Cassandra-like
(Dynamo-like)风格, 但是你不想处理器复杂性和膨胀性。单服务器有良好可伸缩性scalability,
可用性availability 和容错性 fault-tolerance, 采取是昂贵的多站点复制multi-site
replication. 案例:销售点数据收集,工厂控制系统,那些不能允许几秒当机的场合。

HBase

关键点:十亿级别的行 * 百万级别的列,大容量,大表模型(高一致性)。 Map/reduce with Hadoop
能够实时获得基于查询的优化性能的节约型网关适合: 适合:随机 实时的读写操作,高吞吐量写,随机访问大数据集。 案例:Facebook
消息数据库

Cassandra

关键点: 继承BigTable的列结构、Dynamo的最终一致性。 按列查询 写快于读 Map/reduce possible with
Apache Hadoop 适合:当写操作多于读操作 (如logging). 案例:银行Banking,
金融系统,写必须快于都的场合,实时的数据分析等.

HBase和Cassandra 比较

Hbase更加适合于数据仓库、大型数据的处理和分析(如进行Web页面的索引等)慢活。高一致性CP。 Cassandra
则更适合于实时事务处理和提供交互型数据 ,快活,最终一致性AP。Cossip 完全对称

CouchDB

关键点: 最终一致性, 易用。 写操作不会阻塞读操作。 内部嵌入Hadoop之类map/reduce算法。 实时更新。 累计计算,
偶尔改变数据, 预先定义的查询. 非常注重版本控制的场合. 举例:CRM, CMS系统. 主-主复制是其特别亮点,可以易于多个站点部署。
Couch 适合实时性要求不高,易于使用。文本数据库
MVCC 模型:copy-on-modified?
任何修改都会引起一个拷贝,这引起索引修改,再引起一个索引拷贝,以此类推:
CouchDB 的长处正是Redis的短处
Redis提供了简单的索引机制和复杂的数据结构,而CouchDB提供的是复杂的索引和简单的数据结构
CouchDB:存储大量的不易变但会被经常查询的大量的文档型数据。
Redis :存储小量的常变数据,存储实时数据 。

Couchbase

Couchbase基于Membase与CouchDB开发了一款个面向文档的数据库,Membase是个键/值、持久化、可伸缩的解决方案,使用了memcached
wire协议。因此,对于数据的读写来说都能提供低延迟的访问。
与CouchDB区别:Couchbase产品包含了CouchDB的一个副本。Couchbase产品向CouchDB添加了缓存、集群等功能,
Couchbase在内部数据中心使用Membase风格的复制,在数据中心之间使用CouchDB风格的复制,支持碰撞检测和决议。

MongoDB

关键点:强迫性一致;类SQL,容易上手 , 内置分片碎片 适合:需要动态查询. 愿意事先定义索引indexes,
需要巨大的数据库有良好性能。 案例:适合90%所有MySQL等RDBM场合。 问题:数据集大于内存很慢。 MongoDB
使用MapReduce替代SQL的聚合功能进行分析,但是当前是单线程,并不可伸缩。

NEO4J

图数据库,适合社会网络应用 LinkedIn Facebook 文件系统 角色关系 由nodes, relationships and
properties.组成 内存中的节点图,自动持久。

部分来自:https://www.jdon.com/nosql.html

关系型数据库和NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。 为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。 为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。 关系型数据库简史 1969年,埃德加•弗兰克•科德(Edgar Frank Codd)发表了划时代的论文,首次提出了关系数据模型的概念。但可惜的是,刊登论文的《IBM Research Report》只是IBM公司的内部刊物,因此论文反响平平。1970年,他再次在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks”(大型共享数据库的关系模型)的论文,终于引起了大家的关注。 科德所提出的关系数据模型的概念成为了现今关系型数据库的基础。当时的关系型数据库由于硬件性能低劣、处理速度过慢而迟迟没有得到实际应用。但之后随着硬件性能的提升,加之使用简单、性能优越等优点,关系型数据库得到了广泛的应用。 通用性及高性能 虽然本书是讲解NoSQL数据库的,但有一个重要的大前提,请大家一定不要误解。这个大前提就是“关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能”。毫无疑问,对于绝大多数的应用来说它都是最有效的解决方案。 突出的优势 关系型数据库作为应用广泛的通用型数据库,它的突出优势主要有以下几点: 保持数据的一致性(事务处理) 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处) 可以进行JOIN等复杂查询 存在很多实际成果和专业技术信息(成熟的技术) 这其中,能够保持数据的一致性是关系型数据库的最大优势。在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库是肯定没有错的。但是有些情况不需要JOIN,对上述关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。 关系型数据库的不足 不擅长的处理 就像之前提到的那样,关系型数据库的性能非常高。但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理: 大量数据的写入处理 为有数据更新的表做索引或表结构(schema)变更 字段不固定时应用 对简单查询需要快速返回结果的处理 。。。。。。 NoSQL数据库 为了弥补关系型数据库的不足(特别是最近几年),NoSQL数据库出现了。关系型数据库应用广泛,能进行事务处理和JOIN等复杂处理。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。 易于数据的分散 如前所述,关系型数据库并不擅长大量数据的写入处理。原本关系型数据库就是以JOIN为前提的,就是说,各个数据之间存在关联是关系型数据库得名的主要原因。为了进行JOIN处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。 提升性能和增大规模 下面说一点题外话,如果想要使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,二是增大规模。下面我们来整理一下这两者的不同。 首先,提升性能指的就是通过提升现行服务器自身的性能来提高处理能力。这是非常简单的方法,程序方面也不需要进行变更,但需要一些费用。若要购买性能翻倍的服务器,需要花费的资金往往不只是原来的2倍,可能需要多达5到10倍。这种方法虽然简单,但是成本较高。 另一方面,增大规模指的是使用多台廉价的服务器来提高处理能力。它需要对程序进行变更,但由于使用廉价的服务器,可以控制成本。另外,以后只要依葫芦画瓢增加廉价服务器的数量就可以了。 不对大量数据进行处理的话就没有使用的必要吗? NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值