【问题标题】:Mirror MySQL Database Schema with HTML5 local storage for querying使用 HTML5 本地存储镜像 MySQL 数据库模式以进行查询
【发布时间】:2026-02-18 03:05:02
【问题描述】:

我对 HTML5 本地存储进行了一些研究,我似乎可以镜像 MySQL 数据库的结构,以用于需要大量数据供一个人使用的应用程序中。

我为什么要这样做?在业余时间,我是一名网页游戏开发人员:PHP、MySQL 以及所有修饰它的技术。到目前为止,我已经建立了支持许多玩家的数据库,但我的游戏旨在成为“具有多种功能的单人游戏”。对于只打算单人玩的游戏,除非它们保存到网络服务器,否则即使有数据库连接也是没有意义的!

我想实现一个永远不会触及我的数据库并且可以离线使用的单人游戏模式。然而,所有这一切背后的代码仍然是进行 SQL 查询。理想情况下,我想我可以设置一种本地存储的抽象层来响应查询。

简而言之,我想知道外面有什么。搜索本地存储和 HTML5 将为您提供关于这些技术的无穷无尽的帖子,但我不确定我的想法是否会奏效,甚至是否应该尝试。同样,可能已经有框架可以轻松处理这个问题。我还没有找到任何东西。

更新: Web SQL 数据库的弃用让我担心。它看起来对我的情况很有吸引力;因为它使用 SQL,所以修改我的查询应该不会那么困难。现在随着 IndexedDB 的发展,我不确定它是否会那么容易。

【问题讨论】:

  • 是的,这是可能的。我认为它被称为网络存储或其他东西。
  • @sachleen 您的链接不起作用,本地数据库也已正式弃用!

标签: php mysql html local-storage abstraction


【解决方案1】:

我已经多次阅读您的问题,并继续想知道“你为什么要这样做”;-) 这个问题给我带来了更多问题,所以...

“大量数据”是什么意思?归根结底,在这种情况下使用 sql 比喻合适吗?可以响应“类 sql”查询的抽象层本身很有趣,但听起来非常复杂。一个更简单的解决方案可以完成这项工作,比如 JSON 对象吗?在用户清理缓存、历史记录、重新安装浏览器等情况下如何持久化数据?即使是复杂的 javascript 文字或 JSON 对象也可以提供非常直接的方法来偶尔进行持久性/备份和恢复。 (有趣的是,刚刚发布的 PostgreSql 9.2 包含 JSON 作为数据类型。难道 SQL 和 NoSql 会倾向于某些共同点吗?)抱歉,如果这更像是评论而不是答案,那么您的问题就会出现在更高的平面。

编辑

谷歌搜索“javascript sql 解释器”会发现一些有趣的东西:

http://www.terminally-incoherent.com/blog/2009/05/19/sql-emulation-tool-in-javascript-part-2/#comments

https://github.com/forward/sql-parser#readme

Generating a JavaScript SQL parser for SQLite3 (with Lemon? ANTLR3?)

http://jsdb.sourceforge.net/demo.html

【讨论】:

  • 以“大量数据”为例:20 个表,每个表 15 列。我相信 SQL 是合适的,因为我的目标是首先为实际数据库构建,然后有一种简单的方法将该数据导出到它的本地版本。 (结构和所有)JSON 对象是一个非常好的问题!真的只是将所有数据(所有 20 个表,所有内容)塞入一个巨大的对象中吗?我不确定,你认为它真的可以这么简单吗?持久化数据只会使用“保存”按钮将玩家统计数据的副本保存到数据库中。感谢您为此付出的努力。
  • ... 那么有多少行?毕竟,查看 JSON 的一种方法是作为一个大 *ss 字符串。我无法想象它比整个类似 sql 的持久层更复杂。首先,我会尝试使用更简单的解决方案。然后看看如何以及什么会/会破坏它。即使您复制 sql 抽象,您也会有一堆 JS,并且仍然必须处理可以馈送到 DOM 的模型纯 JS 模型。
  • 天啊!我什至没有想到行,它的范围可以从 1 行到相当多的行。例如,玩家的库存。在有 100 个玩家物品栏的游戏中,有很多行来跟踪角色之间的关系,以及可以添加的任何其他内容,JSON 字符串可能会变得过于复杂......不是吗?不会吗?我完全赞成简单的路线。这仍然适用于数据库查询吗?我不想为了让它工作而更改任何代码。因此虚拟化/抽象层数据库位。
  • 我猜这个字符串作为一个字符串,作为一个 JSON 对象看起来会非常复杂——也许不是这样。因此,您正在查看需要与某些数据表示进行对话的 DSL。您很可能正在考虑推出一些相当独特的东西 :-) 恭喜! “这仍然适用于数据库查询吗?”是什么意思?
  • 如果它必须是sql,那么带有嵌入式sqlite db的Java applet怎么样?您可以轻松地通过 javascript 与 applet 对话,而另一端则可以使用真正的 sql? Applet 甚至可以将内容写入光盘(如果用户同意)。只是在这里大声思考。
最近更新 更多