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 <<WebBrowserin>> <<u.a.einem>> <<nutzbarPeer2Peer>> <<bleiben. Dafür werden Gateways benötigt, die diese Programme in das >>System <<integrieren.abzulegen.>>
<<Weiter  sollen Konzepte von Verteiltensystemen (Peer2Peer, ...) als Grundidee mit berücksichtigt werden.>>

<<==Anfang>> <<Begriffemit>> <<==einem>> <<
*
kleinem
>> <<Client,Dummy-System>> <<istwelches>> <<eine Software >>die <<sichFortune>> <<zuDaten>> <<einemsammelt>> <<Serviceund>> <<verbindenin>> <<kann. Und den User (End-Anwender) vertritt.
* Peer, ist
>>eine <<Softwareeigene>> <<undDatenbank>> <<zugleichspeichert.>> <<einDiese>> <<Client,sollte>> <<deraber>> <<Servicedann>> <<bereitstelltauch>> <<(wieschon>> <<einvorsehen,>> <<Server)Informationen>> <<undzu>> <<zugleichverlinkten>> <<Service anderer Peers nutzen kann.
** Zudem sollen eingehende Anfragen zu
>>anderen <<PeersObjekten>> <<weitergereicht werden sovern dieser Peer nicht in der Lage ist eine Vollständige antwort >>zu <<geben.liefern.>>
<<*
{{{
Cite:
>> <<Gateway,{>> <<ist*ID,>> <<einauthor,>> <<Peercontent,>> <<derdate>> <<ausschließlich}
CrossRef:
>> <<für{>> <<das*REF,>> <<Übersetzenobjectid>> <<der}
Categories:
>> <<Bestehenden{>> <<Protokolle*ID,>> <<inname>> <<das}
reference:
>> <<genutzte {*ID,>> <<Peer*REF,>> <<Protokolltype>> <<zuständig ist.}>>
<<**categorie:>> <<Ein{>> <<Gateway*CITE_ID,>> <<ist*CATEGORIE_ID>> <<nicht}
}}}


==
>> <<inKommunikation/Protokolle>> <<der==>> <<Lage selbständig irgendwas zu machen, muss alle Anfragen an Peers weiterreichen.>>
<<**
>>Ein <<GatewayHTTP>> <<kann/solltebasiertes>> <<mehrereProtokoll.>> <<Protokolle
{{{
PROTOCOL/VERSION
>> <<(evtl.PARAMETERS
HEADERS
\n
DATA
}}}


===
>> <<welcheSchichten>> <<die===

#
>> <<sichProvider/Network>> <<ähnlich(e.g.>> <<sind) übersetzen können.~ServerSocket)>>
<<**#>> <<NimmtProtocol>> <<anfragen(e.g.>> <<ausHTTP)
#
>> <<demService>> <<Peernetzrouting>> <<an(e.g.>> <<undforward>> <<sendetthe>> <<sierequest>> <<beito>> <<bedarfthe>> <<anright>> <<die Clients weiter.peer.)>>
<<**#>> <<AlleSession>> <<Client(should>> <<dieuse>> <<mita>> <<einemtoken>> <<Gatewayto>> <<reden,allow>> <<müssenswitching>> <<denprotocol>> <<Peersand>> <<nichtapplication>> <<bekanntwith>> <<sein.no>> <<Eindeutigesession>> <<kennungenlost)
#
>> <<werdenHandler>> <<bei(each>> <<demService/request>> <<Nachrichtenaustauchwill>> <<vergebenbe>> <<undregistrated>> <<müssenand>> <<vomhandelt.)>> <<Gateway (ähnlich wie NAT) auch wieder umgesetzt werden.>>

