将indexedDB与mysql数据库同步

时间:2013-08-16 13:36:54

标签: mysql indexeddb web-sql

我即将开发一个应用程序,员工可以在客户所在地维修机器。他们需要使用平板电脑或任何其他移动设备填写服务卡。 如果没有Internet连接,我正在考虑使用HTML5离线存储,主要是IndexedDB在本地存储服务卡(Web表单)数据,并在Internet存在的办公室进行同步。同步是使用MySQL数据库。

所以问题是:是否可以将indexedDB与mysql同步?我从未使用过indexedDB,我只是在研究并认为它是一种潜力。

不推荐使用Web SQL。否则,它可能是更接近的解决方案。

如果上述情况困难或超出标准,还有其他替代方案吗?

非常感谢您的意见。

感谢。

3 个答案:

答案 0 :(得分:3)

这绝对是可行的。我刚才开始学习indexeddb过去几天。这就是我认为它的工作方式。对不起,没有代码可以给你。

  1. 网站以某种方式知道离线模式
  2. 单击提交表单将数据保存到indexeddb
  3. 以后的笔记本电脑或其他什么东西重新上线或在内联网上,现在可以与主服务器通信,将所有indexeddb行发送到服务器,通过ajax调用存储在mysql中。
  4. indexeddb已清除
  5. 重复

答案 1 :(得分:2)

[2021 年更新]

对于阅读本文的任何人,我建议您查看AceBase。 AceBase 是一个实时数据库,可以在浏览器和服务器数据库之间轻松存储和同步。它在浏览器中使用 IndexedDB,在服务器端使用它自己的二进制 db 格式或 SQL Server / SQLite 存储。 MySQL 存储也在路线图上。重新连接时会同步离线编辑,并通过 websocket 实时通知客户端远程数据库更改(FAST!)。

最重要的是,AceBase 有一个称为“实时数据代理”的独特功能,它允许您将内存中对象的所有更改持久化并同步到本地和服务器数据库,这样您就可以完全忘记数据库编码, 并像只使用本地对象一样编程。无论您是在线还是离线。

以下示例展示了如何在浏览器中创建本地 IndexedDB 数据库、如何连接到与本地数据库同步的远程数据库服务器,以及如何创建实时数据代理以完全消除进一步的数据库编码。

>
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 realtime changes to the chat:
    chat.onChanged((val, prev, isRemoteChange, context) => {
        if (val.title !== prev.title) { 
            console.log(`Chat title changed to ${val.title} by ${isRemoteChange ? 'us' : 'someone else'}`); 
        }
    });
});

有关更多示例和文档,请参阅 npmjs.com 上的 AceBase realtime database engine

答案 2 :(得分:0)

有点晚了,但我希望它会有所帮助。

这是可能的,我不确定是否是最好的选择。我可以告诉你,我正在构建一个webapp,我有一个mysql数据库,应用程序必须脱机工作并跟踪数据。我尝试使用indexedDB,这对我来说非常困惑,所以我实现了DexieJs,这是一个简单直接的API,可以轻松地与indexedDB进行通信。 现在该应用程序正在联机工作,如果它在互联网上运行,它将脱机工作,直到它恢复互联网,然后将数据上传到mysql数据库。我读取的用于保存数据的解决方案之一是存储在TEXT字段中,json对象已传递到JSON.stringify(),一旦您需要数据返回JSON.parse()。 这是我以这种方式构建应用程序的动机,也是我们无法更改数据库的原因:
IndexedDB Tutorial
Sync IndexedDB with MySQL
Connect node to mysql

相关问题