从 SQL 填充的 Ajax 自动完成扩展器
Posted
技术标签:
【中文标题】从 SQL 填充的 Ajax 自动完成扩展器【英文标题】:Ajax autocomplete extender populated from SQL 【发布时间】:2008-09-25 21:31:28 【问题描述】:好的,首先声明我从来没有使用过这个控件,这也是我第一次尝试使用网络服务。
我的困境如下。我需要查询数据库以取回某个列并将其用于我的自动完成。显然,我不希望每次用户在文本框中键入另一个单词时都运行查询,所以我最好的猜测是运行一次查询,然后使用该数据集、数组、列表或其他任何内容来过滤自动完成扩展器。 .
我有点失去任何建议??
【问题讨论】:
任何有关网络服务的帮助也会有所帮助 【参考方案1】:为什么不在会话变量中跟踪用户执行的查询,然后用它来过滤任何进一步的结果?
我认为防止数据库过载的诀窍实际上是限制自动更新程序允许更新的频率,比如每 2 秒一次对我来说似乎是合理的。
我要做的是:将查询返回的当前列表存储为单词 A 服务器端并将其绑定到会话变量。这基本上应该是我认为的整个列表。然后,对于输入的每个新词,只要原词 A 存在,就可以过滤会话信息,并将过滤后的结果吐出,而无需再次查询。所以基本上,只有当单词 A 发生变化时才再次查询。
我使用 php 意义上的“会话”,您可能使用具有不同术语的不同语言,但概念应该相同。
【讨论】:
我非常喜欢序列化对象并将它们存储为会话变量。但是,只有当查询是特定于用户的时,会话才会是好的。如果它是应用程序范围的,那么您最终会为每个查询存储冗余数据。【参考方案2】:这个问题取决于您的数据存储的事务性程度。显然,如果您正在寻找美国各州(在应用程序的整个生命周期中不会实际改变的数据集合),那么我将缓存一个 System.Collection.Generic List 类型,或者如果您想要一个 DataTable。
您可以轻松地将您希望查询的数据缓存设置为依赖于 XML 文件或数据库,以便您的扩展程序始终查询从缓存中转换的数据对象,并且缓存对象仅在数据源更改时更新.
【讨论】:
【参考方案3】:RAM 很便宜,SQL 比 IIS 更难扩展,因此将所有内容缓存在内存中:
-
您的整个数据源(如果不是)
太大而无法合理加载
时间,
预先计算的数据,
自动完成网络服务响应。
根据您的自动完成所需的行为和性能,您可能需要预先计算数据并创建优化读取的冗余结构。使用诸如 SortedList 之类的结构(当您需要 'select top x ... where z like @query+'%')、Hashtable...
【讨论】:
【参考方案4】:虽然缓存所有内容当然是个好主意,但您关于使用哪种数据结构的问题在这里没有得到完全回答。 自动完成扩展器的最佳数据结构是 Trie。 您可以找到一篇不错的 .NET 文章和代码 here。
【讨论】:
以上是关于从 SQL 填充的 Ajax 自动完成扩展器的主要内容,如果未能解决你的问题,请参考以下文章
Ajax 自动完成(或自动建议)与 TAB 完成/自动填充类似于 shell 命令行完成?