我试图在应用程序中使用MonetDBLite C。根据PDF (https://arxiv.org/pdf/1805.08520.pdf),我将受益于使用monetdb_append函数加载大量数据的速度提高。PDF格式:
除了发出SQL查询外,嵌入式进程还可以使用monetdb_append函数有效地将大量数据追加到数据库中。此函数接受要追加的表的架构和名称,以及对要追加到表的列的数据的引用。此函数允许高效的批量插入,因为在将单个INSERT解析为语句时需要大量开销,这将成为用户希望插入大量数据时的瓶颈。
这是embedded.h中的声明
char* monetdb_append(monetdb_connection conn, const char* schema, const char* table, append_data *data, int ncols);有谁举过如何使用这个函数的例子吗?我假设batid of append_data结构是对BAT结构的识别。但目前还不清楚如何将其与现有的API一起使用。
发布于 2018-09-10 09:18:40
二进制追加实际上需要构造尽可能多的BAT结构,因为您需要附加列。需要包括一些额外的MonetDBLite头(monetdb_config.h和gdk.h)。重要的部分是:
COLnew创建蝙蝠bat->theap.base[i]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 */}https://stackoverflow.com/questions/52236453
复制相似问题