<<
>>== <<BeispielSync-ansatz>> ==
<<AlsSo>> <<Beispielfremd>> <<sollsind>> <<einemir>> <<Verteiltedie>> <<DatenbankDenkansätze>> <<vonaus>> <<Zitatendem>> <<dienen.unterem>> <<EinKommentar>> <<__Peer__nicht.>> <<sollIch>> <<anfragenwollte>> <<(Suchen,als>> <<Änderungen,Oberziel>> <<...)
entgegen
tatsächlich
>> <<nehmeneine>> <<undPersonen>> <<imDatenbank,>> <<Netzwerkjedoch>> <<bereitstellen.ist>> <<Wirdhier>> <<erkannt,auch>> <<dass >>ein <<weitererSchwerpunkt>> <<__Peer__auf>> <<diesynchronisieren>> <<selbevon>> <<aufgabeKalenderdaten>> <<hat.gelegt.>> <<Jedoch Hier>> <<woanderssoll>> <<gestartet,ein>> <<soProtokoll>> <<sollen >>die <<DatenbeständeArbeit>> <<(sovernim>> <<gewünscht)Hintergrund>> <<verteilt werden. Öffentliche Inforrmationen sollen sich bei einem __Peer2Peer__ connect also >>automatisch <<verteilen.
Wir
machen,
>> <<nun >>ein <<weitererPeer>> <<__Peer__kann>> <<miterst>> <<Buchinformationenbenutzt>> <<imwerden,>> <<Netzwerkwenn>> <<bereitgestellt,alle>> <<sollen Ähnlichkeiten ermittelt werde. (Muss nicht automatisch passieren) z.b. Sollen >>Informationen <<zuausgetauscht>> <<Authorenwurden.>> <<undD.h.>> <<Ihrendie>> <<ZitatenDatenbank>> <<verlinktSynchron>> <<werden.ist.>> <<SoBringt>> <<daser>> <<esneue>> <<möglichDaten>> <<ist,mit>> <<sichmüssen>> <<zudiese>> <<einemErst>> <<Zitatverteilt>> <<auchsein>> <<allebevor>> <<Bücher(Mitwirkungen)sein>> <<einesService>> <<Authorsangeboten>> <<gebenwird.>> <<zuMein>> <<lassen.
Diese
Ansatz
>> <<Verbindungenist>> <<müssenkeine>> <<aufechte>> <<allen'bekannte'>> <<zuständigenPeer2Peer>> <<__Peers__Lösung.>> <<vertieltAber>> <<werden. Damit sovern >>ein <<__Peer__selbst-lernendes>> <<nichtSystem>> <<mehrwas>> <<erreichbarRouten>> <<ist,kann.>> <<dieAlso>> <<Informationenanfragen>> <<dennochvon>> <<verfügbarjedem>> <<bleiben.Peer>> <<(auchannimmt>> <<hierund>> <<sindan>> <<Richtlienniendie>> <<wieRichtige>> <<Privat,stelle>> <<...)sendet.>> <<zuErgebnisse>> <<beachten.

{{{
Eine
sendet
>> <<Beispieldatenbankoder>> <<könntewenn>> <<soÄnderungen>> <<aussehen.
Cite:
erkannt
>> <<{werden>> <<*ID,Daten>> <<author,abgleicht>> <<content,und>> <<datedann>> <<}
CrossRef:
die
>> <<{Lösung>> <<*REF,sendet.>> <<objectidDefekte>> <<}
Categories:
Peer
>> <<{vom>> <<*ID,System>> <<namenimmt.>> <<}
reference:
(Mehrheitsentscheidung
>> << {*ID,sofern>> <<*REF,Speicherfehler>> <<typeerkannt>> <<}werden.)>>
<<categorie: { *CITE_ID, *CATEGORIE_ID }>>
<<}}}



