GWT“数据库”(客户端)

Posted

技术标签:

【中文标题】GWT“数据库”(客户端)【英文标题】:GWT "database" (client-side) 【发布时间】:2011-03-30 14:23:12 【问题描述】:

我正在寻找类似 GWT 对象的数据库(在浏览器中)。它必须在没有 html5 或 Gears(或任何浏览器插件)的情况下工作。它不必具备数据库可以做的所有功能,但最重要的功能是

自动索引,在多个列上 某种 API 或语言来执行(有限的)查询

它可能有点类似于Taffy DB,但它必须具有自动索引,并且它应该提供 GWT API。我希望,如果它重用 GWT 库中的代码,它的下载量会比 Taffy 更小。

(也许我应该补充一点,我不需要永久存储。没关系,如果用户点击重新加载时必须重新加载/重新生成数据。)

【问题讨论】:

您能否详细说明您为什么需要这个?如果您只想节省一些到服务器的往返行程,GWT 2.1 中的 ReqeuestFactory 应该为您执行此操作(AFAIK) - 它处理缓存、更新等。 @Igor:我在客户端有一个数据模型。该模型不是很大,但我需要通过不同的(组合)键经常查询它。一种解决方案是根本不使用索引,并且总是遍历所有数据——这是非常低效的。另一种解决方案是创建大量 HashMap,并在模型更改时手动更新它们。但我真正想要的是一个数据结构或系统,它可以自动更新索引,并让我从不同方面查询模型。顺便说一句,我在网上找不到太多关于 RequestFactory 的信息。 我现在明白了(虽然我不知道如何解决这个问题:))。你做过基准测试吗? IE6 可能会像往常一样糟糕,但现代浏览器现在拥有高效的 JS 引擎。至于 RequestFactory(如果它仍然被称为) - 它在 GWT 的 Google IO 2010 会话之一中进行了描述,示例应该在 GWT 的 SVN(自行车棚)的 GWT 2.1 分支中。 @chris_I - 我的一个项目有类似的要求,我通过使用 Hashmap 作为我的索引机制来实现它。为我想要索引的每列制作 1 个哈希图。实现起来并不难,在所有浏览器上运行速度都足够快,并且不需要任何库。关于更新模型,我是动态创建的;不知道为什么你认为它会维护繁重。 鉴于 Taffy 可以满足您的需求,我建议使用 JSNI 为 Taffy 编写 GWT 包装器。 【参考方案1】:

XBSDB 似乎是客户端数据库加上indexing solution 的好库。

【讨论】:

这真是太棒了!我不敢相信,我没有找到它(而且在搜索 javascript 数据库时它只在 Google 的第 4 页上)。它大约是 32k gzipped JavaScript - 我想知道,如果它是基于 GWT 构建的(假设已经加载了许多像 HashMap 之类的类......),它会小多少……但我认为,这是一个很棒的项目!感谢您的链接。 :) 没问题,只是做了一个快速的谷歌搜索;)。我得到赏金了吗?..lolz,这有点贪心。 @Chris Lercher - 你在使用 XBSDB 吗?怎么样?【参考方案2】:

您可以查看itemscript,它有一个内存“数据库”,您可以使用类似 REST 的 URL 片段进行查询。我还没有尝试过,但它看起来很有希望。我必须同意 tdavies 的观点,如果你喜欢 Taffy,围绕它编写 JSNI 包装器是非常简单的任务。

前段时间,我在 GWT 中创建了简单的内存数据库类系统,利用现有的 Comparator 接口进行排序,创建了简单的 Filter 接口,以及用于存储任意数量的 Comparators 和 Filters 的简单查询。简单的通用 ModelManager 类,它将模型对象存储在一个集合类中并运行我的查询。即使不支持索引,它也能很好地工作。

您不会为您的问题找到任何现有的解决方案,我花费了大量时间寻找一个。除此之外,何不试试 HTML5?

【讨论】:

ItemScript 是个好主意——REST API 可能真的很有用。 |对我来说,本土的也是最有可能的解决方案。 | HTML5:应用程序至少必须在 IE7 上运行(我已经很高兴了,我可能会放弃 IE 6)...【参考方案3】:

您查看过 Dojo 的数据存储吗?

我不确定它是否适合您的特定需求,但它是一个纯 JavaScript 解决方案。与 Dojo 的大部分内容一样,文档可能有点难以整理,但 developerWorks 上有一篇关于使用 Dojo Grid 和基本 MVC 模式的文章,您可能会感兴趣。

http://www.ibm.com/developerworks/web/library/wa-aj-dojogrid/index.html

干杯。

【讨论】:

我找不到任何关于自动索引的信息,但它看起来像一个不错的库 - 感谢您提供链接!【参考方案4】:

你看过 SQLite 吗?这是一个方便的视频教程...

http://www.youtube.com/watch?v=DZSZIfhzc3A

【讨论】:

我现在明白了,我的问题在这一点上可能不清楚:我说“它必须在没有 HTML5 或 Gears 的情况下工作。” - 但我的意思是,它应该适用于所有支持 GWT 的浏览器(可能除了非常旧的浏览器),而无需用户安装任何东西(甚至不是 Flash)。我说的是纯 JavaScript 解决方案(如 Taffy)。【参考方案5】:

我建议您重新考虑您的设计,由于各种原因,浏览器并不是在好日子里响应速度最快的应用程序。除此之外,在浏览器会话中嵌入数据库的设计(无论多么轻量级)都对瘦客户端提出了明确的要求。瘦客户端可能有也可能没有资源来支持这些要求。

如果您对瘦客户端(企业环境?)有明确的控制权,最好在直接浏览器上下文之外利用一些桌面技术或小程序(java?)。

【讨论】:

无法控制客户端。任何人都可以免费使用它(只要他们启用了 JavaScript,但无论如何 GWT 应用程序都需要这样做)。在现代浏览器中性能不是问题,只要模型不是太大,并且只要您使用索引(正如其他人所做的那样)。事实上,当模型可以在本地查询时,它对用户来说要快得多。此外,它节省了大量带宽。该模型具有很强的相互关联性,并且可以通过多种方式进行查询,因此它确实符合用户的最大利益。将模型保持在本地是 IMO 开发现代 Web 应用程序的方式。 我假设您并不担心移动平台可能会受到资源限制,但听起来很有趣,所以未来请反馈解决方案的发展情况【参考方案6】:

我编写了一个小型库,用于在 GWT 中进行客户端存储。它基于本地存储,适用于所有 HTML5 浏览器(包括智能手机浏览器)。它允许您将数据存储在对象存储和数据库中。

您可以在这里查看,看看它是否满足您的需求:https://code.google.com/p/gwt-localstorage-db/

【讨论】:

以上是关于GWT“数据库”(客户端)的主要内容,如果未能解决你的问题,请参考以下文章

GWT 客户端图片上传和预览

将 mysql 查询结果推送到客户端 GWT

服务器数据库使用情况

连接两个 GWT 应用程序 - 客户端/服务器

gwt中会话超时时触发方法调用

使用 GWT RemoteServiceServlet 下载文件