1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Couchbaseにテストデータを作成するnode.jsスクリプト

Posted at

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!

キャプチャ.PNG

とはいえ

Couchbaseは一意キーを生成しないといけないのがめんどくさい。MongoDBだとJSONだけ突っ込めばいいので楽なんだよね。なんかいい方法はないだろうか。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?