This page (revision-7) was last changed on 15-Mar-2010 22:41 by Peter Hormanns 

This page was created on 10-Mar-2010 00:34 by JensKapitza

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
7 15-Mar-2010 22:41 8 KB Peter Hormanns to previous Aua
6 13-Mar-2010 16:57 8 KB JensKapitza to previous | to last weitere informationen
5 13-Mar-2010 16:53 7 KB JensKapitza to previous | to last weitere informationen
4 13-Mar-2010 15:29 7 KB JensKapitza to previous | to last some more description
3 11-Mar-2010 23:26 6 KB JensKapitza to previous | to last ein wenig weiter machen (alles beta hier ^^)
2 11-Mar-2010 10:52 4 KB ThomasBayen to previous | to last Kommentare von Thomas Bayen
1 10-Mar-2010 00:34 916 bytes JensKapitza to last Denkansatz

Page References

Incoming links Outgoing links

Version management

Difference between version and

=Ziel:>> <<Entwicklung einer verteilten Anwendung =
Die Idee dieser Anwendung nun mal ein wenig besser erklärt.
>>Informationen <<sollenähnlich>> <<verteilt gespeichert sein jedoch untereinander Verknüpfbar bleiben.
Zudem sollen bestehende Programme
>>wie <<~WebBrowser u.a. nutzbar bleiben. Dafür werden Gateways benötigt, die diese Programme >>in <<das System integrieren.
Weiter  sollen Konzepte von Verteiltensystemen (Peer2Peer, Mobile-Agenten, ...) als Grundidee mit berücksichtigt werden.



== Begriffe ==
* Client, ist eine Software die sich zu
>>einem <<ServicePeer2Peer>> <<verbindenSystem>> <<kann. Und den User (End-Anwender) vertritt.abzulegen.>>
<<* Peer, ist eine Software und zugleich ein Client, der Service bereitstellt (wie ein Server) und zugleich Service anderer Peers nutzen kann.>>
<<** Zudem sollen eingehende Anfragen zu anderen Peers weitergereicht werden sovern dieser Peer nicht in der Lage ist eine Vollständige antwort zu geben.>>
<<*Anfang>> <<Gateway, ist ein Peer der ausschließlich für das Übersetzen der Bestehenden Protokolle in das genutzte Peer Protokoll zuständig ist.
** Ein Gateway ist nicht in der Lage selbständig irgendwas zu machen, muss alle Anfragen an Peers weiterreichen.
** Ein Gateway kann/sollte mehrere Protokolle (evtl. welche die sich ähnlich sind) übersetzen können.
** Nimmt anfragen aus dem Peernetz an und sendet sie bei bedarf an die Clients weiter.
** Alle Client die
>>mit einem <<Gatewaykleinem>> <<reden,Dummy-System>> <<müssenwelches>> <<den Peers nicht bekannt sein. Eindeutige kennungen werden bei dem Nachrichtenaustauch vergeben und müssen vom Gateway (ähnlich wie NAT) auch wieder umgesetzt werden.
* Mobile Agenten, sind Peers,
>>die <<vonFortune>> <<einemDaten>> <<Systemsammelt>> <<zum nächstem Wandern >>und <<Indexein>> <<bauen. Um nicht die Datenmenge sondern nur die Indexe zu transferieren. Evtl. Kann man sie zur Laufzeit mit neuen Regeln füttern.  

== Beispiel ==
Als Beispiel soll
>>eine <<Verteilteeigene>> Datenbank <<vonspeichert.>> <<ZitatenDiese>> <<dienen.sollte>> <<Einaber>> <<__Peer__dann>> <<sollauch>> <<anfragenschon>> <<(Suchen,vorsehen,>> <<Änderungen, ...)
entgegen nehmen und im Netzwerk bereitstellen. Wird erkannt, dass ein weiterer __Peer__ die selbe aufgabe hat. Jedoch woanders gestartet, so sollen die Datenbestände (sovern gewünscht) verteilt werden. Öffentliche Inforrmationen sollen sich bei einem __Peer2Peer__ connect also automatisch verteilen.
Wir nun ein weiterer __Peer__ mit Buchinformationen im Netzwerk bereitgestellt, sollen Ähnlichkeiten ermittelt werde. (Muss nicht automatisch passieren) z.b. Sollen
>>Informationen zu <<Authorenverlinkten>> <<undanderen>> <<IhrenObjekten>> <<Zitaten verlinkt werden. So das es möglich ist, sich >>zu <<einem Zitat auch alle Bücher(Mitwirkungen) eines Authors geben zu lassen.liefern.>>
<<Diese Verbindungen müssen auf allen zuständigen __Peers__ vertielt werden. Damit sovern ein __Peer__ nicht mehr erreichbar ist, die Informationen dennoch verfügbar bleiben. (auch hier sind Richtliennien wie Privat, ...) zu beachten.>>
<<
>>{{{
<<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 }
}}}


<<
>>== Kommunikation/Protokolle ==
<<Die Überlegung oben fordert mehrere Protokolle, jedoch nur ein Grundprotokoll welches im Peersystem verwendet wird.>>
<<AlsEin>> <<Richtlinie ist vorgesehen, dass es dem >>HTTP <<Protokollbasiertes>> <<ähnlichProtokoll.>> <<aufgebaut ist. Und auch Vorteile eines Zustandslosen Protokolles entsprechen sollte.>>
<<
>>{{{
<<PROTOKOLLNAME/VERSIONPROTOCOL/VERSION>> <<PARAMETERPARAMETERS>>
<<HEADERHEADERS>>
\n
DATA
}}}


<<=====>> Schichten <<=====>>
<<Grundlegend kann man bestimmt diese Denkansetzte verfolgen.>>
# Provider/Network (e.g. ~ServerSocket)
# Protocol (e.g. HTTP)
# Service routing (e.g. forward the request to the right peer.)
# Session (should use a token to allow switching protocol and application with no session lost)
# Handler (each Service/request will be registrated and handelt.)

<<=== Gateway ===>>
<<# Client-Protokoll>>
<<# Erzeugung eindeutiger Kennung (GATEWAYNAME@CLIENTID:CLIENTPROTOKOLL) als HASH
# Übersetzen in das (Gateway) Protokoll
# Senden/Empfangen

=== Peer ===
# Peer-Protokoll (Basis ist XML)
# Session-System
# Sync/Link Protokoll
# Routing (wenn es neue Service sind)
** Evtl. auch eigene Bearbeitung fortsetzen
# Security Layer (Token/Auth)
# Service Layer


>>== <<Abfragesprache ==
Abhängig vom Service können eigene Anfragesprachen entwickelt werden. Nur die Service müssen sich (sovern sie miteinander Reden wollen/müssen) absprechen.    


== Nutzen ==
Adressdatenbestände Pflegbar machen (Thunderbird und Co.) diese mit anderen Daten verbinden (Mail, PDFs, Kalendern) und die Information sinfoll merken.
Und wieder Verteilen also (mutt, alpine) import oder andere Rechner mit anbinden. D.h. Mergen von Datenbeständen ...

== Technologien ==
* Java >=1.6
* OpenJPA (in den Peers für den Datenbestand)
* xstream (XML Protokoll Erstellung/zurücklesen)
* Maven (Prjektverwaltung - 'Multi-Module')
* Thunderbird, Firefox (zum Testen)

------

==
>>Kommentare ==

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
<<