[Sync-oplossing voor 2021 ]
Ik weet dat de gestelde vraag specifiek voor MongoDB was, maar aangezien dit een oude thread is, dacht ik dat lezers misschien op zoek waren naar andere oplossingen voor nieuwe apps of herbouwingen. Ik kan het echt aanraden om AceBase te bekijken omdat het precies doet waar je toen naar op zoek was.
AceBase is een gratis en open source realtime database die gemakkelijke opslag en synchronisatie tussen browser- en serverdatabases mogelijk maakt. Het gebruikt IndexedDB in de browser, zijn eigen binaire db / SQL Server / SQLite-opslag op de server. Offline bewerkingen worden gesynchroniseerd wanneer er opnieuw verbinding wordt gemaakt en klanten worden in realtime op de hoogte gebracht van wijzigingen in de database op afstand via een websocket (SNEL!).
Bovendien heeft AceBase een unieke functie genaamd "live data proxy's" waarmee u alle wijzigingen aan in-memory-objecten kunt bewaren en synchroniseren met lokale en serverdatabases, en externe wijzigingen om uw in-memory-objecten automatisch bij te werken . Dit betekent dat u databasecodering helemaal kunt vergeten en codeert alsof u alleen lokale objecten gebruikt. Het maakt niet uit of je online of offline bent.
Het volgende voorbeeld laat zien hoe u een lokale IndexedDB-database in de browser maakt, hoe u verbinding maakt met een externe databaseserver die synchroniseert met de lokale database, en hoe u een live-gegevensproxy maakt die verdere databasecodering elimineert. AceBase ondersteunt ook authenticatie en autorisatie, maar ik heb het voor de eenvoud weggelaten.
const { AceBaseClient } = require('acebase-client');
const { AceBase } = require('acebase');
// Create local database with IndexedDB storage:
const cacheDb = AceBase.WithIndexedDB('mydb-local');
// Connect to server database, use local db for offline storage:
const db = new AceBaseClient({ dbname: 'mydb', host: 'db.myproject.com', port: 443, https: true, cache: { db: cacheDb } });
// Wait for remote database to be connected, or ready to use when offline:
db.ready(async () => {
// Create live data proxy for a chat:
const emptyChat = { title: 'New chat', messages: {} };
const proxy = await db.ref('chats/chatid1').proxy(emptyChat); // Use emptyChat if chat node doesn't exist
// Get object reference containing live data:
const chat = proxy.value;
// Update chat's properties to save to local database,
// sync to server AND all other clients monitoring this chat in realtime:
chat.title = `Changing the title`;
chat.messages.push({
from: 'ewout',
sent: new Date(),
text: `Sending a message that is stored in the database and synced automatically was never this easy!` +
`This message might have been sent while we were offline. Who knows!`
});
// To monitor and handle realtime changes to the chat:
chat.onChanged((val, prev, isRemoteChange, context) => {
if (val.title !== prev.title) {
alert(`Chat title changed to ${val.title} by ${isRemoteChange ? 'us' : 'someone else'}`);
}
});
});
Zie AceBase realtime database-engine voor meer voorbeelden en documentatie. op npmjs.com