Ich werde zunächst den Teil über beantworten , wie ich es mache : Ich bin mit einem MongoDB. Ich spielte mit den Ideen , die Sie erwähnen, aber überquerte schnell Lösungen im Speicher aus (Memcached, Redis) mit dem gleichen Grunde. Meine letzte Lösung kam entweder ein relationales DB oder eine NoSQL wie MongoDB. Um ehrlich zu sein, in großem Umfang meines Projektes, ich hätte nicht gedacht , um robust Vergleich der Leistung zwischen DB - Typen.
Mit meinem besonderen Merkmale „Roadmap“ , entschied ich mich , mit Mongo zu gehen , um einen weiteren „OOP“ Stil zu nähern , wenn sie mit dem Benutzer „Objekt“ zu tun , ohne dass explizit eine Benutzerklasse, dank der normalisierten Struktur von Mongo definieren. Ich verstehe das gleiche könnte für MySQL getan werden, auch, nur dass die Verarbeitung jsonDaten mehr „Objekt-like“ ist für mich und flask, also user = getUserFromMongo, was mich ein dict in Python gibt , dann kann ich nur tun user['first_name']. Die Codes belows wird diese Einfachheit erklären:
(Irgendwie war dieses Gefühl, wie ... nicht SQL-Befehle für die einfache Datenbank-Interaktion in Rails schreiben)
Meine Benutzerobjektdaten auf MongoDB

Schließlich wird , wie zu , wie ich eine Benutzereingabe verwalten nahm ich Wit.ai Begriff context. Ich weiß nicht , wie sie es tun genau, aber ein contextfür mich ist die Art der Konversation Zweck, was geschieht. Ich benutze es wie ein Stapel, und sobald der aktuelle Kontext erfolgt, pop es die Kontextdaten des Benutzers ab. Für jede Nachricht erhält der Bot, wird das Programm den aktuellen Kontext erhalten und den Fluss leiten. Jedes Mal , wenn ein unbekannter Fehler (Behandlung von Ausnahmen) auftritt, wahrscheinlich , weil der Benutzer etwas zu sagen ist der Bot versteht nicht, lösche ich die contextDaten auch.
Das gute Teil über MongoDB ist , dass ich die Form kann contextaber ich will , und behandeln sie nur als Objekt. Ein einfacher ist wie {name: yelp-search, stage:ask-for-user-location}, und ich denke , komplex auf dieser Struktur errichtet werden könnte, auch. Natürlich ist eine Stack - Implementierung die contextnicht mit komplexem Gespräch mit komplexer Vergangenheit Bezug befassen.
Ich legte mein Projekt auf Github , wenn Sie einen Blick auf sie zu nehmen.