Changeset: d5873065fc23 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d5873065fc23
Modified Files:
        gdk/gdk_logger.c
        gdk/gdk_logger.h
        gdk/gdk_search.c
Branch: default
Log Message:

use more hash tables in the logger, speeds up startup.
(for now disabled use of persistent hash as the case of updates before
loading the hash table isn't handled savely)


diffs (114 lines):

diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -104,6 +104,7 @@ static int tr_grow(trans *tr);
 static BUN
 log_find_int(BAT *b, BAT *d, int val)
 {
+#if 0
        BUN p, q;
        int *t = (int *) Tloc(b, BUNfirst(b));
 
@@ -114,11 +115,25 @@ log_find_int(BAT *b, BAT *d, int val)
                        return pos;
        }
        return BUN_NONE;
+#else
+       BATiter cni = bat_iterator(b);
+       BUN p;
+
+       if (b->T->hash || BAThash(b, 0) == GDK_SUCCEED) {
+               HASHloop_int(cni, cni.b->T->hash, p, &val) {
+                       oid pos = p;
+                       if (BUNfnd(d, &pos) == BUN_NONE)
+                               return p;
+               }
+       } 
+       return BUN_NONE;
+#endif
 }
 
 static BUN
 log_find_bid(BAT *b, BAT *d, log_bid val)
 {
+#if 0
        BUN p, q;
        log_bid *t = (log_bid *) Tloc(b, BUNfirst(b));
 
@@ -129,6 +144,19 @@ log_find_bid(BAT *b, BAT *d, log_bid val
                        return pos;
        }
        return BUN_NONE;
+#else
+       BATiter cni = bat_iterator(b);
+       BUN p;
+
+       if (b->T->hash || BAThash(b, 0) == GDK_SUCCEED) {
+               HASHloop_int(cni, cni.b->T->hash, p, &val) {
+                       oid pos = p;
+                       if (BUNfnd(d, &pos) == BUN_NONE)
+                               return p;
+               }
+       } 
+       return BUN_NONE;
+#endif
 }
 
 static void
@@ -340,8 +368,12 @@ log_read_updates(logger *lg, trans *tr, 
                BAT *uid = NULL;
                BAT *r;
                void *(*rt) (ptr, stream *, size_t) = BATatoms[tt].atomRead;
-               void *tv = ATOMnil(tt);
+               void *tv = NULL;
 
+               if (tt < TYPE_str)
+                       tv = lg->buf;
+               else if (tt > TYPE_str)
+                       tv = ATOMnil(tt);
 #if SIZEOF_OID == 8
                if (tt == TYPE_oid && lg->read32bitoid)
                        rt = BATatoms[TYPE_int].atomRead;
@@ -444,7 +476,8 @@ log_read_updates(logger *lg, trans *tr, 
                        }
                        GDKfree(hv);
                }
-               GDKfree(tv);
+               if (tv != lg->buf) 
+                       GDKfree(tv);
                logbat_destroy(b);
 
                if (tr_grow(tr)) {
@@ -1185,6 +1218,7 @@ logger_new(int debug, const char *fn, co
        lg->seqs_id = NULL;
        lg->seqs_val = NULL;
        lg->dseqs = NULL;
+       lg->buf = GDKmalloc(lg->bufsize = 64*1024);
 
        snprintf(filename, sizeof(filename), "%s%s", lg->dir, LOGFILE);
        snprintf(bak, sizeof(bak), "%s.bak", filename);
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -69,6 +69,8 @@ typedef struct logger {
                                   These snapshot bats should be freed
                                   directly (on transaction
                                   commit). */
+       void *buf;
+       void *bufsize;
 } logger;
 
 #define BATSIZE 0
diff --git a/gdk/gdk_search.c b/gdk/gdk_search.c
--- a/gdk/gdk_search.c
+++ b/gdk/gdk_search.c
@@ -224,6 +224,9 @@ BATcheckhash(BAT *b)
        int ret;
        lng t;
 
+       if (b->T->hash == NULL)
+               return 0;
+
        t = GDKusec();
        MT_lock_set(&GDKhashLock(abs(b->batCacheid)), "BATcheckhash");
        t = GDKusec() - t;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to