以下文章已於 2021/09/16 轉移至 微笑之家
對於discord.js更新,或是有其他問題,都歡迎到以下網址查看喔
本站
本主題
本文章
昨天我們成功把機器人丟到雲端託管,現在機器人可以..
也就是說,原本機器人是前端(Discord)與後端(你的電腦)
現在是前端(Discord)與後端(Heroku)了,儼然是一個自成循環的軟體,自行運作
只要不是要更新以及沒有重大bug的話,便可以減少維護,只要當一個使用者就好
不過這樣的架構實際上是不夠完整的,Day14我們有帶到,關於面向使用者的軟體,通常會有
目前我們還缺乏一個資料庫,如果是之前在本機的情況,本文章只要教各位怎麼安裝MySQL就好;但是現在機器人已經被推上Heroku了,我們對對方的主機又沒有完全的控制權限,這又該怎麼辦呢?
我們來介紹Heroku的資料庫吧
因為這東西筆者的了解也不深,只是有必要提到
如果介紹有錯還望各位指正,以免誤導到人,感謝^^”
Heroku不只提供軟體&網站的上傳發佈,同時也支援這些程式在Heroku專案的主機上建立專屬的本地資料庫
其主要使用PostgreSQL,是一種關聯性資料庫
關聯性資料庫是甚麼?你當成MySQL就好,總之就是相對嚴謹(麻煩)的一種資料庫語言
免費的Heroku Postgre提供1萬則的資料容量,只要你創建的DB總資料量超過這個數字後便無法寫入,並且會跟你收費以提高額度來支援更多的資料寫入量
1萬這個數字說大不大說小不小,雖然說對於個人戶是夠用了,但如果長久維運,缺乏資料管理、造成資料堆積
又或是資料儲存的方式比較複雜,紀錄一次可能就會占用許多空間的話…實際上筆者覺得1萬行是完全不夠Bot使用的
而且因為Heroku的操作都必須透過指令,只是程式的操作可能還好,在處理資料庫這種複雜的系統時,不自己寫一個圖形介面真的很難管理
結合上述,我們整理出Heroku 原生資料庫的兩大問題
筆者Bot的製作訴求是自動、便利、好維護
如果使用Heroku資料庫的話還要擔心或許哪天Heroku會忽然想不開,去更新他們的資料庫語法…這與筆者的需求是完全背道而馳的
因此,我們需要一個替代方案,這個做法就是GoogleAppsScript !
GoogleAppsScript,簡稱GAS,不是容易爆炸的那個
GAS是Google提供的一種程式檔,他使用JavaScript語言,並且自動引用Google提供的函式庫
因為是Google自家產品,理所當然的,GAS可以輕鬆的調用Google旗下產品的資訊(例如Google文件,試算表等)
並且GAS是一種存於Google雲端的程式,只要他正式發佈便也會是24小時自動運作的程序,不會消耗到筆者一毛錢!(重點)
在本主題,我們將用試算表來儲存資料
藉由GAS來編寫API,供Bot調用&獲取資料
上圖是GAS提供給使用者做各種操作的具體上限,我們看第一行的基本使用者(gmail.com)即可
Properties read/write(屬性讀寫)
上限50000筆/天
URL Fetch calls(URL調用)
上限20000筆/天
先看URL Fetch calls,這句的意思是關於Bot一天內調用API的上限次數
如果Bot一天內對API的請求超過2萬次,Google就會中斷你的請求、並且給你一個大大的Error
Properties read/write代表的是你的程序對試算表讀寫的次數上限
如果我的API被呼叫一次,程序就會對試算表做50000次的讀取,那這個API只要調用一次,今天的扣打就用完了(x
這樣,我們得出一個結論
理論上,只要我的每個API內讀寫資料的次數平均介於2~3次
那我們一天的資料請求上限就會足足有2萬筆,直接是Heroku總上限的兩倍!
當然這種做法也有他的弊端,Heroku的上限是總儲存上限,而我們的GAS上限是總調用上限
雖然隔天次數就會給你加滿,但只要我調用的次數足夠頻繁,理論上每天都會面臨資料無法再調用的問題,對於如何減少機器人的資料調用會需要做些功夫
遠水救不了近火,試算表資料的調用途中經過GAS,再從住在Heroku的bot程序發送API跟GAS要資料
速度理所當然沒有像使用Heroku Postgre一樣即時
因為試算表非正統SQL,SQL是一種專門為讀/寫資料做優化的體系;當資料量大到一個程度時,效能一定沒有SQL好
但同時GAS的好處也很明顯
資料的儲存幾乎是無上限的
Google自帶的使用者介面讓管理十分容易,相對不用擔心資料備份等問題
新增刪除資料的方式都會比Heroku Postgre來的更加直觀
不用擔心未來因為GoogleAppsScript改版,資料會很難帶走,替代方案也多的是
以上,便是筆者針對資料庫方案取捨的介紹
明天我們著手開始編寫基本的試算表資料跟GAS