Was ist der beste Weg, um Web-Service für Ajax die automatische Vervollständigung zu implementieren

StackOverflow https://stackoverflow.com/questions/1025018

Frage

Ich bin die Umsetzung eines wie automatische Vervollständigung für Tag „Google Suggest“ gesucht jQuery Autocomplete verwenden.

Ich brauche einen Webdienst jQuery bieten sie eine Liste mit Vorschlägen auf, was der Benutzer eingegeben hat zu geben. Ich sehe zwei Möglichkeiten, die Web-Service-Implementierung:

1) speichern nur alle Tags in einer Datenbank und die DB suchen Benutzereingabe als Präfix. Das ist einfach, aber ich mache mir Sorgen um Latenz.

2) Verwenden Sie eine In-Prozess-Trie alle Tags zu speichern und für die passenden Ergebnisse. Wie alles im Prozess sein wird, erwarte ich, dass dies viel niedrige Latenz haben. Aber es gibt einige Schwierigkeiten: -Was ist ein guter Weg, um die Trie auf Prozess zu initialisieren starten? Vermutlich werde ich die Tag-Daten in einer DB speichern und abrufen, sie und machen sie zu einem Trie, wenn ich frist den Prozess starten. Aber ich bin nicht sicher, wie. Ich verwende Python / Django. -Wenn ein neuer Tag von einem Benutzer erstellt wird, muß ich den neuen Tag in die Trie einzufügen. Aber lassen Sie uns sagen, ich habe 5 Django Prozesse und damit 5 versucht, wie kann ich feststellen, die anderen vier Versuche, die sie benötigen auch eine neue Variable einfügen? -Wie um sicherzustellen, dass die Trie ist THREAD als meine Django Prozesse fädelt wird (I mod_wsgi bin mit). Oder muss ich nicht über threadsafty Sorge wegen Pythons GIL? -Alle Weise, die ich als auch die Tag-Nutzungshäufigkeit innerhalb des Trie speichern kann? Wie kann ich feststellen, wenn die Zeichenfolge Ende des Tags tut und wann ist die Frequenz Start - zB. wenn ich apple213 in die Trie speichern, ist es „Apfel“ mit der Frequenz 213 oder ist es „apple2“ mit der Frequenz 13 ??

Jede mögliche Hilfe zu den Themen oben oder Anregungen auf einem anderen Ansatz würde wirklich geschätzt werden.

War es hilfreich?

Lösung

Haben Sie keine Sorgen nicht über Latenz, bevor Sie Maß Dinge - eine Reihe von Pseudo-Tags bilden, bleiben sie in der DB und messen Latenzen für typische Abfragen. Abhängig von Ihrem DB-Setup, die Latenz nur gut sein kann und Sie verschwendete Sorgen verschont.

Do immer Sorgen über Threading, obwohl - die GIL nicht Rennbedingungen weggehen (Kontrolle könnte zwischen Threads zu jeder Pseudo-Code Befehlsgrenze wechseln, sowie bei der C-Code in einer darunter liegenden Erweiterung oder builtin ausführt). Sie müssen zuerst die threadsafety Attribut des DB-API-Modul überprüfen, die Sie verwenden (siehe PEP 249 ) und dann in geeigneter Weise verwenden oder laichen einen kleinen Pool von dedizierten Gewinden Verriegelungs die DB-Interaktionen (Empfangen von Anforderungen auf einem Queue.Queue und welche Ergebnisse auf einem anderen, die normale Architektur für Klang und leichtes Einfädeln in Python).

Andere Tipps

Ich würde die erste Option. 'KISS' -. (Keep It Simple Stupid)

Für kleine Datenmengen sollte es nicht viel Latenz sein. Wir betreiben die gleiche Art der Sache nach einem Namen suchen und die Ergebnisse erscheinen ziemlich schnell auf ein paar tausend Zeilen.

Ich hoffe, das hilft,

Josh

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top