xml数据存储的最佳方法

时间:2011-06-14 16:51:07

标签: android xml http sqlite optimization

我是学习android的php / mysql开发人员。我正在创建一个Android应用程序,它从我的php应用程序接收信息,以创建不同产品的列表视图,这将打开该产品的详细信息的Web视图。

目前我的php cms web应用程序为iphone应用程序输出xml列表....(另外,单独输出html)。我完全控制了php应用程序,所以如果有更好的方法输出Android应用程序的数据,请告诉我。

我创建了从Web读取xml并创建列表视图的代码。该列表可以每天刷新,因此每次应用程序启动时都不需要从在线xml中读取数据。

所以我想存储本地检索的数据,以提高我的应用响应能力。在任何给定时间最多可存储500个产品描述,最多可存储30个不同的xml列表。我正在开发一个包含大约30种产品的xml列表。

为了获得最佳性能,我应该将产品信息存储在sqlLite数据库中,还是应该将实际的xml文件存储在缓存/数据库或其他方法(如应用程序缓存)中。

我还想创建数据即服务的更新,这是个好主意吗?

2 个答案:

答案 0 :(得分:2)

存储数据的最有效方法是RAM。但是如果你想缓存它,那么最有效的方法就是数据库。

我建议您将数据存储在sqlite android数据库中。

您还可以考虑使用xml来实现更快的网络传输,并通过java.util.zip包类解压缩。您甚至可以考虑使用数据输出/输出流来传输数据的简单格式,比xml更简洁。 (我在我的应用程序中这样做,效果很好)

以下是有关数据输入/输出流方法的一些细节:

  • 想象一下您的数据的专有协议,只有你需要的。没有标签,没有属性,只是原始值。
  • 在客户端,使用URL.getContent()获取数据的输入流并将其转换为输入流。
  • 在客户端仍然,构建一个数据输入流,封装您的套接字输入流并按顺序读取数据。使用readInt,readDouble,readUTF等。
  • 在客户端,从php,您需要找到一种方法来保存您的数据格式,该格式与客户端期望的数据格式兼容。我不能说太多关于PHP,我只使用java编程。

这种技术的优点是你可以节省带宽,因为只有数据,而且由于xml没有冗长的装饰。您应该阅读有关java规范的内容,以了解如何在数据输出流中写入double,int,字符串。但是使用两种语言很难获得正确的数据。

如果php无法以合适的方式保存格式,请使用xml,这样会简单得多。首先尝试使用普通的xml,然后尝试使用zip或tarball或xml文件。

但这一切都与网络连接时的速度增益有关。

您需要做的第二部分是将列表的每一行存储在SQL表中。然后你可以使用CursorAdapter为列表视图快速检索它(它打破了迷人的MVC模型,但它非常快!)。

答案 1 :(得分:1)

对此感到抱歉,但写作评论的时间太长了。这不是对你问题的回答,因为在我看来,Stéphane回答得非常好。确实,最好的解决方案是将数据存储在sqlite数据库中。然后,您需要创建要用作数据,数据库和应用程序之间的连接的类。我不想因为这里所说的内容而受到赞扬(我也投票了)。

我关心的是另一个建议(使用低级原始数据流进行数据操作,列表的步骤就是答案)。我强烈建议您避免创建自己的专有协议。它是这样的:

  • 我需要交换数据。
  • 我不想处理将外部API集成到我的代码中的麻烦。
  • 我知道我可以写两个5分钟的例程来来回读写数据。
  • 因此,我只是创建了自己的专有格式来交换数据!

每当我需要处理未知,模糊和任意数据blob序列时,它就会让我哭泣。记住为什么我们使用未知格式总是好的:

  • 重新发明轮子会适得其反。似乎没有,但从中期开始。您可以轻松地将项目调整到其他介质(服务器端,其他平台)。
  • 使用现成的组件可以帮助您稍后扩展代码。
  • 每当您需要使您的解决方案适应其他技术和媒介时,您的工作速度会更快。否则,您最终可能会得到 ad hoc 代码解决方案,这些解决方案不易(可轻松)扩展且可互操作。
  • 使用现成的组件可以利用该特定技术的进步。当您使用Android API时,这一点尤为重要,因为它们经常在未来的路上针对性能进行优化(请参阅Android的Designing for Performance)。滚动自己的标准可能会导致性能下降。
  • 除非您记录您的协议,否则很容易忘记您自己创建的协议。只要给它足够的时间就会发生:你需要重新学习/记住。如果你记录,那么你只是在浪费大脑的计算时间。
  • 你认为你不需要扩展你的工作,但大多数时候你很可能会这样做。
  • 当你这样做时,你会希望你学会了如何轻松无缝地整合众所周知的格式。
  • 无论如何都需要学习曲线。根据我的经验,当你学习时,你实际上整合了众所周知的格式更快而不是想象你自己的做事方式。
  • 最后,将您的数据信任给能够创造凝聚力和智能标准的天才。他们知道的更好!

最后,如果目的是避免XML的典型冗长,无论出于何种原因,您都有多种选择。现在我可以想到CSV,但我不是数据存储方面的专家,所以如果你不熟悉它,我相信你可以找到很多可以随时使用API​​的好方法。

祝你好运!

相关问题