浏览了数据库节点所有 39 页的主题,为什么没见有人吐槽 SQL?

2022-01-29 04:45:29 +08:00
 fantix

好吧我承认我有标题党+软文的目的性,但是我真的把 39 页的主题(和少部分内容)都看了一遍,看到节点里那么多 PingCAP 的文章,我觉得我应该也行(?),毕竟我还是想要正儿八经讨论一下 SQL 本身的。

背景:10+ 年 Python 工程师,七七八八各种方向都做过,一直对 SQL 在应用开发——尤其是快速迭代的项目——中的使用方式有一些徘徊不定:

直到 2021 年换到现在的工作,最近翻译了一篇老板写的博客《 We Can Do Better Than SQL 》,才感觉这些其实都是 SQL 的锅——关系模型是好模型,但被 SQL 这个交互层的接口给搅乱了。当然这里不是说 SQL 一无是处,毕竟现在如此广泛的应用,说明它是十分成功的,必然有其可取之处,类比 PHP 、JavaScript 或者 MySQL (手动大狗头怕是也难以保命了的那种)。

这篇文章固然是在介绍我现在正参与开发的新开源数据库 EdgeDB,但是文中吐槽 SQL 的几个角度还是很有趣的,尤其 NULL 那一块 JavaScript 看了都自愧不如。我简单总结如下,供大家讨论:

  1. 正交性问题。

    大概就是说,SQL 语句很难写,特殊情况特别多,基本上没法做语句组合。

  2. 不够紧凑。

    关键词有 469 个之多,这还只是 PostgreSQL 实现了的部分。就是不太像一门编程语言,比较啰嗦。

  3. 语言设计不一致。

    NULL 的槽点都在这里,总结来说就是惊喜不断,碎片化也堪忧。如果没有 ORM 的保驾护航,萌新很容易踩坑。

谈及原因,主要说的就是,SQL 最一开始设计的是给非技术人员创建报表用的,人家没想着你能嵌到程序里这个玩法呀,怎么能设计出对工程师友好的语言呢。再加上资本主义的毒瘤把控了标准的制定,IBM 和 Oracle 互相攀比,没心情照顾使用者,有什么就用什么了。反正就是 SQL 到现在已经是这样了,大家也都习惯了,关系模型还得用,也就很少有人会去想搞一个新的语言出来。

在后面就是 EdgeQL 的介绍了,主要集中在怎么让开发人员爽。我就不多介绍了,有兴趣请自行阅读。

还是回到主题,关于 SQL 的问题,同学们怎么想?确实影响开发效率和心智吗?以后 SQL 会不会像 C 语言一样,虽然仍是 IT 行业的基石,但很多新项目就会用 Rust 、Swift 、Go 这样的现代语言来开发了吗?查询语言这波能起来吗,要跟吗?

3208 次点击
所在节点    数据库
40 条回复
Chad0000
2022-01-29 06:00:20 +08:00
10+C#工程师,手写 SQL 很多年,后面入轻量级 orm+部分手写 SQL ,最后入 ef ,基本上不需要写 SQL 了。爽。

SQL 对于我来说以前没什么问题因为主要使用 SQL server ,现在自己的项目很多切到了 MySQL 就有点烦恼了:每家支持不一样,比如最简单的分页,拼接字符串,比较烦。还好平时使用比较少。
documentzhangx66
2022-01-29 06:36:55 +08:00
很多高手在他们学习 SQL 的阶段,就已经吐槽过 SQL 了,这类帖子在 CSDN 的历史文档里应该有一部分。

SQL 不好用,主要是历史与生态问题,再抽象一点就是钱的问题。

如果你有足够的资金,你完全可以去找大佬设计更好的语言来替代 SQL ,并且推广下去。
charlie21
2022-01-29 07:07:04 +08:00
“xxx 太难用了” 的通用问题的解决办法就是外包一层继续用。在牺牲了一些指标的情况下是可以解决表面问题的。有钱有闲的巨佬才会去从根本解决问题,可能会长远获益 可能是 just another nice try 。

编程语言或者是电脑程序运行方式本身是有巨大倾向让人们去选择 “外包一层解决问题 即使代价是牺牲某些指标” 这种方式来只解决表面问题的。改变历史遗留问题的工作量会导致历史遗留情况很顽固 /人们对改变历史遗留情况的决心很低 而历史遗留问题又会影响未来选型,搞得就像 “谁出生得早 谁胜利” 而谁本身是一个凑合用的货 软件界好像就是这样
charlie21
2022-01-29 07:16:24 +08:00
一个软件的成功是什么?能不能成功,不仅仅是看它在普罗大众里的流行度。

把软件卖出去,就能有研究经费,就能继续研究。这个看能不能幸运地服务到一些大客户吧,大客户可能会懂得赏识这个。大客户要么不乐意牺牲关键指标,要么有自己的特殊需求。大客户的服务者可以是 “世间不容我 我闷声发大财”,甚至有可能做得好了直接被大客户百万美元收购。

