写点什么

为什么 NoSQL 部署难以应对大规模扩展

  • 2024-10-16
    北京
  • 本文字数:2774 字

    阅读完需:约 9 分钟

大小:1.33M时长:07:45
为什么 NoSQL 部署难以应对大规模扩展

NoSQL 的大规模扩展之路举步维艰,而分布式 SQL 则提供了更强大的解决方案。


一项技术为什么会过时?这个问题的答案并不是唯一的。有时,它是被某种更优秀的技术所超越。有时,潜在的需求在不断演变。当市场成熟时,之前满足了新兴市场需求的技术可能会变得不再够用。

 

许多企业对 NoSQL 的看法就是这样。这也是为什么今天如此多的 NoSQL 实现在艰难度日。

 

不久前,在大数据浪潮的早期,Hadoop 是人人都在谈论的话题。那时,传统上基于 SQL 的数据存储被认为已经过时。每家风险投资支持的初创公司似乎都有一个 NoSQL 键值存储。他们追随谷歌、Facebook 和雅虎等科技巨头的脚步,这些巨头开发了 NoSQL 技术来支撑他们的快速增长步伐。初创公司自然而然地会使用为其前辈的全球成果提供支持的工具。

 

但奇怪的事情发生了。很多成功的初创公司开始抛弃他们的 NoSQL 数据库。

 

考虑一下 Hbase 的发展轨迹,Hbase 这个数据库是作为标准 Apache Hadoop 软件包的一部分分发的。HBase 以谷歌著名的 BigTable 为蓝本,在开始几年内人气飙升,然后逐渐下降。

初看上面的图表,人们可能会认为 2017 年出现了一个新的数据库来取代 HBase,也许是一个可以更快地存储和访问数据,或可以处理更多信息的数据库。但事实并非如此。HBase 的存储和检索能力依旧是业界最出色的。它的受欢迎程度下降与其原始功能无关,而是与其用户试图解决的问题的复杂性有关。

 

在 SaaS 和大数据浪潮的早期,初创公司忙于跟上客户的增长。他们需要一种廉价的方式来存储和管理大量高速数据。像 HBase 这样的 NoSQL 工具出色地扮演了这一角色。但查询这些数据?保持一致性?那些是另外的问题。

 

终于,时候到了。当转折来临时,很明显,基于 NoSQL 构建的公司出现了巨大的维护性问题。他们在编写查询时遇到了困难,数据变得不可靠,新的应用程序越来越难构建。NoSQL 一开始非常有成本效益,但随着业务变得越来越复杂,它开始带来更多成本。

 

此时,许多运行 HBase 的公司也不再是初创公司了,他们已经扩张到了全球范围。他们创建了许多平台,让其他人用它们来建立业务。他们正在招聘数据分析师,也会重视停机时间和 SLA。他们不再只是试图保留数据,而是试图使用它们。

 

这时 NoSQL 的局限性变得非常明显,并且成为了一个真正的问题。

 

对于 HBase 来说,这些局限性包括:

 

  • 缺乏事务支持:这意味着用户无法获得现代关系型数据库典型的 ACID 属性。数据可能会损坏或出现逻辑不一致。你拥有的数据越多,当数据质量下降时,就越难通过蛮力找到问题。

  • 缺少二级索引:HBase 缺少二级索引,这意味着用户必须通过强力扫描才能找到所有内容。当你不需要查找数据时,这不是问题。当你的数据量相对较少时,这也不是问题。但是,当你需要在 TB 级数据中大海捞针时,缺少二级索引会使每个查询的计算成本都变得很贵。

  • 单点故障:HBase 使用 HDFS 文件系统(带有集中式 NameNode 目录)创建了依赖关系,使其极易崩溃。

  • 不友好的界面:NoSQL 缺少关系架构,这在快速存储数据方面是一项优势,但在查询数据方面却成了一个根本问题。NoSQL 不会消除对关系模式的需求。它只是将负担强加给应用程序,而应用程序的维护难度和成本要高得多。使用数据结构更改显式 SQL 数据库模式比修改应用程序中嵌入的隐式模式要容易得多。

 

随着时间的推移,这些大规模运行 NoSQL 时出现的基本问题变得令人无法忽视。一些人试图找到一个折衷的解决方案。较新的 NoSQL 数据库试图在 HBase 的键值架构上引入分层结构,添加具有 SQL 或类似 SQL 功能的事务。

 

正如麻省理工学院的 Michael Stonebreaker 所说:“尽管大家都觉得 SQL 很糟糕,但到 2010 年代末,几乎每个 NoSQL DBMS 都添加了 SQL 接口。”他补充道:“活下来的许多 NoSQL DBMS 还添加了强一致性(ACID)事务。因此,NoSQL 的口号已从‘不要使用 SQL,它太慢了!’转变为‘不仅仅是 SQL’(也就是说 SQL 适用于某些场景)。”

 

随着时间的推移,NoSQL 产品变得更像 RDBMS 竞品,但它们的本质区别仍然存在。根据定义,NoSQL 解决方案缺乏一种模式(schema)。这既是它们的优势,也是劣势。缺少数据模式的设计可以实现快速存储和检索,但也让分析和事务跑起来更难了。如果模式未在数据库中实现,则必须在查询中实例化。例如,如果需要将数据分片到不同的服务器上,则更改必须反映在应用程序代码中。一些 NoSQL 解决方案允许在外部定义模式,但这种方法在实践中容易出错。模式迁移是脆弱且令人毛骨悚然的操作。

 

更改数据库的难度阻碍了新应用程序的开发。它使创新变得更加困难,很少有企业能长期容忍这种情况。

 

