mBaaSのコミュニティにて、データストアで登録できるカラム数について質問がありました。そこで作ってみたのが以下のスクリプトになります。
let NCMB = require('ncmb'); let ncmb = new NCMB('APPLICATION_KEY', 'CLIENT_KEY'); let continue_func = (d, i) => { console.log(`${i} times`); // 新しいカラムをセット d.set(`fields_${i}`, i); let f = null; // objectIdがあるかどうかで保存メソッドを切り替え f = d.objectId ? d.update() : d.save(); // 保存処理がうまくいけば再度呼び出し f.then(function(res) { i++; continue_func(res, i); }) } let d = ncmb.DataStore('Temporary'); continue_func(new d, 0);
自己参照型の関数として、呼ばれる度に新しいカラムをセットして保存処理を繰り返します。
これを実行したところ、1,800を越えるカラムが保存できるのを確認しました。しかしカラム数が増えれば増えるほど、通信量が増えたり保存に時間がかかるようになってきました。数百を越えるカラムを扱うのはあまり現実的ではないかも知れません。
なおmBaaSのデータストアを担っているMongoDBでは1レコード(1ドキュメント)あたりの制限が16MBとなっています。今回はデータ量が小さいため1,800カラムまで行きましたが、データ量が大きければ保存できなくなるでしょう。とは言え、データ量があまり大きいデータも通信負荷が大きくなるので現実的とは言えません。
mBaaSではカラムを絞り込んでデータを取得することができませんので、1レコードあたりのデータサイズは適切なものにセットされている必要があるでしょう。
コミュニティでは日々様々な質問が寄せられています。ぜひご利用ください。