From 72804a46e573272fbbea6fb61cc146ddb98ef0c2 Mon Sep 17 00:00:00 2001 From: piaip Date: Mon, 21 Jan 2008 15:56:16 +0000 Subject: - emaildb(init): speed up by transaction git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3852 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/emaildb.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'mbbsd') diff --git a/mbbsd/emaildb.c b/mbbsd/emaildb.c index 21fdd954..92aa6b05 100644 --- a/mbbsd/emaildb.c +++ b/mbbsd/emaildb.c @@ -92,14 +92,17 @@ end: } #ifdef INIT_MAIN + // standalone initialize builder + +#define TRANSCATION_PERIOD (4096) int main() { int fd = 0; userec_t xuser; off_t sz = 0, i = 0, valids = 0; sqlite3 *Db = NULL; - sqlite3_stmt *Stmt = NULL; + sqlite3_stmt *Stmt = NULL, *tranStart = NULL, *tranEnd = NULL; // init passwd sz = dashs(FN_PASSWD); @@ -119,12 +122,16 @@ int main() } if (sqlite3_prepare(Db, "REPLACE INTO emaildb (userid, email) VALUES (lower(?),lower(?));", - -1, &Stmt, NULL) != SQLITE_OK) + -1, &Stmt, NULL) != SQLITE_OK || + sqlite3_prepare(Db, "BEGIN TRANSACTION;", -1, &tranStart, NULL) != SQLITE_OK || + sqlite3_prepare(Db, "COMMIT;", -1, &tranEnd, NULL) != SQLITE_OK) { fprintf(stderr, "SQLite 3 internal error.\n"); return 0; } + sqlite3_step(tranStart); + sqlite3_reset(tranStart); while (read(fd, &xuser, sizeof(xuser)) == sizeof(xuser)) { i++; @@ -155,10 +162,21 @@ int main() sqlite3_reset(Stmt); valids ++; - fprintf(stderr, "%d/%d (valid: %d)\r", - (int)i, (int)sz, (int)valids); + if (valids % 10 == 0) + fprintf(stderr, "%d/%d (valid: %d)\r", + (int)i, (int)sz, (int)valids); + if (valids % TRANSCATION_PERIOD == 0) + { + sqlite3_step(tranEnd); + sqlite3_step(tranStart); + sqlite3_reset(tranEnd); + sqlite3_reset(tranStart); + } } + if (valids % TRANSCATION_PERIOD) + sqlite3_step(tranEnd); + if (Stmt != NULL) sqlite3_finalize(Stmt); -- cgit v1.2.3