来源:公众号《前端全栈开发者》
JAM Stack,PostgreSQL和Amazon的DynamoDB都是MongoDB的竞争替代品。
NoSQL是用于描述与SQL关系模型不对应的任何类型的数据库的名称。
NoSQL数据库起源于2009年,当时MySpace等网站规模不断扩大,之所以出现NoSQL,是因为当时的数据库无法满足所需的规模。
MongoDB是最著名的NoSQL数据库。JAVAScript开发人员经常使用它,尤其是那些使用MERN Stack或MEAN Stack(将Mongo与Express,Angular或React和Node结合使用)的开发人员。
人们为什么要离开MongoDB
一般来说,NoSQL与以往的数据库架构有很大的不同,会造成记录丢失,性能下降。NoSQL放弃了一些数据库的核心功能,这些功能使它们具有高性能且易于使用。作为响应,许多开发人员正在考虑从MongoDB和NoSQL转向其他替代方案,例如JAM Stack,PostgreSQL或DynamoDB。
《卫报》离开MongoDB是出了名的
在线出版物和英国报纸《卫报》在其2018年11月关于退出MongoDB的文章中获得了100,000多次观看。在这篇文章中,进行转换的开发人员透露,他们的团队在使用Mongo的数据库管理软件OpsManager时遇到了问题,而Mongo的支持代理在两次宕机期间并没有提供多大帮助。
MongoDB的三种选择
当许多人继续使用Mongo时,软件开发人员和数据库工程师可以使用许多替代方法,例如:
- JAM Stack:快速,安全和动态的网站无需Web服务器即可提供服务。
- PostgreSQL:SQL数据库以其可靠性,功能和性能而闻名。
- DynamoDB:Amazon Web Services(AWS)创建的NoSQL数据库。
这三个选项是当前MongoDB的最佳替代方案,在下一节中,我们将详细介绍每种选择的利弊。
MongoDB替代方案1:JAM Stack
JAM Stack是JavaScript、API和prerendered Markup的简称,它是一种完全避免需要数据库的无服务器架构。
JAM Stack甚至可以取一个文档数据库,只要数据可以移动到一大堆用Markdown写的JSON文件中。
使用JAM Stack时,通常使用Gatsby之类的工具来编译(或构建)整个应用程序。
不幸的是,这意味着任何更改都需要重建站点。
另一方面,如果通过API访问动态内容,则动态内容可以实时更改,例如通过Disqus处理的评论。
/ JAM Stack的优势 /
闪电般快速的内容交付是JAM Stack的最大优势,因为它没有服务器,整个应用程序都在客户端运行。
同时,还具有最大的seo——因为该应用程序已经过预编译,因此被当作静态页面使用,而不是按需生成。
JAM Stack的另一个优势是最小的托管成本。例如,静态页面基本上可以免费托管在AWS上。
/ JAM Stack的缺点 /
每个更改都必须重新构建,这意味着需要重新编译应用程序,然后该更改才能在线上可用。
并且,网站越大,构建时间越长。
因此,对于需要频繁发布,大量数据或实时编辑数据记录的应用程序,通常认为JAM Stack不适合。
MongoDB替代方案2:PostgreSQL
提倡使用SQL的人提到了SQL架构的流行和在SQL数据库上执行操作分析的卓越能力,关系型数据库已经发展起来了,它们可以处理几乎所有的工作负载,并满足现代应用程序所要求的可扩展性、可靠性和可用性。它们可以处理几乎所有的工作负载,并具有现代应用所要求的可扩展性、可靠性和可用性。
换句话说,如果SQL数据库可以扩展,那么它比NoSQL更可取。
PostgreSQL(也称为Postgres)是一种流行的免费SQL数据库,在其网站上称自己为“世界上最先进的开源数据库”。
/ PostgreSQL的优点 /
PostgreSQL是功能强大的软件,已经连续开发了30多年。很多人使用它,并且它有一个充满活力的社区。
它与平台无关。对于使用AWS的用户,可以使用Amazon Relational Database Service(RDS)上的Amazon Aurora托管它。
另外,PostgreSQL正在迅速发展。它的性能优于MySQL,MySQL已经比MongoDB快得多。
/ PostgreSQL的缺点 /
使用SQL本质上增加了任何项目的复杂性,它是团队每天使用的一种全新的编程语言。
从NoSQL迁移到SQL可能很困难。从根本上说,它们是一种不同类型的数据库结构。NoSQL是具有键值对的文档存储,而SQL由表和行组成。
其中一个选项,也是The Guardian在迁移中使用的,是PostgreSQL中的JSONb列类型。然而,使用JSON blobs感觉有点像黑客,就像把NoSQL数据库塞进了SQL格式。
MongoDB替代方案3:DynamoDB
DynamoDB是亚马逊网络服务(AWS)的NoSQL产品。MongoDB和DynamoDB都可以存储类似JSON的数据,具有任意的模式。
DynamoDB最近增加了一个名为rest加密的特性,现在它仍然是一个NoSQL数据库,与MongoDB竞争非常激烈。
这意味着从MongoDB迁移到DynamoDB确实非常容易。
/ DynamoDB的优点 /
DynamoDB是AWS上的旗舰NoSQL数据库,所以它的先天优势是AWS平台的成本、速度和可靠性。
作为AWS产品,它可以轻松地与AWS Lambda和API Gateway集成。
对于目前使用Mongo的人来说,DynamoDB的最大优势就是用户可以直接从MongoDB进行实时迁移到DynamoDB。
最好的部分是没有可管理的基础架构——Amazon负责管理。
/ DynamoDB的缺点 /
如果我认为NoSQL丢失记录的可能性太大,那么DynamoDB对我来说不是一个好选择。
DynamoDB可能存在可扩展性问题,比如那些与所谓的hotkeys相关的问题,这些记录的评估频率远远高于其他记录。
此外,与MongoDB相比,DynamoDB支持较少复杂的数据类型,并且是AWS专有的产品。
/ DynamoDB不是MongoDB /
Samantha Atkins和Fredrik Erasmus等有益的读者花时间对本文进行了回复,并提出了DynamoDB的其他缺点。
- 用DynamoDB做索引是很困难的,没有全表扫描就没有一般的查询支持。
- DynamoDB使得很难从集合中检索甚至简单的文档计数,并且它不使用游标。
- DynamoDB的热键和热分区需要专业技术才能有效使用。
- 使用AWS上的DynamoDB,你必须用RCU(读容量单位)和WCU(写容量单位)来指定“吞吐量容量”,这给你的项目增加了很大的复杂性。
DynamoDB被称为“我曾经使用过的最不友好的持久化解决方案”。事实上,MongoDB自己的广告文案列出了MongoDB相对于DynamoDB的十几项优势。
所以,在从MongoDB切换到DynamoDB之前,一定要三思而后行,尽管两者之间有明显的相似之处。
我的看法
JAM Stack是当今最酷的技术之一。它的速度快得离谱,易于访问,对SEO也很友好,另外静态文件在AWS上是免费托管的。
然而,JAM Stack只有对于那些有能力有一个构建步骤并重新编译每一个变化的应用程序才是正确的选择。
如果你问我,我会说,即使是非常大的网站也可以通过预定的编译,比如说每小时一次,在JAM Stack上构建。JAM Stack很激进。
它可能不适用于新闻站点,但是许多动态站点不需要比这更频繁地更新内容,静态站点当然也不需要。
SQL vs. NoSQL
如果说需要编译步骤是一个项目的决定性因素,那么就会归结为SQL与NoSQL:PostgreSQL或DynamoDB。
PostgreSQL不一定要托管在Amazon上,不过可以托管在Amazon RDS上。DynamoDB是由亚马逊开发的,是亚马逊的独家产品。
SQL数据库本身功能更强大,但也更复杂。它们的优势在于业务分析和搜索。
NoSQL数据库更容易设置,对很多项目来说足够了。这也是为什么The Guardian考虑用DynamoDB来写他们的230万篇文章。
最终,他们选择了PostgreSQL,因为DynamoDB在2017年的时候并没有提供加密功能,但如果他们今天考虑从MongoDB转移到PostgreSQL,他们很可能会做出不同的决定。
总结
JAM Stack(无服务器架构)是一个很好的选择,特别是对于任何一个以静态为主的网站,也是一个很好的技术,需要注意。
PostgreSQL拥有一个庞大的社区,并在一个可靠的、功能丰富的、性能卓越的开源软件包中提供了SQL的所有功能。
DynamoDB是MongoDB的即插即用的替代产品,它为你提供了规模、安全性和速度,而无需维护任何基础设施。