MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Menyinkronkan data server MongoDB ke toko lokal IndexedDB

[Solusi sinkronisasi untuk tahun 2021 ]

Saya tahu pertanyaan yang diajukan adalah untuk MongoDB secara khusus, tetapi karena ini adalah utas lama, saya pikir pembaca mungkin mencari solusi lain untuk aplikasi baru atau membangun kembali. Saya benar-benar dapat merekomendasikan untuk memeriksa AceBase karena ia melakukan persis seperti yang Anda cari saat itu.

AceBase adalah database realtime gratis dan open source yang memungkinkan penyimpanan dan sinkronisasi yang mudah antara database browser dan server. Ini menggunakan IndexedDB di browser, penyimpanan biner db / SQL Server / SQLite di server. Pengeditan offline disinkronkan saat tersambung kembali dan klien diberi tahu tentang perubahan basis data jarak jauh secara waktu nyata melalui soket web (CEPAT!).

Selain itu, AceBase memiliki fitur unik yang disebut "proksi data langsung" yang memungkinkan Anda memiliki semua perubahan pada objek dalam memori untuk dipertahankan dan disinkronkan ke database lokal dan server, dan perubahan jarak jauh untuk memperbarui objek dalam memori Anda secara otomatis . Ini berarti Anda bisa melupakan pengkodean database sama sekali, dan kode seolah-olah Anda hanya menggunakan objek lokal. Tidak peduli apakah Anda sedang online atau offline.

Contoh berikut menunjukkan cara membuat database IndexedDB lokal di browser, cara menyambungkan ke server database jarak jauh yang disinkronkan dengan database lokal, dan cara membuat proxy data langsung yang menghilangkan pengkodean database lebih lanjut. AceBase juga mendukung autentikasi dan otorisasi, tetapi saya mengabaikannya karena kesederhanaan.

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

Untuk contoh dan dokumentasi lainnya, lihat AceBase realtime database engine di npmjs.com



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoError:Tidak dapat mengekstrak kunci geografis dari objek dengan Jenis:Titik

  2. Pesan Kesalahan:MongoError:Otentikasi buruk gagal melalui string URI

  3. Membuat metode untuk memperbarui &menyimpan dokumen dengan luwak?

  4. 6 Alat Berguna untuk Memantau Kinerja MongoDB

  5. Redis atau Mongo untuk menentukan apakah suatu angka termasuk dalam rentang?