2009-09-24 12 views
14

sto affrontando la seguente sfida:Mantenere distribuito database sincronizzati in una rete instabile

Ho un sacco di basi di dati in aree geografiche in cui la rete non può riuscire un sacco (sto usando la rete cellulare). Devo mantenere tutti i database sincronizzati ma non è necessario essere in tempo reale. Sto usando Java, ma ho la libertà di scegliere qualsiasi database gratuito.

Qualsiasi suggerimento su come posso ottenere questo.

Grazie.

+0

Stai cercando uno strumento? Sviluppare una soluzione personalizzata? –

risposta

8

Non sono a conoscenza di alcun database che ti fornisca questa funzionalità fuori dalla scatola; c'è molta complessità qui a causa della necessità di coerenza finale e risoluzione dei conflitti (ad esempio, cosa succede se la rete viene divisa in 2 metà e si aggiorna qualcosa al valore 123 mentre lo aggiorno nell'altra metà a 321, e quindi le reti si riconnettono?)

Potrebbe essere necessario eseguire il rollover.

Per alcune idee su come fare questo, controlla la progettazione del sistema di Yahoo PNUTS: http://research.yahoo.com/node/2304 e la Dinamo di Amazon: http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

+0

+1. Buoni collegamenti! – David

+0

Il documento di Yahoo è molto interessante. L'idea di sviluppare la mia soluzione era già nella mia mente. Mi piacerebbe avere qualcosa come GIT per i database – jassuncao

+2

La cosa su Git è che ti fa eseguire un'unione manuale quando ci sono aggiornamenti in conflitto. In genere non è un'opzione praticabile per i database. Quindi è necessario un modello di coerenza che porti a meno sorprese possibili. – SquareCog

0

Non conosco le vostre esigenze o le vostre app, ma questa non è una risposta rapida tipo di domanda. Sono molto interessato a vedere cosa hanno da dire gli altri. Tuttavia, ho un suggerimento che può o non può funzionare per te, a seconda delle tue esigenze e della situazione. in particolare, questo non aiuta se gli utenti hanno bisogno di usare l'app anche quando la rete non è disponibile (accesso offline).

Tenere un gruppo di piccoli database sincronizzati è un'operazione abbastanza complessa da eseguire correttamente. Esiste la possibilità di avere un solo database centralizzato, e se le applicazioni client si collegano direttamente ad esso o (la mia soluzione preferita) scrivono alcuni servizi web per gestire l'accesso/aggiornamento dei dati piuttosto che avere un gruppo di database client?

Mi rendo conto che ciò limita l'accesso offline, ma esistono varie strategie di memorizzazione nella cache che è possibile utilizzare. (Che, naturalmente, ti riconduce alla tua domanda originale.)

17
+0

Grande raccolta di informazioni. Grazie. – jassuncao

+0

Prego. – MaD70

3

Check out SymmetricDS. SymmetricDS è un software di sincronizzazione/sincronizzazione dei dati basato su web, indipendente dal database. Utilizza tecnologie web e di database per replicare tabelle tra database relazionali in tempo quasi reale. Il software è stato progettato per adattarsi a un gran numero di database, lavorare su connessioni a bassa larghezza di banda e resistere a periodi di interruzione della rete.

+0

Sì. L'ho già guardato e gli ho dato un giro. Sembra un bel dio. Proababilmente è ciò che verrà utilizzato – jassuncao