5月 312015
既存のbrainがあまりにもひどいので自作した。
https://www.npmjs.com/package/hubot-mongodb-brain
https://github.com/shokai/hubot-mongodb-brain
npm installして、external-scripts.jsonに書けば使える。何も設定しなくてもローカルのmongodbか、Herokuならmongolabかmongohqを読み込む。
他のbrainからの移行スクリプトもある。
爆発
以前爆発した時hubotのbrainが爆発した
hubot-brain-redisは全データを1つのblobとして固めて保存するから、brainのサイズが1.5MBを超えるとRedisToGoのmax memoryにひっかかって保存できなくなる。
そこでhubot-brain-redis-hashに乗り換えたのだが、やっぱり2MB超えたあたりで保存できなくなった。brain-redis-hashもよく見たら1つのblobにまとめて1keyに保存してた。READMEには1つのblobとしては保存しないって書いてあるけど、よくコード読んだら
// brainのデータ構造これのusersと_privateを別に保存してるだけなので、全然解決してない。
{
users: userとroomのリスト
_private: { // この中をrobot.brain.get/setで操作している
key1: value1,
key2: value2,
key3: value3
(略)
}
}
_privateの中をkey毎に保存するべきで、usersはそもそも用途が無いので保存する必要がない。
hubot-mongodb-brainでは_privateだけ保存するようにした。