SQLite is an excellent choice in this kind of situation because it is a disk file ... "but a very, very clever one, with a very efficient implementation." The only thing to keep in mind is that you should always use transactions, even for reading, because this is what tells SQLite that it's okay to use "lazy" buffering and cached information. Otherwise you might see much more disk-activity than you expect and wonder "why is it so slow."