2

应用程序的工作原理

目前正在开发一个应用程序,该应用程序用于探索 5 个地区的活动。每个活动都表示为具有大量属性的 JS 对象。可以通过各自选项卡中的不同过滤器查看活动,例如类别或地图。在每个主过滤器内,都有用于过滤日期、区域、可访问性等的选项。

挑战

设备上需要存储大量的 JSON,iOS 和 android都需要支持。在最好的情况下,数据需要与数据库同步,并且所有数据都需要在设备上可用。应用程序需要敏捷才能获得良好的体验,这意味着获取数据需要尽可能快。此外,过滤数据需要尽可能快。

到目前为止考虑的可行解决方案(还没有完全削减它)

MongloDBMongloDB Titanium Store 适配器,银弹?

这种方法起初似乎是灵丹妙药。尽管该项目看起来很有希望,但它是由一位英勇的黑客维护的,并且该项目需要一些文档。我检查了源代码,并通过 API 破解了我的方式,但无济于事,console.log 和 jasmine 测试这次不会削减它。更重要的是,它还没有完全完成,并且缺少与 MongoDB 相比的功能。一个伟大的项目,我希望它能够更受欢迎,并有足够的能力在未来帮助绝望的钛开发商。

JSONDB , 仅适用于 iOS

这个应用程序确实需要在两个平台上运行,iOS 和 android,所以没有理由尝试这个。此外,JSONDB 只能在单一上下文中工作,这也是一个严重的问题。

Ti Filesystem 和 JSON.stringify + JSON.parse,内存效率不高

保存一小部分已保存项目的可行解决方案,这也是应用程序中的一项功能。但是在其他帖子中,已经注意到 android 使用 JSON 方法的内存限制问题。虽然这可能不是我最不关心的问题,但总体内存效率将是一个大问题。我从来没有见过 Titanium 的文件读写性能基准,所以我不确定读写的影响有多大。过滤大对象也是一个大问题,underscore不会管理这种大数据。无论我选择哪种方法,迭代大对象都是一个大问题。

大屁股全局对象

几乎与文件系统相同的方法,只是将其保存在全局中。这有同样的问题,只是一种明显的不道德做法。

SQLite,糟糕

高度以文档为导向的 JSON 数据到 SQlite,听起来比 samsung galaxy fanboys 还要糟糕。对此有何反馈?

多个文件 + 需要维护的 SQLite + 延迟加载、独角兽和彩虹?

迫切需要一个解决方案,我可能会在写这篇文章的过程中遇到一些事情。可能有 10-16 个主要类别,每个类别有 1 到 4 个子类别。将子类别的所有活动保存在它自己的文件中,这是一个非常纤细的 JSON。浏览类别,每个子类别都呈现在它自己的 TableViewSection 中,每个子类别根据用户向下滚动的程度独立附加到表格中,有效地延迟加载内容。只有一个非常快速的文件读取。在这个视图中,添加更多子过滤器只会影响已经加载的项目,并且迭代这些项目是合理的。

更新数据也很有效,只更新有变化的文件。SQLite 数据库可以维护所有具有到期日期的活动的日期,它可以为即将到来的 7 天或一个月动态构建自己的 JSON 文件。这将使日历视图在大多数情况下都非常流畅。不过,选择未来的日期将是一场噩梦。

地图还是个问题……

如果您已阅读所有这些内容,谢谢。如果您有类似的经验,或者可能正在做某事,请随时回复!我必须停止写作,停止编码并开始睡觉。

4

3 回答 3

3

对不起,糟糕的 monglodb 文档。我为一些内部项目开发了它,并且真的很想与社区分享它,但是缺乏文档确实使它难以使用。但好消息是我现在有文档,哈哈,也精简并清理了源代码。希望它现在对你更好。http://monglodb.com

于 2012-10-12T03:54:55.900 回答
3

我是JSONDB的原作者,我想我会加入并为通过 Googlefu 找到这个问题的任何人提供答案。

JSONDB 现在是不推荐使用的软件 - 它已被另一个名为SculeJS的项目所取代。SculeJS 旨在提供一个用纯 JavaScript 编写的全功能 NoSQL 数据库,用于 Titanium、NodeJS 和 Web 应用程序。

由于 Ti 原生模块构建方式的限制,JSONDB 最初仅可用于 iOS 应用程序 - JSONDB 和 SculeJS 的当前版本与 iOS 和 Android 应用程序兼容。

在很多方面 MongloDB 和 SculeJS 是相似的,它们的不同之处在于 SculeJS 的设计方式。SculeJS 旨在提供强大的通用数据结构和丰富的查询层,而不是 MongoDB 的直接端口。没有侮辱 Monglo - 它看起来像很棒的软件,我只是想指出两个项目之间的意图差异。

附带说明 - 所有纯 JavaScript 模块都仅限于 Titanium 应用程序中的单个执行上下文。

对于您正在构建的内容,我认为 MongloDB、JSONDB、SculeJS 和 TaffyDB 都可以完成这项工作,但实现的细节会略有不同。

于 2013-01-22T02:32:25.783 回答
2

我遇到了同样的问题。我有大约 5mb 的数据,我想用应用程序存储,而不是让它下载。

我最终得到了一个高性能的 SQLite 数据库。它没有你想的那么糟糕。这可能不是一个很好的解决方案,但由于缺乏选择,恕我直言,这是一个非常好的解决方案。

只需创建几个表和函数来将它们解析到数据库,反之亦然,我向你保证,你会很高兴。

不要将 JSON 存储在数据库中,而是适当地存储值。

于 2012-09-21T09:58:51.950 回答