Eine Beispieldatenbank könnte so aussehen.
Cite: { *ID, author, content, date }
CrossRef: { *REF, objectid }
Categories: { *ID, name }
reference: {*ID, *REF, type }
categorie: { *CITE_ID, *CATEGORIE_ID }
PROTOKOLLNAME/VERSION PARAMETER HEADER \n DATA
# Evtl. auch eigene Bearbeitung fortsetzen # Security Layer (Token/Auth) # Service Layer
Abhängig vom Service können eigene Anfragesprachen entwickelt werden. Nur die Service müssen sich (sovern sie miteinander Reden wollen/müssen) absprechen.
Habe die Seite gerade gesehen und wollte auch mal meinen Senf dazugeben. :-) Leider habe ich nicht so richtig verstanden, wozu Du das benötigst, vielleicht schreibst Du das noch etwas konkreter. Also erstmal eine Bemerkung zu dem Anwendungsszenario, wie ich das aus Deinem Text herauslese: Du willst eine Fortune-Datenbank über das ganze Internet verteilen. Bei normalem Peer2Peer geht es nach meinem Verständnis darum, daß man sehr große Dateien hat, die dann durch einen Hashkey identifiziert werden. Es gibt zentrale Server (ich bin kein wirklicher p2p-Freak, also berichtige mich) bzw. andere Verteilungsmechanismen, durch die ich an eine Liste komme, die die verfügbaren Hashes enthält. In jeder Zeile steht dann dazu noch einer Beschreibung der Datei wie z.B. ein Dateiname.
Wenn ich Dich richtig verstanden habe, willst Du keine Fortune-Dateien austauschen, sondern einzelne Zitate. Um das p2p-System umzusetzen, benötigst Du also eine Indexdatei, in der ein Hash für jeden Datensatz steht. Wenn Du in den Daten suchen willst (was ja der Sinn einer Datenbank ist) musst Du in der Indexdatei immer einen Hash sowie einen Suchschlüssel stehen haben. Da die Zitat-Einträge sehr kurz sind (im Vergleich zu einer Videodatei), dürfte jedoch die Indexdatei nur unwesentlich kleiner als die gesamte Datenbank sein, was das ganze sehr uneffektiv macht.
Alternativ würde man es eben nicht wie bei p2p mit einer überall verfügbaren Indexdatei machen, sondern die Abfrage durchs Netz jagen und die Ergebnisse jeweils weiterreichen oder einsammeln. Da stellt sich die Frage nach einem Timeout oder auch die Frage, ob man eine Vorabfrage startet, die die Daten schonmal vorsammelt, auf daß man dann erst später das Ergebnis abholt, wenn das Netz Zeit gehabt hat, die Lösung zu suchen. -- ThomasBayen
Jetzt mal zu einem anderen Anwendungsszenario, über das ich mir schon seit ein paar Monaten den Kopf zermartere: Ich habe in meinem Unternehmen verschiedene Quellen von Telefonnummern, die alle Ihre eigenen Daten haben. Manche dieser Quellen sind immer verfügbar, andere nicht (Handys). Manche sollten miteinander synchronisiert werden, andere nicht. Schön wäre es, wenn es ein System gäbe, diese Daten dennoch zu durchsuchen und eine Ausgabe zu erhalten, mit der man was anfangen kann. Dabei sollte am besten auch die Quelle der Daten angegeben werden können. Sagen wir mal so:
SELECT name, nummer, datasource FROM telefonbuch WHERE name LIKE 'Schmitz'
Ergebnis:
Karl Schmitz 12345 Warenwirtschaft Hubert Schmitz 4711 Warenwirtschaft Schmitz & Backes 454554 Warenwirtschaft Hilde Schmitz 2435234 Telefonbuch von Krefeld Karl Schmitz 12345 Maemo-Handy Thomas Bayen Karl Schmitz 12345 MySQL-Datenbank Telefonnummernliste Hubert Schmitz 4711 Backup Handy Außendienstler 1
Ist es sowas, was Dir da vorschwebt?!? -- ThomasBayen Noch eine allgemeine Anmerkung: Eine interessante Frage ist die nach der Anwendungs-API. Da bietet sich aus Anwendersicht natürlich SQL an, aber das will ja keiner selber implementieren. Bei MySQL kann man die Database-Engine austauschen. Sowas wäre natürlich die aller-eleganteste Lösung, weil es den kompletten Befehlsumfang von MySQL erlauben würde. (geht aber wohl nur in C). Gibt es eine Java-Datenbank (HSQLDB oder Derby oder so), die sowas erlaubt? Oder möchtest Du für Deine Anwendung gar kein SQL? -- ThomasBayen