这是你正在寻找的好东西。:) 遗憾的是,据我所知,由于 ~2010 年的一些趋势,没有为此积极维护和支持的 API。但...
如果您想ANSI SQL
在内存中拥有完整的客户端并且您愿意填充数据库,您可以运行提到的SQLite
. 也许这对你来说是唯一令人满意的选择(如果你不能离开一些要求)。
如果您可以奢侈地复制数据,您可以查看它支持的AlaSQL
项目-s 和一些 ANSI SQL 功能,但它并不完整,并且包含已知的破坏性错误:join
请注意 AlaSQL 有错误。除了有一些错误之外,还有许多限制:
AlaSQL 有一个(长)关键字列表,如果用于列名,则必须对其进行转义。选择名为 key 的字段时,请改写 SELECT
key
FROM ...。value
,
read
, count
, by
, top
, path
, deleted
,work
和等词也是如此offset
。请查阅完整的关键字列表。
可以选择 1000000 条记录或加入两个表,每个表有 10000 条记录(您可以使用流式处理函数来处理更长的数据源 - 请参阅 test/test143.js),但请注意工作负载会成倍增加,因此从超过 8 个中选择每个只有 100 行的表会表现出糟糕的性能。这是我们做得更好的首要任务之一。
事务的有限功能(仅支持 localStorage) - 抱歉,事务是有限的,因为 AlaSQL 切换到更复杂的方法来处理主键/外键。交易将在未来的版本中再次完全开启。
超过 2 个表的 (FULL) OUTER JOIN 和 RIGHT JOIN 不会产生预期结果。INNER JOIN 和 LEFT JOIN 都可以。
当您想要来自不同表的具有相同名称的字段时,请使用别名(SELECT a.id AS a_id, b.id AS b_id FROM ?)。
目前 AlaSQL 不适用于 JSZip 3.0.0 - 请使用 2.x 版本。
加入子选择不起作用。请使用 with 结构(此处为示例)或将子 SELECT 获取到变量并将其作为参数传递(此处为示例)。
AlaSQL 使用 FileSaver.js 库从浏览器本地保存文件。请注意,它不会在 Safari 8.0 中保存文件。
可能还有很多其他人。请通过提交问题帮助我们修复它们。谢谢!
我们计划在一个项目中使用它,但在将项目引入我们的堆栈时,问题多于解决方案(对我们而言)。所以我们退出了它。所以我没有这个软件的制作经验......
在较早的时候,我希望这Google Gears
将支持所需的功能,但部分它被HTML5
客户端存储所取代,遗憾的是该项目已停止。
这对于您的用例来说是完美的,但遗憾的是它被贬低了。尽管大多数(?)浏览器在 2019 年仍然支持它。您可以在此处查看一些示例。如果您可以允许自己在已弃用的 API 上进行构建,这可能是解决方案,但我并不真正推荐它,因为不能保证它会起作用......HTML5 WebSQL Database
当我们的项目运行时遇到同样的问题时,我们最终不得不使用localStorage并手动编写每个“SELECT”,这当然不像 ANSI SQL...
如果我们回滚到最初的问题“[SQL] 直接查询 Arrow 数据”,我没有考虑将其用作 SQL 的适配器......这些操作仍然倾向于在服务器端,并且使用 wasm SQLite 我认为这些是选项。