ITS#10275 mdb_load: add -Q option to use NOSYNC for faster loading

This commit is contained in:
Gary Wicker 2024-10-25 01:05:00 +00:00 committed by Howard Chu
parent defcb167fb
commit 63091b38e4
2 changed files with 17 additions and 1 deletions

View File

@ -22,6 +22,8 @@ mdb_load \- LMDB environment import tool
[\c
.BR \-N ]
[\c
.BR \-Q ]
[\c
.BR \-T ]
.BR \ envpath
.SH DESCRIPTION
@ -71,6 +73,9 @@ Load a specific subdatabase. If no database is specified, data is loaded into th
.BR \-N
Don't overwrite existing records when loading into an already existing database; just skip them.
.TP
.BR \-Q
Quick mode, uses MDB_NOSYNC for faster loading. Forces sync with mdb_env_sync() before exiting.
.TP
.BR \-T
Load data from simple text files. The input must be paired lines of text, where the first
line of the pair is the key item, and the second line of the pair is its corresponding

View File

@ -323,10 +323,11 @@ int main(int argc, char *argv[])
* -n: use NOSUBDIR flag on env_open
* -s: load into named subDB
* -N: use NOOVERWRITE on puts
* -Q: quick mode using NOSYNC
* -T: read plaintext
* -V: print version and exit
*/
while ((i = getopt(argc, argv, "af:m:ns:w:NTV")) != EOF) {
while ((i = getopt(argc, argv, "af:m:ns:w:NQTV")) != EOF) {
switch(i) {
case 'V':
printf("%s\n", MDB_VERSION_STRING);
@ -351,6 +352,9 @@ int main(int argc, char *argv[])
case 'N':
putflags = MDB_NOOVERWRITE|MDB_NODUPDATA;
break;
case 'Q':
envflags |= MDB_NOSYNC;
break;
case 'T':
mode |= NOHDR | PRINT;
break;
@ -519,6 +523,13 @@ int main(int argc, char *argv[])
prog, lineno, mdb_strerror(rc));
goto env_close;
}
if (envflags & MDB_NOSYNC) {
rc = mdb_env_sync(env, 1);
if (rc) {
fprintf(stderr, "mdb_env_sync failed, error %d %s\n", rc, mdb_strerror(rc));
goto env_close;
}
}
mdb_dbi_close(env, dbi);
}