diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-21 23:56:16 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-21 23:56:16 +0800 |
commit | 72804a46e573272fbbea6fb61cc146ddb98ef0c2 (patch) | |
tree | b804f410eabce8c883491e164a095d9a8d3bd8e2 | |
parent | 5011bd5e92d5f83e6369d115f515d47589780af8 (diff) | |
download | pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.gz pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.bz2 pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.lz pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.xz pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.tar.zst pttbbs-72804a46e573272fbbea6fb61cc146ddb98ef0c2.zip |
- emaildb(init): speed up by transaction
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3852 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | mbbsd/emaildb.c | 26 |
1 files changed, 22 insertions, 4 deletions
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); |