为ajax autocomp实现web服务的最佳方法是什么

2024-09-19 23:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用jQuery的autocomplete实现一个类似“googlesuggest”的自动完成功能来进行标记搜索。在

我需要向jQuery提供一个web服务,根据用户输入的内容向jQuery提供一个建议列表。我看到了两种实现web服务的方法:

1)只需将所有标记存储在数据库中,并使用用户输入作为前缀搜索数据库。这很简单,但我担心的是延迟。在

2)使用进程内trie存储所有标记,并在其中搜索匹配结果。因为一切都在进行中,所以我希望这个延迟要低得多。但有几个困难: -在进程启动时初始化trie的好方法是什么?可能我会将标记数据存储在数据库中,并检索它们,并在第一次启动进程时将它们转换为trie。但我不知道怎么做。我使用的是Python/Django。 -当用户创建新标记时,我需要将新标记插入到trie中。但是假设我有5个Django进程,因此有5次尝试,我如何告诉其他4次尝试他们也需要插入一个新标记? -如何确保trie是线程安全的,因为我的Django进程是线程化的(我使用的是mod wsgi)。或者我不必因为Python的GIL而担心线程安全吗? -有什么方法可以在trie中存储标签的使用频率吗?我如何判断标签的字符串何时结束,频率何时开始?例如,如果我将apple213存储到trie中,它是频率213的“apple”还是频率为13的“apple2”??在

对于以上问题的任何帮助或对不同方法的任何建议都将不胜感激。在


Tags: django方法用户标记web数据库进程标签
2条回答

在你把一堆伪标记组成一堆,把它们放到数据库中,并测量典型查询的延迟之前,不要担心延迟。取决于你的数据库设置,你的延迟可能是好的,你可以避免浪费的担心。在

Do总是担心线程问题,尽管-GIL不会使争用条件消失(控制可能在任何伪代码指令边界的线程之间切换,以及当底层扩展或内置的C代码正在执行时)。您需要首先检查正在使用的DB-API模块的threadsafety属性(请参见PEP 249),然后适当地使用锁定生成一个执行DB交互的专用线程池(在排队。排队并返回另一种方法的结果,即Python中声音和简单线程的正常体系结构)。在

我会用第一种选择。”吻-(保持简单愚蠢)。在

对于少量的数据,应该不会有太多的延迟。我们用同样的方法搜索名字,结果很快就出现在几千行上。在

希望有帮助

乔希

相关问题 更多 >