mysql支持nosql_七大理由:为什么使用MySQL的NoSQL?(蚂蚁金服架构师告诉我的)...

前言

MySQL 8.0中一个很棒的新功能是文档存储。 现在使用MySQL,您可以将JSON文档存储在集合中,并使用CRUD操作对其进行管理。NoSQL现在是MySQL的一部分! 而不是MongoDB和MySQL的混合,现在你可以消除MongoDB并与MySQL合并!ce5a68df577da8f8703c20c66cd13372.png

这是NoSQL和SQL在同一个数据库服务器上的历史性汇集 !bb54e12ab4c9b71e5c333b5999a8fc6b.png

要将MySQL 8.0用作文档存储,您需要安装X插件(默认情况下从8.0.11开始)。 该插件支持[X DevAPI],提供编程接口。 使用X协议与MySQL服务器通信的客户端可以使用X DevAPI开发应用程序。 然后X协议允许这些客户端和服务器之间更灵活的连接。 它支持SQL和NoSQL API,并且可以执行非阻塞异步调用。

让我们来看下使用MySql来完成你NoSQL功能的主要原因:MyS    QL关心你的数据安全! MySql的NoSQL完全符合ACID标准

CRUD操作并不一定需要SQL来完成

无模式

Document的数据完整性提供了保证

允许SQL查询Document(对分析非常重要)

文档没有16MB的限制

提供简单的查询语法

MySQL关心你的数据! NoSQL完全符合ACID标准

与传统的NoSQL数据库不同,MySQL符合完整的[ACID] (原子性,一致性,隔离性和耐久性)。 大多数时候NoSQL数据库都被人诟病,说它们缺乏持久性。 这意味着有时数据可能会在崩溃后丢失。 实际上,也不保证一致性 。

但是 MySQL Document Store依赖于InnoDB存储引擎,因此文档存储受益于InnoDB的强大和强大。默认情况下,开箱即用,InnoDB是完全持久的,一旦数据被确认为已提交,它将不会丢失:5db2597dc6ce8e0a1bd00534a23002c6.png

MySQL Document 存储也支持原子性和隔离,因为还支持事务!

看下下面的示例:61a0d01b050d808877529e71522e1f31.png

CRUD操作(SQL不再是强制性的)

通过新的MySQL文档存储和X协议,我们引入了新的操作来管理集合和/或关系表。 这些操作称为[CRUD] (创建,读取,更新,删除)操作,它们允许您在不编写单行SQL的情况下管理数据。

我们当然将CRUD操作区分为两组,一组用于集合 ,另一组用于表 :87bad483ba37c74d301e987259cf688b.png

您已经在上面的示例中看到了如何使用find()和add() ,这个时候不使用sql语句也能操作数据了。

无框架

MySQL Document Store为您带来了新的无模式数据。 实际上,在存储文档时,您不需要事先知道所有属性,如果需要,您可以随时修改文档。 由于您不需要专注于表设计,因此您无需处理规范化,外键和约束甚至数据类型。 这使您可以进行非常快速的初始开发。 由于文档是动态的,因此模式迁移也不再是问题,并且可以忘记大的ALTER语句。

例如,让我们使用以下数据:ee32b019da18ad3005294e64bc19fd3e.png

现在让我们假设我们想为所有用户添加一个新属性,您可以在不运行ALTER语句的情况下执行此操作:c3257da67905ad291d839dd1b14ebf7a.png

让我们验证其中一条记录:5791d4386fd305d345985f9e796218a6.png

因此,具有这种可能性,为开发人员提供了更多的自由来维护他们编写文档的方式,并且他们不依赖于需要运行大型alter语句的运营团队

文档可以提供数据完整性

即使无模式非常重要,有时人们也希望强制数据完整性。 使用MySQL文档存储,也可以为文档创建和维护约束和外键。

这是一个我们有两个集合的例子: 用户和部门 ,我们创建了一个GENERATED STORED列作为外键:298c0721ac480284cefd4ee29cdcfe94.png

让我们在这些新列上添加一些索引:141b0f94ca0e0b77232c0c24c39908a0.png

现在,让我们创建约束,我希望如果我删除部门,那些部门的所有用户都会被删除:6488d838ad8b9fe90fb13051a8c58d48.png

正如您所看到的,实现外键约束以增强数据完整性是可能且非常容易的。

允许SQL(对分析非常重要)

正如您在前面的观点中看到的那样,可以将SQL和NoSQL混合使用,事实上,我认为前端的开发人员只会使用NoSQL来创建和使用看作对象的数据,而在后台工作更多的人将继续使用SQL来创建报表和分析。

为了说明使用Documents的MySQL的强大功能,我将使用另一种流行的NoSQL解决方案中受欢迎的餐厅示例集合。

这是存储在集合中的文档示例:f2f75347d477534a81c08473ade966d6.png

可以看到餐厅可以评级,当然还有一种美食风格。

我们可以尝试找到结果的一个简单查询是:每家餐厅的平均成绩是多少? (并将结果限制为10)e3622a3cdec9a1a938e362c97ca2eb37.png

是不是特别的棒,用sql也完成了Document的查询。

再来看下一个另外的问题:

给我10家最好的餐厅,但他们都必须来自不同的美食! (这意味着,如果两个最好的餐厅是2个意大利餐厅,我只想看到两个中最好的餐厅,列表中的下一个餐厅应该是第三个是不供应意大利食品)。

在MySQL 8.0文档存储中,我们可以使用公用表表达式(CTE)通过一个查询实现此目的:7c2d6444b425e07d1655a62f00302237.png

酷不是吗? 所以SQL不再是强制性的,但它仍然可以提供帮助。 您还可以执行更多操作,例如使用关系表等连接文档......当然,不要忘记我们的工程师实施的大型JSON函数面板。

文件的16MB限制

与其他一些NoSQL解决方案不同,MySQL不会将文档大小限制为16MB(mongdb就有着限制).但现在他们有一个解决方案:MySQL!

MySQL文档存储中的单个文档大小可以为1GB ! 它受[max_allowed_packet]大小的限制。

因此,如果您有非常大的文档,MySQL是最适合您的解决方案。 在MySQL 8.0中,我们还改进了MySQL处理大型文档的方式。 InnoDB实现了[JSON部分更新],复制团队[为二进制日志]实现了[部分JSON]。

最简单的查询语法

MySQL文档存储的目标不是成为MongoDB的替代品,即使[将数据迁移MySQL也非常容易 。 新CRUD API的目标是为开发人员提供编写应用程序的最简单方法,而无需过多地处理数据库后端,并能够以最简单的方式查询数据。 因此,MySQL使用非常简单的语法来查询存储在MySQL 8.0中的文档。

让我们比较MongoDB和MySQL中的相同查询:

MongoDB中的第一个:b7beab3575cc25adeb3947802f4b34e5.png

那是什么意思呢? 上面的语法是否特别怪癖?

那接下来使用MySql的语法来看下上面的语句53acb79caf6bf1f334e784f41655f598.png

更明显不是吗?是不是也更好理解了, 这就是我们使用该语法的原因!8109ea2e8f7765a39307bb5a92bfb3e6.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值