最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Casey Rosenthal 访谈: 使用键值类 NoSQL 数据存储时的数据建模

  • 2014-07-24
  • 本文字数:3150 字

    阅读完需:约 10 分钟

键值类数据存储中,数据被表示为键- 值对的集合。键- 值模型是最简单的非基本数据模型之一,而其他更复杂的数据模型则都是在它的基础上构建的。

这些数据库提供RESTful API 和协议缓冲区(Protocol Buffer)接口用于数据访问。而诸如 Riak 等键值数据存储还支持以下额外特性:

  • 搜索:分布式、完全基于文本的搜索引擎,并带有一套查询语言。
  • 二级索引:存储标签对象时附加了额外的值,可以通过确切匹配或范围进行查询。
  • MapReduce针对大型数据结合进行不基于键的查询。

在使用键值数据库的过程中,数据建模的工作聚焦在访问模式上。

InfoQ 邀请了出品开源 KV 数据库 Riak 的 Basho 公司的专业服务总经理 Casey Rosenthal,针对使用 NoSQL 数据库进行数据管理时的数据建模理念,以及最佳实践进行了访谈。

InfoQ:对于哪些类型的数据来说,它的存储并不适合采用关系型数据库,而是适宜选择键值数据库?

Casey:当数据具有以下三类特征的时候,我们更适宜选用键值存储而不是关系型存储:

  1. 数据的格式不固定。以 HTML 页面为例,各个页面有着互不相同的结构。某些页面有 header 标签部分,某些页面使用了表格(table 标签),而某些页面则拥有图片。HTML 页面中的结构多样性,使得很难为它们构建一套通用模式,但对关系型数据库来说,这却是必不可少的。而键值数据库并不需要定义模式,因此它能够存储类似 HTML 页面这样具有不确定格式的数据。
  2. 数据的规模或数量非常大。关系型数据库是针对少量行数进行优化的,需要其行数足够少,以便一张数据表可以安置在一个服务器上。键值数据库存储大型对象会更容易;而当大型对象的数量非常庞大时,我们还必须将它们分布存储在多台服务器上。
  3. 数据之间不存在相关性。书、作者、出版商这三类信息是相关的,因此在某个单一应用里,它们可能适合采用关系型数据库。然而,大型文件和缓存的应用数据,则可能互不相干,然而其存储可能依旧需要满足同一个应用对其同时分别使用的需求。在键值数据库中存储这些不相关的数据类型,可能要比使用关系型数据库容易许多,因为在这些数据之间将不会存在需要进行建模的关联关系。

InfoQ:与关系型数据库相比,我们使用键值数据库,能够享受到哪些优势?

Casey一般来说,数据库查询引擎的复杂度,与扩展该数据库的难度相对应。大部分关系型数据库拥有非常复杂的查询引擎。相反,大部分键值数据库甚至根本就没有真正的查询引擎——如果我们对查询路径进行跟踪,就会发现它仿佛是一条从查询请求,到内存或硬盘上某个地方存储的对象之间的直线。因此,大部分键值数据库比关系型数据库更容易扩展,特别是对于被设计成存在于多台服务器上的分布式数据库来说,更是如此。关系型数据库所具有的一些根本限制,制约了它们能够扩展到什么程度。这些限制结合了以下方面的考虑:关系索引存储在哪里,系统中有多少数据,分布式系统内部的网络速度如何,以及其他一些因素。而键值数据库则无需面对这样的根本限制,因为查询引擎不需要考虑数据之间的关系。

InfoQ:从概念上来说,所有的非关系型数据库在存储数据时,都会选择使用键值的模式。其中,值的部分要么使用 JSON 格式,要么使用列族数据集的形式。那么,“真正的键值数据库”与其他非关系型数据库(例如文档或列族数据库)相比,有哪些优势?

Casey其他非关系型数据库,限定了只能处理使用 JSON 或列族格式存储的数据,这意味着需要考虑系统中如何存储数据,以及查询引擎必须用什么样的方式来处理请求。这些限制和隐含的制约,将对这些数据库配置文件的扩展工作带来进一步的影响。键值数据库不具有这些限制,它们基于应用代码来解析数据。因此,无论用来存储何种类型的数据,对键值数据库进行扩展都会更容易。同样地,这一点在分布式数据库上尤为突出。

