Vorhandene Datenbank von fremder Domain nutzen
Linuchs
- datenbank
- programmiertechnik
Moin,
über viele Jahre habe ich bei meinem Veranstaltungskalender eine Titel-Datenbank mit Links zu mp3-Dateien aufgebaut. Viele Dateien sind nicht mehr erreichbar, aber die Titel gibts noch und haben zusätzliche Einträge wie Genre, Interpret, Solist, ...
Nun kommt die Aufgabe auf mich zu, für einen deutschen Chorverband eine DB mit knapp 2000 Titeln einzurichten, um die für GEMA-Meldungen zu übernehmen (müsste klären, ob überhaupt eine DB verfügbar ist).
Es sind Titel, die international in der Shanty-Szene gesungen werden und eigentlich weltweit zentral zu verwalten sind. Wenn nun jede Nation (z.B. D, NL, NO, UK) anfängt, eine eigene DB zu pflegen, ist das unsinnige Arbeit und kann nur auseinanderdriften. Es gibt zahlreiche internationale Festivals, die GEMA-Meldung des Veranstalters ist also nicht auf in D gebräuchliche Titel beschränkt.
Ich möchte die schon vorhandene DB nutzen, ergänzen und erstmal dem deutschen Verband zur Verfügung stellen. Mittelfristig auch als Master-DB allen anderen anbieten. Entweder mit direktem Zugriff (belastet dann meinen Server in Frankfurt) oder irgendwie mit Datenabgleich und autonomen Slave-Systemen.
Wenn nun also Titel von 2000 möglichen auszuwählen sind, geht das per Ajax nach Eintippen von Titel-Fragmenten leider nicht, wegen verbotenem Zugriff auf fremde Domain.
Und jeder Anmelde-Webseite 2000 Titel mitgeben und dann lokal von JS vorschlagen lassen?
Was wäre ein vernünftiger Ansatz?
Gruß, Linuchs
Tach!
Wenn nun also Titel von 2000 möglichen auszuwählen sind, geht das per Ajax nach Eintippen von Titel-Fragmenten leider nicht, wegen verbotenem Zugriff auf fremde Domain.
Mit den richtigen CORS-Headern kann man erlauben, dass auf anderen Domains laufende Scripte zugreifen dürfen, beispielsweise Access-Control-Allow-Origin.
dedlfix.
Hallo Linuchs,
für CORS musst Du Zugriff auf den Server haben, der den Webservice für die Fremd-DB anbietet. Bzw. Du musst mit jemandem zusammen arbeiten, der für diesen Service verantwortlich ist.
DB nutzen, ergänzen
wenn Du ergänzen möchtest, dann fragt sich wie Du Dir das vorstellst.
Möchtest Du Daten in die "Fremd-DB" eingeben? Oder möchtest Du eine eigene Datenbasis haben und eine Mischung anzeigen?
Wenn es das letztere ist, könnte es tatsächlich sinnvoll sein, einen eigenen Proxy zu programmieren (also ein PHP Frontend auf deinem Server), der beide Zugriffe macht und die Mischung zurückliefert. Damit wärest Du das CORS-Problem ebenfalls los, weil dein PHP Script der Client ist. Es ist dann natürlich einen Tick langsamer, weil Du einen Server-Hop mehr hast.
Wenn Du es mit CORS machst, kannst Du natürlich vom Browser aus aus 2 AJAX Requeste machen (aber bitte parallel abfeuern, Fetch-API verwenden und mit Promise.all() auf beide Ergebnisse warten). Die Ergebnisse kannst Du dann mischen und präsentieren.
Höchste Geschwindigkeit bekommst Du nur mit einem JS Array im Browser. Durch geschickte Platzierung des Scripts, das dieses Array anlegt (sprich: ans <body> Ende) kannst Du aber erreichen, dass die Seite schon sicht- und nutzbar ist (außer Suche), bevor die Titelliste unten ist. Bei 2000 Titeln ist es natürlich die Frage nach der Datenmenge. Wieviel Schwuppdizität gewinnst Du? Wieviele Bytes pro Titel müsstet Du im Schnitt transferieren? Und wieviele Bytes gegen tatsächlich durch den Draht (Stichwort HTTP GZIP Transfer)?
Rolf
Hallo Rolf,
Höchste Geschwindigkeit bekommst Du nur mit einem JS Array im Browser. Durch geschickte Platzierung des Scripts, das dieses Array anlegt (sprich: ans <body> Ende) kannst Du aber erreichen, dass die Seite schon sicht- und nutzbar ist (außer Suche), bevor die Titelliste unten ist.
Damit habe ich Erfahrung. Für umfangreiche Listen sende ich dem Browser einen CSV-string und JS darf daraus die Liste oder Tabelle bauen. Geht wesentlich schneller, als PHP zu bemühen und die HTML-Tags (Redundanz) über die Leitung zu schicken.
Eine Lösung könnte also sein, auf der Verbands-Domain eine csv-Datei zu hinterlegen, die einfach mitgeschickt wird an den Browser.
Diese Datei kann dann ab und zu (z.B. wöchentlich) mit PHP von der zentralen DB abgerufen werden. Scheint auch nachvollziehbar für die Webmaster anderer Dachverbände zu sein.
Gruß, Linuchs
Hello,
mMn wäre der richtige Weg™, eine Abstraktionsschicht zu bauen, über die der Zugriff stattfindet. Diese kannst Du mittels stored Routines (Procedures, Functions und Triggers) in der DB unterbringen. Damit kann dann die außerdem notwendige API die Datenbank ausschließlich unter Beachtung der Regeln benutzen.
Jede Domain bekommt dann die Möglichkeit, mittels Wrappern in der passenden Scriptsprache (bei Dir PHP), also eines API, auf die Funktionen zuzugreifen.
Das erspart Dir das Öffnen des DB-Ports, das über TLS eine Alternative wäre.
Definiere also am besten erst einmal, welche Zugriffsarten und -funktionen Du benötigst.
Glück Auf
Tom vom Berg