Two programs to create and quickly query a read-only on disk hash table
This commit is contained in:
parent
50515ffd23
commit
245db32c23
4 changed files with 77 additions and 1 deletions
|
@ -1 +1 @@
|
||||||
SUBDIRS = cht #cyrus
|
SUBDIRS = cht readOnlyHash #cyrus
|
||||||
|
|
3
src/apps/readOnlyHash/Makefile.am
Normal file
3
src/apps/readOnlyHash/Makefile.am
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
LDADD=$(top_builddir)/src/lladd/liblladd.a $(top_builddir)/src/libdfa/librw.a
|
||||||
|
bin_PROGRAMS=queryTable buildTable
|
||||||
|
AM_CFLAGS=-g -Wall -pedantic -std=gnu99
|
54
src/apps/readOnlyHash/buildTable.c
Normal file
54
src/apps/readOnlyHash/buildTable.c
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <lladd/transactional.h>
|
||||||
|
#include <lladd/truncation.h>
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
|
||||||
|
Tinit();
|
||||||
|
char * key;
|
||||||
|
char * value;
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
int xid = Tbegin();
|
||||||
|
|
||||||
|
recordid hash = ThashCreate(xid, VARIABLE_LENGTH, VARIABLE_LENGTH);
|
||||||
|
|
||||||
|
// printf("rid = %d, %d, %lld\n", hash.page, hash.slot, hash.size);
|
||||||
|
assert(hash.page == 1 && hash.slot == 0 && hash.size == 48);
|
||||||
|
|
||||||
|
struct timeval start;
|
||||||
|
struct timeval now;
|
||||||
|
|
||||||
|
gettimeofday(&start,0);
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
while(EOF != (ret=scanf("%as\t%as\n", &key, &value))) {
|
||||||
|
if(!ret) {
|
||||||
|
printf("Could not parse input!\n");
|
||||||
|
Tabort(xid);
|
||||||
|
Tdeinit();
|
||||||
|
}
|
||||||
|
//printf("->%s<-\t->%s<-\n", key, value);
|
||||||
|
ThashInsert(xid, hash, (byte*)key, strlen(key), (byte*)value, strlen(value));
|
||||||
|
errno = 0;
|
||||||
|
assert(errno == 0);
|
||||||
|
free(key);
|
||||||
|
free(value);
|
||||||
|
count ++;
|
||||||
|
|
||||||
|
if(!(count % 10000)) {
|
||||||
|
gettimeofday(&now,0);
|
||||||
|
double rate = ((double)count)/((double)(now.tv_sec-start.tv_sec));
|
||||||
|
printf("%d tuples inserted (%f per sec)\n", count, rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Tcommit(xid);
|
||||||
|
truncateNow();
|
||||||
|
Tdeinit();
|
||||||
|
return 0;
|
||||||
|
}
|
19
src/apps/readOnlyHash/queryTable.c
Normal file
19
src/apps/readOnlyHash/queryTable.c
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <lladd/transactional.h>
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
Tinit();
|
||||||
|
|
||||||
|
recordid hash = {1, 0, 48};
|
||||||
|
char * val;
|
||||||
|
if(-1 != ThashLookup(-1, hash, (byte*)argv[1], strlen(argv[1]), (byte**)&val)) {
|
||||||
|
printf("%s\n", val);
|
||||||
|
free(val);
|
||||||
|
}
|
||||||
|
Tdeinit();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue