MongoDB select's/find 似乎对更大的数据量具有相同的性能
MongoDB select's/find seems to have the same performance for a larger amount of data
我正在测量 MongoDB 及其本机驱动程序的性能。
对于插入操作,我插入的越多,耗时越长。但是,使用 selecting,我有 500.000 个文档(在 1 个集合中),每个文档中还有 4 个其他嵌入的小文档。
我还对 1 个子文档使用条件操作执行了 select 查询。 select处理 100 个文档(总共 1000 个)的性能是 0,007 毫秒,而 select处理 50000 个文档(总共 500000 个)的性能是 0,008 毫秒。
我不太明白这怎么可能。真的那么快吗?我正在使用 JMH 测量性能。
您的测试设置仅测量打开游标所需的时间,而不是实际从游标读取任何数据的时间。
当您执行 contactCollection.find(bs);
时,数据库 return 是一个游标对象,但实际上还没有执行任何操作。在您从游标中检索数据之前不会发生实际查询。将行更改为 contactCollection.find(bs).toArray()
应该强制数据库 return 所有结果,允许您测量查询时间、通过网络传递结果所需的时间以及 Java驱动程序解析结果。
或者,您可以使用 contactCollection.find(bs).explain()
来测量操作仅在数据库级别花费的时间,并从数据库本身获取具有一些有用性能指标的 DBObject。
我正在测量 MongoDB 及其本机驱动程序的性能。 对于插入操作,我插入的越多,耗时越长。但是,使用 selecting,我有 500.000 个文档(在 1 个集合中),每个文档中还有 4 个其他嵌入的小文档。
我还对 1 个子文档使用条件操作执行了 select 查询。 select处理 100 个文档(总共 1000 个)的性能是 0,007 毫秒,而 select处理 50000 个文档(总共 500000 个)的性能是 0,008 毫秒。
我不太明白这怎么可能。真的那么快吗?我正在使用 JMH 测量性能。
您的测试设置仅测量打开游标所需的时间,而不是实际从游标读取任何数据的时间。
当您执行 contactCollection.find(bs);
时,数据库 return 是一个游标对象,但实际上还没有执行任何操作。在您从游标中检索数据之前不会发生实际查询。将行更改为 contactCollection.find(bs).toArray()
应该强制数据库 return 所有结果,允许您测量查询时间、通过网络传递结果所需的时间以及 Java驱动程序解析结果。
或者,您可以使用 contactCollection.find(bs).explain()
来测量操作仅在数据库级别花费的时间,并从数据库本身获取具有一些有用性能指标的 DBObject。