我有这个简单的课程:
@Document (collection = "advertise")
public class AdvertiseCache {
@Id
private int id;
private int brandId;
private String brandName;
private String modelName;
@Indexed
private int odometer;
@Indexed
private int price;
private boolean learner;
private int manufacturedYear;
private double engineSize;
private String transmissionTypeName;
private String stateName;
private String ownerTypeName; //private/dealer
private String conditionTypeName; //new/used
}
我有另一个具有相同属性但使用@Entity 注释的类。
它们分别存储在 MongoDB 和 PostgreSQL 中。
我正在使用 Spring Data JPA for PostgreSQL 和 Spring Data MongoDB ... for mongo。
两个数据库都包含相同的数据,30 行。
10000 次 findAll 类型的查询将花费:Mongo ~8000-9000ms 和 PostgreSQL ~10000-11000ms
findAll 类型的 10000 个查询,其中价格 >= 1 和价格 <=9000 和里程表 >=1 和里程表 <= 40000 将花费:Mongo:~7000ms 和 PostgreSQL ~7200ms
为什么?难道我做错了什么?我期待 mongo 更快。(我的应用程序很少使用,只是查找全部。大多数时候我使用过滤器进行排序)
两台服务器都在 FreeBSD 9 虚拟机中运行。我在另一个装有 CentOS 6.3 的虚拟机上测试了这个。类似结果+-100ms。
肿瘤坏死因子
/// 更多解释代码(我的过滤器构建器将仅包含 odometerMin、odometerMax 用于标准之间以及 priceMin 和 priceMax 用于标准之间:
public List<AdvertiseCache> findByFilter(FilterBuilder filter) {
List<AdvertiseCache> result = null;
Query query = new Query();
Criteria criteria = new Criteria();
criteria = criteria.and("price").gte(filter.getPriceMin()).lte(filter.getPriceMax());
criteria = criteria.and("odometer").gte(filter.getOdometerMin()).lte(filter.getOdometerMax());
query.addCriteria(criteria);
query.limit(filter.getLimit());
query.skip(filter.getOffset());
result = mongoTemplate.find(query, AdvertiseCache.class, collectionName);
return result;
}