我们公司多年来一直使用一些平面文件作为数据库,它有一个固定结构,不幸的是没有额外的空间。现在他们想要添加一些新字段,甚至可以更灵活地轻松添加新字段。我有一段时间在这里工作,他们把这个任务给了我。
我有两个问题:
我如何改进这个过程,有没有更好的方法?因为通常有大约30到90个单独的平面文件,每个文件中有大约500,000到10,000,000个记录。 因此,通过考虑最大值,我们应该处理sbout 90 * 10,000,000条记录
值得一提的是,这些数据库中的信息非常敏感,我们的方法应该能够免受意外事件的影响,例如电源故障等等(能够从中恢复)。此外,失去甚至一条记录对我们公司及其客户来说至关重要。
更新1 :(包括一些剪切代码)
const char sql = "INSERT INTO MetaData ("
"Field_1,"
"Field_2,"
/* 16 other fields */
") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
for (unsigned record = 0; record <= header.endpos; record++) {
rc = sqlite3_precpare_v2(db, sql, strlen(sql), &stmt, &pzTail);
if (rc) {
fprintf(stderr, "cannot prepare database,\n");
goto failed1;
}
dwReadCount = 0;
ReadFile(hIndex, &index, sizeof(index), &dwReadCount, NULL);
sqlite3_bind_int(stmt, 1, index.field1);
sqlite3_bind_int(stmt, 2, index.field2);
/* 16 same other binding
*/
..
..
...
sqlite3_step(stmt);
sqlite3_finalize(stmt);
}
我感谢任何帮助或暗示。
由于