CloudantのQueryをケチる


経緯

ケチる 無駄な処理をなくす、ですね。

Node-redでBotを書いていて、CloudantのLite枠内に収まるように動かすことを少し真面目に考えた時に、結構Queryがネックになってることに気がついた。
Documentを呼び出す時に最初何も考えていなかったのでQueryを使ってたわけですが、できるだけ使わない様にしたい。きっと早いはずだし。

やること

至極当たり前だけど、各Documentの_idをシステムが入れてくれる値を使わず、アプリ側で入れる。
具体的には、BotでSession管理する時にSessionデータを入れるDocumentの_idはユーザー情報に紐づいたデータ(例えばユーザーのUUIDとか)などを使う方が良いと思われる。
その方が、QueryじゃなくてLookup(つまり_idでGetしに行く)で済む。Indexもいらなくなるし。Liteで20Lookup/sec vs 5Query/secだからえらく違ってくる。

ただ、UUID等をまんま使うのは何となくよろしくない気がするので、不可逆に加工したものを使う方がより良いんではないかと思う。

その他

そもそもBotのSession管理で都度Writeするってのも如何なものかと思えてきたが、かといってどこに情報持たせるかってのもメンドイので後で考えることにする。

上限に引っかかるとCloudantでエラーになるってことは、アプリ側で待たされるんじゃなくて処理が止まると言う事を意味するとなると、スループットを調整して上限超えない様にするって事も考えないといけない。。