nosql是一个术语,我们最近非常熟悉,它用于描述一组数据库,这些数据库在编写和编写查询时不使用SQL。从键值数据库(如Reddis)到诸如MongoDB和Firestore的键值数据库到图形数据库,再到Neo4J(如Neo4J)等多种数据库,如多Paradigm数据库(如FaunaDB和Cassandra。
我相信您可能已经在职业生涯中与至少一种或两种类型的数据库合作,如果您偶然没有努力工作,请确保您完成文章,因为到我们完成时,您将有一种方向感,其中应从哪一种开始。我不会详细介绍或讨论所有不同类型的NOSQL数据库,而是我只专注于以文档为导向的数据库,因为它们在此类别中最受欢迎。
我们将在本文中介绍以下内容,因为我们讨论了面向文档的NOSQL数据库的最佳类型。
- 什么是面向文档的数据库
- mongodb
- firebase firestore
- faunadb
- 您应该去哪一个?
什么是面向文档的数据库
以文档为导向的数据库是一种NOSQL数据库,其中数据存储在类似JSON的文档中,文档将在文档中存储数据的字段和该字段的字段,而该字段则将多个文档存储在集合中。面向文档的数据库具有可选的无模式的优势。这意味着您不必为集合中的文档定义严格的结构。这使您可以准确地用宽松的结构对数据进行建模。
面向文档的数据库不使用键,无论是主要键还是辅助键,所有文档都具有可用于检索特定文档的ID。查询数据库时,您也不必担心编写复杂的加入,因为数据的不同方面之间的关系是不同的。假设我们有一个用户,我们正在收集和存储他们的地址。我们可以将其嵌入用户文档上的地址对象数组,而不是为住房创建单独的集合,以便每当我们检索用户时,我们都会自动拥有与他们的帐户关联的地址,而无需进行第二个查询或任何复杂的连接。这种方法还限制了尝试获取数据时需要进行的查询总数。 NOSQL文档数据库可以容纳不同类型的文档,因为它们使用了灵活的模式,并且大多数NOSQL文档数据库都设计了可扩展性,并结合了诸如碎片和活动活动群集之类的机制。用户可以在不需要更多硬件的情况下增加数据库容量。
这并不是说面向文档的数据并非没有任何缺点,您可以创建一个示意性数据库的事实应该使您失望,因为由于您无法描述数据的结构,因此您将开始具有结构不一致的文档,这可能会导致您的应用中的错误。其次,您无法准确地对具有牢固关系的数据集建模,并在以文档为导向的数据库内建模,有时嵌入不会给您带来的精细颗粒控制。让我们看一些最佳的NOSQL文档数据库。
mongodb
MongoDB是由Mongodb Inc.建立的NOSQL文档面向数据库。MongoDB由Dwight Merriman,Eliot Horowitz和Kevin Ryan于2007年成立。这些家伙有一家名为Doubleclick的互联网广告公司(该公司现在由Google拥有)。 MongoDB最初于2009年2月11日向公众发行。MongoDB用C ++,JavaScript和Python撰写。您可以在描述中找到指向官方存储库的链接。
mongoDB以类似JSON的对象的形式存储数据,但是,MongoDB使用代表二进制JSON的BSON存储我们的数据。 BSON是JSON文件的Binâary-En编码的SerialâizAtion。 BSON源自JSON,但BSON支持更复杂的数据类型,例如日期和二进制数据。 BSON是由MongoDB团队专门用于MongoDB的。 BSON是用于数据存储和网络传输的格式。
MongoDB的功能
mongoDB支持水平缩放,这是通过使用碎片键使用水平分区来实现的,用户选择了碎片键,它决定了如何分发集合中的数据。 MongoDB自动处理负载在不同的chrads上平衡,几乎没有努力。
MongoDB的一个很酷的功能是,它将自动复制并分发每个集合中存储的文档的副本。这样可以确保始终至少有两个文档的副本,其中任何一个都可以作为读取或写操作的主要来源。 MongoDB将管理不同的数据源,以确保每次进行读取或写操作时都能获得一致的数据。
Faunadb
Faunadb是具有内置文档数据模型的多范式关系数据库。 Faunadb为开发人员提供了使用云API中的关系和文档数据库的好处,该数据库几乎可以从任何平台访问。 Faunadb的查询语言称为FQL(Fauna查询语言),一种面向表达的查询语言,可以实现复杂,精确的操作和对文档的检索。所有FQL查询都是交易确保数据完整性的。 Faunadb是多区域的,并使用主动活动群集水平扩展,同时合并大多数现代的应用程序安全功能。
Faunadb的功能
faunadb为开发人员提供了参考。引用是一个复合值,可作为集合中任何文档的唯一ID,参考由对包含文档的集合和数字ID的参考组成。数据库中没有两个文档可以共享相同的参考。
FQL提供可用于运行查询的内置功能。我们可以组合多个内置功能来创建用户定义的功能(或UDFS)UDFS用于将常用的函数组合到可以重复存储和执行的查询中。 FaunAdb允许您从不同来源将数据导入数据库。您可以将JSON文件导入数据库,也可以导入CSV文件,如果您对此感到满意。
火箱firestore
Firebase Firestore是Firebase的NOSQL文档的数据库。 Google拥有的SAS平台。 Firestore通过提供与此列表中的其他数据库相比相对简单且易于使用的数据库来实现快速的应用程序开发。 Firestore通过实时侦听器使您的数据在客户端应用程序中保持同步,并为移动和Web提供离线支持。 Firestore允许与其他Firebase和Google Cloud产品无缝集成。
Firestore的功能
Firestore数据模型支持灵活的分层数据结构。您可以将数据存储在文档中,可以将其组织到集合中。此外,文档可以包含复杂的嵌套对象。
在Firestore中,您可以使用简单的查询来检索单独的特定文档,也可以检索与查询参数匹配的集合中的所有文档。您的查询可以包括多个链式过滤器以及混合过滤和排序。默认情况下它们也索引,因此查询性能与结果集的大小成正比,而不是数据集。它的查询语言是此列表中最简单的。
firestore缓存您的应用程序正在积极使用的数据,因此即使设备离线也可以编写,读取,收听和查询数据。当设备返回在线时,Firestore将任何本地更改同步到Cloud Firestore。
你应该去哪一个?
好吧,最终取决于您,您的需求和要求决定您应该选择哪个。如果您正在寻找易于使用并与离线支持集成在一起的东西,那么明显的答案是Firestore,但是,如果您正在寻找强大的东西,那么您必须在MongoDB和Faunadb之间进行选择。 FaunADB在MongoDB上有轻微的优势,因为FaunAdb允许您创建一个GraphQl API,以与数据库进行交互,而无需设置任何内容,只需单击几下按钮,您就可以为您设置GraphQl API,这是一个可以为您设置的东西,这是一件可以的东西特别要考虑一下,如果您愿意使用GraphQl。我想知道您关于在这篇文章上使用数据库合作的想法,如果您与其他NOSQL文档的数据库合作,请在评论部分中分享您与它们合作的想法和经验,我会在下一篇文章。