写点什么

Pascal Desmarets 谈 NoSQL 数据建模最佳实践

  • 2017-07-04
  • 本文字数:3457 字

    阅读完需:约 11 分钟

关键结论

  • 了解在 NoSQL 数据库中建模与在关系型数据库中建模有哪些不同。
  • 理解一个典型的 NoSQL 数据建模有哪些步骤。
  • NoSQL 数据建模过程中的可交付物与制件。
  • 多模(multi-model)NoSQL 数据建模的最佳实践。
  • 怎样对 NoSQL 数据库中的事务和分析用例进行数据模型。

NoSQL 数据库被设计用来专门存储不同类型的数据,像 KV 数据、文档、列存储、时间序列、图形以及物联网数据。Pascal Desmarets 在访谈中讲述了跟关系型数据库相比,应该怎样在 NoSQL 数据库中建模。

InfoQ:NoSQL 数据库中的数据建模与关系数据库的数据建模为什么不一样?

Pascal Desmarets:多年来,“schemaless”、“schema-on-read”和“non-relational”这些术语给人们造成了一种假象,那就是 NoSQL 数据库没有建模的必要。随着情况变得复杂起来,人们很快发现 NoSQL 的数据建模不仅必要,而且事实上比关系型数据库还重要。事实上,灵活和功能强大的 JSON(用于在 NoSQL 文档数据库中存储数据)一不小心或者管理不善,就会给你造成很多数据不一致和无法查询的麻烦。没有严格的使用方法,数据甚至可能都不准确。NoSQL 基于 JSON 的动态模型的特点对于应用程序开发人员来说是一个非常好的机会:能够以最小的学习成本开始存储和访问数据、非常灵活、快速并易于演化。但是,灵活性虽然带来了强大的功能,也为 NoSQL 的新手和经验不足的开发者、设计师带来了危险。这也是为什么 NoSQL 供应商为了弥补他们市场部门简单的宣传而不得不将大量的网页、博客、视频等资源投入到 schema 设计中去(即, MongoDB DynamoDB Couchbase Cassandra 等等)。在 NoSQL 数据库进行数据建模与在关系型数据库中进行数据建模有两个不同:首先是因为它不符合 NoSQL 开发人员的习惯,其次是因为在 JSON 中嵌套对象的建模并不是一个简单的实现。

InfoQ:一个典型的 NoSQL 数据建模有哪些步骤?

Desmarets:谈到 NoSQL 数据建模的时候,最大的不同是标准化规则不再适用。相反地,现在鼓励使用便宜的存储空间,实现信息的反规范化(denormalize),并且保存尽可能多的重复数据以满足性能和环境的需求。鉴于 NoSQL 允许数据在“写入时(on write)”时连接(joined),数据建模需要考虑数据的访问和查询方式。至于数据建模的过程,取决于团队在严谨程度上达成的一致,如果采用敏捷的方式,数据库模式可以按需快速演化。有些人头脑里有清晰的认知时会心情愉悦,能直接进入数据库的物理设计,然后基于试错的模式快速迭代。在开始启动新应用时,基于用户的需求,更为正式的过程会与关系型数据库类似,只不过物理模型将会与特定的数据存储技术相关。这些步骤通常始于某种概念设计(或领域驱动),然后演变为逻辑建模,最后是物理存储模型设计,这由物理存储模型所使用的特定技术来决定。这就是 NoSQL 与传统的关系型数据库区别较大的地方。

InfoQ:NoSQL 数据库被设计用来专门存储不同类型的数据,像 KV 数据、文档、列存储、时间序列、图形以及物联网数据。对不同的数据库应该怎样进行数据建模?

Desmarets:不同种类的 NoSQL 数据库正在迅速地向多模(multi-model)数据库演进。键值存储现在会将 JSON 数据存储在值的部分,有些数据能够对深度嵌套的属性进行索引;文档数据库正在增加图形功能,图形数据库则将每个属性都建模为关系;物联网的数据能够得到很好的处理,根据数据的复杂性,可以采用键值数据库或文档数据库。尽管越来越趋同,但是每个供应商的产品都有其特定的优点和缺点,最重要的是为正确的工作选择正确的工具。在数据建模方面,唯一存在不同方法的是图形类的数据库。这是因为其关系的数量会迅速生成一个不可读的视觉、图形模型。不过,一些数据建模方面的供应商已经开始解决这个问题,相信很快会给市场带来可用的新工具,从而解放开发人员。

