MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Синхронизиране на сървърни данни на MongoDB към локално хранилище на IndexedDB

[Решение за синхронизиране за 2021 ]

Знам, че зададеният въпрос беше специално за MongoDB, но тъй като това е стара тема, реших, че читателите може да търсят други решения за нови приложения или реконструкции. Наистина мога да препоръчам да разгледате AceBase защото прави точно това, което търсихте тогава.

AceBase е безплатна база данни с отворен код в реално време, която позволява лесно съхранение и синхронизиране между бази данни на браузър и сървър. Той използва IndexedDB в браузъра, собствено бинарно db / SQL Server / SQLite хранилище на сървъра. Офлайн редакциите се синхронизират при повторно свързване и клиентите се уведомяват за отдалечени промени в базата данни в реално време чрез уебсокет (БЪРЗО!).

Освен това AceBase има уникална функция, наречена „проксита за данни на живо“, която ви позволява да поддържате всички промени в обектите в паметта и да ги синхронизирате с локални и сървърни бази данни, както и отдалечени промени за автоматично актуализиране на вашите обекти в паметта . Това означава, че можете напълно да забравите за кодирането на базата данни и да кодирате, сякаш използвате само локални обекти. Без значение дали сте онлайн или офлайн.

Следващият пример показва как да създадете локална база данни IndexedDB в браузъра, как да се свържете с отдалечен сървър на база данни, който се синхронизира с локалната база данни, и как да създадете прокси за данни на живо, което елиминира допълнително кодиране на базата данни. AceBase поддържа и удостоверяване и оторизация, но аз ги оставих за по-лесно.

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

За повече примери и документация вижте AceBase двигател на бази данни в реално време на npmjs.com



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Импортирайте CSV файл (съдържа някои не-UTF8 знаци) в MongoDb

  2. Spark - Как да създадете променлива, която е различна за всеки контекст на изпълнител?

  3. Mongo ID води до страшни URL адреси

  4. Как да инсталирате MongoDB Community Edition на Ubuntu

  5. MySQL към MongoDB - Admin Cheat Sheet