从MonetdbLite C API使用monetdb_append(Using monetdb_a

2019-11-05 04:03发布

我想在一个应用程序中使用MonetDBLite℃。 根据PDF( https://arxiv.org/pdf/1805.08520.pdf ),我就从升压速度在加载使用monetdb_append功能数据的海量受益。 从PDF:

除了发出的SQL查询,嵌入处理能够有效地批量大量数据追加到使用monetdb_append函数的数据库。 这个函数的架构和表的名称追加到,以及数据的引用附加表中的列。 此功能允许有效散装插入,如存在参与解析个体INSERT INTO语句,当用户想要插入大量的数据,其成为瓶颈显著开销。

这是embedded.h声明

char* monetdb_append(monetdb_connection conn, const char* schema, const char* table, append_data *data, int ncols);

有没有人的例子,如何使用这个功能呢? 我假设append_data结构的那BATID是BAT结构的识别。 但目前尚不清楚如何能够与现有的API一起使用。

Answer 1:

二进制追加确实需要尽可能多的BAT结构的建筑,你必须要追加列。 一些额外的MonetDBLite头需要包括( monetdb_config.hgdk.h )。 最重要的部分是:

  1. 创建使用蝙蝠COLnew正确类型和数量
  2. 一些值添加到它们,例如通过指针访问(正确类型的长度),以bat->theap.base[i]
  3. 设置性能BAT( BATsetcountBATsettrivpropBBPkeepref的追加)
  4. 分配和填充append_data数据结构。
  5. 呼叫monetdb_append

下面是一个简单的例子如何42个值附加到含整数的一列表( CREATE TABLE test (my_column INTEGER);

// startup, connect etc. before

size_t n = 42;
BAT* b = COLnew(0, TYPE_int, n, TRANSIENT);
for (size_t i = 0; i < n; i++) {
    ((int*)b->theap.base)[i] = i; // or whatever
}

BATsetcount(b, n);
BATsettrivprop(b);
BBPkeepref(b->batCacheid);

append_data *ad = NULL;
ad = malloc(1 * sizeof(append_data));
ad[0].colname = "my_column";
ad[0].batid = b->batCacheid;

if (monetdb_append(conn, "sys", "test", ad, 1) != NULL) { /* handle error */}


文章来源: Using monetdb_append from MonetdbLite C API