==
*
>> <<Kommunikation/ProtokolleDa>> <<==es>> <<
Die
je
>> <<Überlegungnach>> <<obenDaten>> <<fordertevtl.>> <<mehrere Protokolle, jedoch nur >>ein <<Grundprotokollkleines>> <<welchesbzw.>> <<imgroßes>> <<PeersystemProblem>> <<verwendetgeben>> <<wird.
Als
kann
>> <<Richtliniewas>> <<istdie>> <<vorgesehen,Menge>> <<dassangeht>> <<esso>> <<demwie>> <<HTTP Protokoll ähnlich aufgebaut ist. Und >>auch <<Vorteileprivate>> <<einesDaten>> <<Zustandslosennicht>> <<Protokollesverteilt>> <<entsprechenwerden>> <<sollte.
sollen
>> <<
{{{
PROTOKOLLNAME/VERSION
also
>> <<PARAMETER
HEADER
\n
DATA
}}}


==
auch
>> <<Schichtenein>> <<==
Grundlegend
Rechtesystem
>> <<kannvorhanden>> <<mansein>> <<bestimmtmuss>> <<diesewird>> <<Denkansetztedas>> <<verfolgen.
#
hier
>> <<Provider/Networknoch>> <<(e.g.eine>> <<~ServerSocket)
#
menge
>> <<ProtocolArbeit>> <<(e.g.[ABER>> <<HTTP)
#
ich
>> <<Servicehab>> <<routingja>> <<(e.g.nun>> <<forwardein>> <<thewenig>> <<requestZeit>> <<tozum>> <<theforschen].>> <<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.) >>
<<
===
==
>> <<GatewayAbfragesprache>> <<=====>>
<<#Ich>> <<Client-Protokoll
#
hab
>> <<Erzeugungschon>> <<eindeutigerein>> <<Kennungwenig>> <<(GATEWAYNAME@CLIENTID:CLIENTPROTOKOLL)mit>> <<alsantlr>> <<HASH
#
'herum-gespielt'
>> <<Übersetzenund>> <<inmir>> <<daseinen>> <<[Gateway]eigenen>> <<Protokoll
#
mini-compiler
>> <<Senden/Empfangen

===
gebaut.
>> <<PeerEs>> <<===
#
ist
>> <<Peer-Protokollzwar>> <<(Basisnicht>> <<isteinfach>> <<XML)
#
Suchen
>> <<Session-System
#
zu
>> <<Sync/Linkparsen>> <<Protokoll
#
jedoch
>> <<Routinggibt>> <<(wenn >>es <<neue Service sind)
# Evtl.
>>auch <<eigeneindex>> <<BearbeitungServer>> <<fortsetzen
#
die
>> <<Security Layer (Token/Auth)
# Service Layer


== Abfragesprache ==
Abhängig vom Service können eigene Anfragesprachen entwickelt werden. Nur
>>die <<ServiceAnfragen>> <<müssendann>> <<sichAnnehmen>> <<(sovernund>> <<sieErgebnisse>> <<miteinanderliefern>> <<Redensollten>> <<wollen/müssen)(Solr>> <<absprechen.scheint>> << mir>> << 


==
da
>> <<Nutzenein>> <<==
Adressdatenbestände
guter
>> <<PflegbarAnsatz>> <<machenzu>> <<(Thunderbirdsein.>> <<undEs>> <<Co.)ist>> <<diesezwar>> <<mitkein>> <<anderenSQL>> <<Datenaber>> <<verbindendas>> <<(Mail,Finden>> <<PDFs,in>> <<Kalendern)Indexdaten>> <<undist>> <<dieschnell.)>> <<Information sinfoll merken.>>
<<Und>> <<wieder >> <<Verteilen also (mutt, alpine) import oder andere Rechner mit anbinden. D.h. Mergen von Datenbeständen ... >>
<< >>
<<
>>------

== 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
<<:: evtl. mal Treffen am 15.3.2010?


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

<<:: Hmm  leider ist das Wiki nicht so geeignet meine Denkansätze mal eben hier in die richtige Reihenfolge zu bringen. U.a. fange ich ja gerade erstmal mit den ersten Prototypen an. Als Datenbank nutze ich in Java H2 (mit OpenJPA) auf jedem Peer. Diese Sollen aber XML untereinander Reden und Übersetzer bereitstellen um die Informationen auch auf andere Plattformen und Sprachen zu bekommen.