从数据库获取数据与从哈希映射获取数据

时间:2013-12-06 06:04:46

标签: java android sqlite hashmap

在我的 android * 项目 *中,我必须跟踪某些产品的产品详细信息。这些产品的所有数据都存储在 SQLite数据库中。我可以在 SQLite 中使用选择更新来跟踪产品对象。因此,我可以在更改时存储产品详细信息。 此外,我可以在开头将所有产品加载到哈希映射或此类数据结构中,并跟踪这些产品对象。 对我而言,重要的是哪一个更强高效高效。有人能帮我吗。谢谢!

2 个答案:

答案 0 :(得分:8)

这取决于产品的数量。 HashMap驻留在RAM中,数据库驻留在磁盘上。

这还取决于每秒的查询数和查询的性质。数据库开发人员付出了很多努力来支持索引和过滤;如果你需要,重用比重新发明要好。

无论您选择哪种方法,您都必须记住Android应用程序进程可能随时被杀死(例如,当另一个进程需要内存时),并且您的代码只保证接收 onPause()(而不是 onDestroy() onStop(),请参阅活动生命周期)。如有必要,稍后将重新启动应用程序,但保存在RAM中(而不是保存)的所有数据当然都将丢失。因此,在 onPause() onSaveInstanceState()what bundles are for)中,您必须保存应用程序状态。在您的情况下,这可能意味着必须保存HashMap和所有辅助数据结构。

OTOH,如果产品数量很少(并且预计仍然很小),数据库可能是一种过度杀伤力;如果您只需要选择10个项目中的一个,那么编写循环比完成所有数据库支持更快。

一个更重要的注意事项:活动是来自 MVC 视点的 Controller (以及 View >,您通常创建和XML并重用现有的框架类,尽管您可以编写自定义控件)。每次设备方向更改时以及在某些其他情况下,都会重新创建活动。但是您的数据属于 Model 部分。他们必须在方向改变中存活下来因此,它们不得归活动所有。

答案 1 :(得分:4)

回答

一个。毫无疑问,HashMap在内存操作方面会胜过sqlite,因此它运行得更快。但它不会为您提供一致性,Mobile是一个易变的环境,操作系统必然会在后台杀死应用程序,或者如果不满足其内存要求则在前台,在这种情况下,您可能会丢失所有重要更新,然后再将其提交给永久存储。

湾与Map相比,SQLITE很慢,但是可靠的是确保所有对数据的提交都得到妥善保存,即使应用程序崩溃数据库将保证恢复之前提交的数据,Map肯定缺乏此功能。

℃。当您将数据加载到MAP中以便在您向数据记录任何增量时启用更快的操作并与数据库执行同步时,考虑一个场景,这种情况非常合理,如果设计得当,可以很好地执行。

总而言之,你应该继续进行DB + MAp操作,这将使你的应用程序运行顺畅,如果涉及到大量的数据库操作,只需要确保保持数据+应用程序分离到eleborate不要让你的应用程序依赖于加载最初的数据。