
(想找一个类似 Show HN 的中文讨论区,思来想去好像也只有这里可以了?楼主会尽量尝试回答大家的技术问题。)
1 DT27 2022-02-11 09:00:48 +08:00 这个好方便: 使用 EdgeQL 进行查询也不需要考虑 JOIN 和外键: SELECT Person { id, name, pets: { id, name } } FILTER .name = "Tony"; |
2 2kCS5c0b0ITXE5k2 2022-02-11 09:41:09 +08:00 不知道各种库什么时候能适配? |
3 fantix OP @emeab 嗯……目前官方客户端库支持 Python 、TypeScript 、Deno 和 Go ,其中 TypeScript 有 query builder ,目标是完全替代 ORM 。Rust 客户端现在是半成品,目前主要用在自家的 CLI 工具里。可能你说的库还有其他层的? |
4 bnm965321 2022-02-11 10:12:42 +08:00 楼主我之前是你开设 edgedb 中文文档的一名翻译者 |
5 masterclock 2022-02-11 10:13:35 +08:00 看起来非常不错 现在用 ent ,如果有 go 的 query builder 想试试 |
6 fantix OP |
7 fantix OP @masterclock 抱歉现在还没有,不过有专门同事负责 Go 这一块,虽然他也要做 cloud ,但 Go query builder 估计也不会拖太久。 |
8 fgwmlhdkkkw 2022-02-11 10:47:14 +08:00 能禁用 ssl 吗? 我用的 docker ,看 https://github.com/edgedb/edgedb-docker/blob/master/docker-entrypoint-funcs.sh 里面,好像除了自签名,没有别的选项了 |
9 fantix OP @fgwmlhdkkkw 可以禁,我记得是个环境变量叫 INSECURE_DEV_MODE ,但我忘了加哪了,我先用手机找找试试 |
10 yxt 2022-02-11 11:05:36 +08:00 |
11 EPr2hh6LADQWqRVH 2022-02-11 11:13:59 +08:00 frankenDB |
12 fantix OP |
13 fantix OP @yxt 啊有意思的需求!让我想到了之前给车企外包时,用 U 盘拷 pip 包的情景……理论上应该是可以手动实现的,不过能否获得上游支持不好说,我明天试试,如果简单就回复那个 issue 了。GINO 就比较惭愧了,没时间做新版本了,但既然 SQLAlchemy 已经支持 asyncpg 了…… |
14 fantix OP @avastms 哈,组装得确实有些怪异,主要还是早先他们迭代来回改了好多年,如果不是用 Python 的话可能已经跪了;另外 Postgres 自己也是攒了那么多年门槛太高了,之前我的帖子里也讨论过怎么轮的问题。下一步用 Rust 重写 I/O 层还算是比较可行的计划。 |
15 wongnet 2022-02-11 11:39:06 +08:00 Congratulations! Mark. |
16 fgwmlhdkkkw 2022-02-11 11:50:01 +08:00 @fantix 连上了~ |
17 Braisdom 2022-02-11 12:05:38 +08:00 @fantix 个人觉得,为了引入一种新的查询方式,基于一种数据库引擎去改造,太重了,而且适用性也不高。我现在正在设计一种新的查询语言,对程序员屏蔽底层 SQL 的复杂逻辑,能够适用于目前大多数数据库引擎,希望 2022 年能发布第一版本。 |
18 bnm965321 2022-02-11 12:38:58 +08:00 @fantix 你现在已经入职 edgedb 了呀。 想在 [rescript]( http://rescript-lang.org) 使用 edgedb ,但是好像不支持生成 relay 风格的 graphql schema ? |
19 bnm965321 2022-02-11 12:42:38 +08:00 @fantix 其实我的 todolist 里面有个为 edgedb 做 gui 的 todo ,但是想用 rescript + electron 来做 |
20 sxfscool 2022-02-11 13:25:01 +08:00 文档有一些错误的地方,不知道怎么贡献直接写这里了 1. https://www.edgedb.com/tutorial/building-blocks/operators/logical-and-comparison 最后一个 duration 比较的注释是 string 比较的注释 2. https://www.edgedb.com/docs/guides/deployment/docker docker 启动的命令多了一个 -e |
21 kaellzt777 2022-02-11 14:46:34 +08:00 curl https://sh.edgedb.com --proto '=https' -sSf1 | sh info: downloading installer Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure sh:行 258: $3: 为绑定变量 然后就没了? |
22 sunng87 2022-02-11 14:51:18 +08:00 之前印象楼主还是早期的 Rust 开发者 |
23 scyuns 2022-02-11 15:29:41 +08:00 这个数据库 好像今天看到了 好多人都在说 |
24 feilaoda 2022-02-11 17:58:03 +08:00 有意思。最近自己也写了一个玩具,使用类似的 QL 进行查询,Join 能力放在了应用层,后端 DB 不限,查询 QL 类似如下 ``` { "query": { "project": "1440605538441293825", "name": "User" }, "args": { "id": "tom", "name": {"NOTNULL": ""}, "department.id": {"EQ": "1001"}, "department.name": {"EQ": "dep1"}, "roles.id": {"EQ": "101"}, "roles.name": {"EQ": "admin"}, "roles.permissions.id": {"EQ": "10001"}, "roles.permissions.name": {"IN": ["edit", "admin"]} } } ``` |
25 |
26 fantix OP @bnm965321 对的,来 EdgeDB 一年了。好像确实没有直接提供 Relay 风格的 schema , 不过看代码应该不难加。不过,你说的 GUI 是类似 https://github.com/edgedb/edgedb-studio 这样的吗? |
27 fantix OP |
28 fantix OP @kaellzt777 这确实是一个 bug !已提交修复 PR: https://github.com/edgedb/edgedb-cli/pull/656 不过你可以先试试加上 --tlsv1.2: curl --proto '=https' --tlsv1.2 -sSf https://sh.edgedb.com | sh |
30 fantix OP @feilaoda 有趣的语法~那生成 SQL 时是怎么知道要 join 哪个表的呢?是另有 schema 定义吗? |
31 devtiange 2022-02-11 23:02:56 +08:00 感谢楼主, 提两个问题: 1) 能不能在现有的 psql 上安装, 好像没找到相关文档? 2) 官方给出的 client 都是后端的, 如果后端用 edgeql, 那么 web 前端怎么和后端通信, 还是用 REST/graphql, 然后转一层吗? 有没有推荐的套路? |
32 fantix OP @devtiange 1 )可以的,用 `--backend-dsn` 参数指定一个 PostgreSQL 的 DSN 就行,初次运行会创建内置库和 schema ,稍慢。https://www.edgedb.com/docs/guides/deployment/docker#edgedb-server-backend-dsn 2 )可以有不同套路,传说中的 serverless 可以直接用 HTTP 向 EdgeDB 发送 EdgeQL 请求( https://www.edgedb.com/docs/clients/90_edgeql/index#edgeql-over-http ),另外如果是 REST 的话,可以用 query_json() 直接让 EdgeDB 返回 JSON 字符串,后端无需处理直接回传给前端,节省额外的处理和序列化的工夫。接下来还在计划一种在 EdgeDB Server 中执行用户 WebAssembly 的功能,也可以用来做后端。 |
33 feilaoda 2022-02-12 10:11:53 +08:00 @fantix Entity 类上有 1:N, N:N 这些关系,类似 hibernate ,通过这个 QL 就自动可以查询 Join 了。 |
35 expexp 2022-02-12 18:35:35 +08:00 没有理解这个的用意,你要知道,让各种团队学习新的语言成本是非常非常高的。哪怕只是一个 extension 也是如此。所以你们的 blog 必须要说清楚到底解决了什么问题,才有可能让大家来试用,以及切换。 |
36 tabris17 2022-02-13 18:57:21 +08:00 via iPhone 既然这东西只是 posrgre 的转译,为何不做为模块发布,而要起一个服务呢 |
37 fantix OP @tabris17 好问题!有多个原因,主要是方便支持多种编程语言,以及对 I/O 更好的掌控,同时还带来了支持更多功能的可能性,比如共享连接池和 CLI 相关的许多提升 DX 的工作流。理论上如果你只用 Python asyncio 写服务的话,可以内嵌一个 EdgeDB 模块,但节省不了太多资源,反而影响了 DX 和心情。 |
38 tabris17 2022-02-14 12:37:21 +08:00 @fantix 但是站在运维的角度,多起一个服务就意味着多一个单点故障节点的隐患,事实上在增加运维的工作负担,如果这个服务的功能仅仅是转译 SQL ,恐怕很难说服运维去部署 |
39 fantix OP |
40 fantix OP 有个朋友做了个 AWS 里的 HA EdgeDB: https://github.com/aaronbrighton/cdk-edgedb-demo |
41 so1n 2022-02-15 14:25:16 +08:00 看到这一段觉得又好笑又牛逼 |
42 so1n 2022-02-15 14:25:44 +08:00 看到这一段觉得又好笑又牛逼 ``` ## 性能 如果我告诉你,EdgeDB Server 其实是用 Python 写的,你还敢用吗? 实际上,EdgeDB 优化到了能媲美 PostgreSQL 原生性能的地步。这听上去虽然没什么,但我说的是整体效率对比来看现今大部分解决方案,总体效率会受到连接资源分配、SQL 编译缓存、ORM 开销、SQL 优化等诸多因素的牵连,因此综合来看 EdgeDB 都是名列前茅的,更不要说 EdgeDB 在开发者工作效率上的提升了。那 EdgeDB 是怎么做到的呢? ``` |
43 fantix OP @so1n 因为 V 站牛人太多,我竟看不出你到底是捧是踩,也不敢感谢也不敢解释,那我还是给你拜个晚年吧!元宵节快乐! |