MongoDB vs dynamodb vs Tigris- NOSQL数据库比较
#dynamodb #nosql #mongodb #comparison

选择您的应用程序存储和管理数据是那些将影响您采取的其他步骤的基础决策之一。但是随着种类的多样性,您如何拨打正确的电话?

tigris是一个open source NoSQL database and search platform,您可以在任何云中,自己的硬件在任何云中运行,或者通过Tigris Cloud为您进行管理。在这里,我们将研究Tigris与MongoDBDynamoDB的比较,并提供您需要考虑的一些功能和权衡的概述。

只想看到功能比较表?没问题,view the NoSQL database comparison table >

NOSQL Databaseabiaoqian的类型

查看不同的数据存储时,您需要考虑三个基本内容:

  • NOSQL数据模型
  • Scaling
  • 一致性

这些都会影响数据库在应用程序体系结构中可以扮演的角色。 Tigris,MongoDB和DynamoDB都采用不同的方法,了解它们的不同之处将有助于您确定哪种方法最有意义。

Data models

让我们从数据模型开始。在关系dbms(例如PostgreSQL或Oracle)中,数据落入表的熟悉的行和列,并可以选择在这些表中创建关系。

使用NOSQL数据库,它们存储数据的方式有很多。最常见的非关系数据模型是:

  • 文档: MongoDB和Tigris的数据作为JSON文档,而不是在桌子中。
  • 密钥值:可能是数据库的最简单形式,键值存储(例如dynamodb)在密钥和数据项目之间具有一对一的关系。通常,数据库系统对存储的内容没有洞察力:它可以是原始文本,二进制斑点,数字,JSON或其他任何内容。
  • 列存储:与关系数据库类似,卡桑德拉(Cassandra)或谷歌(Google)的Bigtable等列存储将数据组织到列和行的家族中,但并没有将数据添加为新行,而是将其添加为新列。
  • 时间序列数据库:针对时间stamp的数据进行了优化,例如工业物联网传感器的一系列读数。
  • 多模型:数据平台,例如tigris或诸如FoundationDB之类的数据库,可能具有一个基础数据模型(例如文档或键值),但提供多种查询数据的方法脱离一个特定数据模型的范围。

Scaling

最简单的数据库可以扩大或扩展。扩展意味着将更多的RAM,磁盘空间,CPU等添加到一台机器或VM中。这种方法很容易,但是有几个弊端。最明显的是,裸金属服务器和虚拟机只能变得如此大。另一个是依靠一台计算机引入单点故障。

另一方面,

扩展可以扩展容量,通过添加更多数据库实例并在其中散布存储的数据和查询负载。这通常意味着将多个相同数据的副本存储在不同的位置或将数据存储在一个地方,但可能是指该数据属于另一台机器上的索引。但是,当您的数据库在多台计算机上扩散时,您必须在两个数据一致性方案之间进行选择。

,您必须选择。

数据一致性

在数据库中,数据一致性有两种形式之一:

  • 强烈一致:数据库确保每个数据的副本和参考都是相同的,无论访问其何处。结果,为了避免不一致而有时可能无法使用数据。
  • 高度可用:所有数据始终可用。例如,即使另一个用户更新文档的一个实例,您仍然可以在旧版本的写入完成之前访问旧版本。权衡是不同用户可能会看到相同数据的不同版本。

mongoDB,DynamoDB和Tigris都采用一些不同的方法来解决数据模型,缩放和数据一致性。这影响了它们如何在酸性交易,全文搜索和全球一致的次要索引等特征上传递。让我们详细介绍一下MongoDB,DynamoDB和Tigris之间不同的一些关键特征。

互动酸transactions

写入数据库通常由一系列操作组成。假设您正在更新现有文档。该过程看起来有点像这样:

  1. 获取现有文档。
  2. 查找并获取任何引用该文档的索引。
  3. 编写文档的新版本。
  4. 与任何副本分享新版本。
  5. 更新索引中的现有引用,添加任何新引用,并删除不再适用的引用。

假设,在撰写新文档后,有人将反铲通过数据中心的电源线,而后备发电机无法按时启动。或者,更有可能的是,硬盘驱动器意外故障并将服务器降低。服务器返回在线后,尽管有两个主要问题,但一些NOSQL数据库仍将耕作:

  • 将有两个不同版本的同一文档可以使用。
  • 索引将是不准确的。

酸性交易阻止了这些类型的不一致性。在酸性交易中,要么发生变化的每个步骤,要么没有发生。在上面的情况下,关于重新获得电源,服务器要么扭转发生的步骤,要么完成未完成的步骤。

强烈一致的全球次级索引索引

辅助索引使在文档正文中找到数据变得更加容易,更快。假设我们有一个人数据库。我们可以确定每个人的电子邮件地址都是唯一的,因此我们将其用作文档的关键。

但是,如果我们也想从某个城市找到人,那么数据库将不得不拖动每个文档才能找到匹配的文档。随之而来的读取可能需要大量时间。一种更有效的方法是维持每个城市中人们的指数。这样,例如,如果我们想从柏林找到所有的人,数据库可以在城市索引中执行单个查找以返回所有相关文档。

这些索引的准确性取决于它们何时更新。一些数据库在后台更新索引,分别与编写文档本身一样。这样,索引是准确还是陈旧的,就永远不清楚。另一方面,强烈一致的全局次级索引在更新文档时会更新。这样,它们总是最新的。

数据库Branching

想象一下在无分支的代码库上工作。您承诺的任何更改都会立即在主线中。它会扼杀大多数工程团队,并几乎不可能进行CI/CD等创新。

但这就是大多数数据库的工作方式。通过一些努力,您可以创建一个复制品,但既不是自动化的也不是标准路径。数据库分支使创建新的数据库副本与制作git分支一样简单。这样,您可以在不影响主分支的情况下创建和销毁数据库分支。

集成的全文search

辅助索引是理想的选择,当您知道您需要如何检索数据时。但是它们在某些情况下不太有用:

  • 查询很少见,以至于不值得维持次要索引的开销。例如,在我们的用户资料中,该系统可能只需要检索具有特定饮食要求的人。
  • 您无法预料所需的数据。假设每个用户配置文件还包括一个免费文本简历字段。没有简历的模式,它可以容纳任何数据,因此搜索可能是不可预测的。
  • 潜在结果分布在多个字段中。例如,检索与伦敦有联系的每个人的个人资料,可能需要潜入多个免费文本字段。

全文搜索比每个文档的蛮力查询都更有效,因为它保持了自己的索引。

自动数据库sharding

数据库超过单个服务器的那一刻,问题是如何将数据传播到每个节点。有几种常见的方法来分解或分区,数据库,但是作为应用程序开发人员,您几乎可以肯定不想详细介绍如何发生。

自动数据库碎片找到了在多个服务器上传播数据的最有效方法。根据有关数据库的不同,它将维护每个记录的多个副本,以加快数据访问并提高冗余。

云原生构建体aoqian24

今天使用的许多数据库系统可以追溯到主要在裸金属服务器上运行的整体世界。这使得供应和扩展是详细的计划。

另一方面,为云本地体系结构构建的数据存储将每个方面(例如查询,索引和持久性)分为互补服务,这些服务相互独立地扩展。这使得随着需求的变化而更轻松地调整容量。

自我管理的数据主持人26

托管数据库可以决定您对其有多少控制。纯粹的基于云的服务可能会使您的数据发生变化时更难移动数据。即使您从基于云的服务开始,自助主机的选项也可以使您灵活并避免锁定。

比较底格里氏症和蒙古德和dynamodb

在Tigris,MongoDB和DynamoDB之间做出选择时,您需要考虑上述每个条件。这是每个比较的方式。

tigris dynamodb mongodb
互动酸交易 yes 是(blocking readssignificant performance cost用于交叉交易,读/写关注)
强烈一致的全局次要索引 no
数据库分支 yes
集成的全文搜索 yes
自动数据库碎片
云本地体系结构 yes
自我管理数据托管

Tigris:MongoDB和DynamoDB备用

我们建立了底格利式,以使开发人员在替代成本的一小部分中具有酸交易的一致性。与MongoDB和DynamoDB相比,Tigris为您提供了:

  • 关键任务应用程序的一致数据:使用Tigris,您可以确定您检索到的数据始终是最新的。所有NOSQL数据库都不是这样。
  • 开发人员首先工作流程:使用database branching,您可以像代码库一样对待数据库,无论是用于测试,功能分支还是CI/CD。
  • 轻松的缩放:底格里斯的云构建结构使缩放缩放第二天性,这意味着您可以专注于数据,而蒂格里斯(Tigris)照顾机制。
  • 自助主机或云主机: tigris是完全开源的,云不可知论者,因此您可以在任何地方托管它。或通过在蒂格里斯云中托管来将繁重的举重留给我们。没有供应商锁定,也没有重型DevOps负担。
  • MongoDB兼容性:已经为MongoDB构建了应用程序吗?没问题,对于我们的MongoDB compatibility layer,您可以以最少的重构移植到底格里斯。
  • 总拥有成本较低: tigris的运行成本降低,即使在petabyte量表上也是如此。

Sign up for a free Tigris Cloud account查看我们的无服务器NOSQL数据库和搜索平台的好处。

有问题吗? Get in touch