"永远不要低估好营销对坏产品的力量"。
这是我最喜欢的一句话,出自一篇论文《善有善报,恶有恶报》。这篇论文详细介绍了为什么 SQL 和关系数据库至今仍是事务型数据的最佳工具。
2024 年的这篇论文延续了 Stonebraker 2005 年的一篇颇具影响力的论文,该论文探讨了为什么 SQL 和关系数据库在 90 年代的所有数据管理创新中胜出。
归根结底,企业又回到了好的东西上。
已经从 BigTech 代码库中删除(如 MapReduce)
获得事务支持(如 Mongo)
获得了 SQL 的风格(如 DynamoDB、Spanner、Mongo)
主要用于分析工作负载(如 ClickHouse、DuckDB)
被降级为缓存(如 Redis)
作为 NoSQL 技术 (它一定会成为网络级的兄弟!) 的粉丝,我并不感到惊讶。你使用这些东西越多,你就会越意识到它只有一些狭窄的用例,你应该使用 Postgres 或 MySQL,甚至 Oracle (啊呸) 来处理核心生产数据。
许多软件工程师会刻意地回避 SQL,因为 SQL 是需要学习另一门语言,而且 SQL 和其余的程序代码之间存在一些阻抗和不匹配。
在您选择的编程语言中,在平面数据与对象之间进行转换也非常麻烦。
总之,它重复、繁琐,让人感觉很麻烦——我喜欢称其为“ Json 官僚主义”。
因此,我们就构建了 ORM 和各种框架来将这些“脏活”掩盖起来。您所做的领域越复杂,您会看到越多的工程师使用 ORM 版本如rawSql编写纯 SQL 查询,因为这样会变得更容易。
NoSQL 也发生了同样的事情。开始是“嘿,你再也不需要编写 SQL 了!你的数据库本身就能理解你的编程语言🤩”。
而这正是问题所在。
NoSQL 数据库非常擅长以工程师预先预测的方式读取数据。需要新东西吗?编码时间。希望新路径也快速吗?很难!优化已融入您的数据结构中了。
Stonebraker 表示:“NoSQL系统正与关系数据库发生冲突” 。很大程度上是因为能够临时查询生产数据并让数据库引擎优化执行,这非常有用。
与 SQL 问题类似,这些系统用灵活性换取熟悉度,许多 Web 规模技术必须用 ACID 的合规性换取速度。
原子性、一致性、隔离性、持久性
数据库确保使用事务,这是一种确保您的正在进行的查询以原子方式保存(全部或全部不保存)、保持内部一致性(没有陈旧数据)、与其他事务隔离并具有持久性保证(一旦保存,就被保存)的标准构造。
早期的 Web 规模技术不得不放弃这些保证,转而采用最终一致性和其他技巧。事实证明,这非常难处理,并且是难以修复错误的常见来源。
事实上,越来越多的 NoSQL 系统正在增加事务支持。
编译:洛逸
参考:
https://swizec.com/blog/why-sql-is-forever/
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。