sql >> Databasteknik >  >> NoSQL >> MongoDB

Synkronisera MongoDB-serverdata till en IndexedDB lokal butik

[Synkroniseringslösning för 2021 ]

Jag vet att frågan gällde MongoDB specifikt, men eftersom det här är en gammal tråd trodde jag att läsarna kanske letade efter andra lösningar för nya appar eller ombyggnader. Jag kan verkligen rekommendera att kolla in AceBase eftersom den gör precis vad du letade efter då.

AceBase är en gratis realtidsdatabas med öppen källkod som möjliggör enkel lagring och synkronisering mellan webbläsare och serverdatabaser. Den använder IndexedDB i webbläsaren, sin egen binära db / SQL Server / SQLite-lagring på servern. Offlineredigeringar synkroniseras vid återanslutning och klienter meddelas om fjärrdatabasändringar i realtid via en webbsocket (SNABB!).

Utöver detta har AceBase en unik funktion som kallas "live data proxys" som gör att du kan få alla ändringar av objekt i minnet att bevaras och synkroniseras till lokala och serverdatabaser, och fjärrändringar för att automatiskt uppdatera dina minnesobjekt . Det betyder att du kan glömma databaskodning helt och hållet och koda som om du bara använder lokala objekt. Oavsett om du är online eller offline.

Följande exempel visar hur man skapar en lokal IndexedDB-databas i webbläsaren, hur man ansluter till en fjärrdatabasserver som synkroniserar med den lokala databasen och hur man skapar en live-dataproxy som eliminerar ytterligare databaskodning. AceBase stöder också autentisering och auktorisering, men jag utelämnade det för enkelhets skull.

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'}`); 
        }
    });
});

För fler exempel och dokumentation, se AceBase realtidsdatabasmotor på npmjs.com



  1. Windows MongoDB - Installerad kompass men kan inte hitta kompass i systemet

  2. MongoDB Aggregate Framework - Gruppera efter år

  3. MongoDB indexerar på underdokument som inte används baserat på syntax för frågan

  4. Varför tar MongoDB så mycket plats?