Jeg vil først besvare en del om hvordan jeg gjør det : Jeg bruker en MongoDB. Jeg lekte med ideer du nevnte, men raskt krysset ut i minnet løsninger (memcached, Redis) med samme grunn. Min endelige løsningen kom ned til enten en relasjons DB eller en NoSQL som MongoDB. For å være ærlig, på min prosjektets skala, jeg tenkte ikke på robust sammenligne resultatene mellom DB typer.
Med min bestemt funksjon "veikart", bestemte jeg meg for å gå med Mongo å nærme seg en mer "OOP" stil når du arbeider med brukeren "objekt" uten å eksplisitt definere en bruker klasse, takket være normalisert strukturen i Mongo. Jeg forstår det samme kunne gjøres for MySQL, også, bare at behandlingen jsoner data mer "objekt-like" for meg og flask, det vil si user = getUserFromMongo, som gir meg en dict i Python da kan jeg bare gjøre user['first_name']. Kodene belows vil forklare dette enkelhet:
(Somehow dette var følelsen som ... ikke å måtte skrive SQL-kommandoer for enkel database samhandling i Rails)
Min brukerobjekt data på MongoDB

Til slutt, som til hvordan jeg klarer brukerundersøkelser , vedtatt jeg Wit.ai begrep context. Jeg vet ikke hvordan de gjør det akkurat, men en contextfor meg er den type samtale formål som skjer. Jeg bruker det som en stabel, og så snart den gjeldende konteksten er gjort, pop den av kontekstdata til brukeren. For hver melding boten mottar, vil programmet få gjeldende kontekst og direkte flyten. Når en ukjent feil oppstår (unntak håndtering), mest sannsynlig fordi brukeren sier noe boten ikke forstår, fjerner jeg de contextdata, også.
En god del om MongoDB er at jeg kan forme den context, men jeg vil ha, og behandle det bare som et objekt. En enkel en er som {name: yelp-search, stage:ask-for-user-location}, og jeg forestille komplekse de kunne bygges på den strukturen, også. Selvfølgelig, en stabel gjennomføring av contextomhandler ikke komplisert samtale med komplekse fortid referanse.
Jeg satte mitt prosjekt på Github hvis du ønsker å ta en titt på den.