2011-01-22 14 views
2
public IQueryable<T> GetRecords<T>(System.Linq.Expressions.Expression<Func<T, bool>> expression, int from, int first) where T : class, new() 
    { 
     first = first == 0 ? 30 : first; 
     return _db.GetCollection<T>(collectionName).Linq().Where(expression).Skip(from).Take(first); 
    } 
    var x = GetRecords<Event>(p => true, 0, 12222); 
    string eventJson = new JavaScriptSerializer().Serialize(x); 

この関数はmongoDBからデータを取得します。mongoDBはSQLと同じようにクエリを実行します!

SqlDataReader dr = SqlHelper.ExecuteReader("Select Top(12222)* From NewsFeed"); 
    string eventJson = new JavaScriptSerializer().Serialize(dr); 

これはSQL Serverからです。

それぞれの実行時間を測定しようとしましたが、結果は次のとおりです。
Mongo:172ms
SQL:185ms。
私はmongoDBがSQLよりもはるかに高速でなければならないことを知っています。

+5

あなたは正確にそれが速くなければならないと思いますか? –

+0

なぜ私はmongoがSQLより速くなければならないと思うのですか? – Rawhi

+0

また、オーバーヘッドの多くはおそらくデータレイヤーにないことを認識しておく必要があります。おそらく、データの反復と非直列化によるものです。 MongoDB >> SQLがすべてのユースケースで常にそうであるとは限りません。 –

答えて

7

MongoDBは、そのような単純なクエリでは、SQLサーバーのパフォーマンスが必ずしも優れているわけではありません。補助データがある場合は、速度の利点があります。あなたのドメインがどのように見えるのか分かりませんが、一般的な例はブログです。 SQLデータベースでは、ポストテーブル、コメントテーブル、作成者テーブルなどがあります.1つのブログポスト表示に必要なすべてのデータを取得するクエリには、少数の結合または複数のクエリが含まれていますパフォーマンスは少しです)。 NoSQLデータベースでは、単一のテーブルPostsが存在する可能性があります。結合のない1つのクエリは、必要なすべてのデータを取り戻します。

Here's a nice blog post talking about the different approaches between a NoSQL type store and a relational store.

+0

いいですが、1000000人のユーザーがいて、リロードしました。何が起こるか:D !! – Rawhi

+5

私はあなたがここに私に何を求めているのかは確かではありません。あなたが最適化/キャッシングと本当に良いハードウェア状況に多大な努力を払っていない限り、同時に100万人のユーザーが同時にページをリロードすると、おそらくSQLまたはMongoDBで失敗するでしょう。 –

関連する問題