返信ありがとうございます。
expressを介さずコマンドラインで検証してもやはり1秒以上かかってしまいます。
mongoシェルで同様のクエリを実行するとすぐにレスポンスがあるので、mongoose や node-mongodb-native
を使った場合だけ遅くなるようです。
インデックスは正しく設定しています。(といっても100件程度ですが)
検証に使ったコードはこちらです↓
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var db = mongoose.createConnection('mongodb://dbserver:27017/dbname');
var StoreSchema = new Schema({
id: { type: Number, default: 0, required: true },
name: {type: String, required: true, trim: true, match: /^.{1,50}$/},
// (省略)
deleted: {type: Boolean, default: false},
created: {type: Date, required: true, default: Date.now},
updated: {type: Date}
});
mongoose.model('Store', StoreSchema);
var Store = db.model('Store');
var conditions = {};
// (省略)
Store.find(conditions).sort('created').execFind(function(err, stores) {
if (err) {
console.log(err);
process.exit();
}
console.log('store count: ' + stores.length);
process.exit();
});
2013年7月30日火曜日 13時00分42秒 UTC+9 manamanmana:
>
>
> 例えば、Expressを介さないコマンドラインベースで同様のクエリをmongooseやmongo-db-nativeでやった場合と比べて違いはありますかね。勿論同じインスタンス上で実行しなければなりませんが。あと同じインスタンスから通常のmongoシェルから実行した場合の比較とかもあるとわかりやすいかもしれませn。
>
>
>
> 2013年7月30日火曜日 Yusuke Narita [email protected] <javascript:>:
>
>> はじめて投稿させていただきます、成田と申します。
>>
>> express3 + mongodb という環境でウェブアプリを作っているのですが、
>> mongodb からデータを取得する際に大きなデータでもないのに1〜2秒かか
>> ってしまいます。
>>
>> mongodb への接続は mongoose を使っていて、DBにはサンプルデータが
>> 100件程度入っている程度です。
>>
>> PHP で同じ DB に接続した場合はストレスなくすぐにレスポンスが返って
>> くるので、mongod.conf の設定等 mongodb 側の問題ではないように思う
>> のですが、どういう原因が考えられるでしょうか。
>>
>> 試しに node-mongodb-native を使ってみましたが、多少レスポンスが
>> よくなりましたがあまり改善されません。(多少早くなりましたが)
>>
>> サーバは Amazon EC2 の small インスタンス(1CPU、1.7GBメモリ)で、
>> mongoose は最新バージョン(3.6.15)です。
>>
>> よろしくお願いいたします。
>>
>> --
>>
>> ---
>> このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
>> このグループから退会し、メールの受信を停止するには、[email protected]にメールを送信します。
>> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>>
>>
>>
>
--
---
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、[email protected] にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。