我维护一个用Unity3D(iOS / Android)开发的益智游戏。
谜题在纯文本文件中定义,并分组到包中。下面是一个示例 JSON 文件(应用程序从远程服务器下载),其中包含包的定义以及其中的谜题(通常每个包有 10-50 个谜题):
{
"id": "pack.2000",
"title": "Pack 2000",
"puzzles": [
{
"id": "pack.2000.0001",
"number": 1,
"title": "Puzzle 1",
"contents": "... puzzle contents in plain txt .."
},
{
"id": "pack.2000.0002",
"number": 2,
"title": "Puzzle 2",
"contents": "... puzzle contents in plain txt .."
},
{
"id": "pack.2000.0003",
"number": 2,
"title": "Puzzle 3",
"contents": "... puzzle contents in plain txt .."
},
...
]
}
为了跟踪可用的拼图包,应用程序维护一个带有索引的本地 JSON 文件,并将其与远程索引进行比较:
{
"packs": [
{
"id": "pack.2000"
},
{
"id": "pack.1999"
},
{
"id": "pack.1998"
}
...
]
}
执行索引差异并下载所有包后,将解析 JSON 文件并将每个谜题保存到客户端应用程序中的单独文本文件中,例如:
pack.2000.0001.txt
pack.2000.0002.txt
pack.2000.0003.txt
,...这种方法的优点是,我只需读取指定 .txt 路径的文本文件即可轻松加载带有 id 的谜题,而无需解析和读取更复杂的结构(整个 JSON 文档、打开数据库等)
问题是我的应用程序目前已达到 2000 个包,每个
= 2000*15 = 30000
.txt 文件(每个约 1KB)中有约 15 个谜题,存储在应用程序的文件夹中,而且我担心这种方法将来无法扩展。
请注意,上面定义的数据仅适用于原始拼图数据,应用程序仍然创建单独的.txt文件来保存用户状态,例如用户在每个拼图中的进度,例如:
userid_progress_pack.2000.0001.txt
我收到了一些用户的反馈,抱怨他们运行了某种“文件清理”应用程序,发现该应用程序包含数千个“非常小”文本文件(因此,可能会被意外“清理”)。另外,我知道我可以利用一些功能,例如 Android 的 android:allowBackup,并且大量文件并不是最佳解决方案。 单个文件夹中包含如此多的文件是否存在问题,例如文件系统限制或移动设备上的问题?我是否应该考虑迁移到另一个存储解决方案(二进制 sqlite 数据库、nosqlite JSON 数据库)?