Persistierung von vielen Informationen, die Queue mäßig abgearbeitet werde

Status
Nicht offen für weitere Antworten.

Verdobu

Neues Mitglied
Hallo,

ich habe folgende Problematik:

Es gibt einen Worker-Algorithmus (aktuell in 6 Threads), der eine Zeichenkette verarbeitet und evtl. neue Zeichenketten erstellt, welche später irgendwann in einem weiteren Schritt verarbietet werden sollen.

Um genau zu sein, der Thread parst eine Web-Seite, sucht nach URLs und alle neuen URLs sollen dann später auch angeschaut werden.

Mein erster Versuch war mit HSQLDB. Womit ich eine Datenbank von 600 MB verwalten konnte, sofern ich mindestens 400 MB RAM bereitgestellt hatte. Dies ist leider aber für den Anwendungsfall zu viel.

Mein zweiter Versuch war nun mit DB4O, welches aber aufgrund eines Problems bei mir sehr unperformant läuft und die ganze CPU-Zeit verbraucht und somit (aktuell) keine Lösung darstellt: db4o Developer Community - How to handle db4o cache to prevent overfilling heap?

Jetzt frage ich mich, wie ich das Problem vielleicht am Besten in den Griff bekomme.
  • Es soll eine kleine Anwendung sein, welche immer als einzelnes Programm gestartet wird und nicht mehr als 512, besser nicht mehr als 256 MB brauchen soll.
  • Die CPU sollte nicht durch die Datenbank gefressen werden
  • Es sollen keine zusätzliche Dienste gestartet werden müssen (embedded)
  • Es muss mit mehreren GB Datenbanken funktionieren
  • Die Daten werden durch mehrere Threads erzeugt
  • Die Daten werden durch einen Thread (dem Main-Thread) dem Thread-Pool zugewiesen
  • Die Verarbeitung ist eine (quasi-)Queue

Eigentlich hatte ich an DB4O gedacht, weil Freenet darauf aufbaut: Google Open Source Blog: Improving Freenet's Performance
By storing the current progress of uploads and downloads in db4o.com's open source object database (= a file on disk) rather than in memory, Freenet's memory usage can be greatly reduced, the end-user doesn't need to worry about running out of memory, we can have an unlimited number of uploads and tens of gigs of downloads, and so on.
Aber so lange bei das Problem vorherrscht und ich eigentlich auch mit einer Queue-mäßigen Verarbeitung zurande komme, mag ich mich nach Alternativen ausschau halten.

Ich dachte an Apache ActiveMQ -- Index .

Hat jemand von Euch eine Idee, was sich vielleicht anbieten könnte, mit möglicht wenig Overhead? Ich brauche keine Filterung, keine "Weichen" etc. Aber es soll persistent sein und viele Daten haben können...

Grüße
 

Verdobu

Neues Mitglied
Leider ist für es keine Option, eine Dritt-Software installieren lassen zu müssen.

Okay, dann bleibt wohl nur noch ApacheMQ oder DB4O. Mit DB4O verwaltet Freenet sehr performant auch 100 GB.

Dake für die Mühe!

Grüße
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben