Also, ich habe den DB Branch ausprobiert, leider hat es geschwindigkeitsmäßig nicht das gewünschte gebracht (sequenzieller Zugriff auf alle Daten wird sogar eher langsamer; Start u.U. schneller, bei vielen Markierungen aber wiederum nicht).
Somit habe ich das gemacht, was hier schon ein paar mal vorgeschlagen wurde, und was ich schon seit einiger Zeit vor hatte:
Alle 1000-1500 Daten-Dateien werden in eine Datei reingepackt, und das Ganze nennt sich jetzt TvDataBaseSingleFile.
Der bisherige Code wird dazu nur leicht angepasst und auch die bisherigen Optimierungen greifen weiter (z.B. OnDemandDayProgramFile); nur dass diese sogar noch effektiver werden, da etwa OnDemandDayProgramFile nicht jedes mal eine der 1500 Dateien *öffnen* muss, um einen Wert zu lesen (sondern nur seek+read).
Also, anbei ein Patch plus eine tvbrowser.jar zum Ausprobieren.
Hinweis: das ganze einmal als separater Patch, und einmal in tvbrowser.jar zusammen mit "FastSearch" (schnelle Suche) und sonstigen Änderungen im FavoritenDialog; die schnelle Suche kann man abgeschaltet lassen, indem man die Kommandozeilenoption -fastsearch *nicht* angibt, und die sonstigen Änderungen betreffen nur den FavoritenDialog.
Die Version meldet sich mit "2.6 (alpha)" aber es ist in Wirklichkeit etwa 2.5.3, die Version die ich selber verwende; genauer gesagt die letzte SVN Version vor Einführung der Lieblingssendungen in Ordnern.
Beim ersten Start werden alle vorhandenen Datendateien in tvdata/* eingelesen und in TVDATA_ALL.dat gespeichert (sofern diese Datei noch nicht existiert); gelöscht wird im Moment noch nichts. Ab diesem Zeitpunkt wird nur noch tvdata/TVDATA_ALL.dat modifiziert und alles findet in dieser Datei statt.
Die generellen Änderungen sind wie gesagt minimal gehalten.
Änderungen in:
tvbrowser/core/TvDataBaseSingleFile.java // Verwaltung der Datei
tvbrowser/core/TvDataBase.java // viele Anpassungen
tvbrowser/core/data/OnDemandDayProgramFile.java // Anpassungen zum Lesen
kleinere Änderungen in:
tvbrowser/TvBrowser.java // öffnen der DB
Date.java / Channel.java (da nicht aus RandomAccessFile, sondern aus DataInputStream gelesen werden muß)
Es ist noch nicht die finale Version des Patches, aber es funktioniert bei mir gut.
Insbesondere funktioniert:
* alte Daten löschen
* Version 1 nach 2 konvertieren, Endzeiten anpassen, Inventory verwalten, und was alles gemacht werden muß...
* Datenupdate, klar
* Radiotimes ist getestet
* TvBrowser killen und
* Festplatte voll - sollte ebenso nichts (nicht die DB) zerstören
Wenn es bei jemandem nicht (richtig) funktioniert, bitte hier melden.
Installation: tvbrowser.jar aus Download verwenden
Deinstallation: nur TVDATA_ALL.dat löschen (die 1000 Dateien werden wie gesagt noch nicht gelöscht), und tvbrowser.jar zurück ersetzen
DL hier:
http://savefile.com/files/1079806
src/diff_RELEASE.diff
src/diff_RELEASE_singleFileDB_only.diff