什么是NoSQL?

46

NoSQL是什么?它是只能处理{键:值}对的数据库系统吗?

据我所知,MemCache是这样的数据库系统之一,对吗?

还有哪些流行的NoSQL数据库,它们在哪些方面有用呢?

谢谢,Boda Cydo。


10
NoSQL是一种不同于传统关系型数据库管理系统的数据库管理系统。NoSQL数据库通常不使用SQL查询语言,而是使用键值对、文档、图形或列族等不同的数据模型来组织数据。NoSQL旨在解决大规模数据处理和云计算方面的挑战,具有高可扩展性、灵活性和性能优势。NoSQL不是单一的产品,而是一个范畴,包括多种不同类型的数据库,如键值存储、文档存储、列存储、图形数据库等。 - skaffman
Jon Meredith最近向Front Range PHP用户组做了一次关于NoSQL数据库的演讲,你可能会发现它很有用:链接 - Cal Jacobson
1
https://dev59.com/ZXM_5IYBdhLWcg3wvV9w - Mauricio Scheffer
Memcache不是数据库,它是缓存! - Maxim
8个回答

24
我不同意我看到的答案,尽管确实有些NoSQL解决方案倾向于打破ACID规则,但并非所有解决方案都是从这种方法创建的。
我认为首先应该定义什么是SQL解决方案,然后在其前面加上“Not Only”,这将更准确地定义什么是NoSQL解决方案。
有了这个想法:
SQL数据库是一种将所有可通过结构化查询语言访问的数据存储库分组的方式(大多数情况下是唯一的通信方式),这意味着它要求数据库支持那些系统中常见的结构,如“表格”,“列”,“行”,“关系”等。
现在,在最后一句话前面添加“Not Only”,您将得到“NoSQL”意味着什么的定义。 NoSQL将所有存储作为尝试解决无法适应表/列/行结构甚至SQL语句的问题而创建的内容进行分组,在大多数情况下,这些数据库将不支持关系,它们放弃了众所周知的结构,只因为问题自它们的概念以来发生了变化。
如果您有一个文本文件,并创建一个API来存储/检索/组织此信息,则手头上有一个NoSQL数据库。
所有这些意味着有几种解决方案来存储信息,传统的SQL系统无法实现更好的性能、灵活性等等。每个NoSQL提供者都试图解决不同的问题,这就是为什么你不能比较两个不同的解决方案的原因,例如:
- djondb 是一个文档存储器,旨在用作NoSQL企业解决方案,支持事务、一致性等等,但牺牲了其同行的性能。 - MongoDB 是一个文档存储器(类似于djondb),它具有出色的性能,但为此交换了一些ACID属性。 - CouchDB 是另一个文档存储器,它以稍微不同的方式解决查询,提供视图以检索信息,而不必每次进行完整的查询。
正如您可能已经注意到的那样,我只谈到了文档存储器,这是因为我想向您展示3种不同的文档存储器实现具有不同的方法,因此您应该记住NoSQL存储器的黄金规则:“为正确的工作使用正确的工具”。

我是djondb的创造者,在尝试开发自己的NoSQL实现之前,我已经进行了大量的研究,但这是一个概念会不断变化的领域,将改变我们看待信息存储的方式。


它不是“不是”。它是Not Only SQL的缩写。 - Apurv Nerlekar

21

来自维基百科:

NoSQL是一个笼统的术语,指的是一类非关系型数据存储,与长期以来的关系型数据库和ACID保证有所不同。这个术语涵盖的数据存储可能不需要固定的表格架构,并通常避免联接操作。该术语最初在2009年初得到普及。

采用这种架构的动机是高可扩展性,以支持像Facebook、advertising.com等网站...


4
这些新方法的原初动力是横向可扩展性,但其他好处现在也显著,主要表现为开发的便利性。例如,面向文档的数据库消除了过去涉及对象关系“阻抗失配”的大量工作。此外,这里灵活的模式适合较新的动态类型编程语言(如Python、Ruby、PHP等)。 - dm.

8

要快速了解NoSQL系统,请查看我写的这篇博客文章:NoSQL系统的可视化指南。基本上,NoSQL系统在网络分区容错性方面牺牲了一致性或可用性。


2

什么是NoSQL?

NoSQL是Not Only SQL的缩写。NoSQL数据库的基本特点是无模式、分布式和横向可扩展,可以在普通硬件上实现。NoSQL数据库提供了各种功能来解决不同类型数据的各种问题,其中“blob”曾经是关系型数据库中存储非结构化数据的唯一数据类型。

1 动态模式 NoSQL数据库允许模式灵活。新列可以随时添加。行可能有或没有这些列的值,对于列的数据类型没有严格的强制执行。这种灵活性对于开发人员来说非常方便,特别是当他们预期在产品生命周期内频繁更改时。

2 数据类型多样 NoSQL数据库支持任何类型的数据。它支持结构化、半结构化和非结构化数据的存储。它支持日志、图像文件、视频、图形、JPEGS、JSON、XML等的存储和操作,而无需进行任何预处理。因此,它减少了ETL(提取-转换-加载)的需求。

3 高可用性集群 NoSQL数据库支持使用普通硬件进行分布式存储。它还支持通过横向扩展实现高可用性。这个特性使得NoSQL数据库可以获得云基础设施服务的弹性优势。

4 开源 NoSQL数据库是开源软件。该软件的使用是免费的,大多数都可以在商业产品中免费使用。开放源代码库可以修改以解决业务需求。开源软件许可证存在一些细微差别,用户必须注意许可协议。

5 NoSQL - 不仅仅是SQL NoSQL数据库不仅依赖于SQL来检索数据。它们提供了丰富的API接口来执行DML和CRUD操作。这些API非常友好,支持各种编程语言。



1

我在十多年前使用过一种叫做Raima Data Manager的东西,它可以被归类为NoSQL。它自称为“集合导向数据库”,不基于表格,也没有查询“语言”,只有一个C API用于请求子集。

它非常快速,在C/C++和SQL中更易于使用,无需构建字符串以传递给查询解释器,数据返回为可枚举对象而不是数组。变量大小的记录是正常的,不会浪费空间。我从未看到过源代码,但界面上有一些提示表明内部代码经常使用指针。

我不确定我使用的产品是否还在销售,但该公司仍然存在。


1

MongoDB 看起来很有趣,SourceForge 现在正在使用它

我听了一个团队成员的播客。NoSQL 的想法并不是要取代 SQL,而是为那些传统关系型数据库无法很好解决的问题提供解决方案。正如其他地方所提到的,它们更快,更好地扩展,但可靠性和原子性的代价也更高(不同程度的不同解决方案)。你不会想在金融系统中使用它,但文档型系统将非常适合。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接