(想找一个类似 Show HN 的中文讨论区,思来想去好像也只有这里可以了?楼主会尽量尝试回答大家的技术问题。)
1
DT27 2022-02-11 09:00:48 +08:00 1
这个好方便:
使用 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 1
楼主我之前是你开设 edgedb 中文文档的一名翻译者
|
5
masterclock 2022-02-11 10:13:35 +08:00 1
看起来非常不错
现在用 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 1
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 1
@fantix 其实我的 todolist 里面有个为 edgedb 做 gui 的 todo ,但是想用 rescript + electron 来做
|
20
sxfscool 2022-02-11 13:25:01 +08:00 1
文档有一些错误的地方,不知道怎么贡献直接写这里了
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
fantix OP @Braisdom 期待看到您设计的新查询语言!适配现有数据库确实也是实实在在的需求,但 EdgeDB 还是选择了另外一条路线。
|
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 1
@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 1
看到这一段觉得又好笑又牛逼
``` ## 性能 如果我告诉你,EdgeDB Server 其实是用 Python 写的,你还敢用吗? 实际上,EdgeDB 优化到了能媲美 PostgreSQL 原生性能的地步。这听上去虽然没什么,但我说的是整体效率——对比来看现今大部分解决方案,总体效率会受到连接资源分配、SQL 编译缓存、ORM 开销、SQL 优化等诸多因素的牵连,因此综合来看 EdgeDB 都是名列前茅的,更不要说 EdgeDB 在开发者工作效率上的提升了。那 EdgeDB 是怎么做到的呢? ``` |
43
fantix OP @so1n 因为 V 站牛人太多,我竟看不出你到底是捧是踩,也不敢感谢也不敢解释,那我还是给你拜个晚年吧!元宵节快乐!
|