mAirListDB lokal vs. mAirListDB netzwerk

Hi

Wir verwenden seit einigen Jahren bei unserem Regional- Sender die Radio & Automatisierungs-
Software RadioCLIENT und sind auch sehr zufrieden. Die RadioCLIENT- Datenbank läuft
auf einem zentralen Rechner auf dem sich auch das Archiv der Elemente befindet. Auf diese Datenbank
und ihre Elemente greifen mehrere Computer zu. (Ausspiel-, Redaktions-, Administrations-, etc. Computer)

Nun habe ich die Software mAirList seit einigen Wochen in der Demo(Pro)- Version studiert.
Ich bin äußerst zufrieden. Die Bedienung, Konfiguration und Installation ist sehr freundlich und einfacher
als bei RadioCLIENT aufgebaut. An dieser Stelle möchte ich die Programmierer ihrer Software loben

…aber auch zu meiner eigentlichen Frage kommen.

Im Handbuch von mAirList steht folgendes:

• Im lokalen Modus werden alle Daten in einer einzelnen Datei abgelegt.
• Im netzwerk Modus wird ein PostgreSQL- Datenbankserver verwendet. Damit ist der Zugriff auf die
Datenbank, zum Beispiel zum Zwecke der Sendeplanung, auch von anderen Rechnern aus möglich, zum
Beispiel aus einem Redaktionsnetzwerk heraus.

Ich habe beide Arten installiert & ausprobiert.

Eine Datenbank, welche aus einer “.db”- Datei besteht abzusichern, scheint mir sehr viel einfacher
als einen kompletten PostgreSQL- Server.

Wenn man alle Daten im lokalen Modus über einen
Netzwerk- Pfad “\ComputerXY\Verzeichnis\Verzeichnis” einliest - und das habe ich getestet - kann man
auch über andere Computer im Netzwerk auf diese Datenbank zugreifen, diese laden, Elemente abspielen und
auch Elemente verändern. Selbst wenn mehrere Computer zeitgleich auf diese zugreifen.

Frage: Welchen Vorteil habe ich bei einer Datenbank im netzwerk Modus auf einem PostgreSQL- Server bzw. warum sollte ich eine Datenbank im netzwerk Modus einrichten, wenn ich ohnehin auf die Datenbank
im lokalen Modus von jedem Rechner aus im Netzwerk zugreifen kann? (Windows Datei- Freigabe berücksichtigt.)

Der netzwerk Modus ist gegenüber des lokalen Modus aufwändiger in der Installation und aufwändiger
in der Sicherung der Datenbank. Ich sehe keinen Vorteil des netzwerk Modus, da der lokale Modus über
Netzwerk auch komplett problemlos funktioniert. Mit der Windows- Offlinedaten- Synchronisation erspare ich mir auch das Spiegeln des Server- Archivs auf den Ausspielrechner.

Fehler im Denk- Muster? oder ist es nicht bekannt, dass der sog. “lokale Modus” auch voll netzwerktauglich ist.

Mit besten Grüßen
AG

Hallo, herzlich willkommen, ein frohes neues Jahr, und danke für die lobenden Worte!

Die lokale Variante der mAirListDB nutzt als Datenbank-Engine SQLite. Das ist eine kleine DLL, die einen SQL-Datenbankserver implementiert. Die Daten werden dabei, wie schon beobachtet, in einer einzelnen Datei abgelegt. SQLite ist heutzutage sehr verbreitet und findet insbesondere in eingebetteten Systemen Verwendung, zum Beispiel in Smartphones. Für den Programmierer ist SQLite eine tolle Sache, weil man damit sehr leicht Binärdaten auf der Festplatte verwalten kann, und zwar über eine standadisierte Schnittstelle (eben SQL).

Leider stößt SQLite sehr schnell an seine Grenzen, wenn mehrere Prozesse gleichzeitig auf die Datenbankdatei zugreifen wollen, insbesondere wenn das auch noch über das Netzwerk geschieht. Es darf nämlich immer nur ein Prozess gleichzeitig die Datei öffnen. Im besten Falle wird alles sehr langsam. Im schlimmsten Fall hagelt es irgendwann Fehlermeldungen der Art “Database is locked”.