InfoQ: NoSQL 数据库用在了事务型和分析型的用户场景中。为这些多样且不兼容的用户场景进行建模的最佳方式是什么?

Desmarets:要存储的数据的类型和大小应该是选择解决方案的主要标准。完全非结构化的人为产生的标记文本和索引数据将和机器产生的数据如 Web 日志、物联网数据或者操作记录形成完全不同的需求。由于对写入性能的高要求和查询方法的不确定性,大数据分析数据库将不断推动更多关系型存储方法的演进。所以他们可以使用长期以来的传统数据建模工具,另一方面,事务性大数据存储可以真正地利用 JSON 的多态性,因此可以使用为此设计的新数据建模工具。

InfoQ:你能否聊一下多模(multi-model)NoSQL 数据库及其最佳数据建模实践?

Desmarets:“多模(multi-model)”之于不同供应商而言,“多”的部分不尽相同。当多模(multi-model)是 DB 供应商们在市场营销清单中勾选的防御措施时,多模(multi-model)对数据建模的影响微乎其微,因为数据存储的方式并没有发生多大的变化。但是,一些企业级服务供应商确实有支持多种存储模型的能力,比如人为产生的 XML 索引文档、RDF 图形以及 JSON 文档。显然,每一种存储类型都有自己的要求,并不存在一个通用的方法能满足所有的存储要求。因此,这种多模(multi-model)数据库的数据建模工具需要足够灵活。

InfoQ:在 NoSQL 数据建模过程中的典型交付工具和可交付件是什么?

Desmarets:至少,一个好的 NoSQL 数据库数据建模工具应该输出数据库供应商指定的正向工程处理脚本以及所有实体、属性、限制和关系要求的文档。它还需要能够以原生的方式执行逆向工程,并能够对 JSON 的多态属性进行建模。对于大多数不喜欢查看源代码来了解结构的人(业务分析师、设计师、架构师、数据库管理员和开发人员)来说,文档对于促进一个程序的开发者与维护者不同利益诉求者之间的对话至关重要。正向工程脚本将帮助开发人员根据每个供应商要求的语法规范生成符合精心设计过的模型所需要的代码。所有这些都应该为企业进行正确的数据治理而作出贡献。

InfoQ:在 NoSQL 数据库数据建模方面有哪些最佳实践呢?

Desmarets:特别是拥有几年、甚至几十年的关系型数据库设计经验之后,人们很难忘记正常化的习惯。不仅如此,如果有助于数据的可读性,甚至鼓励非常规的和重复的数据。需要考虑到的一些选项是嵌入(可以被视为在存储时传入的连接)、引用以及双向引用。数据建模者应该多考虑考虑查询的问题而非存储方面:在仅有一个磁盘访问请求的情况下,怎么呈现一个应用程序屏幕显示所必需的全部信息?结构将会决定如何存储数据。而且如果一条数据需要被传送到其他非规范化的地方,后台进程就能够处理这种情况,这样数据库中的数据最终会保持一致。顺便说一下,“最终”这个术语经常被误解,它应该被理解为比例:几毫秒甚至是几秒的延时可能是绝大多数应用程序可以容忍的。想象一下:仅仅只是因为你的数据库在复杂的写入操作时无法响应了,你愿意显示一个 404 页面并且承担电子商务销售订单丢失或者永远地失去一个客户的风险,还是先确保呈现数据,即便它不是 100% 的一致?一个数据建模工具将会帮助你设计更有弹性的 NoSQL 数据库。

InfoQ:在进行数据建模任务时,开发人员应该牢记哪些法则?

Desmarets: NoSQL 数据建模工具的目标不是要限制而是要利用 JSON 的灵活、强大、多态和创新特性。因此,数据建模人员不应该去试图控制开发者,而应该成为中间人,多“假设”一些方案并通过各种尝试来减少别人的重复工作。数据建模的文档应该成为团队协作的良好沟通工具,以便不同利益诉求者之间在满足业务需求、提高质量、降低任何 NoSQL 应用程序的总体开销方面取得更好的成绩。

关于这个采访

Pascal Desmarets是 Hackolade 的创始人兼 CEO。他带领公司全力以赴改进经营策略、产品创新和客户关系,使公司专注于生产用户友好、功能强大的可视化工具,从而将 NoSQL 技术平滑地迁移到企业的 IT 蓝图中。Hackolade 的软件将图形数据建模的舒适性和简单性与 NoSQL 文档数据库的强大功能结合在一起,从而缩短了开发时间,提高了应用程序的质量,降低了运行的风险。在创立 Hackolade 之前,他创办并担任了 IntegrIT SA/NV 公司的 CEO,这是一家为大型组织机构提供信息架构、创新解决方案和可扩展系统集成的 IT 战略与咨询公司。Pascal 同时也是 ARTISTdirect 公司的 CIO,ARTISTdirect 是一家公开募股的创业公司,同时也是在线数字音乐世界和网上贸易的原始拓荒者和早期创新者之一。