一个软件的成功(的判定),不仅是普罗大众流行度得出的,也可以是由 “把自己置于一个卖方市场总是会比把自己置于一个买方市场好一些的” 而得出的
mizuhashi
2022-01-29 07:58:04 +08:00
其实 rails 的 activerecord 以外的 orm 都不算 orm
murmur
2022-01-29 08:22:51 +08:00
×select * from ... where
√dangerouslySetInnerHtml
比啰嗦 sql 还不配,基础关键字都挺简单的
yulon
2022-01-29 08:32:47 +08:00
所以不是有人发明了 NoSQL 吗,都已经变成事实标准了谁还天天去吐槽,知乎上都有一大堆吐槽,想看搜就行了
cmdOptionKana
2022-01-29 08:35:57 +08:00
NoSQL 和 GraphQL 之类的,就是在这样的背景下诞生的呀。SQL 的问题早就有过很多讨论了。
sagaxu
2022-01-29 08:36:14 +08:00
NoSQL 使用体验更烂,所以兼容 SQL 查询成了卖点
sadfQED2
2022-01-29 08:37:50 +08:00
@yulon 用过 mongo ,用过 es ,比 SQL 难用多了,而且 es 自己也发现了,现在 es 官方在推 sql 查询
liprais
2022-01-29 08:56:04 +08:00
看到资本主义毒瘤就懒得看了
书读的不多想的太多
shakoon
2022-01-29 08:57:37 +08:00
我做过近十年的 ETL ,中途也写过 JAVA ,经常写 SHELL ,不得不说 SQL 实在是很简单的一门语言了,很难有这种和自然语言这么相近还高效的编程语言了,而且熟练之后任何 ORM 都觉得难用,能手写 SQL 解决的东西绝不放到应用里去搞。楼主说的关键词多,但是 90%的关键词的使用概率是低于 10%的。NULL 的问题是问题也不是问题,要注意的地方无数前人已经总结成册,稍加学习就能搞定。
fantix
2022-01-29 09:04:27 +08:00
@Chad0000 @charlie21 嗯嗯,嗯!对,有道理!感谢分享!
@cmdOptionKana GraphQL 只能算是接口 spec 吧,感觉离查询语言还是稍有距离。NoSQL 们怎么说的,不太好一概而论,各自都有擅长解决的问题,不过确实没有能看到充分替代关系模型的解决方案。
loginv2
2022-01-29 09:23:12 +08:00
我倒是想用更好的,可我不会做也不懂设计,还能咋办
fantix
2022-01-29 09:35:22 +08:00
@loginv2 是我软文写得太软了吗? EdgeDB 了解一下!声明式 schema 、内置 migration 、完备周边配套设施(客户端、CLI 以及现代开发工作流),最重要的是有杀手锏 EdgeQL ,一次性解决 SQL 各种顽疾,当天即可下地走动。
Itoktsnhc
2022-01-29 10:08:53 +08:00
EdgeQL 能有类似兼容层在现有的主流 RDBMS 上使用吗?如果只能对 EdgeDB 使用,那和 Cassandra 的 CQL ,同属于只特定一个 DSL 。这样其实更应该推广的是 EdgeDB?
Itoktsnhc
2022-01-29 10:12:47 +08:00
其实看 Hadoop 这一系列的发展,从一开始的谁也不爱,到最后的花式蹩脚支持 SQL ,可能证明业界大家就认这口?
凑合过呗 还能离咋地
fantix
2022-01-29 10:56:23 +08:00
@Itoktsnhc 啊对的,目前确实在推 EdgeDB ,但我确实有(特别长远不切实际的)想法,如果 EdgeDB 能被市场接受,那就回去攒人用 Rust 写一个咱自己的 EdgeQL 后端。关于兼容层,EdgeDB 作为 EdgeQL 的唯一实现,虽然有 IR ,但后端是强依赖于 Postgres 的,可以用 RDS Aurora 什么的,但再别的就不行了。
fds
2022-01-29 11:09:26 +08:00
支持!就是没有掘金账号没法点赞……
另外发布会有点儿早,能否在结束后将录像搬运到 B 站呢?

现在公司有时就将关系型数据库当 KV 数据库用呢,有些逻辑可能直接用程序代码里写了,非常丑陋。还是处在能用就行的温饱阶段。
fantix
2022-01-29 11:22:35 +08:00
@fds 感谢!我会动员全家老小尽快制作中文字幕发 B 站的。你后面碰到的这种情况怎么说的,纯粹实用角度可能也没毛病,有时候只能是自己怀揣一颗追求技术的心,把眼前的事情做完再说。但总感觉如果都这样的话,有点劣币驱逐良币的意思……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/831211

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX