Mercurial > hg > audiodb
changeset 140:ddd83d773d6c
Smaller databases
Adjust the sizes of the various tables (file, track, times, l2norm)
linearly with the overall size of the database.
Now it makes sense to allow 50Mb databases, as the various fixed-size
tables shrink, rather than being fixed to somewhere over that size...
author | mas01cr |
---|---|
date | Mon, 29 Oct 2007 11:47:42 +0000 |
parents | 7c7072a8626a |
children | 3e6fa581bdab 521cecd1eab7 |
files | audioDB.cpp |
diffstat | 1 files changed, 7 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.cpp Mon Oct 29 11:45:50 2007 +0000 +++ b/audioDB.cpp Mon Oct 29 11:47:42 2007 +0000 @@ -153,7 +153,7 @@ } if(args_info.size_given) { - if (args_info.size_arg < 250 || args_info.size_arg > 4000) { + if (args_info.size_arg < 50 || args_info.size_arg > 4000) { error("Size out of range", ""); } size = args_info.size_arg * 1000000; @@ -398,6 +398,8 @@ dbH = new dbTableHeaderT(); assert(dbH); + unsigned int maxfiles = (unsigned int) rint((double) O2_MAXFILES * (double) size / (double) O2_DEFAULTDBSIZE); + // Initialize header dbH->magic = O2_MAGIC; dbH->version = O2_FORMAT_VERSION; @@ -406,10 +408,10 @@ dbH->flags = 0; dbH->length = 0; dbH->fileTableOffset = ALIGN_UP(O2_HEADERSIZE, 8); - dbH->trackTableOffset = ALIGN_UP(dbH->fileTableOffset + O2_FILETABLESIZE*O2_MAXFILES, 8); - dbH->dataOffset = ALIGN_UP(dbH->trackTableOffset + O2_TRACKTABLESIZE*O2_MAXFILES, 8); - dbH->l2normTableOffset = ALIGN_DOWN(size - O2_MAXFILES*O2_MEANNUMVECTORS*sizeof(double), 8); - dbH->timesTableOffset = ALIGN_DOWN(dbH->l2normTableOffset - O2_MAXFILES*O2_MEANNUMVECTORS*sizeof(double), 8); + dbH->trackTableOffset = ALIGN_UP(dbH->fileTableOffset + O2_FILETABLESIZE*maxfiles, 8); + dbH->dataOffset = ALIGN_UP(dbH->trackTableOffset + O2_TRACKTABLESIZE*maxfiles, 8); + dbH->l2normTableOffset = ALIGN_DOWN(size - maxfiles*O2_MEANNUMVECTORS*sizeof(double), 8); + dbH->timesTableOffset = ALIGN_DOWN(dbH->l2normTableOffset - maxfiles*O2_MEANNUMVECTORS*sizeof(double), 8); dbH->dbSize = size; memcpy (db, dbH, O2_HEADERSIZE);