【问题标题】:Can SQL.js (SQLite JavaScript implementation) write to disk immediately, automaticallly?SQL.js(SQLite JavaScript 实现)可以立即自动写入磁盘吗?
【发布时间】:2014-10-09 08:09:25
【问题描述】:

我正在为 Chrome 扩展程序(以及该扩展程序的打包应用变体)设计一个原型,小型、轻量级的 SQL 数据库(如 SQLite)将是理想的选择。但是,Chrome Apps cannot use Web SQL

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

这是我对 SQL.js(或 SQLite 的任何其他 JavaScript 实现)的唯一选择吗?变化。

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

我知道 IndexedDB 作为替代方案,我正在单独对其进行调查。这个问题是关于我的 SQL.js/SQLite 选项的。我想确定我是否理解 SQLite 是否以及如何工作。

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

【问题讨论】:

  • @Xan,我看到你删除了 Google Chromee 扩展标签,说“删除了不相关的标签”。这是关于在 Google Chrome 扩展程序或 Google Chrome 应用程序中使用 SQL.js 的问题。为什么你觉得标签无关紧要?
  • 对不起,我看错了你的问题。我会把它回滚。
  • IndexedDB 的一个大问题是它位于应用程序的沙箱中,因此任何其他应用程序都无法访问给定的数据库。因此,不可能有 IndexedDB 实用程序。您对 IndexedDB 所做的一切都必须由单个应用程序提供。 (这是除了没有 SQL 的事实之外。)您用 SQL.js 描述的问题通常不是 Chrome 应用程序的限制,所以我认为理论上可以有一个 SQL 数据库来更新其文件(s ) 更有效。

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


【解决方案1】:

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

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

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

如果您需要更具体的要求,很容易根据您的需要重写此适配器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2015-03-19
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-02-14
    相关资源
    最近更新 更多