使用5000万文档对MySQL到MongoDB数据库进行建模时出现的性能问题
我正在将一个使用5000万文档对MySQL到MongoDB数据库进行建模时出现的性能问题,mysql,mongodb,mongodb-query,Mysql,Mongodb,Mongodb Query,我正在将一个MySQL表迁移到一个MongoDB数据库,该表还有5000万行。 基本上,我面临的问题是:这些数据将显示在HTML表中,并且每列都可以搜索和排序(每个分页限制100个文档)。我在Mongo上创建了一些测试数据库,当只对索引字段进行筛选和排序时,这些数据库运行良好。当对非索引字段进行筛选或排序时,查询运行太慢,因为mongo需要扫描整个集合 我在mysql上找到的解决这个问题的方法是做一个subselect限制过滤数据,类似这样: select con.field1, con.fi
MySQL
表
迁移到一个MongoDB数据库
,该表还有5000万行。
基本上,我面临的问题是:这些数据将显示在HTML
表中,并且每列都可以搜索和排序(每个分页限制100个文档)。我在Mongo上创建了一些测试数据库,当只对索引字段进行筛选和排序时,这些数据库运行良好。当对非索引字段进行筛选或排序时,查询运行太慢,因为mongo需要扫描整个集合
我在mysql
上找到的解决这个问题的方法是做一个subselect
限制过滤数据,类似这样:
select con.field1, con.field2
from (select * from myTable order by id desc limit 40000) as con
where con.field1 = '...' //another filters here
order by con.field2 desc
limit 100
这个解决方案在mysql上运行得非常好,但我在Mongo上没有发现任何类似的解决方案。正如我所说,当我对索引字段进行筛选/排序时,mongo querys运行得非常好,但我认为我不能对每个可搜索/可排序字段创建索引
这是一个在mongo上快速运行的查询,仅对索引字段进行过滤:
.find({
tipo_doc: 'nfe', //indexed field
id_empresa: 7 //indexed field
},
{
sort: {'data_requisicao': -1}, //indexed field
limit: 100
});
这是一个运行速度非常慢的查询:
.find({
tipo_doc: 'nfe', //indexed field
id_empresa: 7, //indexed field
'transportador.xNome': 'My name' //not indexed field
},
{
sort: {'emitente.enderEmit.UF': -1}, //not indexed field
limit: 100
});
在这种情况下,我应该怎么做才能获得更好的性能