Genau an diesen Punkt bietet sich der Einsatz einer echten SQL-Datenbank an, die für den Einsatz in einem Netzwerk konzipiert ist. Die Wahl fiel dabei auf PostgreSQL, weil das einzige Datenbankserver ist, der absolut kostenlos ist und dabei einen immensen Funktionsumfang bietet.

Dort ist der gleichzeitige Zugriff mehrerer Clients dann gar kein Problem mehr. Und es gibt einige Funktionen, die für den Einsatz im Netzwerk sehr praktisch sind. Zum Beispiel eine Benutzerverwaltung und die Möglichkeit, bestimmten Benutzergruppen (oder “Rollen”) separate Schreib-/Leserechte auf verschiedene Tabellen zu geben. Letzteres wird daher auch nur von der netzwerkbasierten mAirListDB unterstützt.

Es gibt noch zwei andere Features, die nur für die netzwerkbasierte mAirListDB implementiert sind: Zum einen der Import neuer Elemente per Drag&Drop in die Datenbank-Bibliothek (die lokale DB beherrscht ausschließlich den Import per Synchronisation). Zum anderen die Umleitung der Speicherorte in lokale Ordner, ein sehr nützliches Feature, wenn man aus Sicherheitsgründen das Musikarchiv lokal auf der Festplatte der Studiorechner spiegeln möchte.

Die lokale mAirListDB sollte also nur verwendet werden, wenn mAirList isoliert auf einem einzelnen Rechner läuft. (Daher ist es auch die einzige Variante, die von der Personal Edition unterstützt wird.) Wenn die mAirListDB in einem Redaktionsnetzwerk eingesetzt werden soll, sollte man immer die netzwerkbasierte Variante wählen, auch wenn die erstmalige Einrichtung etwas schwieriger ist.

Übrigens ist ein Backup der PostgreSQL-Datenbank gar nicht so schwierig. Dafür gibt es nämlich ein mitgeliefertes Tool, “pg_dump”, was man einfach einmal pro Tag mit den entsprechenden Parametern aufruft: “pg_dump -Fc mairlist >c:\backup.db” - sichert den Inhalt der Datenbank “mairlist” in die Datei “c:\backup.db” im “custom”-Format (das sich für eine leichte Wiederherstellung eignet).

Vielen herzlichen Dank für die schnelle Antwort.

Sie/Du(?) schreiben:
Leider stößt SQLite sehr schnell an seine Grenzen, wenn mehrere Prozesse gleichzeitig auf die Datenbankdatei zugreifen wollen, insbesondere wenn das auch noch über das Netzwerk geschieht.

Es darf nämlich immer nur ein Prozess gleichzeitig die Datei öffnen.
Ich habe das File “Datenbankname.db” mehrmals geöffnet.
1x lokal über Datenbankmanager
1x lokal über mAirListPro Demo
1x netzwerk über Datenbankmanager
1x netzwerk über mAirListPro Demo

Ich spiele die Datein 4x gleichzeitig ab. Ändere die Datei (Cue Punkte, etc) mit einem beliebigen Rechner bzw. Programm. Speichere die Datei dann in der Datenbank. Sobald ich sie neu öffne, ist die Änderung überall wirksam. Ich kann es nicht nachvollziehen, dass nur ein Prozess auf die “.db” Datei zugriffen darf.
Im besten Falle wird alles sehr langsam. Im schlimmsten Fall hagelt es irgendwann Fehlermeldungen der Art “Database is locked”.

Die Meldung Database is locked habe ich einmal sehr kurz gesehen. Sehr Schade, dass ich nicht mehr
weis, weshalb diese Meldung aufgetaucht ist.

ifür die netzwerkbasierte(…) Import neuer Elemente per Drag&Drop in die Datenbank-Bibliothek[/i]
Kann ich dazu ein Beispiel haben?

Gerne “du”.

