《Redis中的8种数据建模模式》(8 Data Modeling Patterns in Redis)是一本关于NoSQL中数据建模的综合性电子书,它深入研究了8种数据模型,开发人员可以在Redis中利用这些模型构建现代应用程序,而不受传统关系数据库的阻碍。以下是您可以在其页面中看到的一些内容。
NoSQL数据库设计
与关系数据库不同,您不必一开始就搞清楚模式设计。这就是为什么NoSQL对于许多开发人员来说是如此合理的选择。在SQL中,数据必须符合数据模型,这可能导致数据丢失。在无模式设计中,您的数据保持不变,并在需要时随时可访问。
NoSQL数据建模技术
在关系数据库(SQL数据库)中建模数据时,开发人员通常需要从一开始就预测应用程序的未来。可能的功能是什么?如何设计数据模型,使其足够灵活,以适应业务可能需要的任何更改?
关系数据库是不灵活的。它们需要大量的前期知识,使得在不同的模型中存储大型数据集变得更加困难。从将数据传输到表或集合,再到分散数据所需的复杂查询,面对构建现代企业应用程序所需的所有细微差别,传统的数据建模SQL路线正在失去流行性。
以下是开发人员在Redis和NoSQL中使用的八种主要数据建模技术。
嵌入模式
嵌入模式允许将两个单独的表或集合捆绑在一起,一个表嵌入另一个表中。嵌入式模式是一个很好的模型,可以在同一个位置保存不同的表,其中包含相互关联的信息,如产品名称表和一个产品详细信息表。这样可以更容易地找到所有相关数据,并了解它们在数据结构中的相互关系。它还可以帮助应用程序在一个查询中检索两个表中的数据,从而提高其整体读取性能。
一对一关系
正如您在关系数据库中所发现的,上面的描述描述了一对一数据模型的工作原理。
假设你正在为一家服装零售商建立一个产品目录。第一个表可以包含产品ID号、名称、图像和价格,而另一个表存储尺寸、规格等。
那幺,为什么两个数据表似乎有着千丝万缕的联系?为什么不只用一张表来存储数据,一天就可以了?也就是说,因为每个表在应用程序中充当其自己的视图。当显示产品列表时,您可能只显示名称、图像和价格。单个产品的详细视图将显示其余字段。在SQL中,最简单的方法是使用两个表,因此只查询所需的特定字段更容易。在NoSQL中,您只需要一个集合,因为您可以将详细信息嵌套在“详细信息”字段中,如果不需要,则不检索它。
看看Redis中的快速一对一关系模型
部分嵌入模式
一对多关系
首先,值得注意的是,一对多和多对多同时使用嵌入模式和部分嵌入模式。
当您想对一对多关系建模时,可以嵌入有界列表(即已知大小的列表),并为无界列表保留单独的集合。
在构建包含产品的应用程序时,您通常需要对应用程序提供真实的产品反馈,以建立与客户的信任。在这种情况下,产品就是“一”,而许多评论,包括作者姓名、出版日期、评级和评论,就是所讨论的“许多”变量。
当您导入Redis OM库并开始建模时,请查看它的实际操作
多对多关系
模式1:边有界的多对多关系
SQL要求您创建一个单独的表来存储两个表的数据集之间的关系,而在NoSQL中,您可以创建所谓的双向嵌入。
下面的视频展示了一个讲师/课程示例,以说明此模型的工作原理,使用一个讲师表和另一个课程表。NoSQL通过将讲师密钥列表嵌入课程JSON文档和讲师JSON文档中,简化了关系数据库解决方案。
有界边意味着数据集中有多少数据点存在限制。我们知道教授或课程的数量不是无限的。有界只是意味着它不是无限的。
模式2:具有无界边的多对多关系
在SQL中,多对多关系的无界边可以形成一个讲师表和另一个学生表,在本例中,注册人数可以是无限的。在非关系数据库中,您要做的是将列表嵌入到有界的一侧。
因此,如果两侧都有界,则可以在两侧嵌入,但如果只有一侧有界,将是要嵌入列表的集合。
看看RedisInsight中的多对多关系
聚合模式
在构建大量读取的应用程序时,请考虑使用聚合模式来减少动态计算聚合信息所产生的读取时间开销。该模型也称为计算模式,在写入而不是读取期间预先计算某些字段,从而节省读取时间和服务器和数据库的开销。
观察我们如何使用聚合模式建模,为节点导入Redis OM。Redis堆栈中的js
多态模式
在关系数据库中,您需要单独的表来存储您正在使用的不同类型产品的细节。要获得所有产品,必须将所有表及其单独的细节连接在一起,这会产生严重的开销。
在构建数据模型时,多态模式允许您在同一集合中存储许多不同类型的产品及其唯一字段。
使用Redis Stack,所有模式都是灵活的,允许您区分将集合分组在一起的类型字段。使用带有Redis堆栈的多态模式,开始减少用于存储数据的集合数量,简化查询中的应用程序逻辑
桶型
在构建大量读取的应用程序时,请考虑使用Bucket模式,以减少在读取时存储和聚合时间序列数据所产生的开销。存储数据的每一位都会给系统带来额外的压力。相反,Bucket模式有助于——正如您所猜测的那样——根据特定的时间跨度“Bucket”时间序列数据,减少处理时间。
修订模式
您如何跟踪正在进行的文档更改?这就是修订模式适用的地方。
很可能你在职业生涯中使用过谷歌文档。想象一下,你想发布你和你的团队刚刚开发的最新产品。活动文档将显示文章的最新修订版,但所有过去贡献者的所有其他修订版仍将存储并在需要时可用。这是修订模式工作原理的完美示例。有了它,您可以将对一篇文章以及文章本身所做的所有修订存储到一个文档中,从而简化查询并优化模式。
从法律行业到金融服务、医疗保健、出版和保险行业,修订模式可以在许多依赖于实时数据的用例中使用。
请参见我们如何在Redis OM for Python中使用修订模式建模
树与图模式
通常,您希望避免在非关系数据库中执行联接操作。树和图模式在模式中不可避免的情况下特别有用,并且您正在处理大量基于连接的操作,如人力资源系统、CMS、产品目录和社交网络。
树模式对于关系模型并不陌生——您经常会看到树模式,就像您在组织结构图或谱系图中看到的那样。在NoSQL中,您可以利用这些模式来减少连接操作的复杂性,而不必担心SQL查询的复杂性。
观察我们如何使用Redis堆栈中的树和图模式对组织图建模
模式版本模式
更改数据模型和升级数据的一个有用协议是模式版本模式。在使用SQL数据库构建应用程序时,一旦开始构建模式,就很难对模型和应用程序逻辑进行任何更改。在NoSQL中,您可以利用此模型(在Redis堆栈中尝试Node.js)更轻松地进行轴心转换。
建议您始终为文档分配一个版本,以便将来可以更改它们,而不必担心立即迁移所有数据和代码。模式版本模式是为数据模型分配版本的一种方式,通常在文档级别完成。您还可以选择将所有数据作为API的一部分进行版本设置。
您可以将模式版本模式应用于现有代码。查看Redis Stack如何使其成为可能
常见问题
什么是NoSQL数据模型?
这是一个没有关系数据库管理系统(RDBMS)支持的模型。因此,该模型没有明确说明数据之间的关系——即数据如何连接在一起。
数据如何存储在NoSQL中?
在一个主要的非关系数据库模型中,如键值存储、文档存储、图形数据模型、时间序列存储、面向列。数据可以存储在磁盘、内存或两者中。
NoSQL有模式吗?
是的。当人们说NoSQL是“无模式的”时,他们真正的意思是模式是灵活的,并且随着时间的推移由开发人员和应用程序需求决定。最终确定了一个模式——它在开始时并不存在,就像SQL数据库一样。
您可以将Redis用作NoSQL数据库吗?
是的,您可以将Redis Enterprise用作NoSQL内存中的多模型数据库。
是否有一个复杂的NoSQL示例?
有几家公司正在将NoSQL用于不同的用例,其复杂程度也各不相同。Redis Launchpad有几个使用Redis和NoSQL编写的应用程序示例。
为什么大数据偏向NoSQL数据库?
对于大数据,您通常会聚集来自许多不同来源的大量未知形状的数据。这需要NoSQL数据库提供灵活的模式、速度和可伸缩性。
为什么我们不能在NoSQL中使用机器学习?
这可能在某一点上是正确的,但目前并非如此。RedisAI提供内置数据类型,简化了训练模型的加载和部署。
原文标题:NoSQL Data Modeling with Redis
原文作者:Will Johnston
原文链接:https://redis.com/blog/nosql-data-modeling/




