我們在設計聊天機器人(Chatbot)時,直覺會用傳統的 「網路程式語言+資料庫」,例如PHP+MySQL,而PHP會用到資料庫的原因,除了要存一些長期用到的資料,還有短期的資料。所謂短期是指幾分鐘或幾秒,甚至以毫秒計算,例如一天的網站累計進站人次,一般常把累計值存在資料庫裡。
短期資料的問題是會造成經常性的資料庫存取,使得資料庫來不及反應,進而需要調整資料庫的參數、換更好的電腦,甚至需要Load Balance。
如果我們回到原點想一個機器人應該有的程式架構,就會發現為什麼不是程式自己記得前幾秒的資料,而是需要額外的資料倉儲機制。而原因也很簡單,因為像PHP之類的Web程式,用一次就關掉了,Process就消失了,它根本不記得幾秒鐘之前的request已經服務了什麼事,所以又額外需要一個資料庫,幫忙記東西。
我們希望程式能記得前一回的事情,就不能用傳統的架構。程式啟動後,會成為Process,這時我們應該要保持住這個Process,不能讓它被關掉,如果是一般Web程式寫法一定不行。
解決的方法就是,程式要能自己運行(例. 在command line呼叫起來且不會結束),程式會不斷的迴圈,監聽有沒有連線進來(例. 開Socket),有就開始處理、回傳訊息,然後再繼續監聽。利用程式的Global variable記憶短期的資料,就不需要存取資料庫。
自己運行也不需要一直initial程式,節省Initial時間,加快服務速度。如果需要資料庫存資料,也可以一直保持連線,節省communication成本。
要注意的是,記在Global variable短期的資料不能太多,否則會memory overflow,記憶體會不夠用。如果需要記的短期資料太多,可以存到資料庫或檔案。也可以增加電腦作Load Balance。
沒有留言:
張貼留言