EdgeDB 1.0 正式发布 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fantix
V2EX    数据库

EdgeDB 1.0 正式发布

  •  
  •   fantix 2022-02-11 08:18:39 +08:00 4845 次点击
    这是一个创建于 1371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    (想找一个类似 Show HN 的中文讨论区,思来想去好像也只有这里可以了?楼主会尽量尝试回答大家的技术问题。)

    45 条回复    2022-02-16 06:37:59 +08:00
    DT27
        1
    DT27  
       2022-02-11 09:00:48 +08:00   1
    这个好方便:

    使用 EdgeQL 进行查询也不需要考虑 JOIN 和外键:

    SELECT Person {
    id,
    name,
    pets: {
    id,
    name
    }
    }
    FILTER .name = "Tony";
    2kCS5c0b0ITXE5k2
        2
    2kCS5c0b0ITXE5k2  
       2022-02-11 09:41:09 +08:00
    不知道各种库什么时候能适配?
    fantix
        3
    fantix  
    OP
       2022-02-11 09:57:06 +08:00 via iPhone
    @emeab 嗯……目前官方客户端库支持 Python 、TypeScript 、Deno 和 Go ,其中 TypeScript 有 query builder ,目标是完全替代 ORM 。Rust 客户端现在是半成品,目前主要用在自家的 CLI 工具里。可能你说的库还有其他层的?
    bnm965321
        4
    bnm965321  
       2022-02-11 10:12:42 +08:00   1
    楼主我之前是你开设 edgedb 中文文档的一名翻译者
    masterclock
        5
    masterclock  
       2022-02-11 10:13:35 +08:00   1
    看起来非常不错
    现在用 ent ,如果有 go 的 query builder 想试试
    fantix
        6
    fantix  
    OP
       2022-02-11 10:24:28 +08:00 via iPhone
    @bnm965321 哇那还是 2018 年那会儿吧,文档后来改了不少,老板跟我说你们先把 tutorial 翻译了吧,然后 server error message 也可以搞一搞。 @DaisyDai 最近把《 EdgeDB 易经》翻译完了
    fantix
        7
    fantix  
    OP
       2022-02-11 10:27:32 +08:00 via iPhone
    @masterclock 抱歉现在还没有,不过有专门同事负责 Go 这一块,虽然他也要做 cloud ,但 Go query builder 估计也不会拖太久。
    fgwmlhdkkkw
        8
    fgwmlhdkkkw  
       2022-02-11 10:47:14 +08:00
    能禁用 ssl 吗?
    我用的 docker ,看 https://github.com/edgedb/edgedb-docker/blob/master/docker-entrypoint-funcs.sh 里面,好像除了自签名,没有别的选项了
    fantix
        9
    fantix  
    OP
       2022-02-11 10:56:26 +08:00 via iPhone
    @fgwmlhdkkkw 可以禁,我记得是个环境变量叫 INSECURE_DEV_MODE ,但我忘了加哪了,我先用手机找找试试
    yxt
        10
    yxt  
       2022-02-11 11:05:36 +08:00
    能给个离线安装的 guide 吗? https://github.com/edgedb/edgedb/issues/3406

    另, 有印象楼主以前做 gino, 最近才发现去 edgedb 了 :)
    EPr2hh6LADQWqRVH
        11
    EPr2hh6LADQWqRVH  
       2022-02-11 11:13:59 +08:00
    frankenDB
    fantix
        13
    fantix  
    OP
       2022-02-11 11:23:05 +08:00 via iPhone
    @yxt 啊有意思的需求!让我想到了之前给车企外包时,用 U 盘拷 pip 包的情景……理论上应该是可以手动实现的,不过能否获得上游支持不好说,我明天试试,如果简单就回复那个 issue 了。GINO 就比较惭愧了,没时间做新版本了,但既然 SQLAlchemy 已经支持 asyncpg 了……
    fantix
        14
    fantix  
    OP
       2022-02-11 11:27:42 +08:00 via iPhone
    @avastms 哈,组装得确实有些怪异,主要还是早先他们迭代来回改了好多年,如果不是用 Python 的话可能已经跪了;另外 Postgres 自己也是攒了那么多年门槛太高了,之前我的帖子里也讨论过怎么轮的问题。下一步用 Rust 重写 I/O 层还算是比较可行的计划。
    wongnet
        15
    wongnet  
       2022-02-11 11:39:06 +08:00   1
    Congratulations!
    Mark.
    fgwmlhdkkkw
        16
    fgwmlhdkkkw  
       2022-02-11 11:50:01 +08:00
    @fantix 连上了~
    Braisdom
        17
    Braisdom  
       2022-02-11 12:05:38 +08:00
    @fantix 个人觉得,为了引入一种新的查询方式,基于一种数据库引擎去改造,太重了,而且适用性也不高。我现在正在设计一种新的查询语言,对程序员屏蔽底层 SQL 的复杂逻辑,能够适用于目前大多数数据库引擎,希望 2022 年能发布第一版本。
    bnm965321
        18
    bnm965321  
       2022-02-11 12:38:58 +08:00
    @fantix 你现在已经入职 edgedb 了呀。

    想在 [rescript]( http://rescript-lang.org) 使用 edgedb ,但是好像不支持生成 relay 风格的 graphql schema ?
    bnm965321
        19
    bnm965321  
       2022-02-11 12:42:38 +08:00   1
    @fantix 其实我的 todolist 里面有个为 edgedb 做 gui 的 todo ,但是想用 rescript + electron 来做
    sxfscool
        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
    kaellzt777
        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: 为绑定变量

    然后就没了?
    sunng87
        22
    sunng87  
       2022-02-11 14:51:18 +08:00
    之前印象楼主还是早期的 Rust 开发者
    scyuns
        23
    scyuns  
       2022-02-11 15:29:41 +08:00
    这个数据库 好像今天看到了 好多人都在说
    feilaoda
        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"]}
    }
    }
    ```
    fantix
        25
    fantix  
    OP
       2022-02-11 20:45:24 +08:00 via iPhone
    @Braisdom 期待看到您设计的新查询语言!适配现有数据库确实也是实实在在的需求,但 EdgeDB 还是选择了另外一条路线。
    fantix
        26
    fantix  
    OP
       2022-02-11 21:37:42 +08:00
    @bnm965321 对的,来 EdgeDB 一年了。好像确实没有直接提供 Relay 风格的 schema , 不过看代码应该不难加。不过,你说的 GUI 是类似 https://github.com/edgedb/edgedb-studio 这样的吗?
    fantix
        27
    fantix  
    OP
       2022-02-11 21:49:54 +08:00
    fantix
        28
    fantix  
    OP
       2022-02-11 22:12:13 +08:00
    @kaellzt777 这确实是一个 bug !已提交修复 PR: https://github.com/edgedb/edgedb-cli/pull/656

    不过你可以先试试加上 --tlsv1.2:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.edgedb.com | sh
    fantix
        29
    fantix  
    OP
       2022-02-11 22:17:23 +08:00
    @sunng87 哟那可不敢当,只是 0.13 时写过点 zeromq 的东西而已
    fantix
        30
    fantix  
    OP
       2022-02-11 22:34:02 +08:00 via iPhone
    @feilaoda 有趣的语法~那生成 SQL 时是怎么知道要 join 哪个表的呢?是另有 schema 定义吗?
    devtiange
        31
    devtiange  
       2022-02-11 23:02:56 +08:00
    感谢楼主, 提两个问题:
    1) 能不能在现有的 psql 上安装, 好像没找到相关文档?
    2) 官方给出的 client 都是后端的, 如果后端用 edgeql, 那么 web 前端怎么和后端通信, 还是用 REST/graphql, 然后转一层吗? 有没有推荐的套路?
    fantix
        32
    fantix  
    OP
       2022-02-11 23:46:24 +08:00
    @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 的功能,也可以用来做后端。
    feilaoda
        33
    feilaoda  
       2022-02-12 10:11:53 +08:00   1
    @fantix Entity 类上有 1:N, N:N 这些关系,类似 hibernate ,通过这个 QL 就自动可以查询 Join 了。
    bnm965321
        34
    bnm965321  
       2022-02-12 14:58:21 +08:00
    @fantix 对。我想写一个 robo 3t for mongodb 的东东,原来官方已经写好了
    expexp
        35
    expexp  
       2022-02-12 18:35:35 +08:00
    没有理解这个的用意,你要知道,让各种团队学习新的语言成本是非常非常高的。哪怕只是一个 extension 也是如此。所以你们的 blog 必须要说清楚到底解决了什么问题,才有可能让大家来试用,以及切换。
    tabris17
        36
    tabris17  
       2022-02-13 18:57:21 +08:00 via iPhone
    既然这东西只是 posrgre 的转译,为何不做为模块发布,而要起一个服务呢
    fantix
        37
    fantix  
    OP
       2022-02-13 23:55:49 +08:00 via iPhone
    @tabris17 好问题!有多个原因,主要是方便支持多种编程语言,以及对 I/O 更好的掌控,同时还带来了支持更多功能的可能性,比如共享连接池和 CLI 相关的许多提升 DX 的工作流。理论上如果你只用 Python asyncio 写服务的话,可以内嵌一个 EdgeDB 模块,但节省不了太多资源,反而影响了 DX 和心情。
    tabris17
        38
    tabris17  
       2022-02-14 12:37:21 +08:00
    @fantix 但是站在运维的角度,多起一个服务就意味着多一个单点故障节点的隐患,事实上在增加运维的工作负担,如果这个服务的功能仅仅是转译 SQL ,恐怕很难说服运维去部署
    fantix
        39
    fantix  
    OP
       2022-02-14 21:57:55 +08:00 via iPhone
    @tabris17 嗯,你和 #35 @expexp 大体上是一个意思:现有体制很难动摇,开发者有学习成本和风险、运维有维护成本和单点风险,等等。这确实都是实际存在的困难,也是 EdgeDB 愿意去挑战的,新事物总是有早期使用者和大众接受期(如果幸运的话),好在早期使用者对 EdgeDB 给出的反馈是非常鼓舞人心的,因为 EdgeDB 确实解决了很多 SQL 体系中的问题,比如无须再使用 ORM 和 pgBouncer/pg-Pool 等,EdgeDB 的成本和风险对他们来说是可以接受的,这也是 EdgeDB 敢于走向大众的原因。另:EdgeDB 的 HA 是我做的,有 bug 我来修……
    fantix
        40
    fantix  
    OP
       2022-02-14 22:08:11 +08:00 via iPhone
    有个朋友做了个 AWS 里的 HA EdgeDB: https://github.com/aaronbrighton/cdk-edgedb-demo
    so1n
        41
    so1n  
       2022-02-15 14:25:16 +08:00
    看到这一段觉得又好笑又牛逼
    so1n
        42
    so1n  
       2022-02-15 14:25:44 +08:00   1
    看到这一段觉得又好笑又牛逼
    ```
    ## 性能
    如果我告诉你,EdgeDB Server 其实是用 Python 写的,你还敢用吗?

    实际上,EdgeDB 优化到了能媲美 PostgreSQL 原生性能的地步。这听上去虽然没什么,但我说的是整体效率对比来看现今大部分解决方案,总体效率会受到连接资源分配、SQL 编译缓存、ORM 开销、SQL 优化等诸多因素的牵连,因此综合来看 EdgeDB 都是名列前茅的,更不要说 EdgeDB 在开发者工作效率上的提升了。那 EdgeDB 是怎么做到的呢?
    ```
    fantix
        43
    fantix  
    OP
       2022-02-15 20:21:56 +08:00 via iPhone
    @so1n 因为 V 站牛人太多,我竟看不出你到底是捧是踩,也不敢感谢也不敢解释,那我还是给你拜个晚年吧!元宵节快乐!
    so1n
        44
    so1n  
       2022-02-15 22:40:53 +08:00
    @fantix 没有踩的意思....
    fantix
        45
    fantix  
    OP
       2022-02-16 06:37:59 +08:00 via iPhone
    @so1n 谢谢肯定!新年快乐
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2823 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 14:43 PVG 22:43 LAX 06:43 JFK 09:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86