Javascript 使用Cordova和PockDB的脱机数据

Javascript 使用Cordova和PockDB的脱机数据,javascript,cordova,pouchdb,offlineapps,Javascript,Cordova,Pouchdb,Offlineapps,我正在用Cordova编写一个字典应用程序。数据大小约为20MB 我希望应用程序完全脱机工作,并在本地查询数据。我觉得这真的很适合 但是,我也希望所有数据都预装在应用程序中(JSON格式)。也就是说,将所有数据放在应用程序包中(在Cordova项目的www/data文件夹中) 据我所知,PockDB可以从服务器创建数据或同步数据,但我想知道它如何利用应用程序的www文件夹中的数据文件。 而且,我应该如何格式化数据文件,以便PockDB可以直接从中查询,而无需先从文件中读取数据,然后将数据插入Po

我正在用Cordova编写一个字典应用程序。数据大小约为20MB

我希望应用程序完全脱机工作,并在本地查询数据。我觉得这真的很适合

但是,我也希望所有数据都预装在应用程序中(JSON格式)。也就是说,将所有数据放在应用程序包中(在Cordova项目的www/data文件夹中)

据我所知,PockDB可以从服务器创建数据或同步数据,但我想知道它如何利用应用程序的www文件夹中的数据文件。

而且,我应该如何格式化数据文件,以便PockDB可以直接从中查询,而无需先从文件中读取数据,然后将数据插入PockDB

有人有什么想法吗?或者其他任何可以实现这一点的JS库

谢谢

具体来看sqlite插件。您可以找到生成的sqlite数据库并将其分发。

具体来看sqlite插件。您可以找到生成的sqlite数据库并将其分发。

具体来看sqlite插件。您可以找到生成的sqlite数据库并将其分发。


具体来看sqlite插件。您可以找到生成的sqlite db并将其分发。

经过一些研究后,我现在想比较一些可能的选项:

  • 直接使用数据库

    这是不实际的,因为:1)您必须在第一次启动时将数据插入数据库,这可能非常慢;2) 内存使用率很高,因为您将首先将所有数据加载到内存中(除非拆分它们);3) Cordova应用程序不能在后台运行;用户可以在插入数据时退出应用程序

  • 数据库的sqlite插件

    一个可能的解决办法。您需要使用文件传输插件将数据复制到“工作文件夹”中

    缺点:

    • 有点麻烦,因为创建sqlite文件需要另一个工作流
    • PockDB的sqlite适配器不能通过所有的测试套件,并且可能会按照官方文档的建议变慢
    • 额外空间使用率(2x);必须将应用程序包中的数据复制到数据文件夹中,才能使用Sqlite
  • 在应用程序包内(在/www文件夹中)将数据拆分为较小的json文件

    这就是我目前使用的。我将数据分成大约100个较小的.json文件,并将它们放在/www文件夹中。然后,我可以使用XHR请求根据查询动态加载它们

    赞成者:

    • 不需要额外的空间;只有一份数据副本
    反对:

    • 失去数据库及其查询方法的所有功能;它基本上实现了一个定制的只读数据库
  • 洛基斯

    Lokijs是一个高性能内存数据库。它可以从JSON加载数据库,或者(使用)从文件系统加载数据库

    反对:

    • 因为Lokijs是内存中的数据库。对于大数据量和移动设备,内存使用可能是一个问题

  • 另一件值得期待的事情是为PockDB提供一个文件系统适配器。至少有人在想:


    预加载数据时出现的问题:

    预加载数据通常意味着将应用程序包内部的数据复制到操作系统提供的数据目录中(根据平台的不同而有所不同)

    科尔多瓦的文件插件和文件传输插件经常涉及。
    当前文件插件无法访问应用程序包内的数据(尽管插件中定义了appDirectory)。您必须使用文件传输插件将数据文件从应用程序包复制到数据文件夹。

    经过一些研究后,我现在想比较一些可能的选项:

  • 直接使用数据库

    这是不实际的,因为:1)您必须在第一次启动时将数据插入数据库,这可能非常慢;2) 内存使用率很高,因为您将首先将所有数据加载到内存中(除非拆分它们);3) Cordova应用程序不能在后台运行;用户可以在插入数据时退出应用程序

  • 数据库的sqlite插件

    一个可能的解决办法。您需要使用文件传输插件将数据复制到“工作文件夹”中

    缺点:

    • 有点麻烦,因为创建sqlite文件需要另一个工作流
    • PockDB的sqlite适配器不能通过所有的测试套件,并且可能会按照官方文档的建议变慢
    • 额外空间使用率(2x);必须将应用程序包中的数据复制到数据文件夹中,才能使用Sqlite
  • 在应用程序包内(在/www文件夹中)将数据拆分为较小的json文件

    这就是我目前使用的。我将数据分成大约100个较小的.json文件,并将它们放在/www文件夹中。然后,我可以使用XHR请求根据查询动态加载它们

    赞成者:

    • 不需要额外的空间;只有一份数据副本
    反对:

    • 失去数据库及其查询方法的所有功能;它基本上实现了一个定制的只读数据库
  • 洛基斯

    Lokijs是一个高性能内存数据库。它可以从JSON加载数据库,或者(使用)从文件系统加载数据库

    反对:

    • 因为Lokijs是内存中的数据库。对于大数据量和移动设备,内存使用可能是一个问题

  • 另一件值得期待的事情是为PockDB提供一个文件系统适配器。至少有人在想:


    预加载数据时出现的问题:

    预加载数据通常意味着将应用程序包内部的数据复制到操作系统提供的数据目录中(根据平台的不同而有所不同)

    科尔多瓦的文件插件和文件传输插件经常涉及。 当前文件插件无法访问应用程序包内的数据(尽管插件中定义了appDirectory)。你必须使用文件传输插件来复制你的数据文件