I have been using this for years and it's great software. One tip, store each different email account in it's own "database" my crontab looks like this:
I sync it all locally to my house then back it up to Dropbox as well. The reason to store them in different datebases is you cannot "filter" them out when restoring so if they all go to the same DB if you restore you are restoring ALL your email across all accounts to one new account.
Chiming in to second this comment for anyone who is skeptical of using gmvault. I too have used it for years with great success. Thanks to the author for creating it!
I believe it is all flat-file. When I say "Database" I am just referencing what they call it:
-d DB_DIR, --db-dir DB_DIR
But from what I see the structure looks like this:
db/
YYYY-MM/
1234554543262346.eml.gz - I assume the meat and potatoes of the email along with attachments, not sure
1234554543262346.meta - JSON file with msg_id, thread_id, flags, labels, subject, etc
if you want to try something that downloads Gmail via imap and indexes it into an sqlite3 db (with FTS5 fulltext of from/to/cc/bcc/subject/body fields) and extracts attachments to filesystem, take a look at a recent project of mine:
It also saves the raw .eml files to disk. No support for labels (yet), but it does properly link up threads in the db using `References` from the parsed headers (setting both MPTT and adjacency-list fields)
FWIW regarding speed, i was able to download, index & extract my entire INBOX + Sent Items (14k emails, 3.5GB total) in < 10min on a fast connection. the limiting factor by far was connection/imap speed.