Datenbank verwenden (DB-Branch im SVN)

Ideen, wie TV-Browser verbessert werden kann
ab
Senior Member
Beiträge: 105
Registriert: 21 Sep 2006, 23:09

Datenbank verwenden (DB-Branch im SVN)

Beitrag von ab »

Ich würde mir evtl. den DB Branch (SVN) nochmal anschauen, und ich hatte dazu auch vor einiger Zeit schon "opcode" (den Autor) angeschrieben, seine Antwort:
Also das Hauptproblem bei mir ist fehlende Zeit.
Ich würde sagen, das ganze ist momentan zu ca. 85% fertig.
Ich selbst benutze eigentlich nur noch den DB-Branch (schon seit Ende 2006)
und aufgefallen sind mir dabei nur die hier genannten Probleme:
INTERNER LINK
Die DB-Version habe ich schon ausprobiert, sie hat tatsächlich noch einige kleinere Probleme (z.B. Markierungen werden doppelt angezeigt), aber vielleicht lassen sich diese Dinge noch lösen.

Leider kann ich auf obigen Link nicht zugreifen - könnte jemand der Zugriff hat, den Text in diesen Thread reinkopieren (oder mir per persönlicher Nachricht senden)?

Gibt es grundsätzliche Gründe warum der Code nicht verwendet werden könnte bzw. wurden grundsätzliche Probleme festgestellt (wie: Datenbank ist grundsätzlich zu langsam) und wurde die Entwicklung deshalb nicht weiter verfolgt?
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag von bodo »

Der Text in dem Link ist:

wichtig:

* Nach einem Update sind nicht alle Favorites markiert
* Update vom Datei-System in HSQLDB (manuell erstellte Erinnerungen usw dürfen nicht verloren gehen)
* Wenn automatisch der Tag gewechselt wird weil TVB über Nacht läuft sind auf einmal alle Tage ausgegraut und nichts wird mehr angezeigt.
* Handling von Bildern: Abspeichern von Bilddaten mit einem PreparedStatement (Limitierung auf ein Bild? Gibt's eigentlich schon Bilder in den Daten?)
o => Kinowelt.tv hat Bilder

wäre gut:

* Verschlüsselung oder ähnliches
* ggf. Längenbegrenzungen anpassen (sollten aber momentan passen)
* Ram-Verbrauch senken
* Exception-Handling bei Datenbank-Fehlern (die eh nicht auftreten sollten)
* Evtl. Dinge wie Favourites auch in der DB speichern
* Korrektur der Programmlängen schon beim Updaten
* Datenbanksuche auch für die Boolesche Suche verwenden
* ggf. noch Längenbegrenzungen der Felder anpassen (sollten aber momentan passen)

erledigt:

* Rausfinden, ob man den Verbindungsaufbau bei HSQLDB beschleunigen kann
o Die Engine muss nur beim beenden mit 'shutdown' runtergefahren werden
Da waren aber noch ein paar weitere Probleme, ich bin mir aber nicht mehr so sicher, was das alles war.
ab
Senior Member
Beiträge: 105
Registriert: 21 Sep 2006, 23:09

Beitrag von ab »

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
Zuletzt geändert von ab am 26 Sep 2007, 07:58, insgesamt 1-mal geändert.
DanielRaap
Junior Member
Beiträge: 38
Registriert: 09 Sep 2007, 11:36

Beitrag von DanielRaap »

Das hört sich alles ganz gut an. Respekt, dass du dir die Mühe gemacht hast! Noch ein Plus für TVBrowser: Aktive User ;)
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag von bodo »

Was passiert eigentlich, wenn die Daten aktualisiert werden? Hängst du die Daten hinten dran oder erzeugst du die komplette Datei neu, weil sich eine Sendung in der Datei geändert hat?
ab
Senior Member
Beiträge: 105
Registriert: 21 Sep 2006, 23:09

Beitrag von ab »

Grundsätzlich wird die Datei in Blöcke unterteilt, die die einzelnen Dateien enthalten. Wenn dann z.B. eine Datei gelöscht wird, wird Platz frei und da kann später eine andere Datei hin.
Für eine Datei wird der Name und Position und Größe verwaltet (Datei ist in einem Stück).

Die (DB-)Datei wächst wohl i.d.R. bis zu einer bestimmten Größe, etwa TvDaten + 30% ungenutzt und bleibt dann in etwa so.
ds10
Site Admin
Beiträge: 19125
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Beitrag von ds10 »

