BLOBHeap

Forum for developers

BLOBHeap

Beitragvon apfelmaennchen » So Mai 03, 2009 9:26 am

Also grundsätzlich funktioniert das neue Places Konzept (Bookmarks) schon sehr gut - befinde mich also eher in der Überarbeitungs und Tuning-Phase
Dazu hätte ich ein paar Fragen zum BLOBHeap - kann mir jemand (vermutlich orbiter) erklären, wie BUFFER_SIZE und CACHE_SIZE zusammenwirken und wie groß die beiden sein sollten?

Code: Alles auswählen
final static int CACHE_SIZE = 16000;      // MAPView
final static int BUFFER_SIZE = 16000;    // BLOPHeap
final static int KEY_LENGTH = 12;       // BLOPHeap

this.PlacesDB = new MapView(new BLOBHeap(DBFile, KEY_LENGTH, NaturalOrder.naturalOrder, BUFFER_SIZE), CACHE_SIZE);


Womit wird an anderer Stelle (sowas muss es ja theoretisch schon irgendwo geben in YaCy) ein Index auf einen solchen BLOBHeap realisiert? Ich habe dafür momentan ein rein RAM-basiertes HashMap<String, Container> im Einsatz. Die Klasse Container ihrerseits besteht wieder im Wesentlichen aus einem HashSet<String>, welches die URL-Hashes der Bookmarks aufnimmt. Ein Container kann in dieser Logik alles sein, ein Topic, ein Folder, ein Tag, oder eben auch die Attribute Date oder isPublic.

Gruß!
apfelmaennchen
apfelmaennchen
 
Beiträge: 429
Registriert: Mo Aug 20, 2007 7:06 pm

Re: BLOBHeap

Beitragvon Orbiter » So Mai 03, 2009 10:39 am

BLOBHeap hat einen Schreib-Puffer, MapView einen lese-Cache. Ich benutze in kelondro überall den Begriff 'cache' für alles was in einem Lesecache ist, und Buffer für alles was in einem Schreibpuffer ist.

Der CACHE_SIZE für MapView bezeichnet die Anzahl der Maps, die in einem Cache gehalten werden. Du musst abschätzen wie groß so ein Map-Eintrag durchschnittlich ist, und darüber eine geeignete Anzahl errechnen

Die BUFFER_SIZE ist die Anzahl der bytes in einem Schreib-Puffer. Alles was darin ist, geht bei einem Crash verloren. Erst wenn der Puffer voll ist, wird er geschrieben. Damit wird verhindert, dass es zu vielen einzelnen kleinen IO-Zugriffen beim Schreiben kommt, diese werden durch den Puffer zusammengefasst.
Orbiter
 
Beiträge: 5792
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: BLOBHeap ==> MapView

Beitragvon apfelmaennchen » Sa Mai 16, 2009 10:50 am

Irgendwie ist das Zusammenspiel von BLOBHeap und MapView nicht ganz konsistent.

BLOBHeap: arbeitet intern mit byte[] Keys, MapView hingegen operiert mit String Keys - soweit so gut!
Code: Alles auswählen
MapView: Map<String, String> get(final String key)
MapView: put(String key, final Map<String, String> newMap)


Blöd nur, wenn man MapView nach einem Iterator über alle Keys fragt, dann bekommt man byte[] Keys
Code: Alles auswählen
MapView: CloneableIterator<byte[]> keys(final boolean up, final boolean rotating)


Es sind ja tatsächlich beide Sorten Keys im Einsatz, man denke nur an yacyURL.hash() (liefert einen String) und Word.word2hash() (liefert byte[])!
Die Bookmarks haben beides im Einsatz (Tags und URLs), so komme ich wohl an einer ständigen Type-Conversion nicht vorbei, schade eigentlich.

Gruß!
apfelmaennchen
apfelmaennchen
 
Beiträge: 429
Registriert: Mo Aug 20, 2007 7:06 pm


Zurück zu YaCy Coding & Architecture

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron