ClickHouse/clickhouse-c是一个最小化的头文件C客户端,实现ClickHouse原生wire format over TCP。该库由一个核心头文件加上可选的后续头文件组成,用于TCP、压缩、codec和I/O后端。它旨在嵌入PostgreSQL扩展中,但不包含PostgreSQL特定代码。仅包含clickhouse.h即提供纯块解码器,可用于在调用方提供的chc_io上读取clickhouse-local的FORMAT Native输出,无需TCP、压缩,仅依赖libc。
快速入门演示无TCP或压缩的clickhouse local查询解码。在examples/minimal_decode.c中提供了可运行的端到端版本。所需的服务器设置是output_format_native_encode_types_in_binary_format = 0;没有它,服务器会发出二进制类型标签,chc_block_read返回CHC_ERR_TYPE。
集成遵循单翻译单元模型:每个消费者恰好一个翻译单元定义CHC_IMPLEMENTATION宏并包含头文件,而其他TU仅包含公共声明。由CHC_PROVIDE_STDLIB_ALLOC提供的stdlib malloc/realloc/free辅助函数。关于在PostgreSQL扩展中 wiring palloc/repalloc/pfree,请参阅pg_clickhouse或pg_stat_ch。
头文件包括clickhouse.h(核心),clickhouse-client.h(TCP包循环),clickhouse-async.h(ioless客户端),clickhouse-compression.h(压缩帧,LZ4 & ZSTD适配器),clickhouse-posix-io.h(阻塞读/写),和clickhouse-openssl.h(SSL支持)。每个后续头文件均独立。测试使用带有CFLAGS和LDFLAGS配置的test.sh。
来源: Hacker News · 由HeadlinesBriefing整理摘要