Ich spiele die Datein 4x gleichzeitig ab. Ändere die Datei (Cue Punkte, etc) mit einem beliebigen Rechner bzw. Programm. Speichere die Datei dann in der Datenbank. Sobald ich sie neu öffne, ist die Änderung überall wirksam. [b]Ich kann es nicht nachvollziehen, dass nur ein Prozess auf die ".db" Datei zugriffen darf.[/b][i]

Es geht um den Fall, dass mehrere Prozess gleichzeitig eine Operation auf der Datenbank durchführen. Zum Beispiel, wenn gleichzeitig die Playlist aus der Redaktion heraus gespeichert und im Studio geladen wird.

[i](...)für die netzwerkbasierte(...) Import neuer Elemente per Drag&Drop in die Datenbank-Bibliothek[/i] Kann ich dazu ein Beispiel haben?

Bei der Konfiguration des Speicherortes gibt es ein Feld “Import-Ordner”. Dort einen beliebigen Unterordner (innerhalb des Speicherortes) auswählen. Ist das geschehen, kann man einfach Dateien aus dem Windows-Explorer per Maus in die mAirListDB-Verwaltung ziehen. Es erscheint ein Dialog, in dem sich die Metadaten der zu importierenden Titel editieren lassen. Klickt man dann auf OK, werden die Dateien in den Import-Ordner kopiert und gleichzeitig in die Datenbank eingetragen.

Diese Funktion erleichert den Import einzelner Dateien ungemein, weil man sie nicht erst händisch in den Speicherort kopieren und dann die Synchronisierungs-Funktion nutzen muss.

Nun habe ich über Netzwerk und einer SQLite- Datenbank worüber ich ständig über Netzwerk zugreife
durch verschiedene Tests wohl an die Grenzen gebracht.

Database is locked
Diese Fehlermeldung erscheint. Am schnellsten erzeugt man diese Meldung, wenn man eine Playlist in
der Datenbank um- ändert, diese gleichzeitig in mAirList läd, wobei man zeitgleich in der Datenbank die
umänderte Playlist speichert.

Versucht man den selben Test bei einer PostGreSQL- Datenbank über Netzwerk, bekommt man keine
Fehlermeldung. Es scheint mir, dass es dann darauf ankommt, welcher Rechner “vorher da” war. Entweder bekommt mAirList dann die umänderte Paylist (weil der Rechner eben erst nach der Speicherung zugegriffen hat) oder die ältere Version der Playlist. Ich habe auch zugesehen dabei, dass mAirList bei einer zeitgleichen um- Änderung und dessen Speicherung auch nur “Teile” der neuen Playlist zum Laden bekommt.

Schade, dass sich aus einem PostGreSQL- Server keine “lokale” Datenbank herrausspeichern/exportieren lässt. Die Absicherung mit pg_dump und das File “Beispiel.db” ist nicht vergleichbar mit einer lokalen DB?

Ich denke aber auch, dass in einem Studio mit…
1x Server inkl. Management Lizenz (hier werden die Daten bearbeitet)
1x Ausspiel- Rechner inkl. Pro Lizenz (hier ist der Moderator tätig)

eine “lokale” Datenbank auf dem Server reicht. Wie siehst Du das? Es treten (fast) nie zeitgleiche Zugriffe/Prozesse auf die Datenbank auf.

Erweitern durch einen zweiten Ausspiel- Rechner lässt sich das Beispiel dann wohl kaum, da dann bestimmt
mehrere Prozesse zeitgleich auf die Datenbank zugreifen werden und Fehlermeldungen auftauchen.

Mein Hintergedanke dabei ist eine einfache “Offline- Dateien- Synchronisation” die Windows mit- bringt.
Die Musik- Daten & ein lokales Datenbank- File “.db” lässt sich sehr einfach offline im Netzwerk verfügbar machen, sollte der Server ausfallen - eine netzwerk- Datenbank nicht - wobei die Musik- Daten ohnehin auch offline Verfügbar sein werden.

²Import- Ordner
Grundsätzlich keine schlechte Funktion. Der Aufwand, dass ich die Verwaltungs- Software der Datenbank trotzdem starten muss, ist dennoch gegeben.