Pinterest 就是一个很好的例子。它是 HBase 的早期采用者。根据 Pinterest 的工程博客文章,它一度在 HBase 上运行着“50 个集群、9000 个 AWS EC2 实例和超过 6PB 的数据”。HBase 完成了这项任务。但随着时间的推移,随着 Pinterest 的发展,它认为 HBase 的缺点超过了它的好处——它的功能太少,管理成本太高。随着其他企业开始得出相同的结论,找到精通 HBase 的工程师变得越来越难。最终,Pinterest 迁移到了开源的、与 MySQL 兼容的分布式 SQL 解决方案 TiDB。结果,该公司提高了开发速度,减少了查询延迟,同时使性能更加可预测。

 

这可能会让一些人感到惊讶。多年来,SQL 一直被误解,人们以为它本质上比 NoSQL 更慢、效率更低,但事实并非如此。云计算和水平扩展的进步使最近的 SQL 解决方案的原始性能更接近 NoSQL 竞品,同时仍提供 RDBMS 的所有优势。分布式 SQL 并没有把注意力局限在数据库功能的一个维度——存储和检索上,而是寻求在广泛的事务和分析用例中提供出色的性能,这使得它对具有复杂需求和各种利益相关者的成熟企业具有很大吸引力。

 

讽刺的是,在从 NoSQL 转向分布式 SQL 的过程中,Pinterest 和类似的公司正在追随谷歌的脚步,就像他们最初采用 NoSQL 时一样。TiDB 和其他分布式 SQL 解决方案是 Google Spanner 的后继者。这是谷歌为解决 BigTable 问题而创建的软件,而 BigTable 恰恰是催生 HBase 的技术。

 

在某种程度上,SaaS 行业只是重演了谷歌和其他科技巨头过去二十年走过的历程。我们原来有一项技术(SQL/RDBMS),然后被另一项技术(NoSQL)淘汰了,而现在后者正在被它所取代的技术的更现代版本所取代。

 

谁能说轮子不会再次转动?最后引用 Stonebreaker 的话,“因果报应。另一波开发人员会声称 SQL 和 [关系模型] 不足以满足新兴应用领域的需求。然后人们会提出新的查询语言和数据模型来克服这些问题。”但他指出,没有一种数据库能够真正取代基于 SQL 的关系数据库管理系统。

 

这句提醒很有用,多年来,传统关系数据库已经证明其能够不断吸收创新。从集群到云再到矢量搜索,数据库架构的趋势来来去去,但不知何故,当尘埃落定时,SQL 似乎总是屹立不倒。

 

原文链接:https://thenewstack.io/why-nosql-deployments-are-failing-at-scale/

2024-10-16 16:379581

评论

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

Vue进阶(二十六):详解 router.push()

No Silver Bullet

Vue router 8月日更

测试开发之系统篇-Docker容器安装

禅道项目管理

Docker 测试开发

Habor 入门指南

Se7en

失败的小项目-Tiktok搬运

箭上有毒

8月日更

【Flutter 专题】72 图解极简自定义跑马灯 ACEMarquee

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

从0开始的TypeScriptの四:接口Interfaces · 上

空城机

JavaScript typescript 大前端 8月日更

为构建大型复杂系统而生的微服务框架 Erda Infra

尔达Erda

开源 程序员 微服务 云原生 运维开发

HashMap面试中的12个点

4ye

Java 面试 后端 hashmap 8月日更

【LeetCode】第一个只出现一次的字符Java题解

Albert

算法 LeetCode 8月日更

Go 学习笔记之 Channels

架构精进之路

Go 语言 8月日更

c++ 构造函数详解

若尘

c++ 构造函数 8月日更

电商秒杀系统架构设计

arctec

Regan Yue带你一起学习微软AZ-900认证的有关知识「 第Ⅱ章」

Regan Yue

云计算 微软 后端 8月日更

【Vue2.x 源码学习】第三十二篇 - diff算法-乱序比对

Brave

源码 vue2 8月日更

手撸二叉树之数据流中的第 K 大元素

HelloWorld杰少

数据结构与算法 8月日更

netty系列之:使用POJO替代buf

程序那些事

Java Netty nio 程序那些事

零代码上线小布对话技能:技能平台的实践与思考

OPPO小布助手

人工智能 自然语言处理 算法 零代码 语义理解

信创产业已成现象级新风口,快来加入争做“弄潮儿”

华为云开发者联盟

开源 信创 opengauss openEuler 鲲鹏

【插画】一文看懂容器k8s

恒生LIGHT云社区

Docker 容器 k8s

某离散制造行业龙头客户“主数据管理平台”建设分享

用友BIP

主数据管理

感恩架构实战营学习的一路陪伴、不断进度!

arctec

贡献数字力量 浪潮云洲赋能广州箱包皮具产业集群

工业互联网

Vue进阶(二十五):<component>实现动态组件

No Silver Bullet

Vue 动态组件 8月日更

小手哆嗦一下,就能用 Python Django 实现一个微型博客系统

梦想橡皮擦

8月日更

Compose 可组合项的生命周期

Changing Lin

8月日更

VSCode July 2021 (version 1.59) 更新

IT蜗壳-Tango

8月日更

Windows 中 Node.js 中 nvm 的安装配置和使用

HoneyMoose

prometheus 语法

Rubble

Prometheus 8月日更

AIMA:如何通过质量指标提高QA的绩效(译)

BY林子

软件测试 绩效 QA

uni-app技术分享| 怎么用uni-app实现呼叫邀请

anyRTC开发者

uni-app 音视频 呼叫邀请 点对点呼叫

云小课 | 到底什么是区块链?

华为云开发者联盟

区块链 华为云 区块链的定义 区块链的解决方案 区块链的发展

为什么 NoSQL 部署难以应对大规模扩展_技术选型_Sunny Bains_InfoQ精选文章