Phi*_*ami 13 javascript mongodb indexeddb
我正在尝试使用IndexedDB来评估解决脱机问题.它将填充当前存储在MongoDB数据库中的数据(按原样).
一旦数据存储在IndexedDB中,它就可以在MongoDB服务器上进行更改,我需要传播这些更改.是否有任何现有的框架或库可以为Mongo做这样的事情.我已经了解CouchDB/PouchDB,并没有探索这两个.
[ 2021 年同步解决方案]
我知道所问的问题是专门针对 MongoDB 的,但由于这是一个旧线程,我认为读者可能正在寻找新应用程序或重建的其他解决方案。我真的建议您查看AceBase,因为它完全符合您当时的需求。
AceBase 是一个免费开源实时数据库,可以在浏览器和服务器数据库之间轻松存储和同步。它在浏览器中使用IndexedDB,在服务器上使用自己的二进制db/SQL Server/SQLite存储。离线编辑会在重新连接时同步,并通过 Websocket 实时通知客户端远程数据库更改(快!)。
除此之外,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'}`);
}
});
});
Run Code Online (Sandbox Code Playgroud)
有关更多示例和文档,请参阅npmjs.com 上的AceBase 实时数据库引擎
我没有使用过 IndexDB,但设计问题并不少见。我对您的应用程序的理解是,当客户端连接到 MongoDB 时,您将一组文档拉下来进行本地存储并断开连接。然后,客户端可以在本地(不连接到数据服务器)执行操作,然后推送更改。
在我看来,你必须处理两种一般情况:
归档时间: |
|
查看次数: |
3333 次 |
最近记录: |