Ich kann Dir verraten, wie es RadioCLIENT löst. Hier, ist die Datenbank- Struktur als Verzeichnis auf der lokalen Festplatte sichtbar. Man kopiert die Datei mit dem Windows Explorer per Drag & Drop in eines der Verzeichnisse und die Datenbank von RadioCLIENT liest die Files (über Intervall- Zeiten) selbstständig ein. Es ist nicht notwendig die Verwaltungs- Software zu starten, es sei denn, man will Files bearbeiten bzw. austauschen. Wobei die Dateien in der Datenbank von RadioCLIENT komplett eingelesen werden und in “.MUS” Files gespeichert. (.MUS = .mp3 + Meta + Cue + etc.) Später sind die Files nicht mehr sichtbar.
Bei größeren Datei- Mengen, haben wir leider immer Probleme bis hin zur Zerstörung der Datenbank. Nur aufwendig lässt sich die Bank dann reparieren.

Da finde ich aber Deine Datenbank besser. Die Musik- Daten bleiben auf ihrem Speicherort und in der Datenbank ist quasi nur der Pfad und andere Informationen.

Toll wär, (abgesehen davon, dass man die Daten auf der Festplatte mit der selben Struktur ordnet bzw. ordnen muss, wie in der Datenbank, wobei bei unserem therrestrischen Sender das ohnehin selbstverständlich ist), dass die Datenbank von mAirList dann automatisch neu hinzugefügte z.B.: mp3s kennt und über ein einstellbares Intervall (z.B.: 1 bis X Minuten) diese einliest, also mit der Datenbank selbstständig synchronisiert.

Das ist eine Idee & bin sehr zufrieden damit, wie es im Moment funktioniert.

glg

Zunächst: Dass bei der PostgreSQL ein Client nur “halbe” Playlisten sieht, während der andere schreibt, darf eigentlich nicht sein. Normalerweise ist das durch Transaktionen abgesichert. Ich habe gerade einen Bug entdeckt, der vermutlich daran schuld war. Bitte lade mal den neuesten Snapshot herunter (Build 868), dort ist das abgestellt.

Zum eigentlichen Thema:

Wenn mehrere PCs an einer Datenbank hängen, würde ich immer die PostgreSQL-Variante bevorzugen. Die Nachteile der SQLite-Datenbank wiegen so schwer, da macht sich der etwas erhöhte Verwaltungsaufwand bei PostgreSQL (Installation und Einrichtung des Backups) kaum bemerkbar. Und man ist zukunftssicher.

Das Dump-File von pg_dump hat nur zufällig dieselbe Endung wie die SQLite-Datenbank. Das habe ich mir jetzt so ausgedacht. Man könnte in beiden Fällen auch ganz andere Endungen benutzen. Firefox verwendet z.B. “.sqlite” als Endung für die SQLite-Datenbanken, in denen Lesezeichen, Chronik usw. abgelegt werden.

Einen “lokalen SQLite-Abzug” der PostgreSQL-Datenbank zu machen ist leider nicht so leicht. Es gibt zwar Tools, die die Konvertierung aller Tabellen automatisch vornehmen (siehe http://www.sqlite.org/cvstrac/wiki?p=ConverterTools). Allerdings unterscheidet sich der Inhalt der Datenbanken noch im Detail. Insbesondere gibt es bei PostgreSQL keinen Datentyp SERIAL (bzw. das Flag AUTOINCREMENT), sondern die IDs neuer Einträge werden über sog. Sequenzen (sequences) generiert. Diese wiederum kennt SQLite nicht, weswegen die lokale mAirListDB die Sequenzen über eine eigene Tabelle emuliert. Diese Tabelle müsste nach der Konvertierung angelegt und jeweils mit der höchsten verwendeten ID aller Tabellen gefüttert werden.

Über ein automatisches Import-Tool (oder Synchronisations-Tool) für die mAirListDB habe ich auch schon einmal nachgedacht. Ich kann aber nicht sagen, ob und in welcher Version es das geben wird.

Die Automatik würde mir auch sehr gefallen… Als optionale Aktion bei Programmstart z.B. ganz nützlich.