changeset 318:c270d9e4659a large_adb

Ammended batchinsert and status to memory map featureFilenameTables, powerFileNameTable and timesFileNameTable for O2_FLAG_LARGE_ADB
author mas01mc
date Tue, 19 Aug 2008 15:50:26 +0000
parents ab411674dad4
children b9eff6896943
files audioDB.cpp audioDB.h common.cpp insert.cpp
diffstat 4 files changed, 44 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/audioDB.cpp	Tue Aug 19 14:38:39 2008 +0000
+++ b/audioDB.cpp	Tue Aug 19 15:50:26 2008 +0000
@@ -125,6 +125,12 @@
     munmap(powerTable, powerTableLength);
   if(l2normTable)
     munmap(l2normTable, l2normTableLength);
+  if(featureFileNameTable)
+    munmap(featureFileNameTable, fileTableLength);
+  if(timesFileNameTable)
+    munmap(timesFileNameTable, fileTableLength);
+  if(powerFileNameTable)
+    munmap(powerFileNameTable, fileTableLength);
   if(trackOffsetTable)
     delete trackOffsetTable;
   if(reporter)
@@ -542,7 +548,7 @@
 	      << "] power[" << DISPLAY_FLAG(dbH->flags&O2_FLAG_POWER)
 	      << "] times[" << DISPLAY_FLAG(dbH->flags&O2_FLAG_TIMES) 
 	      << "] largeADB[" << DISPLAY_FLAG(dbH->flags&O2_FLAG_LARGE_ADB)
-	      << endl;    
+	      << "]" << endl;    
               
     std::cout << "null count: " << nullCount << " small sequence count " << dudCount-nullCount << std::endl;    
   } else {
@@ -558,7 +564,7 @@
 void audioDB::l2norm(const char* dbName) {
   forWrite = true;
   initTables(dbName, 0);
-  if(dbH->length>0){
+  if( !(dbH->flags & O2_FLAG_LARGE_ADB ) && (dbH->length>0) ){
     /* FIXME: should probably be uint64_t */
     unsigned numVectors = dbH->length/(sizeof(double)*dbH->dim);
     CHECKED_MMAP(double *, dataBuf, dbH->dataOffset, dataBufLength);
@@ -571,8 +577,8 @@
 
 void audioDB::power_flag(const char *dbName) {
   forWrite = true;
-  initTables(dbName, 0);
-  if (dbH->length > 0) {
+  initTables(dbName, 0);  
+  if( !(dbH->flags & O2_FLAG_LARGE_ADB ) && (dbH->length>0) ){
     error("cannot turn on power storage for non-empty database", dbName);
   }
   dbH->flags |= O2_FLAG_POWER;
--- a/audioDB.h	Tue Aug 19 14:38:39 2008 +0000
+++ b/audioDB.h	Tue Aug 19 15:50:26 2008 +0000
@@ -222,6 +222,10 @@
   double* timesTable;
   double* powerTable;
 
+  char* featureFileNameTable;
+  char* timesFileNameTable;
+  char* powerFileNameTable;
+
   size_t fileTableLength;
   size_t trackTableLength;
   off_t dataBufLength;
@@ -395,6 +399,9 @@
     l2normTable(0),				\
     timesTable(0),				\
     powerTable(0),                              \
+    featureFileNameTable(0),                    \
+    timesFileNameTable(0),                      \
+    powerFileNameTable(0),                      \
     fileTableLength(0),				\
     trackTableLength(0),			\
     dataBufLength(0),				\
--- a/common.cpp	Tue Aug 19 14:38:39 2008 +0000
+++ b/common.cpp	Tue Aug 19 15:50:26 2008 +0000
@@ -126,10 +126,18 @@
     } else {
       fileTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE);
       trackTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_TRACKTABLE_ENTRY_SIZE);
-      dataBufLength = ALIGN_PAGE_UP(dbH->length);
-      timesTableLength = ALIGN_PAGE_UP(2*(dbH->length / dbH->dim));
-      powerTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim);
-      l2normTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim);
+      if( dbH->flags & O2_FLAG_LARGE_ADB ){
+	dataBufLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE);
+	timesTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE);
+	powerTableLength = ALIGN_PAGE_UP(dbH->numFiles * O2_FILETABLE_ENTRY_SIZE);
+	l2normTableLength = 0;
+      }
+      else{
+	dataBufLength = ALIGN_PAGE_UP(dbH->length);
+	timesTableLength = ALIGN_PAGE_UP(2*(dbH->length / dbH->dim));
+	powerTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim);
+	l2normTableLength = ALIGN_PAGE_UP(dbH->length / dbH->dim);
+      }
     }
     CHECKED_MMAP(char *, fileTable, dbH->fileTableOffset, fileTableLength);
     CHECKED_MMAP(unsigned *, trackTable, dbH->trackTableOffset, trackTableLength);
@@ -143,9 +151,18 @@
      *
      * CHECKED_MMAP(double *, dataBuf, dbH->dataOffset, dataBufLength);
      */
-    CHECKED_MMAP(double *, timesTable, dbH->timesTableOffset, timesTableLength);
-    CHECKED_MMAP(double *, powerTable, dbH->powerTableOffset, powerTableLength);
-    CHECKED_MMAP(double *, l2normTable, dbH->l2normTableOffset, l2normTableLength);
+    if( dbH->flags & O2_FLAG_LARGE_ADB ){
+      CHECKED_MMAP(char *, featureFileNameTable, dbH->dataOffset, fileTableLength);
+      if( dbH->flags & O2_FLAG_TIMES )
+	CHECKED_MMAP(char *, timesFileNameTable, dbH->timesTableOffset, fileTableLength);
+      if( dbH->flags & O2_FLAG_POWER )
+	CHECKED_MMAP(char *, powerFileNameTable, dbH->powerTableOffset, fileTableLength);
+    }
+    else{
+      CHECKED_MMAP(double *, timesTable, dbH->timesTableOffset, timesTableLength);
+      CHECKED_MMAP(double *, powerTable, dbH->powerTableOffset, powerTableLength);
+      CHECKED_MMAP(double *, l2normTable, dbH->l2normTableOffset, l2normTableLength);
+    }
   }
 
   // build track offset table
--- a/insert.cpp	Tue Aug 19 14:38:39 2008 +0000
+++ b/insert.cpp	Tue Aug 19 15:50:26 2008 +0000
@@ -465,16 +465,16 @@
 	INSERT_FILETABLE_STRING(fileTable, thisKey);
 	
 	// Feature Vector fileNames
-	INSERT_FILETABLE_STRING(dbH->dataOffset, thisFile);
+	INSERT_FILETABLE_STRING(featureFileNameTable, thisFile);
 	
 	// Time Stamp fileNames
 	if(usingTimes)
-	  INSERT_FILETABLE_STRING(dbH->timesTableOffset, thisTimesFileName);
+	  INSERT_FILETABLE_STRING(timesFileNameTable, thisTimesFileName);
 
 
 	// Power fileNames
 	if(usingPower)
-	  INSERT_FILETABLE_STRING(dbH->powerTableOffset, thisPowerFileName);
+	  INSERT_FILETABLE_STRING(powerFileNameTable, thisPowerFileName);
 
 	// Increment file count
 	dbH->numFiles++;