我正在开发一个asp.net Web App,它应该为用户提供数千张JPEG图像。我的专用服务器包含JPEG文件,并托管MongoDB以存储JPEG元数据。
Sample object in a collection named **JPEG_123** (this collection has 1 million such documents and each document has _id indexed)
{
"_id" : "20121210185015000", //YYYYMMDDhhmmsslll
"Url" : "http:...",
"CameraId" : 123
}
我使用Web方法查询MongoDB。我使用正则表达式(例如“^ 2012121018 * /)查询Utc字段的集合 JPEG_123 以获取一小时的文档。它返回大约5000条MongoCursor指向的记录,而MongoShell只显示3-4条记录毫秒秒检索此数据的时间。
问。如何通过MongoCursor以最快速的方式从MongoDB中迭代获取这些文档?最好使用LIMIT,BATCHSIZE和NEXT类似MongoCursor的属性。
我正在尝试这样做:
我的疑虑
当我从ASP.NET查询MongnoDB时,它是否真的意味着MongoDB将所有5000条记录加载到RAM但不会将所有5000条记录返回给ASP.NET?
发出上述查询后,立即返回MongoCursor指向的记录总数。当我遍历MongoCursor中的所有文档时,大约需要20-30秒。这是否意味着,MongoDB在应用程序中使用时返回数据?
答案 0 :(得分:0)
我发现使用大型设置大小的游标运行速度非常慢,除非收集的索引非常好。您应该注意到,在大多数情况下,Regex排除了索引的使用,您应尽量避免使用这些索引。
默认情况下,游标每批返回101个文档或1 MB数据。如果您可以通过查看收集统计信息来确定平均文档的大小,则可以利用它来设置最佳限制。您还可以在光标对象中进行设置,以帮助在某种程度上扩展这些限制。
我可能建议的一件事,因为写入与读取相比已经很慢,就是将这些UTC字符串作为日期字段传递,让Mongo为您解析这些。这样,您既可以索引字段,也可以在查询中使用正常的日期范围比较。