12

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

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

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

如果上述困难或超出标准,还有其他选择吗?

非常感谢您的意见。

谢谢。

4

3 回答 3

5

这绝对是可以做到的。最近几天我才刚刚开始学习 indexeddb。这就是我如何看待它的工作方式。抱歉没有代码给你。

  1. 网站以某种方式知道其处于离线模式
  2. 单击提交表单将数据保存到 indexeddb
  3. 后来的笔记本电脑或任何重新联机或在 Intranet 上的东西,现在可以与主服务器对话,将所有 indexeddb 行发送到服务器,以通过 ajax 调用存储在 mysql 中。
  4. indexeddb 被清除
  5. 重复
于 2013-08-20T11:01:08.340 回答
3

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

这是可能的,我不确定是否是最佳选择。我可以告诉你,我正在构建一个 web 应用程序,其中我有一个 mysql 数据库,并且该应用程序必须离线工作并跟踪数据。我尝试使用 indexedDB,但它让我很困惑,所以我实现了DexieJs,这是一个简约且直接的 API,可以轻松地与 indexedDB 进行通信。现在该应用程序正在在线工作,然后如果它在互联网上出现故障,它会离线工作,直到它恢复互联网,然后将数据上传到 mysql 数据库。我为保存数据而阅读的解决方案之一是将 json 对象传递到的文本字段中存储JSON.stringify(),并且一旦您需要返回数据JSON.parse()。这是我以这种方式构建应用程序的动机,也是我们无法更改数据库的动力:
IndexedDB 教程
将IndexedDB 与 MySQL
Connect 节点同步到 mysql

于 2015-01-20T03:37:13.510 回答
3

[ 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实时数据库引擎

于 2021-03-18T16:41:20.780 回答