我是Android应用程序开发的新手,也是stackoverflow的新成员。我目前正在尝试设计配方应用程序。我已经决定了应用程序的功能和它将涵盖的范围。就覆盖来自世界各地的所有食谱而言,范围对我来说非常广阔。我将在这个过程中处理大量数据。
我目前正试图在我的应用中找到一种处理数据的好方法。到目前为止,根据我在不同论坛中所读到的内容,我认为在数据库选择方面我有两个选择:1)SQLite 2)远程服务器上的数据库(MySql / Postgre)
以下是在两者之间作出决定时我脑子里想到的一些想法:
1)SQLite:这可能是一个不错的选择,但由于需要访问文件系统,因此速度很慢。我可以通过在AsyncTask中执行DB数据获取任务来消除缓慢。但随后可能会限制不同手机上的存储空间。另外,我相信与使用远程数据库相比,使用SQLite会更容易。
2)远程数据库:我在这里看到的问题是多个数据库请求同时出现的速度很慢。我可以在某种程度上使用线程来排队多个请求并逐个处理它们吗?有没有一种有效的方法来做到这一点。
另外,一旦我从上面的数据库中取出数据,我的数据格式就会有一个问题。有没有办法可以保留数据的格式?
如果有人能够就上述情况分享他们的知识渊博和专家意见,我将不胜感激。这也不是我的功课,我不是在寻找任何现成的代码解决方案。我只是在寻找能够帮助我清除思路并帮助我做出决定的提示/建议。我一直在寻找这个,但是找不到具体的信息。我希望我能从遇到类似情况的经验丰富的人那里得到一些好的建议。
感谢您阅读这篇长篇文章。
答案 0 :(得分:11)
如何将两种方法结合起来?
本地SQLite数据库,它具有最近最少使用的receipes,因此您不需要一直使用网络。网络比访问文件系统慢。
通过某些HTTP接口访问某些远程数据库,您可以在其中读取/写入整个数据库。如果您希望用户能够为其他用户添加收据,以确保您无论如何都需要外部数据库。
SQLite:这可能是一个不错的选择,但由于需要访问文件系统,因此速度很慢。
访问本地数据库非常快,5ms左右,如果它只是一个小型数据库上的简单只读查询。
但是,不同手机上的存储空间可能存在限制
取决于您对庞大数据库的定义。如果它只有2MB就足以存储大量纯文本的配件了。
此外,我相信与使用远程数据库相比,使用SQLite会更容易。
是的,Android有一个很好的内置SQLite API但没有远程数据库API。而且您不需要设置数据库服务器&接口
我在这里可以看到的问题是多个数据库请求同时出现的速度很慢。
一个不错的数据库服务器可以处理数千个请求。取决于您的服务器硬件和软件。 https://dba.stackexchange.com/应该有更多信息。所需的性能取决于您拥有/期望的用户数量。
我建议为数据库建立一个简单的REST接口,因为它非常轻量级,但不会将数据库直接暴露给Web。关于为数据库创建此类接口,有大量tutorials和books。甚至还有像nextDb这样的托管数据库服务,可以为您完成大部分工作。
有没有办法可以保留数据的格式?
您可以将HTML格式的数据存储在数据库中,并将其显示在WebView
或TextView
(通过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:只需少量数据即可正常工作我经历过它的响应时间很好。
远程数据库:我认为您可以使用小型服务器端应用将数据提交到您的客户端应用。它将解决/减少与线程相关的问题/复杂性。