gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:50:31 33 4
gpt4 key购买 nike

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

  1. 离线验证和识别自己以进行跟踪(使用存储在缓存中的预定义但动态的用户帐户和权限)
  2. 下载现场工作的身份数据(可访问互联网)
  3. 在现场进行和存储观察结果(无需互联网访问)
  4. 稍后将观察结果同步到在线数据库中

问题:什么是验证/下载/存储/上传必要数据以独立于持续互联网访问管理此类应用程序的最佳方式?如果两个人调整同一个读数,并且在同步之间发生了一次更新,我如何跟踪哪些表和值已被更改,并防止更改丢失?

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

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

tl;dr 如何防止移动应用程序对数据库的异步更改在运行和离线时覆盖/冲突另一个人对同一数据库的更改?以及如何在没有网络连接的情况下对用户进行身份验证?

最佳答案

关于同步你可以看看jIO - 我们正在开发的一个开源库,可以跨不同类型的存储同步 JSON 文档,并具有 super 简单的 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>}
}]
});

storage_list 中的所有存储都将自动进行版本控制和同步。因此,如果用户离线,检索文档,编辑并保存它(仅保存到本地存储,因为用户离线),下次用户在线时尝试访问该文件时,jIO 将抛出冲突,因为当前版本在remote-storagelocalstorage 不同。

那么只需要写一个例程来解决在线/离线时多个用户编辑文档产生的任何冲突=保留/合并/等等的版本。

访问文档非常简单。 JSON 文档具有元数据和附件,您可以使用以下命令修改您的 JSON 文档:

  POST  > generate a new document
PUT > update existing document
GET > retrieve a document
REMOVE > delete a document
ALLDOCS > retrieve all documents
PUTATTACHEMENT > add an attachment to a document
GETATTACHEMENT > retrieve an attachment from a document
REMOVEATTACHEMENT > delete an attachement from a document

可以这样调用:

  jio_instance.get({"_id":"your_doc_id"}, function (err, response) {
// do something
});

JIO 还有一个 complex-queries 模块,它允许在您的存储上运行类似数据库的查询。所以你可以这样做:

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
});

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

关于jquery - 来自 jQuery Mobile 的离线/在线数据库身份验证/同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18470105/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com