InfoQ:能否请你与我们探讨一下,在使用键值数据库过程中的经典的数据建模过程?

Casey键值数据建模中的最佳实践,是专注于访问模式。它鼓励开发者站在从系统外部应用获取数据的角度,来处理问题。如果数据写入的时候,能够确保它将匹配应用获取数据所需要的格式,那么在这种方式下数据模型几乎是透明的。良好的键值数据模型会从访问模式方法的设计中“淡出”。

InfoQ:使用非关系型数据库的时候,应该在哪里进行建模,数据库还是应用层?

Casey对于键值数据库,应该在应用层里进行建模。对于拥有更具限制性的 API 的非关系型数据库(例如图数据库仅处理节点和边),则应该在数据库中建模。

InfoQ:能否探讨一下键值数据管理要求方面,在设计上的考虑?

Casey除了访问模式外,设计方面的考虑还包括:是否将对数据进行加密、进行版本管理或是在持久化之后进行修改,数据操作更倾向于读取还是写入,以及是否将永远不会被修改。永远都不会被修改的数据,被称为“不可变”数据,而不可变数据往往会为系统的架构带来一些便利。

InfoQ:在使用键值数据的时候,是否有一些反模式?

Casey把键值数据当作关系型数据来对待,就是一种反模式。将数据归一化, 并尝试构建仅仅用来表示元数据之间关系的对象,是这类反模式中的两个例子。

InfoQ:你能否为我们介绍一些键值数据库中的陷阱或限制?

Casey键值数据库并不具有诸如 SQL 这样的查询语言所提供的“丰富性”。开发者如果期望在键值数据库上使用类似 SQL 的查询语言,那么将会发现实际并非如此。

InfoQ:键值数据管理方面,在数据查询、便利、分析等领域中是否已经确立了一些标准?

CaseyREST 风格 API 的准则已经相沿成习,并且大部分开发者也都充分理解了它。大体上,REST 风格 API 的语义与大部分键值数据库相匹配。但是针对特定键值 API 或键值查询语言的正式共识(标准)尚未确立。

InfoQ:对于键值数据库领域来说,它的未来将何去何从?对 Riak 来说,其路线图又是如何规划的?

Casey总体来说,键值数据库正在朝着与其他类型的数据库共存的方向前进。具体来说,Riak 是一个具有高可用性、容错性并支持数据扩展的可靠的平台。Riak 里面的键值数据库就是这个平台本身,同时也是这样一个可靠的基础。而在未来,Basho 将利用这一优势,向开发者们提供其他非键值 API。以大型对象 S3 和 Swift API 为例,Riak 平台上已经以 Riak CS 的形式提供了。在 Riak 2.0 中,我们将在数据平台上提供 Solr API。在未来的版本中,我们还将继续扩展 Riak 平台提供的 API 集。

针对键值数据库,Casey 还提到了以下关于数据建模和最佳实践的内容。

键值数据库是各种数据库中最基本的一类,因为它们表示起来最简单,而且并不要求查询规划器。正因为如此,键值数据库为构建更加复杂的数据平台提供了最佳基础。数据平台可以为了不同的使用场景类型来构建,例如高可用性系统,或是容错系统。如果这些数据平台能够在坚实的基础上正确地构建,那么对数据模型的选择将取决于如何为开发者提供便利,而不是对运营操作方面的折衷。我们有理由期待,未来的数据平台将基于优秀的键值数据库构建,它们拥有更丰富的数据模型和查询语言,并随着时间的推移不断开放 API。

关于受访者

Casey Rosenthal**** 是Basho 公司的专业服务总经理,他安装并测试 Riak 集群,并向客户提供培训,以帮助他们能够具备相应的能力。作为 Port Forty Nine 的首席软件工程师,Casey 为美国宇航局、加州理工和喷气推进实验室设计了存储并分发太空望远镜(例如哈勃、斯皮策、钱德拉等)图像存档的系统。他在哥本哈根举行的 BotPrize 2k 竞赛中取得了第四名的成绩,其作品狄斯科耳狄亚是一个用 jRuby 编写的软件机器人,凭借全新的人工智能算法,它能够像人类选手一样在虚幻竞技场游戏中大杀四方。他还曾经从缅因州理工学院赢得了一份种子基金,用来将一套使用 Ruby 编写的离散事件模拟框架商业化。他的 Twitter ID 是 @caseyrosenthal

