0

对于用于搜索和显示结果(无写入操作)的 Flex 应用程序,我目前将数据存储在关系数据库中,但不是通过应用程序查询数据库,而是每晚写入数据,包括其关系,到 XML 文件。

然后,通过 Flex,我正在加载该 XML 文件,将其解析为自定义对象,并根据需要“查询”这些对象。

它工作得非常好——基本上是根据搜索条件过滤这些对象的 ArrayCollection。

例如,与查询数据库相比,全文搜索在这种情况下非常快。

但是有哪些潜在的缺点?这种方法的有效性如何?任何想法将不胜感激。

提前致谢。

4

1 回答 1

1

简短的回答是:......对不起,没有简短的回答。

长答案是这样的:架构决策总是涉及某种权衡。什么是适合您的应用程序的正确决定,主要取决于您的内容和系统的整体设计。

我唯一可以肯定的是:您现在所做的事情会阻止关注点的干净分离。

例如:如果您在服务器上进行搜索,您可能会在客户端不知道的情况下更改数据库中的字段名称等,因为您可以调整实际数据输出以匹配“旧”模型,即使查询完全不同。客户端将负责显示数据,服务器将负责持久化和检索它。如果您在更大的团队中开发,或者如果您的应用程序长时间运行、具有复杂的事务和/或经常更改行为(例如在企业场景中),这可能是您想要的。这些场景通常考虑到服务器的更大压力,因此需要更强大的硬件,因为硬件成本并不是大公司最紧迫的问题。

根据您的完整数据集的大小,它还会显着减少网络负载,因为您不需要将所有数据都传输到客户端,而只需将相关结果传输到客户端即可。因此,如果您的服务器的网络连接受到限制,或者您的用户的连接速度往往较慢,那么这可能是一个好主意。

另一方面:如果您在客户端应用程序中搜索和查询,按照您描述它的方式,您可以减轻数据库和 Web 服务器的负载,这并不总是一件坏事,尤其是在您的服务器容量有限且性能有限的情况下至关重要。

但除了增加整体网络流量外,这还意味着您更多地依赖客户端计算机:a)它必须足够快以处理搜索,并且 b)您总是必须(重新)部署更新的应用程序对用户来说,每次您的数据模型发生轻微变化时。这很可能是错误的主要来源,因此您必须实施某种版本检查以防止过时的客户端连接到服务器和/或禁用浏览器缓存。

所以最后,你必须权衡利弊,然后决定哪种解决方案最适合你的需求。您可能需要考虑使用像Lucene这样的专用搜索引擎作为第三种选择。

于 2011-01-01T22:33:47.767 回答