最近自己造了个数据库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yjhatfdu2
V2EX    数据库

最近自己造了个数据库

  •  
  •   yjhatfdu2 2024-05-22 11:00:39 +08:00 2801 次点击
    这是一个创建于 507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    DuckServer

    其实是标题党了,本质是给DuckDB做了个 server ,支持 postgresql 的原生协议和 clickhouse 的 http 协议。

    DckDB 是个非常不错的嵌入式 OLAP 数据库,使用简单,SQL 支持多,和 pg 兼容性好,性能特别强(基本上是登顶)的存在),支持 update/delete ,支持并发事务。但是 duckdb 本身是类似 sqlite 的嵌入式数据库,不能多进程读写(可以多进程只读或者单进程多线程读写),不能通过网络访问。所以套成 server 能够一定程度扩展使用范围,比如通过网络写入数据,收集日志、统计数据,对接 Grafana 或其他可视化工具之类。

    起因是公司内用 clickhouse 的时候,遇到 clickhouse 的优化器简直是智障可能还不如 mysql ,例如 select * from a,b where a.id=b.id and a.id=1000,clickhouse 会先把 a 、b 表进行全量 hashjoin 再 filter ,duckdb 优化器就聪明多了,会先 filter 再 join ,快很多,其实普通的查询 duckdb 也可能比 ch 更快。duckdb 还能方便读取 csv 等外部文件并智能探测表结构,非常方便如select * from 'data_*.csv'select * from 'https://test.com/data.csv'

    目前主要的特性如下:

    • 支持通过 postgresql wire 协议和 clickhouse http 协议并发读写
    • 支持 pg 的 simple query 和 extend query
    • 支持 clickhouse select/insert format 语法和 TabSeparated/CSV/JSONEachRow 等常用格式
    • 支持 postgresql copy table from stdin 批量导入 csv
    • 简单测了 psql,jackc/pgx,postgresql-jdbc,clickhouse-jdbc,curl 可以用
    • 基本可以使用 DataGrip 当作 pg 和 ch 连接,不过元数据可能不完整,尝试补了一部分函数和视图,可以做到 80%的效果

    目前主要的问题:

    • 未实现 clickhouse 的 tcp 协议,所以部分客户端和 clickhouse-client 不能用
    • 目前未实现任何鉴权功能,且 duckdb 本身没有用户和权限系统,且 duckdb 可以执行 shell ,所以需要注意安全,有空可能会实现 pg 的 SCRAM-SHA-256 认证和 ch 的 basic-auth
    • 有些数据类型还没支持,不过这个很容易实现
    • 有一些特殊的语句使用 postgresql extend query 模式可能有问题,比如select $1;然后$1 为字符串,这是因为 duckdb 在 desceibe 语句时,未知返回类型会指定为 int ,有些驱动如 pgx 依赖 desceibe 的返回类型,会报错。可以使用 pg 的显式类型转换来避开select $1::text;

    话说这个应该符合国产信创吧

    5 条回复    2024-05-23 10:01:38 +08:00
    R4rvZ6agNVWr56V0
        1
    R4rvZ6agNVWr56V0  
       2024-05-22 14:11:00 +08:00
    有点意思
    defunct9
        2
    defunct9  
       2024-05-22 15:21:26 +08:00
    小刀剌屁股?
    grzhan
        3
    grzhan  
       2024-05-22 15:25:08 +08:00
    clickhouse 的优化器确实挺蛋疼的。看看后续能不能挖掘更多的 DuckDB 的使用场景。
    netnr
        4
    netnr  
       2024-05-22 15:56:25 +08:00
    baidu2022
        5
    baidu2022  
       2024-05-23 10:01:38 +08:00 via iPhone
    牛逼
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5195 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 09:30 PVG 17:30 LAX 02:30 JFK 05:30
    Do have faith in what you're doing.
    ubao 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