具有大量数据的Android应用程序的最佳数据库设计选项

时间:2012-08-19 15:56:34

标签: android database

我是Android应用程序开发的新手,也是stackoverflow的新成员。我目前正在尝试设计配方应用程序。我已经决定了应用程序的功能和它将涵盖的范围。就覆盖来自世界各地的所有食谱而言,范围对我来说非常广阔。我将在这个过程中处理大量数据。

我目前正试图在我的应用中找到一种处理数据的好方法。到目前为止,根据我在不同论坛中所读到的内容,我认为在数据库选择方面我有两个选择:1)SQLite 2)远程服务器上的数据库(MySql / Postgre)

以下是在两者之间作出决定时我脑子里想到的一些想法:

1)SQLite:这可能是一个不错的选择,但由于需要访问文件系统,因此速度很慢。我可以通过在AsyncTask中执行DB数据获取任务来消除缓慢。但随后可能会限制不同手机上的存储空间。另外,我相信与使用远程数据库相比,使用SQLite会更容易。

2)远程数据库:我在这里看到的问题是多个数据库请求同时出现的速度很慢。我可以在某种程度上使用线程来排队多个请求并逐个处理它们吗?有没有一种有效的方法来做到这一点。

另外,一旦我从上面的数据库中取出数据,我的数据格式就会有一个问题。有没有办法可以保留数据的格式?

如果有人能够就上述情况分享他们的知识渊博和专家意见,我将不胜感激。这也不是我的功课,我不是在寻找任何现成的代码解决方案。我只是在寻找能够帮助我清除思路并帮助我做出决定的提示/建议。我一直在寻找这个,但是找不到具体的信息。我希望我能从遇到类似情况的经验丰富的人那里得到一些好的建议。

感谢您阅读这篇长篇文章。

4 个答案:

答案 0 :(得分:11)

如何将两种方法结合起来?

  • 本地SQLite数据库,它具有最近最少使用的receipes,因此您不需要一直使用网络。网络比访问文件系统慢。

  • 通过某些HTTP接口访问某些远程数据库,您可以在其中读取/写入整个数据库。如果您希望用户能够为其他用户添加收据,以确保您无论如何都需要外部数据库。

  

SQLite:这可能是一个不错的选择,但由于需要访问文件系统,因此速度很慢。

访问本地数据库非常快,5ms左右,如果它只是一个小型数据库上的简单只读查询。

  

但是,不同手机上的存储空间可能存在限制

取决于您对庞大数据库的定义。如果它只有2MB就足以存储大量纯文本的配件了。

  

此外,我相信与使用远程数据库相比,使用SQLite会更容易。

是的,Android有一个很好的内置SQLite API但没有远程数据库API。而且您不需要设置数据库服务器&接口

  

我在这里可以看到的问题是多个数据库请求同时出现的速度很慢。

一个不错的数据库服务器可以处理数千个请求。取决于您的服务器硬件和软件。 https://dba.stackexchange.com/应该有更多信息。所需的性能取决于您拥有/期望的用户数量。

我建议为数据库建立一个简单的REST接口,因为它非常轻量级,但不会将数据库直接暴露给Web。关于为数据库创建此类接口,有大量tutorialsbooks。甚至还有像nextDb这样的托管数据库服务,可以为您完成大部分工作。

  

有没有办法可以保留数据的格式?

您可以将HTML格式的数据存储在数据库中,并将其显示在WebViewTextView(通过Html#fromHtml())中 - 两者都可以显示格式化文本。

数据库不关心您存储的文本类型,通过互联网传输您可能需要对文本进行编码,因此它不会干扰传输格式(XML,JSON,...)。

答案 1 :(得分:2)

一种简单的方法是将Parse集成到您的应用中。它们有一个很好的框架,可以轻松集成到iOS和Android中。他们的计划是免费增值,因此您可以免费使用高达100万的API请求,然后在每次请求后使用7美分。

您将拥有1gb来存储所有数据集/图像等。

我没有使用解析来解决所有问题,但我强烈推荐它用于大数据方案,因为它们可以为您完成所有扩展。查看API,我认为值得您花时间。

我刚刚开始研究我自己的一些项目,并且我再次使用Parse。我不得不说它在过去的6-8个月里有了很大的改善。特别是Twitter和Facebook的整合。

答案 2 :(得分:1)

这里的关键问题是数据的大小 - 任何重要的食谱数据库都太大而无法存储在手机上,因此您似乎无法使用远程数据库解决方案。

与尝试从android访问远程数据库相反,我建议您在Web应用程序之间使用,该应用程序将处理来自应用程序的请求并返回您需要的JSON对象。

答案 3 :(得分:1)

这完全取决于您的软件要求。如果您需要处理少量数据,那么您可以选择SQLite,但是对于大量数据,可以更好地使用远程数据库。

SQLite:只需少量数据即可正常工作我经历过它的响应时间很好。

远程数据库:我认为您可以使用小型服务器端应用将数据提交到您的客户端应用。它将解决/减少与线程相关的问题/复杂性。