sql >> Databáze >  >> NoSQL >> MongoDB

Synchronizace dat serveru MongoDB do místního úložiště IndexedDB

[Řešení synchronizace pro rok 2021 ]

Vím, že položená otázka byla konkrétně pro MongoDB, ale protože se jedná o staré vlákno, myslel jsem si, že čtenáři mohou hledat jiná řešení pro nové aplikace nebo přestavby. Opravdu mohu doporučit podívat se na AceBase protože dělá přesně to, co jste tehdy hledali.

AceBase je bezplatná a open source databáze v reálném čase, která umožňuje snadné ukládání a synchronizaci mezi databázemi prohlížeče a serveru. Využívá IndexedDB v prohlížeči, vlastní binární db / SQL Server / SQLite úložiště na serveru. Offline úpravy jsou synchronizovány po opětovném připojení a klienti jsou informováni o změnách vzdálené databáze v reálném čase prostřednictvím webového soketu (RYCHLE!).

Kromě toho má AceBase jedinečnou funkci nazvanou „živé datové proxy“, která vám umožňuje zachovat všechny změny objektů v paměti a synchronizovat je s místními a serverovými databázemi a vzdálené změny automaticky aktualizovat vaše objekty v paměti. . To znamená, že můžete zapomenout na kódování databáze úplně a kódovat, jako byste používali pouze místní objekty. Bez ohledu na to, zda jste online nebo offline.

Následující příklad ukazuje, jak vytvořit místní databázi IndexedDB v prohlížeči, jak se připojit ke vzdálenému databázovému serveru, který se synchronizuje s místní databází, a jak vytvořit server proxy pro živá data, který eliminuje další kódování databáze. AceBase podporuje také ověřování a autorizaci, ale pro jednoduchost jsem to vynechal.

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

Další příklady a dokumentaci najdete v AceBase realtime databázový stroj na npmjs.com



  1. findOne funguje, ale ne dostat vše/najít

  2. MongoDB - Geoprostorový průnik dvou polygonů

  3. MongoDB:Kompromisy zrušení sbírky vs. odstranění všech jejích dokumentů

  4. MongoDB - Dotaz na poslední prvek pole?