TokyoCabinet: Segmentace chyba při hdb-> close ()

hlasů
1

Jsem přilepená na chyby segmentace po vložení asi 8 miliónů záznamů v TC Hash databáze. Po vložení všechno, co jsem zavřít DB, ale chytil jsem segmentace poruchy v této části kódu (tchdb.c):

static void tchdbsetflag(TCHDB *hdb, int flag, bool sign){
  assert(hdb);
  char *fp = (char *)hdb->map + HDBFLAGSOFF;
  if(sign){
    *fp |= (uint8_t)flag;  //SEGFAULT HERE!
  } else {
    *fp &= ~(uint8_t)flag;
  }
  hdb->flags = *fp;
}

Více especifically na komentoval lince.

DB byl otevřen takto:

tchdbopen(hdb, db_file,  HDBOWRITER | HDBOCREAT))

DB je Sladění s:

tchdbtune(hdb, 25000000, -1, -1, HDBTLARGE);
tchdbsetcache(hdb, 100000);

Soubor .tch je asi 2 GB (2147483647 bajtů). Zajímavostí je, že se to děje pouze při vložení okolo 8 milionů záznamů. 2 nebo 3 miliony DB uzavře v pořádku. Vložení 8 milionů záznamů trvá asi 3 hodiny, protože jsem si přečetl data z textových souborů.

Nějaké nápady?

dík

Položena 27/08/2009 v 04:01
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

Jen problém vyřešil. Jsem na 32bits systému TC lze zpracovat pouze databází až 2 GB v takových systémech. Řešením je vybudování TC s volbou „--enable-off64“. Něco takového:

./configure --enable-off64
make
make install
Odpovězeno 28/08/2009 v 04:49
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more