TileDB 是C++編寫的存儲和訪問通用多維數組引擎,它的官方Github網站https://github.1git.de/TileDB-Inc/TileDB
1.下載源代碼和二進制庫
源代碼https://github.1git.de/TileDB-Inc/TileDB/archive/refs/tags/2.28.1.tar.gz
選擇符合你的機器CPU架構和操作系統的庫
二進制庫https://github.1git.de/TileDB-Inc/TileDB/releases/download/2.28.1/tiledb-linux-arm64-2.28.1-d648231.tar.gz
2.從源代碼編譯庫
一般不需要,因為https://github.1git.de/TileDB-Inc/TileDB/releases/expanded_assets/2.28.1已經提供了大多數平臺的現成庫
如果需要,按照以下步驟
tar xf 2.28.1.tar.gz
然后按照解壓的BUILDING_FROM_SOURCE.md文件提示的步驟,大致是
mkdir build
cd build
../bootstrap <flags>
# Or use CMake directly instead of bootstrap:
# cmake <flags> ..make -j <nprocs>make install
3.編譯源代碼中的例子
參照解壓的USAGE.md文件提示的步驟,
定位到目錄examples/c_api
以as_built.c為例,編譯命令行如下,這里-I /shujv/par/tiledb/include
和-L /shujv/par/tiledb/lib
分別是tiledb頭文件和動態庫的位置
gcc as_built.c -o as_built -ltiledb -I /shujv/par/tiledb/include -L /shujv/par/tiledb/lib
注意對系統c/c++庫版本有要求,如果不滿足,將報錯
/shujv/par/tiledb/lib/libtiledb.so:對‘std::thread::_State::~_State()@GLIBCXX_3.4.22’未定義的引用
/shujv/par/tiledb/lib/libtiledb.so:對‘__cxa_init_primary_exception@CXXABI_1.3.11’未定義的引用
/shujv/par/tiledb/lib/libtiledb.so:對‘fcntl64@GLIBC_2.28’未定義的引用
/shujv/par/tiledb/lib/libtiledb.so:對‘getentropy@GLIBC_2.25’未定義的引用
/shujv/par/tiledb/lib/libtiledb.so:對‘logf@GLIBC_2.27’未定義的引用
/shujv/par/tiledb/lib/libtiledb.so:對‘operator new(unsigned long, std::align_val_t)@CXXABI_1.3.11’未定義的引用
/shujv/par/tiledb/lib/libtiledb.so:對‘typeinfo for std::thread::_State@GLIBCXX_3.4.22’未定義的引用
等等
我切換到gcc 14.2 docker鏡像,編譯就不報錯了,注意要設置LD_LIBRARY_PATH
環境變量加入tiledb動態庫的位置
gcc as_built.c -o as_built -ltiledb -I /par/tiledb/include -L /par/tiledb/lib
root@66d4e20ec1d7:/par/TileDB-main/examples/c_api# export LD_LIBRARY_PATH="/par/tiledb/lib:$LD_LIBRARY_PATH"
root@66d4e20ec1d7:/par/TileDB-main/examples/c_api# ./as_built
{"as_built": {"parameters": {"storage_backends": {"azure": {"enabled": true},"gcs": {"enabled": true},"s3": {"enabled": true}},"support": {"serialization": {"enabled": true}}}}
再編譯query_condition_dense.c,能實現對數組條件查詢,是不是有點像數據庫
gcc query_condition_dense.c -o qcd -ltiledb -I /par/tiledb/include -L /par/tiledb/lib
root@66d4e20ec1d7:/par/TileDB-main/examples/c_api# ./qcd
Printing the entire array...
{null, alice, 0, 4.1}
{2, bob, 0, 3.4}
{null, craig, 0, 5.6}
{4, dave, 0, 3.7}
{null, erin, 0, 2.3}
{6, frank, 0, 1.7}
{null, grace, 1, 3.8}
{8, heidi, 2, 4.9}
{null, ivan, 3, 3.2}
{10, judy, 4, 3.1}Running read query with query condition `a = null`...
{null, alice, 0, 4.1}
{null, craig, 0, 5.6}
{null, erin, 0, 2.3}
{null, grace, 1, 3.8}
{null, ivan, 3, 3.2}Running read query with query condition `b < "eve"`...
{null, alice, 0, 4.1}
{2, bob, 0, 3.4}
{null, craig, 0, 5.6}
{4, dave, 0, 3.7}
{null, erin, 0, 2.3}Running read query with query condition `c >= 1`...
{null, grace, 1, 3.8}
{8, heidi, 2, 4.9}
{null, ivan, 3, 3.2}
{10, judy, 4, 3.1}Running read query with query condition `3.0f <= d AND d <= 4.0f`...
{2, bob, 0, 3.4}
{4, dave, 0, 3.7}
{null, grace, 1, 3.8}
{null, ivan, 3, 3.2}
{10, judy, 4, 3.1}Running read query with query condition `3.0f <= d AND d <= 4.0f AND a != null AND b < "eve"`...
{2, bob, 0, 3.4}
{4, dave, 0, 3.7}