Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自jQuery Mobile的离线/在线数据库身份验证/同步_Jquery_Html_Jquery Mobile_Offline Caching_Session Storage - Fatal编程技术网

来自jQuery Mobile的离线/在线数据库身份验证/同步

来自jQuery Mobile的离线/在线数据库身份验证/同步,jquery,html,jquery-mobile,offline-caching,session-storage,Jquery,Html,Jquery Mobile,Offline Caching,Session Storage,情况:我有一个数据库和一个web应用程序,可以交互显示和更新科学数据表。我的任务是构建一个移动应用程序,允许用户 出于跟踪目的,脱机验证和标识自己 (使用缓存中存储的预定义但动态的用户帐户和权限) 下载现场工作的识别数据(可接入互联网) 在现场进行观察并存储(无互联网接入) 稍后将观察结果同步到在线数据库中 问题:验证/下载/存储/上传必要数据的最佳方式是什么,以独立于一致的互联网访问管理此类应用程序?如果两个人调整相同的读数,并且在同步之间发生一次更新,我如何跟踪哪些表和值已被更改,并防止更改

情况:我有一个数据库和一个web应用程序,可以交互显示和更新科学数据表。我的任务是构建一个移动应用程序,允许用户

  • 出于跟踪目的,脱机验证和标识自己 (使用缓存中存储的预定义但动态的用户帐户和权限)
  • 下载现场工作的识别数据(可接入互联网)
  • 在现场进行观察并存储(无互联网接入)
  • 稍后将观察结果同步到在线数据库中
  • 问题:验证/下载/存储/上传必要数据的最佳方式是什么,以独立于一致的互联网访问管理此类应用程序?如果两个人调整相同的读数,并且在同步之间发生一次更新,我如何跟踪哪些表和值已被更改,并防止更改丢失

    当前思路:我目前关于冲突控制的暂定策略是维护一个“同步”表,该表存储代表sessionStorage中存储的每个在线数据库事务的JSON对象,并让应用程序在上传数据之前不断验证其同步性,并检查此对象在更新特定主键时是否存在潜在冲突。我希望能够在元组处于编辑阶段时锁定元组,但这对于不一致的internet访问来说似乎是不可能的

    抱歉,如果这是一个有点新的问题,我对整个移动应用程序开发都是新手

    tl;dr如何防止移动应用程序对数据库的异步更改与其他个人对同一数据库的更改发生覆盖/冲突?如何在没有网络连接的情况下对用户进行身份验证?

    您听说过ajax调用中的“竞争条件”吗?有一种解决方案,您可以使对服务器的ajax调用顺序化,而不是并发化,从而一个接一个地依次运行。这适用于异步连接,因此不需要任何其他同步功能

    这里的诀窍是使用jQuery ajaxQueue实现这一目的

    我的资料来源:

    [1]

    [2]


    [3]

    至于同步,您可以看一看——我们正在开发的一个开源库,它可以跨不同类型的存储同步JSON文档,并具有一个超级简单的API

    有一系列可用的连接器正在开发中(webDav、S3、xwiki等),您还可以编写自己的连接器,将JIO连接到提供JSON数据的任何地方

    然后,在客户端上,您可以使用客户端本地主机和远程存储作为存储设置复制修订存储:

     var jio_instance = jIO.newJio({
       "type": "replicaterevision",
       "storage_list": [{
         "type": "revision",
         "sub_storage": {<storage spec for your localhost storage>}
        }, {
         "type": "revision",
         "sub_storage": {<storage spec for your remote storage>}
        }]
     });
    
    可以这样称呼:

      jio_instance.get({"_id":"your_doc_id"}, function (err, response) {
        // do something
      });
    
    options = {
     query: '(author:"% Doe") AND (format:"pdf")',
     limit: [0, 100],
     sort_on: [['last_modified', 'descending'], ['creation_date', 'descending']],
     select_list: ['title'],
     wildcard_character: '%'
    };
    
    // run query
    jio_instance.allDocs(options, function (error, response) {
      // do sth
    });
    
    JIO还有一个
    复杂查询
    模块,允许在存储上运行类似数据库的查询。所以你可以这样做:

      jio_instance.get({"_id":"your_doc_id"}, function (err, response) {
        // do something
      });
    
    options = {
     query: '(author:"% Doe") AND (format:"pdf")',
     limit: [0, 100],
     sort_on: [['last_modified', 'descending'], ['creation_date', 'descending']],
     select_list: ['title'],
     wildcard_character: '%'
    };
    
    // run query
    jio_instance.allDocs(options, function (error, response) {
      // do sth
    });
    

    如果您有任何问题,请告诉我。

    对于未连接到网络的用户身份验证,我将建议以下路径:

    在第2点中,您通过互联网接入下载身份数据。所以很明显,您必须在本地存储中以加密格式保存用户名和密码对。这是唯一可以帮助您在远程区域(即脱机模式)访问应用程序时对同一设备上的同一用户进行身份验证的方法。最终,手持设备是每个用户的,您的应用程序将只保留该用户的历史记录;在这种情况下,我认为这是绝对好的


    避免碰撞;我建议增加设备与主服务器同步的次数。如果用户在网络中,并且他们对数据进行了一些修改,那么后台同步操作应该将这些更改同步到主服务器,其他用户应该在预定义的时间间隔后进行同步。同步数据的时间越长;冲突的可能性较小。但问题仍然是,当用户处于脱机模式时,数据发生了修改。为此,我们无能为力。您的冲突管理代码应该具有一些智能,例如哪个数据副本应该具有更高的优先级,即来自具有安全角色的X用户的数据或来自具有B安全角色的Y用户的数据或类似的内容

    许多应用程序和数据库都存在并发问题。在发帖和移动技术方面,只是有一个较长的差距,但并没有那么大的不同。@JeffO你并没有真正回答我的问题。。并发和数据冲突是我发现的一个问题,这是真的,但那又如何呢?