写点什么

为什么 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:379526

评论

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

身为程序猿——谷歌浏览器的这些骚操作你真的会吗

孤寒者

6月月更 浏览器操作 小技巧 程序猿必会

尽一份孝心,为家人做一个老人防摔报警系统

华为云开发者联盟

IoT 华为云 防摔倒报警系统

一、Kafka安装

星期35

手慢无!阿里P8架构师力荐Spring生态全家桶全彩笔记

Java全栈架构师

spring 编程 源码 程序员 面试

什么是集群?为什么要使用集群架构?

Finovy Cloud

集群架构 云渲染 GPU服务器

【Spring 学习笔记(八)】Spring IoC/DI注解开发 之 原始注解开发

倔强的牛角

Java spring Java EE 6月月更

vue指令-5

小恺

6月月更

SDN特有的网络安全问题

穿过生命散发芬芳

SDN网络 6月月更

GameFi新的启程,AQUANEE将于6.9日登陆Gate以及BitMart

BlockChain先知

服务器运维环境安全体系(下篇)

融云 RongCloud

直播预告 | 在阿里云 ESSD 云盘上部署 PolarDB for PostgreSQL 集群

阿里云数据库开源

数据库 postgresql 阿里云 开源

10个常见触发IO瓶颈的高频业务场景

华为云开发者联盟

数据库 sql 索引 华为云 数据清理

react框架学习之深入研究【王道react】

恒山其若陋兮

6月月更

从源码解析flutter_redux 的精准局部刷新

岛上码农

flutter ios 安卓开发 跨平台应用 6月月更

【愚公系列】2022年06月 面向对象设计原则(四)-依赖倒置原则

愚公搬代码

6月月更

【MySQL字符串数据类型优化】char和varchar的区别

写代码两年半

数据库 sql 6月月更

不止于观测|阿里云可观测技术峰会正式上线

阿里巴巴中间件

阿里云 云原生 可观测技术峰会

数据库每日一题---第7天:订单最多的客户

知心宝贝

数据库 程序员 前端 后端 6月月更

IPSec的特征与功能

阿泽🧸

6月月更 IPsec

干货合集│最好用的 python 库都在这

Python 有趣的技术知识 6月月更

【LeetCode】最长连续序列Java题解

Albert

LeetCode 6月月更

致广大、尽精微,曙光问道算力服务“神经系统”

脑极体

Java异常处理机制

未见花闻

6月月更

企业内部Wiki,你建立了么?

小炮

【资源分享】综合性的导航网站

小炮

每日一题——leecode59( 螺旋矩阵 II)

武师叔

6月月更

线程池

急需上岸的小谢

6月月更

【首发】根据壁纸修改App主题,它真的来了

yechaoa

android 6月月更 material design

马志强:语音识别技术研究进展和应用落地分享丨RTC Dev Meetup

声网

音视频 语音识别

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