Wenn man ein Datenupdate gemacht hat und danach neu startet, werden die Lieblingssendungen noch einmal aktualisiert.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag von bodo »

Dann müsste man diese Datei also regelmäßig "defragmentieren" ;) ?
ab
Senior Member
Beiträge: 105
Registriert: 21 Sep 2006, 23:09

Beitrag von ab »

>Wenn man ein Datenupdate gemacht hat und danach neu startet, werden die Lieblingssendungen noch einmal aktualisiert.
stimmt tatsächlich; ich hatte da einige "kill-Tests" gemacht, deshalb dachte ich wohl es sei aus diesem Grund... BTW: beim 3. Start tut er's nicht mehr
Update: ist behoben

>Dann müsste man diese Datei also regelmäßig "defragmentieren"
Defragementieren ist eigentlich nicht nötig, da die Leerräume recht schnell wieder aufgefüllt werden, da es kleine Dateien sind.
Was möglich wäre, ist eine Funktion die die Datei auf minimale Größe bringt.
Ich habe aber im Moment lediglich 13% Leerraum in der Datei, und das obwohl bei den Datenupdates schon einige Dateien öfters umgeschrieben werden. Mal sehen wie sich das noch entwickelt.
ab
Senior Member
Beiträge: 105
Registriert: 21 Sep 2006, 23:09

Beitrag von ab »

neue Datei hier:
http://www.savefile.com/files/1081814
src/inter_korr1.diff
src/diff_RELEASE_singleFileDB_only(korr1).diff
tvbrowser.jar (korrigiert)
dust
Gold Member
Beiträge: 334
Registriert: 04 Feb 2005, 18:30

Beitrag von dust »

bodo hat geschrieben:Dann müsste man diese Datei also regelmäßig "defragmentieren" ;) ?
derzeit fragmentieren die daten sehr stark und werden bei ntfs kreuz und quer auf die platte geschrieben. das verlangsamt alles sehr weil der lesekopf der hd viel weitere strecken zurücklegen muss, 21mb in über 3600 dateien, die durch updates oft noch mehrmals gesplittet auf der hd sind. ich schätze sie auf ca. 7000 orte was ich so beim defragmentieren mitbekommen habe.

ein file in dem die ganzen daten drinnen sind und nur dort intern verändert werden wäre viel besser, einmal defragmentieren und fertig. speziell die ganzen index geschichten gehen wahrscheinlich viel schneller.
Benutzeravatar
Siggi
Moderator
Beiträge: 2272
Registriert: 31 Dez 2003, 12:21
Wohnort: Doberlug - Kirchhain

Beitrag von Siggi »

Hi dust,

bezieht sich das auf die normale Desktop Version?
Wenn ja, dann kann ich dem nur zustimmen. Das ist auch ein Grund, warum ich TVBrowser nicht vom Stick laufen lasse. Es sind einfach zu viele Dateien.

Wenn man das alles mal zusammenfassen könnte oder zumindest die Dateienanzahl extrem reduzieren könnte, würde mit Sicherheit auch die Performance steigern.

@ab:
Kann man den Datenbank branch parallel laufen lassen? Werden die Einstellungen in das selbe Verzeichnis geschrieben bzw. gelesen? Ist danach ein Start mit der normalen Version wieder möglich?

Bis dann.
mfg Siggi

PS: Wer Fehler findet, darf Sie behalten!!! :-)
dust
Gold Member
Beiträge: 334
Registriert: 04 Feb 2005, 18:30

Beitrag von dust »

ja normale desktop version. vom stick ist die anzahl der dateien egal da die zugriffszeit die gleiche ist, das problem ist das funktionsprinzip der hd.

wichtig bei einem db file ist eine grössenänderung zu verhindern und die daten wirklich in den vorher reservierten platz zu schreiben, sonst nudelt windows wieder alles kreuz und quer über die platte.
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag von bodo »

Wobei man dazu sagen muss, das WIndows die Datenzugriffe cached und nicht immer auf die Platte zugreift. Sobald viele Dateien aus einem Verz. geladen werden, wird versucht, so viele Dateien dieses Verz. im vorraus zu lesen.
dust
Gold Member
Beiträge: 334
Registriert: 04 Feb 2005, 18:30

Beitrag von dust »

ja eh, aber wenn er zum swappen anfängt, tvbrowser braucht auch über 100mb. ;)
Antworten