我想在一个应用程序中使用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一起使用。
二进制追加确实需要尽可能多的BAT结构的建筑,你必须要追加列。 一些额外的MonetDBLite头需要包括( monetdb_config.h
和gdk.h
)。 最重要的部分是:
- 创建使用蝙蝠
COLnew
正确类型和数量 - 一些值添加到它们,例如通过指针访问(正确类型的长度),以
bat->theap.base[i]
- 设置性能BAT(
BATsetcount
, BATsettrivprop
和BBPkeepref
的追加) - 分配和填充
append_data
数据结构。 - 呼叫
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 */}