2011-09-19 15 views
5

Sto cercando un modo per replicare un database relazionale piccolo e semplice (come SQLite) tra pari. Questo dovrebbe funzionare in un ambiente con connessioni di rete instabili, da qui la necessità per ogni peer di avere una copia completa del database. Ciò dovrebbe consentire a un pari di continuare a lavorare off-line in caso di errore di rete.Replicazione peer-to-peer di un database SQLite

Per semplificare le cose, la replica deve solo supportare la replica dell'aggiunta di dati, ovvero solo INSERT, non DELETE o UPDATE.

Qualcuno sa di una buona - e idealmente multipiattaforma - tecnologia o metodo per creare un tale sistema? Attualmente sto guardando JXTA e JXSE, ma sono rimandato dalla sua complessità e apparente mancanza di vita nella sua comunità dopo l'acquisizione di Sun da parte di Oracle.

Grazie! Frans

risposta

0

Si consiglia di esplorare JGroups per il livello di comunicazione se non ti piace JXTA. Per la replica, penso che dovrai implementare il tuo codice.

+0

Grazie! Daremo un'occhiata a Jgroups. Capisco che ho bisogno di codificare la replica da solo. Con JXTA è probabilmente lo stesso. Sembra un problema molto meno complicato dell'efficiente comunicazione P2P. – user952460

0

Sto lavorando su qualcosa di simile (anche se il codice è tutt'altro che pronto). Descriverò un po 'del mio approccio previsto, ma se questo è adatto a te dipende da alcuni punti chiave di progettazione che dovresti prendere in considerazione. Sfortunatamente non sono a conoscenza di progetti pronti che lo faranno.

  • In particolare, dovremmo sapere quale lingua si desidera utilizzare o quali lingue preferireste evitare.
  • Inoltre, pensa a come intendi fare la dicotomia peer - puoi impostare la fiducia tra coppie di nodi manualmente o vuoi che vengano scoperti automaticamente?
  • Presumibilmente tutti i peer possono inserire dati?

Se si è in grado di utilizzare PHP e si è felici di confrontare manualmente coppie di nodi, il mio approccio potrebbe essere interessante. Configura un ORM come Doctrine, Propel o NotORM e fai in modo che ciascun nodo si sincronizzi regolarmente con un'origine ora Internet. Per ogni nuova riga in un db, acquisisci i dati (in un array o in un oggetto ORM), serializzali e inseriscili in tutti i nodi con i quali hai una relazione di fiducia. Nei casi in cui un push non riesce, tenere una nota di questo e riprovare a intervalli periodici (potenzialmente rinunciando a un nodo remoto che non riesce a rispondere a un numero elevato di tentativi).

Le chiamate possono essere avviate dall'applicazione che crea la riga o possono essere richiamate da qualsiasi programma di pianificazione disponibile su ciascuna macchina. Un messaggio push può essere XML, o per semplicità può essere solo un messaggio POST contenente la nuova riga e qualsiasi metadata (ad esempio timestamp di salvataggio, in modo da risolvere l'ordine INSERT da diversi nodi).

Se i nodi non dispongono di indirizzi IP statici, potrebbero essere registrati con un servizio di indirizzamento DNS dinamico in modo da consentire a ciascun nodo di rimanere in contatto con i colleghi anche se il loro IP cambia. Potresti anche considerare l'aggiunta di un sistema di firma dei messaggi, per garantire che i messaggi tra i nodi siano autentici.

+0

Grazie per i suggerimenti. Per quanto riguarda la lingua, qualsiasi linguaggio dovrebbe fare. Non ho mai programmato PHP, ma la cosa più importante è che il lavoro venga svolto. Voglio la scoperta automatica. Il processo di replica non dovrebbe richiedere l'interazione dell'utente.Inoltre, vorrei comportamento dei pari intelligente, come: * utilizzare tutti i mezzi di trasporto disponibili e passare, se necessario, * coetanei con elevata connettività dovrebbero aiutare i coetanei con bassa connettività * prioritizzazione dei messaggi – user952460

+0

Se non ti dispiace utilizzando un non strutturato database, potresti provare [Refuge] (http://refuge.io), che è basato su CouchDB (e penso scritto in _Erlang_). Ho chattato con gli sviluppatori tramite IRC e la loro conoscenza e il loro approccio potrebbero essere una buona risorsa per te - vogliono che anche il loro sistema abbia auto-scoperta, credo. Penso che sia presto per loro, tuttavia - anche se non hanno ancora un prototipo pienamente funzionante. – halfer

+0

Incidentalmente il mio progetto, [Meshing] (http://blog.jondh.me.uk/meshing/), è anche nelle prime fasi, ma potresti trovare alcuni dei miei scritti su di esso di interesse. Tuttavia, tenete a mente che non intendo implementare la peer-discovery - per quello che sto cercando di raggiungere, non penso di averne bisogno. – halfer