SQL.js(SQLite JavaScript实现)可以立即自动写入磁盘吗?

时间:2014-08-15 15:09:03

标签: javascript sql sqlite google-chrome-extension google-chrome-app

我正在为Chrome扩展程序(以及该扩展程序的打包应用程序变体)创建一个想法,其中一个小而轻量级的SQL数据库(如SQLite)将是理想的。但是,Chrome Apps cannot use Web SQL

我一直在尝试使用SQLite的JavaScript实现SQL.js,但似乎我需要在我想保存的任何时候手动将整个数据库写入磁盘。这意味着每次SQL写入(例如,UPDATE,INSERT,DELETE)都需要跟随手动将整个数据库写入磁盘,如果我想将更改保留在当前会话之后。正确?我错过了什么吗?

这是我使用SQL.js(或SQLite的任何其他JavaScript实现)的唯一选择吗?如果数据在数据时自动写入磁盘会更容易变化。

如果SQLite实现足够智能,只更新实际更改的数据文件部分,那就更好了。因此,如果您有一个20兆的数据库,并且您执行的更新会将一个标志位从0翻转为1,那么它可能只需更改一位,而不必将整个20兆位写入磁盘。

我知道IndexedDB是另一种选择,我正在单独调查它。这个问题是关于我的SQL.js / SQLite选项。我想确定我是否了解SQLite是否以及如何使其工作。

似乎确实存在Cordova-specific plugin that offers SQLite support,但在Chrome扩展程序和扩展程序中这不起作用(至少,不能没有自定义)的应用程序。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用Alasql JavaScript SQL库。它具有本地存储和IndexedDB适配器,您可以在其中存储数据。

当Alasql立即将每个更改写入localStorage时,当前本地存储适配器可以在AUTOCOMMIT模式下工作(请参阅Local Storage Adapter源代码)。

alasql('CREATE LOCALSTORAGE DATABASE MyBase; SET AUTOCOMMIT ON; \
        INSERT INTO MyBase.cite VALUES ("Paris","France")");

如果您需要更多特定要求,可以根据需要轻松重写此适配器。