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

EdgeDB 1.0 正式发布

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

    (想找一个类似 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   ·   实用小工具   ·   1053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.