Couchbaseにテストデータを作成するnode.jsスクリプト
先日インストールしたCouchbaseに、テストデータを登録してみます。
大量データの投入には、標準のCLIツールであるcbdocloaderを使えば出来そうな気はしたのですが、勝手知ったるなんとやらで、node.jsで作成してみました。
スクリプトはGithubにも公開しています。
fujisan3/node.js-scripts
add-couchbase-data1.js
- 作成する件数は、
i < 1000
の部分を変更して下さい - age の値は乱数で生成します(適当に編集して下さい)
利用モジュール
- couchbase couchbase/couchnode Couchbase標準ライブラリ
- crypto 登録用の一意キーを生成するため
- async 勉強を兼ねて非同期制御
インストール
(node.js はインストールしておくこと)
1.適当なディレクトリを作成
2.package.jsonファイルを作成
package.json
{
"devDependencies": {
"couchbase": "*",
"crypto": "*",
"async": "*"
}
}
3.npm installで依存モジュールをインストール
4.同ディレクトリに、add-couchbase-data1.jsファイルを配置する
実行
# node add-couchbase-data1
スクリプト
var couchbase = require('couchbase');
var crypto = require('crypto');
var async = require('async');
function randomInt (low, high) {
return Math.floor(Math.random() * (high - low + 1) + low);
}
function md5String (src) {
var md5hash = crypto.createHash('md5');
md5hash.update(src, 'UTF8');
return md5hash.digest('hex');
};
/*
Data Format
---------------
key = MD5 Hash from DocumentData
doc =
{
"user" : "user-"[1=>i]
"age" : random[10-90]
}
---------------
*/
var destinationString = 'localhost:8091';
var cluster = new couchbase.Cluster(destinationString);
var bucket = cluster.openBucket('default', function (err) {
if (err) {
console.log('Connection Error:', err);
throw err;
} else {
var counter = [];
for (var i = 0; i < 1000; i++) {
counter[i] = i;
}
async.eachSeries(counter, function(i, next) {
doc = "{\n";
doc = doc + "\"user\" : \"user-" + (i+1) + "\" , \n";
doc = doc + "\"age\" : \"" + randomInt(10, 90) + "\"\n";
doc = doc + "}\n";
key = md5String(doc);
console.log("key=" + key);
console.log("doc=" + doc);
bucket.upsert(key, doc, function(err, result) {
if (err) {
console.log('Insert Error!' + (i+1));
throw err;
} else {
}
});
console.log('Inserted : ' + (i+1));
next();
}, function(err) {
console.log('Finished!');
bucket.disconnect();
});
}
});
実行例
登録出来ました。こんな感じ。
key=3385b5a19bc14f744aa00d34d3785ce0
doc={
"user" : "user-1" ,
"age" : "16"
}
Inserted : 1
key=41318a900e67b19efc7aec70831c329e
doc={
"user" : "user-2" ,
"age" : "38"
}
Inserted : 2
key=e49f5942dc10f9c8e95d538fd4cba305
doc={
"user" : "user-3" ,
"age" : "55"
}
Inserted : 3
Finished!
とはいえ
Couchbaseは一意キーを生成しないといけないのがめんどくさい。MongoDBだとJSONだけ突っ込めばいいので楽なんだよね。なんかいい方法はないだろうか。