Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';这是实现ajax自动完成web服务的最佳方法_Python_Ajax_Autocomplete_Trie - Fatal编程技术网

Python 什么';这是实现ajax自动完成web服务的最佳方法

Python 什么';这是实现ajax自动完成web服务的最佳方法,python,ajax,autocomplete,trie,Python,Ajax,Autocomplete,Trie,我正在使用jQuery的autocomplete为标签搜索实现一个类似“googlesuggest”的自动完成功能 我需要向jQuery提供一个web服务,根据用户键入的内容为它提供一个建议列表。我看到了两种实现web服务的方法: 1) 只需将所有标记存储在数据库中,并使用用户输入作为前缀搜索数据库。这很简单,但我担心延迟 2) 使用进程内trie存储所有标记并搜索匹配结果。由于一切都将进行中,我希望这将有更低的延迟。但有几个困难: -启动进程时初始化trie的好方法是什么?假设我将把标签数据存

我正在使用jQuery的autocomplete为标签搜索实现一个类似“googlesuggest”的自动完成功能

我需要向jQuery提供一个web服务,根据用户键入的内容为它提供一个建议列表。我看到了两种实现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”


如果您能在上述问题上提供任何帮助或提出任何不同方法的建议,我们将不胜感激。

我将使用第一种选择。”吻'-(保持简单愚蠢)

对于少量数据,应该没有太多延迟。我们对名称搜索运行同样的操作,结果很快就会出现在几千行上

希望有帮助


Josh

在度量之前,不要担心延迟——创建一堆伪标记,将它们粘贴到数据库中,然后度量典型查询的延迟。根据您的数据库设置,您的延迟可能很好,您可以省去浪费的烦恼


不过,一定要担心线程问题——GIL不会消除争用条件(控件可能会在任何伪代码指令边界的线程之间切换,以及在底层扩展或内置代码中的C代码执行时切换)。您需要首先检查正在使用的DB API模块的
threadsafety
属性(请参阅),然后适当地使用锁定或生成一个执行DB交互的专用线程池(在队列上接收请求。队列并在另一个队列上返回结果,这是Python中声音和轻松线程的正常体系结构).

您认为您将拥有多少个标记?您是在谈论一个使用SOAP之类的东西的web服务吗?如果是这样,我将避免为此使用web服务,因为它会增加额外的复杂性并导致更多延迟。对于自动完成,我将向服务器发送AJAX请求,并在可能的情况下查询数据库中的建议或从缓存的数据库结果中进行查询。所有标记都是用户创建的,因此很难说会有多少。这真的取决于我的网站会变得多受欢迎