查看英文原文: Data Modeling with Key Value NoSQL Data Stores – Interview with Casey Rosenthal

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2014-07-24 21:054183
用户头像

发布了 256 篇内容, 共 68.4 次阅读, 收获喜欢 10 次。

关注

评论

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

内卷把同事逼成了“扫地僧”,把 Github 上所有面试题都整理了一遍~ 足足 24W 字!

编程 程序员 IT 计算机 java

阿里P8爆肝三月!最新出土SQL手册:收获不止SQL优化,抓住SQL的本质

Java 编程 程序员 IT 计算机

模块五作业

potti

架构实战营

亿级流量架构演进实战 | 从零构建亿级流量API网关 01

松然聊技术

亿级架构

太香了!Github疯传的阿里分布式设计实录让面试进阶齐飞!

Java 程序员 架构 面试 后端

极光笔记丨iOS 15推送新特性

极光JIGUANG

ios 消息推送 移动端

#1024我在现场# 征集线索引爆大奖!

InfoQ写作社区官方

1024我在现场 热门活动

数据上报那些事

神策技术社区

数据 神策数据

优酷鸿蒙开发实践 | 鸿蒙卡片开发

阿里巴巴终端技术

ios android HarmonyOS 优酷 移动端

一篇神文让你"一夜封神"Mycat中间件(最详细讲解)

程序员小呆

Java 程序员 架构师 mycat

性能加速最高可达28倍!这个NLP工具包不容错过

百度开发者中心

预训练模型 NLP 大模型

☕【Java技术指南】「编译器专题」深入分析探究“静态编译器”(JAVA\IDEA\ECJ编译器)是否可以实现代码优化?

洛神灬殇

Java 编译器 静态编译器 10月月更

索信达助力国有大行提升监管报送质量

索信达控股

大数据 数据治理 金融监管 金融行业 银行业

明道云APaaS在保险业中的应用场景例举

明道云

WeTest自助压测1折起,最低1分钱参与Q币抽奖

WeTest

量化模拟线上流量实践

FunTester

性能测试 接口测试 测试框架 FunTester 线上流量

一篇神文让你深入理解计算机系统——学习笔记

程序员小呆

Java 程序员 架构师 计算机

真香!在Github一夜爆火的面试题库,被各大厂要求直接下架

程序员小呆

Java 程序员 面试 架构师

山东移动用明道云赋能一线,打通业务创新最后一公里

明道云

阿里技术官耗时半年总结出“满分”架构笔记,拿捏分布式到微服务

进击的王小二

Java 架构 分布式 微服务

金九银十吃透这份Spring Boot实战文档,让你超过90%的Java面试者

Java 编程 架构 面试 springboot

直接霸榜Github!阿里内网流传P8大牛的“满级”分布式架构笔记,

程序员小呆

Java 程序员 面试 架构师

MySQL索引总结:14张图+代码+文字

Java MySQL 数据库 架构 后端

怎么阅读 Linux 内核源码

程序员小呆

Java Linux 程序员 架构师

Java核心基础——注解

老农小江

注解 java

接连三次霸榜GitHub,这个国产GitHub项目是真的强...

百度开发者中心

最佳实践 方法论 百度飞桨 开源技术

亿级流量架构演进实战 | 从零构建亿级流量API网关 02

松然聊技术

亿级架构

架构师一定要看!微服务设计的四个原则

Java 程序员 架构 面试 后端

容器化 | ClickHouse Operator 原理解析

RadonDB

数据库 Kubernetes Clickhouse

国家第一梯队!开物入选特色专业型工业互联网平台

百度大脑

人工智能 百度 智能云

微博评论高性能高可用计算架构

Imaginary

Casey Rosenthal访谈:使用键值类NoSQL数据存储时的数据建模_语言 & 开发_Srini Penchikala_InfoQ精选文章