查看英文原文: Pascal Desmarets on NoSQL Data Modeling Best Practices


感谢张卫滨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-07-04 18:312117
用户头像

发布了 64 篇内容, 共 23.7 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

深度学习基础入门篇[10]:序列模型-词表示{One-Hot编码、Word Embedding、Word2Vec、词向量的一些有趣应用}

汀丶人工智能

人工智能 深度学习 nlp 词向量 序列模型

软件测试/测试开发丨学习笔记之Pytest使用

测试人

Python 软件测试 自动化测试 测试开发 pytest

关于IPP Swap挖矿系统开发详情

Congge420

分投趣fintoch即将崩盘?系统开发解析!

Congge420

Github星标百万!终于有人将Spring技术精髓收录成册

做梦都在改BUG

Java spring 框架

真香!阿里最新产出分布式进阶实战手册,涵盖分布式架构所有操作

Java你猿哥

架构 分布式 微服务 Spring Cloud Spring Boot

新一代企业数字化联盟成立,“强强联手”搭建品牌服务生态

数划云

数字化 全面预算管理 新一代企业数字化联盟 数划云 绩效分析

低代码开发平台魔笔 X 浙江广电集团:“10天”成为行业最小创新单位!

移动研发平台EMAS

阿里云 低代码开发 魔笔

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

鳄鱼视界

kafka生产者你不得不知的那些事儿

JAVA旭阳

Java kafka

MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题

阿里巴巴云原生

阿里云 云原生 dubbo MSE

BSN官方视频号更新内容汇总(2023年4月15日~5月15日)

BSN研习社

分析元宇宙NFT/链游系统开发方案

Congge420

ChatGPT的原理与前端领域实践 | 京东云技术团队

京东科技开发者

人工智能 前端 ChatGPT 企业号 5 月 PK 榜

OpenHarmony支持HDMI接口声卡适配说明

OpenHarmony开发者

OpenHarmony

开发神技!阿里消息中间件进阶手册限时开源,请接住我的下巴

做梦都在改BUG

Java kafka 分布式 MQ 消息中间件

惊艳!腾讯强推599页Netty进阶神技,完美诠释Netty

做梦都在改BUG

Java Netty

Deferred Components-实现Flutter运行时动态下发Dart代码 | 京东云技术团队

京东科技开发者

flutter dart 企业号 5 月 PK 榜 Deferred Components

SpringBoot 中异步任务实现及自定义线程池执行异步任务

做梦都在改BUG

Java Spring Boot

阿里微服务实施手册我粉了,原来微服务还可以这样玩

做梦都在改BUG

Java 架构 微服务 Spring Cloud

大数据如何助力营销(5)活动复盘

MobTech袤博科技

Abaqus非线性问题预览及求解

思茂信息

仿真软件 abaqus abaqus软件 abaqus有限元仿真 有限元仿真技术

肝到头秃!百度强推并发编程笔记我爱了,原来这才叫并发

做梦都在改BUG

Java 并发编程

云纳管是什么意思?云纳管平台哪个好?

行云管家

云计算 云服务 云平台 云管平台 云纳管

【等保】等保全称是什么?英文咋说?

行云管家

等保 等级保护 等保2.0

并发编程-常见并发工具BlockingQueue的使用及原理解析

做梦都在改BUG

Java 并发编程 BlockingQueue

Topaz Gigapixel AI for Mac激活(图片无损放大软件) v6.3.2

真大的脸盆

Mac Mac 软件 图片无损放大 图片放大工具

探索未来智能交通:网联汽车与汽车互联

EMQ映云科技

车联网 物联网 智能交通 汽车互联

Openjob:更强大、更智能的分布式任务调度框架,重磅发布!

stelin

java; 后端、 分布式,

IPQ8072 or IPQ8072A with the QCN9074/9024 chipset / well-suited for high-end routers.

Cindy-wallys

IPQ8072

二维码在中国:学术视角下的创新与实践

草料二维码

二维码

Pascal Desmarets谈NoSQL数据建模最佳实践_最佳实践_Srini Penchikala_InfoQ精选文章