将indexedDB与mysql数据库同步

将indexedDB与mysql数据库同步,mysql,indexeddb,web-sql,Mysql,Indexeddb,Web Sql,我将要开发一个应用程序,让员工在客户场所维修机器。他们需要使用平板电脑或任何其他移动设备填写服务卡。 在没有互联网连接的情况下,我考虑使用HTML5离线存储,主要是IndexedDB在本地存储服务卡(web表单)数据,并在互联网所在的办公室进行同步。与MySQL数据库同步 所以问题是:是否可以将indexedDB与mysql同步?我从未与indexedDB合作过,我只是在做研究,并看到了它的潜力 不推荐使用Web SQL。否则,它可能是更接近的解决方案 如果上述情况困难或超出标准,是否有其他替代

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


所以问题是:是否可以将indexedDB与mysql同步?我从未与indexedDB合作过,我只是在做研究,并看到了它的潜力

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

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

非常感谢你的意见


谢谢。

这是绝对可以做到的。在过去的几天里,我才刚刚开始学习indexeddb。这就是我如何看待它的工作方式。对不起,我没有代码给你

  • 网站不知何故知道它处于离线模式
  • 单击“提交表单”将数据保存到indexeddb中
  • 稍后,笔记本电脑或任何回到在线或内联网上,现在可以与主服务器对话的设备通过ajax调用将所有indexeddb行发送到服务器,以存储在mysql中
  • indexeddb已清除
  • 重复

  • 有点晚了,但我希望能有所帮助

    这是可能的,我不确定是否是最好的选择。我可以告诉你,我正在构建一个webapp,其中我有一个mysql数据库,该应用程序必须离线工作,并保持对数据的跟踪。我尝试使用indexedDB,这让我非常困惑,所以我实现了一个简单的、直接的API,可以轻松地与indexedDB通信。 现在这个应用程序是在线运行的,如果它进入互联网,它会离线运行,直到它回到互联网,然后将数据上传到mysql数据库。我读到的保存数据的解决方案之一是将json对象存储在一个文本字段中,该json对象被传递到
    json.stringify()
    ,一旦需要返回数据
    json.parse()
    。 这就是我以这种方式构建应用程序的动机,也是我们无法更改数据库的原因:




    [2021年更新

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

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

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

    const{AceBaseClient}=require('acebase-client');
    const{AceBase}=require('AceBase');
    //使用IndexedDB存储创建本地数据库:
    const cacheDb=AceBase.WithIndexedDB('mydb-local');
    //连接到服务器数据库,使用本地数据库进行脱机存储:
    const db=new AceBaseClient({dbname:'mydb',host:'db.myproject.com',端口:443,https:true,缓存:{db:cacheDb}});
    //等待远程数据库连接或脱机时准备使用:
    db.ready(异步()=>{
    //为聊天创建实时数据代理:
    const emptyChat={title:'newchat',messages:{};
    const proxy=wait db.ref('chats/chatid1').proxy(emptyChat);//如果聊天节点不存在,请使用emptyChat
    //获取包含实时数据的对象引用:
    const chat=proxy.value;
    //更新聊天室的属性以保存到本地数据库,
    //实时同步到服务器和监控此聊天的所有其他客户端:
    chat.title=`更改标题';
    chat.messages.push({
    来自:“ewout”,
    已发送:新日期(),
    text:`发送存储在数据库中并自动同步的消息从来没有这么容易!`+
    `此消息可能是在我们脱机时发送的。谁知道呢`
    });
    //要监视聊天室的实时更改,请执行以下操作:
    chat.onChanged((val,prev,isremotechchange,context)=>{
    如果(val.title!==prev.title){
    log(${isRemoteChange?'us':'someone other'}``将聊天标题更改为${val.title});
    }
    });
    });
    

    有关更多示例和文档,请参阅npmjs.com上的“是否可以将indexedDB与mysql同步?”是的。如果真正的问题是如何,那么您必须提供有关应用程序设计的一些更具体的细节……我还没有谈到如何。我只是在寻找可能的解决办法。与mysql中的关系数据库相比,indexeddb中的数据对象性质不匹配或令人头痛,这让我感到担忧。您可以轻松地从indexeddb检索数据,然后对其进行json编码,将其传递给php,然后直接插入数据库。谢谢Carlhako。让我告诉你我将使用什么:Django/mysql作为在线后端服务器。IndexedDB用于离线存储,我认为使用tastypie创建web服务来进行同步可能是一个解决方案。我还不确定tastypie是正确的选择还是AJAX更好。当我使用JSON.stringify()时,我对日期有问题,所以我通常避免使用这种方法。