Android 数据库解决方案






4.38/5 (11投票s)
本文旨在帮助即将设计 Android 应用程序并需要就数据库解决方案做出选择的人。
引言
您即将开发一款 Android 应用程序,或者您正在估算一款潜在应用程序的成本,或者出于任何其他原因,需要为 Android 应用程序选择一个数据库解决方案。
遵循清晰的方法,选择数据库不应是您为应用程序架构决定的第一件事。数据库解决方案应在您列出了应用程序将具有的功能列表后进行选择。此外,您应该对应用程序将受支持的持续时间有一个大概的了解。考虑到所有这些因素,在接下来的几分钟里,我将向您介绍一个流程,帮助您为您的应用程序选择数据库解决方案。将要介绍的流程是基于我和我的朋友们在开发 Android 应用程序方面的过往经验创建的。阅读时,请确保您进行批判性思考,如果您对此有任何意见,请在下方留言。
您真的需要数据库吗?
选择数据库解决方案是一个非常重要的决定,尽晚做出这个决定会给您带来灵活性,您也可能会在了解更多应用程序需求的信息后做出这个决定。另外,请确保您的应用程序确实需要一个数据库解决方案,也许您的应用程序只需要少量数据,这些数据可以保存在共享偏好设置中,或者它只使用了少量对象列表,可以存储在HashMap
中并进行序列化。我很快会发表一篇关于在 Android 应用程序中是否需要数据库的博文,但现在,让我们假设您已经决定您的应用程序需要数据库,现在您需要决定选择哪个解决方案。
流行的数据库解决方案
在我们深入探讨数据库解决方案的选择流程之前,我们先来看一下在发布本文时存在的一些非常流行的数据库解决方案。
No SQL 解决方案
ORM(对象关系映射)
有很多网站/博客可以帮助您使用上述数据库解决方案,或者描述它们的优缺点并相互比较。所以我不会这样做。
在接下来的几分钟里,我将向您介绍一个可以帮助您选择数据库解决方案的流程。在寻找应用程序的最佳数据库解决方案时,没有万能的银弹。然而,基于我和我的同事们的经验,我提出了这个决策图。
如果您正在开发一个需要加密数据的应用程序(如健康应用程序),那么流程图会更短,因为支持加密的解决方案更少。
图表说明
如果上面的图表让您感到困惑,请耐心等待,跟随我,我将尝试解释这些图表所代表的流程背后的原因。
您首先需要考虑的是应用程序的开发和支持时间。如果您要构建一个开发和支持时间少于 6 个月的小型应用程序,那么您需要一个非常简单、灵活且快速的数据库解决方案。此外,您需要关注模型对象之间的关系。如果对象之间没有太多关系,并且您可以将它们保存在列表集合中或用键映射,那么您可以使用SnappyDb
。SnappyDb
是一个非常快速且易于使用的数据库引擎,非常适合这种情况。但是,如果您的应用程序需要一些高级数据库功能(如数据库模型更新时通知或自动同步到 Web 服务),您可以使用Realm 或 Couchbase。
Realm 目前是最先进、支持最好且功能最丰富的NoSql 数据库引擎。您可以通过Realm 非常轻松地实现很多功能,所以我鼓励您尝试一下。
但是,如果对象之间存在大量关系,并且您会经常发现自己需要以类似 SQL 的方式查询对象,那么您需要考虑您想要非常简单且易于使用的东西,并且不太关心架构,如果是这样,那么您可以使用SugarORM。
如果不是,如果架构对您很重要,那么您应该问问自己,您是否喜欢尝试一些新的数据库解决方案,还是想要一些非常稳定的解决方案,如果尝试是您的选择,我鼓励您使用DbFlow 或 Requery,但如果不是这种情况,您应该使用greenDao。
如今,大多数应用程序的开发加上支持时间都超过 6 个月,因此建议将一个易于维护的数据库解决方案,一个能够帮助您创建更解耦的架构并确保可测试性的解决方案。
确定应用程序的生命周期将超过6 个月后,您应该再次问问自己,您的应用程序对象之间是否存在大量关系。如果是,那么您可以使用greenDao,否则您的选择可以是Realm。
GreenDao 目前是最快的SQLite 数据库。此外,greenDao 的工作方式可以帮助您实现一个高度可扩展、解耦且易于维护的架构。
加密
如果您的应用程序需要加密保存数据,那么您的选择是有限的。您应该问的唯一问题是对象之间是否存在大量关系。如果是,那么您的选择是greenDao 或 DbFlow。然而,如果不是这种情况,并且您的对象可以在关系很少的集合中进行操作,那么您的选择是Realm。
结论
创建良好的架构非常重要,它并非易事,需要大量的关注和分析,尽早行动也很重要。在架构您的应用程序的某个阶段,您会考虑持久化存储数据。这里的想法是将数据存储模块想象成一个抽象实体,以后可以实现它。但是,当您需要一个具体的数据库解决方案时,您可以使用前面描述的流程来帮助您选择最适合您应用程序的数据库解决方案。并且始终记住,没有万能的银弹,并非所有现有的数据库解决方案都能满足您的需求。
感谢您的关注,请在下方评论区留下您的看法。