开源嵌入式数组引擎TileDB的简单使用

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文件提示的步骤,大致是

bash 复制代码
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头文件和动态库的位置

bash 复制代码
gcc as_built.c -o as_built -ltiledb -I /shujv/par/tiledb/include -L /shujv/par/tiledb/lib

注意对系统c/c++库版本有要求,如果不满足,将报错

bash 复制代码
/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动态库的位置

bash 复制代码
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,能实现对数组条件查询,是不是有点像数据库

bash 复制代码
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}
相关推荐
白杨尚青18 分钟前
C++入门篇(十):string(上)——认识string:构造与三大遍历(一条龙讲透operator[]、迭代器、auto、范围for)
java·开发语言·c++·笔记·stl
2601_9521963619 分钟前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle
FlightYe21 分钟前
视界原理之2D视频(二):视频文件里有什么
android·linux·网络·c++·ffmpeg·音视频·aac
皮皮学姐分享-ppx24 分钟前
地级市、省级人才政策强度测算(2000-2025)
大数据·数据库·人工智能·百度·高考
Chen—LSN27 分钟前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
晚安日记wanna30 分钟前
大厂禁 JOIN 的真正原因,拆到第四层才清楚
数据库·后端·面试
木由里予31 分钟前
GDB 使用手册(详细版)
c语言·vscode
辛苦才能1 小时前
C++ map/set 深度解析:从关联式容器的本质到 operator[] 的三重身份
开发语言·c++
Chen—LSN1 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
java1234_小锋1 小时前
Redis 宣布正式接入 AI
数据库·人工智能·redis