fantix
V2EX  ›  数据库

EdgeDB 1.0 正式发布

  •  
  •   fantix · Feb 11, 2022 · 5202 views
    This topic created in 1579 days ago, the information mentioned may be changed or developed.

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

    45 replies    2022-02-16 06:37:59 +08:00
    naver1
        1
    naver1  
       Feb 11, 2022   ❤️ 1
    这个好方便:

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

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

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

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

    实际上,EdgeDB 优化到了能媲美 PostgreSQL 原生性能的地步。这听上去虽然没什么,但我说的是整体效率——对比来看现今大部分解决方案,总体效率会受到连接资源分配、SQL 编译缓存、ORM 开销、SQL 优化等诸多因素的牵连,因此综合来看 EdgeDB 都是名列前茅的,更不要说 EdgeDB 在开发者工作效率上的提升了。那 EdgeDB 是怎么做到的呢?
    ```
    fantix
        43
    fantix  
    OP
       Feb 15, 2022 via iPhone
    @so1n 因为 V 站牛人太多,我竟看不出你到底是捧是踩,也不敢感谢也不敢解释,那我还是给你拜个晚年吧!元宵节快乐!
    so1n
        44
    so1n  
       Feb 15, 2022
    @fantix 没有踩的意思....
    fantix
        45
    fantix  
    OP
       Feb 16, 2022 via iPhone
    @so1n 谢谢肯定!新年快乐😺
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3668 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 118ms · UTC 10:38 · PVG 18:38 · LAX 03:38 · JFK 06:38
    ♥ Do have faith in what you're doing.