【发布时间】:2013-06-27 23:15:55
【问题描述】:
长话短说:我正在重构我的一个旧 Android 项目。以前,它使用的是序列化,这非常慢,而且从我所读的内容来看,这对于 Android 应用程序来说通常是一个非常糟糕的想法。我正在寻找另一种方法来同时保存用户特定数据和应用程序的只读数据。
双方都会有大量数据,我不确定是否有一种“好”的方式来存储它。基本上,该应用程序是一个小型角色扮演游戏。有许多“地图”表示为瓷砖的 2D 数组。每个 Tile 将具有许多属性,一些简单的原语或枚举,其他附加对象,例如事件,也可能包含各种对象等。仅在 20x20 地图中有 400 个 Tile,就有大量数据要存储。除了存储这些数据,它还需要存储大量用户特定的数据,例如访问了哪些 Tiles,成功运行了哪些事件等。
我一直在研究保存这些数据的方法,但我似乎无法解决某些问题。我猜它归结为 XML 或 JSON 与 SQLite。 XML 或 JSON 在未来更改方面会更加灵活,这很好,因为我希望数据具有灵活性,即向现有对象添加新属性,在需要时添加新对象等。SQLite 不那么容易延展因为您必须更改架构,也许调整查询和索引等,但我过去并没有真正使用过 SQLite,所以也许有一些功能有助于简化该过程。但是,我还希望快速随机访问数据以避免将所有内容一次加载到内存中,如果可以的话。例如,当从一张地图移动到另一张地图时,我宁愿仅在需要时加载下一张地图,而不是将所有内容都保存在内存中,这是 SQLite 会发光的地方,因为我可以直接查询数据而不是遍历 JSON/XML 文件以查找可能分散的数据,即我们加载地图,但事件中包含的事件和对象可能不是该地图唯一的,并且可能很容易位于文件的其他位置或完全位于另一个文件中。然而,在 SQLite 中规范化数据意味着大量的表和相当多的对象解构/重建。
只有在用户手动保存游戏时才会写入用户数据,所以写入性能不是什么大问题。
我有时会过度分析并沉迷于此类事情。也许这两种情况都不一定是“错误的”,我担心的是无穷小的事情。也许还有其他我没有考虑过的情况。我使用过 Hibernate,并考虑过使用 ORMLite 之类的东西来处理大量的数据库细节问题,但这需要大量的改造,可能比我需要为其他选项做的更多。
【问题讨论】:
-
您看过 Active Android 吗? activeandroid.com
-
你也可以考虑CouchBaseLite-Android,它在内容上给你更大的灵活性,但不像SQLite那样容易查询。还可以选择使用 XML/JSON 文件的索引结构目录(而不是单个、大量文件),就像 git 效果很好。
-
其中一个选项是使用我们的 SolFS 虚拟文件系统 (eldos.com/solfs)。它提供灵活的存储、文件标签和类似 sql 的文件搜索。
标签: android xml json sqlite storage