【发布时间】:2010-11-04 17:33:20
【问题描述】:
我正在使用 jQuery 的自动完成功能实现类似自动完成功能的“Google Suggest”标签搜索。
我需要为 jQuery 提供一个 Web 服务,根据用户输入的内容给它一个建议列表。我看到了两种实现 Web 服务的方法:
1) 只需将所有标签存储在数据库中,然后使用用户输入作为前缀搜索数据库。这很简单,但我担心延迟。
2) 使用进程内尝试存储所有标签并搜索匹配结果。由于一切都在进行中,我希望这会有更低的延迟。但是有几个困难: - 在进程启动时初始化 trie 的好方法是什么?假设我将标签数据存储在数据库中并在我第一次启动该过程时检索它们并将它们变成一个 trie。但我不确定如何。我正在使用 Python/Django。 -当用户创建新标签时,我需要将新标签插入到 trie 中。但是假设我有 5 个 Django 进程,因此有 5 次尝试,我如何告诉其他 4 次尝试他们也需要插入一个新标签? -如何确保 trie 是线程安全的,因为我的 Django 进程将被线程化(我正在使用 mod_wsgi)。或者我不必因为 Python 的 GIL 而担心线程安全? - 有什么方法可以将标签的使用频率存储在 trie 中?我如何判断标签的字符串何时结束以及频率何时开始 - 例如。如果我将 apple213 存储到 trie 中,它是频率为 213 的“apple”还是频率为 13 的“apple2”??
对于上述问题的任何帮助或对不同方法的任何建议将不胜感激。
【问题讨论】:
-
您认为您将拥有多少个标签?
-
您是在谈论一个使用 SOAP 之类的 Web 服务吗?如果是这样,我会避免为此使用 Web 服务,因为它会增加额外的复杂性并导致更多延迟。对于自动完成,我会向服务器发送 AJAX 请求,并在可能的情况下查询数据库以获取建议或从缓存的数据库结果中查询。
-
所有标签都是用户创建的,所以很难说会有多少。这真的取决于我的网站会变得多受欢迎
标签: python ajax autocomplete trie