nosql是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nosql是啥相关的知识,希望对你有一定的参考价值。
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。虽然NoSQL流行语火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动。尽管早期的堆栈代码只能算是一种实验,然而现在的系统已经更加的成熟、稳定。不过现在也面临着一个严酷的事实:技术越来越成熟——以至于原来很好的NoSQL数据存储不得不进行重写,也有少数人认为这就是所谓的2.0版本。这里列出一些比较知名的工具,可以为大数据建立快速、可扩展的存储库。
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:
不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。 参考技术A nosql是not only sql的意思。是近今年新发展起来的存储系统。当前使用最多的是key-value模型,用于处理超大规模的数据。
以下是摘自百度百科中的一部分
NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。
当今的应用体系结构需要数据存储在横向伸缩性上能够满足需求。而 NoSQL 存储就是为了实现这个需求。Google 的BigTable与Amazon的Dynamo是非常成功的商业 NoSQL 实现。一些开源的 NoSQL 体系,如Facebook 的Cassandra, Apache 的HBase,也得到了广泛认同。从这些NoSQL项目的名字上看不出什么相同之处:Hadoop、Voldemort、Dynomite,还有其它很多。
NoSQL与关系型数据库设计理念比较
关系型数据库中的表都是存储一些格式化的数据结构,每个元组字段的组成都一样,即使不是每个元组都需要所有的字段,但数据库会为每个元组分配所有的字段,这样的结构可以便于表与表之间进行连接等操作,但从另一个角度来说它也是关系型数据库性能瓶颈的一个因素。而非关系型数据库以键值对存储,它的结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。本回答被提问者和网友采纳 参考技术B 什么是NoSQL数据库?从名称“非SQL”或“非关系型”衍生而来,这些数据库不使用类似SQL的查询语言,通常称为结构化存储。这些数据库自1960年就已经存在,但是直到现在一些大公司(例如Google和Facebook)开始使用它们时,这些数据库才流行起来。该数据库最明显的优势是摆脱了一组固定的列、连接和类似SQL的查询语言的限制。有时,NoSQL这个名称也可能表示“不仅仅SQL”,来确保它们可能支持SQL。 NoSQL数据库使用诸如键值、宽列、图形或文档之类的数据结构,并且可以如JSON之类的不同格式存储。 参考技术C 非关系型数据库,主要是解决是海量数据下的数据库性能和扩展能力。
传统关系型数据库单表支撑到千万级基本上就达到了瓶颈,要通过分库,分表,多副本等多种方式来解决,典型的如淘宝的生成库,但是这需要有强大的数据库团队支撑,成本较高。NoSQL就为了解决在数据增长过程中面临的性能,水平扩展问题。当然选用NoSQL系统在查询复杂度等多个维度都会受到约束,选用关系型数据库分库分表后其实也是一样,复杂查询排序等能力是不能直接使用了。 参考技术D 您好
虽然关系数据库已有诸多不便,但以NoSQL目前的发展状况要代替他还为时过早,并且至少从目前来看,他们也各有所长,谁也替代不了谁。SQL语句的方便在许多情况下还是相当实用,SQL数据库软件的强壮程度度也是NoSQL数据库软件目前无法达到的。NoSQL在许多领域,比如高速缓存,高速消息队列方面有着传统关系数据库无法比拟的优势,他们将在今后一些年并驾齐驱,至于未来的方向还得看在实际使用和进一步开发中遇到的问题。这里有一篇译自Redis(一种近年来发展迅速的NoSQL数据库)官方网站的介绍文章,对NoSQL的特性可窥一斑。
这个要看你的应用范围、场景
在 Mongo 对象(文档)中实现表的正确方法是啥
【中文标题】在 Mongo 对象(文档)中实现表的正确方法是啥【英文标题】:What is the correct way to implement a table in Mongo object(document)在 Mongo 对象(文档)中实现表的正确方法是什么 【发布时间】:2020-02-16 18:53:57 【问题描述】:我对 NoSQL 数据库有点陌生,我想实现以下类型的对象。我使用 MongoDB 和 Mongoose 作为 ODM。
Field 1
Field 2
Table 1, where each row is:
Column 1
Column 2
Column 3
在 SQL DB 中,表将是一个单独的表,第一列是主对象的键。
在 Mongo 中,我可以看到两种方法。一种是制作以下架构:
Field1: Type,
Field2: Type,
Table1: [
Column1: Type,
Column2: Type,
Column3: Type
]
另外一种是单独创建一个集合“TableRow”并引用它,像这样:
Field1: Type,
Field2: Type,
Table1: [
Type: ObjectId,
Ref: "TableRow"
]
哪一个更好?或者有没有更好的方法我完全错过了?
【问题讨论】:
【参考方案1】:请使用以下代码
Field1: Type,
Field2: Type,
Table1: [
Column1: Type,
Column2: Type,
Column3: Type
]
【讨论】:
以上是关于nosql是啥的主要内容,如果未能解决你的问题,请参考以下文章