Domanda

In un programma che incorpora SQLite3 e utilizza un database in memoria, è possibile replicare il database tra due istanze in esecuzione dell'applicazione? Potrei farlo a mano con un protocollo homebrew duplicazione di tutto il mio DB accessi, ma sembra che qualcosa che dovrebbe essere fatto all'interno dello strato di DB.

È stato utile?

Soluzione

Brute approccio forza: Inviatela il comando ".dump" per creare una rappresentazione testuale dei dati. Leggere che nei dati nel secondo database. Non è sicuro è possibile utilizzare tale.

Se avete bisogno di un buon aggiornamento grana (l'invio di una copia di ciascuna fino a l'altra copia), hanno uno sguardo al sqlite3_update_hook

Ma come pensate di gestire gli errori? Ad esempio, cosa succede quando la copia del DB nel app2 non è possibile effettuare un aggiornamento per qualche motivo?

Per risolvere questo problema, spostare il database in un processo server e hanno le due applicazioni parlano ad esso.

Altri suggerimenti

Fuori dalla scatola, no. Ci sono un piccolo numero di opzioni di terze parti:

SQLite sincronizzazione: https://ampliapps.com/sqlite-sync/ questa sembra interessante perché può replicare ad altri database e SQLite, e non modificare il motore SQLite. Non ho ancora provato.

Litereplica: http://litereplica.io/ un solo modo. Sembra essere stato un po 'intorno.

LiteSync: http://litesync.io/ replica bidirezionale. Abbastanza nuovo, ma un'evoluzione di Litereplica quindi probabilmente più maturo di quanto non appaia. Ho provato questo un po 'e sembra funzionare senza problemi, con alcuni bug che lo sviluppatore sta guardando. Devi usare il motore SQLite modificata dello sviluppatore, che sembra una dipendenza in materia. Inoltre non si ottiene molto di comando, ad esempio non si può dire Replica ora senza riaprire il database.

Lsyncd - diretta sincronizzazione (Mirror) Daemon può essere utile Qui. Esso utilizza rsync per fare la replica continua del livello di file.

Se si desidera replica in un database in memoria è necessario guardare a Berkeley DB (BDB) . Tuttavia, il modello di dati per BDB è dizionario stringa-stringa, in modo da perdere la flessibilità di SQL. in più ha una licenza di tre clausola, quindi se il vostro progetto è commerciale è necessario per ottenere le licenze.

No, non perché la portata del progetto è un semplice database in-process. Ma perché il database è solo un singolo file, è possibile scrivere il proprio script di replica basata su operazioni di copia di file di strisciamento, rsync o qualcosa di simile.

Se si vuole veramente un tipo SQLite client / server basato su RDBMS, si potrebbe dare un'occhiata a SQLiteDBMS .

Unison? Miglior si potrebbe fare se fosse hot spare, perché SQLite db in un file monolitico. Non poteva round-robin tra i due "istanze". hot spare non è male, è sufficiente scegliere l'altra app + db senza troppo baccano, paragonate a MySQL master-slave o attivo-passivo, dove c'è qualche intervento manuale che non è facile. replica di MySQL passa intorno SQL, non solo come diff all'unisono / rsync. Ma con unisono avete master-master.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top