mysql与mongodb_MongoDB与MySQL:如何选择

mysql与mongodb

在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。

[您应该使用哪个数据库? 让InfoWorld成为您的指南。 最好的分布式关系数据库 。 • 最好的NoSQL数据库 。 • 最好的图形数据库 。 | 通过InfoWorld大数据和分析报告时事通讯深入了解分析和大数据。 ]

什么是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。 可以使用Angular 2或React来代替AngularJS前端框架。

如何为您的应用程序选择数据库

选择数据库时要问的最重要的问题是:

  • 您希望在应用程序成熟时存储多少数据?
  • 您希望在高峰负载下同时处理多少个用户?
  • 您的应用程序需要什么可用性,可伸缩性,延迟,吞吐量和数据一致性?
  • 您的数据库架构多久更改一次?
  • 您的用户群体的地理分布是什么?
  • 您的数据的自然“形状”是什么?
  • 您的应用程序需要在线事务处理(OLTP),分析查询(OLAP)还是同时需要两者?
  • 您期望生产中的读写比率是多少?
  • 您需要地理查询和/或全文查询吗?
  • 您首选的编程语言是什么?
  • 你有预算吗? 如果是这样,它将涵盖许可和支持合同吗?

这些问题中的几个会趋于缩小数据库的选择范围,但是与制定LAMP堆栈时相比,我们有更多选择。 如果您要构建的应用程序需要在99.999%的时间内对全世界的用户提供高度一致性,那么只有少数几个数据库适合您。 如果您的应用程序将在工作日的上午9点至下午6点在一个国家/地区使用,并且可以容忍最终的一致性,那么几乎所有数据库都可以使用,尽管某些数据库对于开发人员和操作员而言更容易,而某些数据库则可以为您的主要使用场景提供更好的性能。

虽然LAMP和MEAN堆栈一次是Web应用程序的良好解决方案,但现在都不是最佳选择。 而不是盲目采用任何一种,您应该仔细考虑用例并找到一种在可预见的将来将为您的应用程序服务的体系结构。

SQL还是NoSQL?

您什么时候需要关系数据库(例如MySQL)用于新应用程序? 除了对标准SQL的明显支持之外,关系数据库本身将数据强制为具有一致的强类型字段的表格模式,并且只要您利用规范化就可以帮助您避免数据重复。

如果需要避免丢失数据,则可以在创建或修改表时声明字段NOT NULL 。 如果您需要开放地理空间联盟定义的地理查询,则大多数关系数据库都将提供可靠的实现。 而且,如果需要全文搜索,则大多数关系数据库都允许您在文本字段上定义倒排列表索引,在MySQL中称为FULLTEXT索引。

另一方面,如果您还需要偶尔的自由格式文档,则MySQL和许多其他关系数据库也支持RFC 7159定义的JSON数据。如果您还想使用XML文档和XPath或XSLT,则大多数关系数据库都可以提供这种能力。

您什么时候想要一个文档数据库,例如MongoDB? 如果您的主要用例需要允许使用自由格式的数据,在文档之间更改类型的字段,随时间变化的架构或嵌套的文档,则NoSQL数据库将满足要求。 另外,如果您的应用程序是用JavaScript编写的,那么文档数据库的JSON格式将很自然。

翻译自: https://www.infoworld.com/article/3444586/mongodb-vs-mysql-how-to-choose.html

mysql与mongodb

你可能感兴趣的:(数据库,分布式,mysql,java,python)