GWT 应用程序的数据存储位置 - GAE 数据存储或 XML 文件

Posted

技术标签:

【中文标题】GWT 应用程序的数据存储位置 - GAE 数据存储或 XML 文件【英文标题】:Where to store the data for a GWT app - GAE data store or XML file 【发布时间】:2011-05-06 01:14:59 【问题描述】:

我有一个部署在 GAE 上的 GWT 应用程序。我的应用程序的一部分依赖于静态数据,该数据当前存储在一个 XML 文件中。应用程序将此数据读入 POJO 集合。使用 GWT-RPC 将数据发送到客户端。根据用户所做的选择,它将过滤器应用于集合以获取特定对象(过滤在客户端完成)。

数据最多可包含 3000 条记录,总 XML 文件大小约为 1MB。应用程序端不会对此数据进行更新(它是只读的),但在最初的几个月(随着应用程序的发展),我可能会经常添加新记录或更新/修复现有记录。该数据与应用程序中的任何其他数据没有关系。

我在获取性能方面的主要考虑因素之一。我尝试使用 Apache Digester 解析 XML,但注意到即使解析 600 条记录并将它们发送到客户端也有点慢。

鉴于这些要求,以下哪一项会更好,为什么 - 1. 将数据保存在 XML 文件中,或 2. 将数据存储在应用引擎数据存储中?

谢谢。

【问题讨论】:

所以你总是将整个文件发送给客户端? 【参考方案1】:

另一种方法是通过 GWT 直接加载 XML 文件(无需 GWT-RPC 和服务器解析):

    使用 RequestBUilder 从服务器获取数据。用法示例:http://www.gwtapps.com/doc/html/com.google.gwt.http.client.html

    然后使用 XMLParser 解析回复。示例:http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsXML.html#parsing

这是一个结合两者的例子:http://www.roseindia.net/tutorials/gwt/retrieving-xml-data.shtml

唯一的缺点是您必须通过 DOM 手动解析 XML,而 GWT-RPC 直接在其中生成对象。

更新:

根据我推荐的 cmets:

    使用 JAXB 解析 XML 文件以创建对象:http://jaxb.java.net/guide/_XmlRootElement_and_unmarshalling.html

    将这些保存到内存缓存:http://code.google.com/appengine/docs/java/memcache/overview.html

    在 RPC 请求时,检查内存缓存,如果数据不存在则转到 1。

【讨论】:

@Peter - 感谢您的回复。您可能认为这个问题是您之前回答的我的一个问题的后续问题。 RequestBuilder 的问题在于它暴露了整个 XML(我可以使用 Firebug 轻松查看文件)。我想保护 XML 不受用户的影响,并且只通过应用程序公开它。如果我从服务器发送 POJO 集合,它不会向用户公开整个 XML 文件。考虑到这个额外的限制,最好的选择是什么?再次感谢。 其实我没有把这两个问题联系起来。您仍然可以使用 GWT-RPC,但将 XML 作为一个大字符串发送。 在 AppEngine 上,您可以使用 JAXB 将 XML 映射到您的类,然后将这些类(数组或记录?)存储到内存缓存。 @Peter - 我尝试了您的第一个建议并使用 GWT-RPC 将 XML 文件作为字符串发送,但我仍然可以使用 Firebug 完整读取文件内容。唯一的区别是我在输出中看到了 \n 和 \t。在尝试您的第二个建议之前,我需要了解有关 JAXB 和 memcache 的更多信息。我会这样做并发布更新。谢谢。 @Peter - 我已经设法用 JAXB 替换了 Apache Digester,并且性能得到了提升。所以,就 XML 解析而言,我很擅长。现在来到 memcache,假设我每周都会向我的 XML 文件添加新记录。每次更新 XML 时,如何确保更新内存缓存中的对象?感谢您的所有帮助。【参考方案2】:

我看待事物的方式有两个瓶颈,尽管它们是相互关联的。一种是加载数据(从 XML 读取、解析)。另一个是将其发送给客户。 您可以考虑批量发送,例如分页,而不是全部发送。

通常我更喜欢将此类文件存储在 WEB-INF 下。

【讨论】:

你是对的。我正在考虑只发送过滤的对象列表而不是发送所有内容,但缺点可能是更多的客户端-服务器请求。但是,是的,我当然在考虑这个选项。谢谢。

以上是关于GWT 应用程序的数据存储位置 - GAE 数据存储或 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章

GWT与Google App Engine-上传文件

如何使用 GWT 将许多数据从数据存储区显示到网站

对于 GWT GAE Java 应用程序,这种 GWT/RPC 安全方法的安全性如何?

简单的 GAE Java JSON REST 服务器

GAE JDO 空查询结果

GAE - 无法部署使用 UserService 的 gwt 应用程序