Answers:
到底是什么
它是如何工作的?
标记有通用名称的每个系统的工作方式都不同,但是基本思想是通过使用不支持通用RDBMS的所有功能但仍然足够有用的数据库模型来提供更好的可伸缩性和性能。从某种意义上说,它就像MySQL,它曾一度缺乏对事务的支持,但正因为如此,它设法跑赢了其他数据库系统。如果您可以以不需要交易的方式编写应用程序,那就太好了。
为什么它比使用SQL数据库更好?那有什么好呢?
如果您的站点需要如此大规模地扩展,以至于在您负担得起的最佳硬件上运行的最佳RDBMS并尽可能进行优化,则根本无法跟上负载的负担,那将是更好的选择。它的改善程度取决于特定的用例(在“传统” RDBMS上很难进行大量的更新活动,并且要进行大量的联接)–在极端情况下,可能是1000倍。
该技术是否太新而无法开始实施,还是值得一看?
主要取决于您要实现的目标。它肯定已经成熟到可以使用。但是很少有应用程序真正需要大规模扩展。对于大多数人来说,传统的RDBMS就足够了。但是,随着互联网的使用越来越普遍,应用程序很有可能会变得越来越普遍(尽管可能不是主要的)。
transaction
?
NoSQL是个流行词。
几十年来,当人们谈论数据库时,他们指的是关系数据库。当人们谈论关系数据库时,它们是指由Edgar F. Codd的结构化查询语言控制的那些数据库。以其他方式存储数据?疯狂!其他什么都只是平面文件。
但是在过去的几年中,人们开始质疑这种教条。人们想知道带有行和列的表是否真的是表示数据的唯一方法。人们开始思考和编码,并提出了许多新概念来组织数据。他们开始创建新的数据库系统,这些系统设计用于这些新的数据处理方式。
所有这些数据库的理念是不同的。但是所有这些数据库的共同点是,结构化查询语言不再适合使用它们。因此,每个数据库都用自己的查询语言替换了SQL。因此,NoSQL这个术语诞生了,它是所有违反经典关系数据库模型的数据库技术的标签。
其实不多。
您经常会听到类似的短语:
真的吗?好吧,对于某些通常称为NoSQL的数据库,这些语句中的某些可能是正确的,但是至少每个其他语句也都是错误的。实际上,NoSQL数据库的唯一共同之处在于它们是不使用SQL的数据库。而已。定义它们的唯一一件事就是使它们彼此分开的原因。
因此,我们明确指出,所有那些通常称为NoSQL的数据库都太不同了,无法一起评估它们。他们每个人都需要分别评估,以决定它们是否适合解决特定问题。但是我们从哪里开始呢?幸运的是,NoSQL数据库可以分为某些类别,适用于不同的用例:
面向文件
示例:MongoDB,CouchDB
优势:异构数据,面向工作对象,敏捷开发
它们的优点是它们不需要一致的数据结构。当您的需求(从而数据库的布局)不断变化时,或者当您处理虽然属于一起但看起来又非常不同的数据集时,它们很有用。当您有很多带有两列的表,分别称为“键”和“值”时,这些表可能值得研究。
图形数据库
示例:Neo4j,GiraffeDB。
优势:数据挖掘
尽管大多数NoSQL数据库都放弃了管理数据关系的概念,但与那些所谓的关系数据库相比,这些数据库对它的支持更大。
他们的重点是通过数据与其他数据的关系来定义数据。如果您有很多带有主键的表,这些表是其他两个表的主键(也许还有一些描述它们之间关系的数据),那么这些表可能就很适合您。
关键值商店
示例:Redis,Cassandra,MemcacheDB
优点:通过已知键快速查找值
它们非常简单,但这使它们既快速又易于使用。如果您不需要存储过程,约束,触发器和所有这些高级数据库功能,而您只想快速存储和检索数据,那么这些就适合您。
不幸的是,他们假设您完全知道您要寻找的东西。您需要User157641的个人资料吗?没问题,只需要微秒。但是,当您希望所有16至24岁的用户的名字都以“华夫饼”作为他们最喜欢的食物并在最近24小时内登录时该怎么办?倒霉。当您没有确定结果的唯一确定键时,就无法轻易地将其从KV商店中删除。
一些NoSQL支持者声称,他们最喜欢的NoSQL数据库是新的做事方式,而SQL已经成为过去。
是吗
不,当然不是。尽管存在SQL不适合的问题,但它仍然具有优势。最好将大量数据模型最好地表示为相互引用的表的集合。尤其是因为大多数数据库程序员都经过数十年的培训,可以以关系方式思考数据,并且试图将这种思维方式推向新技术,而这种新技术却并非以失败而告终。
NoSQL数据库不是SQL的替代品-它们是替代品。
围绕不同NoSQL数据库的大多数软件生态系统尚未成熟。尽管取得了一些进步,但是您仍然没有像流行的SQL数据库一样成熟和强大的补充工具。
此外,还有更多有关SQL的知识。几代计算机科学家已经花费了数十年的职业生涯来专注于关系数据库的研究,并且表明:关于SQL数据库和关系数据建模的书面文献,无论是实用的还是理论的,都可以填满充满书籍的多个库。如何为您的数据建立关系数据库是一个经过深入研究的主题,很难找到一个没有普遍公认的最佳实践的极端案例。
另一方面,大多数NoSQL数据库仍处于起步阶段。我们仍在寻找使用它们的最佳方法。
由于有人说我以前的帖子是题外话,所以我将尽力弥补:-) NoSQL并非也从未打算取代更主流的SQL数据库,但是为了达到目的,只用了两句话以正确的视角看待事物。
成为NoSQL哲学的核心在于这样的考虑,可能用于商业性和便携性的原因,SQL引擎往往忽略UNIX操作系统及其衍生物的巨大威力。
使用基于文件系统的数据库,您可以立即利用基础操作系统不断增长的功能和强大功能,根据摩尔定律,这些功能已经稳定增长了很多年。通过这种方法,许多操作系统命令也会自动变为“数据库操作员”(例如“ ls”,“ sort”,“ find”和其他无数的UNIX shell实用程序)。
考虑到这一点并有一些创造力,您确实可以设计一个基于文件系统的数据库,该数据库能够克服许多通用SQL引擎的局限性,至少对于特定的使用模式而言,这是NoSQL理念的根本。我看的方式。
我经营着数百个网站,它们或多或少都使用NoSQL。实际上,它们并没有托管大量数据,但是即使其中一些确实存在,我也可能想到了创造性地使用NoSQL和文件系统来克服任何瓶颈。使用传统的SQL“监狱”可能会更困难。我敦促您在Google中搜索“ unix”,“ manis”和“ shaffer”,以了解我的意思。
如果我没记错的话,它是指不一定遵循关系形式的数据库类型。想到的是文档数据库,没有特定结构的数据库,也不使用SQL作为特定查询语言。
通常,它更适合于依赖数据库性能的Web应用程序,并且不需要关系数据库引擎的更高级功能。例如,通过id接口提供简单查询的Key-> Value存储可能比相应的SQL Server实现快10-100倍,而开发人员的维护成本较低。
一个例子是这种纸用于OLTP元组存储,其中牺牲单线程处理交易(没有并发问题,因为没有并发允许的),并保存在存储器中的所有数据; 与类似的RDBMS驱动系统相比,性能提高了10到100倍。基本上,它已从SQL和数据库系统的“一刀切”视图中移开。
实际上,NoSQL是一个数据库系统,它支持使用基于密钥的访问策略对大型二进制对象(文档,jpg等)进行快速访问。这与仅对字母数字值足够好的传统SQL访问有所不同。不仅内部存储和访问策略,而且显示格式的语法和限制都限制了传统的SQL。传统关系数据库的BLOB实现也遭受这些限制。
在幕后,这是对SQL模型无法支持任何形式的OLTP或对新数据格式的支持的间接承认。“支持”不仅意味着存储,还意味着完整的访问功能-使用标准模型以编程方式和查询方式。
关系狂热者迅速将NoSQL的定义从Not-SQL修改为Not-Only-SQL,以使SQL仍然有效!尤其是当我们看到当今大多数Java程序都诉诸于基础关系模型的ORM映射时,这并不是一件好事。一个新概念必须具有明确的定义。否则,它将最终像SOA一样。
NoSQL系统的基础在于随机键-值对。但是,这并不新鲜。像IMS和IDMS这样的传统数据库系统确实支持哈希随机密钥(不使用任何索引),并且仍然可以。实际上,IDMS已经有一个关键字NONSQL,它们在其中支持对旧网络数据库(称为NONSQL)的SQL访问。
NoSQL是否表示非关系数据库?
是的,NoSQL与RDBMS和OLAP不同。与传统的关系数据库相比,它使用更宽松的一致性模型。
一致性模型用于分布式系统(如分布式共享内存系统或分布式数据存储)中。
内部如何运作?
NoSQL数据库系统通常针对检索和附加操作进行了高度优化,并且除记录存储(例如键值存储)外,通常提供的功能很少。与某些SQL模型相比,与完整的SQL系统相比,运行时灵活性降低了,这可以通过对某些数据模型的可伸缩性和性能的明显提高来弥补。
它可以处理结构化和非结构化数据。它使用集合而不是表
您如何查询这样的“数据库”?
观看SQL vs NoSQL:后端之战;它说明了一切。