【MongoDB与MySQL:如何选择】MongoDB和MySQL分别是领先的开源NoSQL和关系数据库 。哪个最适合您的应用程序?

文章插图
在1990年代的互联网泡沫时期,用于Web应用程序的一种通用软件堆栈是LAMP,它最初代表linux(OS),Apache(Web服务器),MySQL(关系数据库)和php(服务器编程语言) 。MySQL是首选的数据库,主要是因为它是免费的开源代码,并且具有良好的读取性能,非常适合从数据库动态生成网站的“ Web 2.0”应用程序 。
之后,代表MongoDB(文档数据库),Express(Web服务器),AngularJS(前端框架)和Node.js(后端JAVAScript运行时)的MEAN堆栈开始流行 。除其他原因外,MEAN堆栈很有吸引力,因为您需要了解的唯一语言是JavaScript 。与等效的LAMP堆栈相比,它还需要更少的RAM 。
什么是MySQL / MariaDB?MySQL AB的Monty Widenius和David Axmark最初于1994年开始开发MySQL 。产品名称中的“ My”是指Widenius的女儿,而不是英语单词“ my” 。MySQL旨在与mSQL(又名Mini)兼容 。SQL),并添加了SQL查询层和开放源代码许可(实际上是专有和GPL双重许可) 。MySQL的公共发行版于1996年底开始,并且每年或每两年持续发行一次 。MySQL是当前最受欢迎的关系数据库 。
Sun Microsystems于2008年以10亿美元的价格收购了MySQL AB,Oracle于2010年收购了Sun 。在Oracle收购MySQL的广泛关注中,Widenius在收购Oracle之前就将MySQL 5.5合并到了MariaDB中 。MariaDB努力维护与Oracle MySQL版本的兼容性 。
与功能更强大的商业关系数据库(例如Oracle数据库,IBM DB / 2和Microsoft SQL Server)相比,MySQL最初是一个相当低端的关系数据库,尽管它足以成为动态网站的后备存储 。多年来,它增加了您希望从关系数据库获得的大多数功能,包括事务,参照完整性约束,存储过程,游标,全文索引和搜索,地理索引和搜索以及群集 。
尽管MySQL现在支持“大数据库”功能,例如主从部署,与Memcached一起使用以及水平分片,但它仍通常用于中小型部署 。将MySQL扩展到多个从属服务器可以提高读取性能,但是只有主服务器才能接受写请求 。
AWS提供了两种形式的MySQL即服务,即Amazon RDS和Amazon Aurora 。后者具有更高的性能,可以处理TB级的数据,更新副本的延迟时间更短,并且可以直接与Oracle数据库和SQL Server竞争 。
什么是MongoDB?MongoDB是高度可伸缩的操作文档数据库,可在开源版本和商业企业版本中使用,它可以在本地运行或作为托管云服务运行 。托管云服务称为MongoDB Atlas 。
MongoDB无疑是NoSQL数据库中最受欢迎的数据库 。它的文档数据模型为开发人员提供了极大的灵活性,而其分布式体系结构则提供了很好的可伸缩性 。因此,通常选择MongoDB用于必须管理大量数据,得益于水平可伸缩性并处理不适合关系模型的数据结构的应用程序 。
MongoDB是一个基于文档的存储,在其之上还具有一个基于图形的存储 。MongoDB实际上并不存储JSON:它存储BSON(二进制JSON),该扩展了JSON表示(字符串)以包括其他类型,例如int,long,date,浮点,decimal128和地理空间坐标 。
MongoDB可以使用数据的类型生成正确的索引类型,从而在数据的单个副本上生成多模式图形,地理空间,B树和全文本索引 。MongoDB使您可以在任何文档字段上创建索引 。MongoDB 4具有多文档事务,这意味着即使必须标准化数据设计,您仍然可以获得ACID属性 。
默认情况下,MongoDB使用动态模式,有时称为无模式 。单个集合中的文档不需要具有相同的字段集,并且字段的数据类型可以在集合中的不同文档之间有所不同 。您可以随时使用动态模式更改文档结构 。
但是,可以使用架构治理 。从MongoDB 3.6开始,MongoDB支持JSON模式验证,您可以在验证器表达式中将其打开 。
LAMP和MEAN堆栈在LAMP和MEAN堆栈上存在很多变化 。例如,您可以在windows(WAMP)或macOS(MAMP)上运行而不是Linux OS 。您可以运行IIS(WIMP),而不是Windows上的Apache Web服务器 。
您可以运行PostgreSQL或SQL Server,而不是LAMP堆栈中的MySQL关系数据库 。如果您需要全球分布,则可以运行CockroachDB或google Cloud Spanner 。可以使用Perl或Python代替PHP语言 。如果要使用Java或C#进行编码,则需要考虑单独的堆栈系列 。
您可以运行Couchbase或Azure Cosmos DB以获得更好的全局分布,而不是MEAN堆栈中的MongoDB文档数据库 。可以使用十二个Node.js Web服务器框架中的任何一个来代替Express。除了AngularJS前端框架,您还可以运行Angular 2或React 。
推荐阅读
- 分析:网络中的各种互通与不通
- 雀巢,与可口可乐分手 将自行开发茶饮料
- Go语言中互斥锁与读写锁,你知多少?
- docker mysql主从,跨公网IP
- 研究表明,乌龙茶有助促进人体新陈代谢与脂肪氧化
- 纪晓岚和刘墉是同朝为官吗 纪晓岚与刘墉谁的官高
- 禅茶味 心与茶 心与心相通
- 高铁的前世今生(超级高铁的前世与今生)
- 平常心泡茶 和谐与诗意盎然其中
- 调味酒、基酒与原酒的区别
