2017-12-04 4 views
0

Mongoから多くのデータを取得し、途中で処理することなくクライアントJavascriptに直接フィードする必要があるため、デシリアライズ/再シリアル化する必要はありません。MongoDBからの結果を逆シリアル化なしで取得する

Mongoは実際にJSONにデータを格納するわけではありませんが、データのシリアライズ/デシリアライズに費やす時間を最小限に抑える方法があることを理解していますか?クエリによって数十万のオブジェクトがあると、それぞれが驚くほど膨大な時間を要します。

私はJSONを取得するために発見した最も基本的な方法はこれです:あなたは(というBsonDocumentより)RawBsonDocumentを使用することができ

return this.db.GetCollection<BsonDocument>("mycollection") 
      .Find(Builders<BsonDocument>.Filter.Eq("FileId", fileId)) 
      .Project(Builders<BsonDocument>.Projection.Exclude("_id")) 
      .ToList().ToJson(this.jsonWriterSettings); 
+0

「膨大な時間」を定量できますか? ToJson()コールだけのパフォーマンスを具体的に測定していますか? – helmy

+0

「莫大な量」は、数千から数十万エントリ(フィルタ後)の間に約3〜20秒です。 FileIdフィールドにインデックスを追加した後、時間はすでに2で割られています。私はクエリ自体と非直列化の違いを測定しようとはしませんでしたが、私は非直列化を伴わないがMongoから直接文字列を取得するソリューションを期待しています... – thomasb

答えて

0

が、私はそれは完全にあなたの問題を解決するために起こっているのか分かりません。効率を向上させるために独自のカスタム化/特殊化されたデシリアライゼーションに取り組むことができます。

一般に、デシリアライズはかなり高価です。可能であれば、ドキュメントの数を最小限に抑える(おそらくスキーマの変更によって)および/またはフィールドの数を最小限に抑えることが役立ちます。

関連する問題