AnyBlox 是一个框架,用于使用与数据捆绑在一起的轻量级 WebAssembly 解码器读取任意数据集。
提出了一种不同的数据编码范式——让数据集自我解码。
AnyBlox 围绕四大支柱构建:可移植性、安全性、性能和可扩展性。
对于系统开发人员
构建新的数据系统时,需要编写代码来读取要单独支持的所有格式的数据集。Parquet、ORC、JSON、热门新事物™——每一种都需要时间、精力,并造成维护负担。使用 AnyBlox,只需要一个读取器。在的系统中启用 AnyBlox 非常简单,并且可以立即允许使用 AnyBlox 解码器读取任何未来的数据集。
为了证明易用性,将 AnyBlox 实施为:
DuckDB,
DataFusion,
Umbra,
Spark
在所有情况下,集成只需几百行代码,就可以访问尖端的数据格式,例如 Vortex、 奇异的、特定于域的格式,如 ROOT,甚至是针对的数据量身定制的实例优化编码。
对于格式/编码开发人员
一旦创建了新的、改变世界的数据格式,距离任何系统都可以立即读取它仅一步之遥——只需将解码器编译成 WebAssembly!AnyBlox 需要一个简单的导出函数,它从那里获取所有内容。框架允许与解码器沙箱无缝共享内存,从而使的数据可移植、安全且高效地解码。
用法
前往主要的 anyblox 存储库以使用库,或集成我们现有数据系统(DuckDB、DataFusion、Spark)的扩展之一。
最佳VLDB2025论文
论文被评为 VLDB 2025 最佳论文!你可以在这里阅读它。
我对DuckDB阅读器插件感兴趣,所以下载了相关的插件源代码,又因为不想从头编译,所以下载了他的Umbra例子中预编译的libAnyBloxCpp.so文件 。
这个插件基于DuckDB 1.3版,所以将包含目录指向DuckDB 1.3源码的include目录。再从anyblox源码中解压缩相关的hpp头文件放在上级目录。
编译命令行
/par/duckdb-anyblox/src# g++ -fPIC -shared -o libtest2.so anyblox_extension.cpp -I include -I /par/duck/src/include -I .. -std=c++20
报了两个arrow函数的错误。
anyblox_extension.cpp: In static member function 'static void duckdb::{anonymous}::AnyBloxLocalState::SetVectorStringView(duckdb::Vector&, duckdb::idx_t, ArrowArray&, duckdb::idx_t)':
anyblox_extension.cpp:461:109: error: passing 'const duckdb::arrow_string_view_t' as 'this' argument discards qualifiers [-fpermissive]
461 | auto buffer_index = UnsafeNumericCast<uint32_t>(arrow_string[row_idx].GetBufferIndex());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
In file included from anyblox_extension.cpp:10:
/par/duck/src/include/duckdb/common/types/arrow_string_view_type.hpp:74:17: note: in call to 'int32_t duckdb::arrow_string_view_t::GetBufferIndex()'
74 | int32_t GetBufferIndex() {
| ^~~~~~~~~~~~~~
anyblox_extension.cpp:462:77: error: passing 'const duckdb::arrow_string_view_t' as 'this' argument discards qualifiers [-fpermissive]
462 | int32_t str_offset = arrow_string[row_idx].GetOffset();
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/par/duck/src/include/duckdb/common/types/arrow_string_view_type.hpp:78:17: note: in call to 'int32_t duckdb::arrow_string_view_t::GetOffset()'
78 | int32_t GetOffset() {
| ^~~~~~~~~
暂时注释掉相关代码,就通过了编译,然后用python脚本加上插件元数据。
python3 /par/appendmetadata.py -l libtest2.so -n duckdb_anyblox -dv v1.3.0 --duckdb-platform linux_amd64 --extension-version 0.1 --abi-type ""
不能load,报缺少duckdb某个函数错误
root@6ae32a5ffcde:/par/duckdb-anyblox/src# /par/duckdb130 -unsigned
D load './duckdb_anyblox.duckdb_extension';
IO Error:
Extension "./duckdb_anyblox.duckdb_extension" could not be loaded: ./duckdb_anyblox.duckdb_extension: undefined symbol: _ZNK6duckdb28SimpleNamedParameterFunction8ToStringB5cxx11Ev
再设置环境变量,指向duckdb动态库目录,加-lduckdb重新编译
export LIBRARY_PATH=/par/libduckdb132:/par/anyb
export LD_LIBRARY_PATH=/par/libduckdb132:/par/anyb
g++ -fPIC -shared -o libtest2.so anyblox_extension.cpp -I include -I /par/duck/src/include -I .. -std=c++20 -lduckdb
重新加载,刚才的错误消失了,又报anyblox函数错误
/par/duckdb-anyblox/src# /par/duckdb130 -unsigned
D load './duckdb_anyblox.duckdb_extension';
IO Error:
Extension "./duckdb_anyblox.duckdb_extension" could not be loaded: ./duckdb_anyblox.duckdb_extension: undefined symbol: _ZN7anyblox13AnyBloxBundleD1Ev
因为/par/anyb目录下的文件不是so后缀,所以添加软连接
ln -s /par/anyb/libAnyBloxCpp.so.0.10.0 /usr/lib/x86_64-linux-gnu/libAnyBloxCpp.so
用类似duckdb的方式添加AnyBloxCpp动态链接库,编译通过了。
g++ -fPIC -shared -o libtest2.so anyblox_extension.cpp -I include -I /par/duck/src/include -I .. -std=c++20 -lduckdb -lAnyBloxCpp
重新加载,刚才的错误消失了,又报arrow库加载错误
root@6ae32a5ffcde:/par/duckdb-anyblox/src# /par/duckdb130 -unsigned
DuckDB v1.3.0 (Ossivalis) 71c5c07cdd
Enter ".help" for usage hints.
D load './duckdb_anyblox.duckdb_extension';
IO Error:
Extension "./duckdb_anyblox.duckdb_extension" could not be loaded: libarrow.so.1800: cannot open shared object file: No such file or directory
检查我的系统,arrrow库的版本不同,所以不能加载
root@6ae32a5ffcde:/par/duckdb-anyblox/src# whereis libarrow.so
libarrow.so: /usr/lib/x86_64-linux-gnu/libarrow.so
root@6ae32a5ffcde:/par/duckdb-anyblox/src# file /usr/lib/x86_64-linux-gnu/libarrow.so
/usr/lib/x86_64-linux-gnu/libarrow.so: symbolic link to libarrow.so.1900
使用预编译版本就是环境要相同才行。


2054

被折叠的 条评论
为什么被折叠?



