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

最近自己造了个数据库

  •  
  •   yjhatfdu2 · 177 天前 · 2347 次点击
    这是一个创建于 177 天前的主题,其中的信息可能已经有所发展或是发生改变。

    DuckServer

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

    DuckDB 是个非常不错的嵌入式 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
    GeekGao
        1
    GeekGao  
       176 天前
    有点意思
    defunct9
        2
    defunct9  
       176 天前
    小刀剌屁股?
    grzhan
        3
    grzhan  
       176 天前
    clickhouse 的优化器确实挺蛋疼的。看看后续能不能挖掘更多的 DuckDB 的使用场景。
    netnr
        4
    netnr  
       176 天前
    baidu2022
        5
    baidu2022  
       176 天前 via iPhone
    牛逼
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5178 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:48 · PVG 11:48 · LAX 19:48 · JFK 22:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.