大容量导入

大容量数据导入主要用于数据迁移、逻辑备份恢复以及插入大量数据,在保证数据正确有效的前提下,尽可能地提高导入数据的速度是大容量导入的重点。

初始化

使用大容量导入之前需要通过Connection初始化BulkImport,初始化方法如下

BulkImport初始化

m_env = Environment::createEnvironment();

m_conn = m_env->createConnection(m_init->GetDBUser(), m_init->GetDBPwd(), m_init->GetDBLink());

m_stmt = m_conn->createStatement("CREATE TABLE IF NOT EXISTS bulktest(str VARCHAR(20), id BINARY(10)); ");

m_stmt->execute();

m_bulk = m_conn->createBulkImport("bulktest");

添加数据

在ACCI添加数据使用bindBinary或者bindString接口来添加数据,目前暂时只支持字符串和二进制类型,其它类型后续会进一步完善。需要注意的是,当数据长度为-1时代表该数据为空,当数据长度为其他非法值时,插入的是该属性的默认值。

添加完一行数据时,需要使用 endRow 接口标识行的结束。

在添加数据过程中,如果缓冲区的剩余空间不足,工具将使用新的线程将缓冲区内数据发送到后台,并创建新的缓冲区存放数据。

添加数据

/* 创建BulkImport句柄*/

for (int i = 0; i < 20; ++i)

{

char ch[10];

bulk->bindString("i believe i can fly");

sprintf(ch, "%d", i);

bulk->bindBinary(ch,2);

bulk->endRow();

}

bulk->execute();

bulk->reuse();

for (int i = 0; i < 20; ++i)

{

char ch[10];

bulk->bindString("i believe i can fly");

sprintf(ch, "%d", i);

bulk->bindBinary(ch,2);

bulk->endRow();

}

bulk->execute();