大容量导入¶
大容量数据导入主要用于数据迁移、逻辑备份恢复以及插入大量数据,在保证数据正确有效的前提下,尽可能地提高导入数据的速度是大容量导入的重点。
初始化¶
使用大容量导入之前需要通过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();