小编Fel*_*lix的帖子

IndexedDB的概念问题(关系等)

我正在写一篇关于Web应用程序离线功能的论文.我的任务是通过Web应用程序显示离线存储的可能性,该应用程序具有服务器端关系数据库和客户端与服务器之间的Ajax/JSON流量.我的第一个实现使用了localStorage的方法,将每个Ajax响应保存为值,并将请求URL作为键.该应用程序工作正常.然而,在下一步中,我希望(即论文要求)使用客户端数据库实现更高级的版本.由于服务器维护关系数据库,因此Web SQL数据库将是直观的选择.但是,正如我们所知,该标准已被弃用,我不想使用未来不确定的技术.因此,我想使用IndexedDB来实现客户端数据库逻辑.不幸的是,在网上阅读了大量材料后,我们仍然不知道该如何处理.

我的任务似乎相当简单: 使用IndexedDB在客户端上实现服务器端数据库,以复制曾经从服务器获取的所有数据.这些问题远远不那么简单:

  • 服务器端数据库是关系型的,IndexedDB(或多或少)是面向对象的
  • 没有直观的方法来同步客户端和服务器端数据库
  • 没有直观的方法来实现IndexedDB中使用服务器上的外键和JOIN实现的关系

现在,我有一个概念,我真的害怕开始实施.我考虑过为服务器数据库中的每个表创建一个对象存储,并手动编写不同对象存储中的关系对象.在我的应用程序中,简而言之,管理大学的课程,我有7个对象商店.

我想通过服务器的JSON响应示例演示我的想法(/*这些是注释*/):

{ "course": { /* course object */
    "id":1, 
    "lecturer": { "id":"1", /* lecturer object with many attributes */ },
    "semester": { "id":"1", /* semester object with many attributes */ }, 
    /* more references and attributes */
}}
Run Code Online (Sandbox Code Playgroud)

使用IndexedDB存储数据的算法会将应用于对象存储的每个对象存储在适当的对象存储中,并使用对这些对象的引用替换对象.例如,上面的课程对象在对象库"课程"中看起来如下:

{ "course": { /* course object */
    "id":1, 
    "lecturer": 
    { "reference": { /* reference to the lecturer in the object store 'lecturer' */
        "objectstore":"lecturer",
        "id":"1" }
    },
    "semester":
    { "reference": { …
Run Code Online (Sandbox Code Playgroud)

javascript html5 local-storage web-sql indexeddb

31
推荐指数
1
解决办法
8201
查看次数

标签 统计

html5 ×1

indexeddb ×1

javascript ×1

local-storage ×1

web-sql ×1