情况就是这样.我有一个像这样的域对象Product
...
[DataContract]
public class Product : IStorableEntity
{
[DataMember]
public String Id { get; set; }
[DataMember]
public String RemoteId { get; set; }
[DataMember]
public String LanguageId { get; set; }
[DataMember]
public DateTime? CreationDate { get; set; }
[DataMember]
public DateTime? LastUpdate { get; set; }
ETC..ETC...
}
在我的存储库层中,我有以下方法.
public IEnumerable<TElement> Read()
{
var mongoCollection = _mongoDatabase.GetCollection<TElement>(_partitionName);
return mongoCollection.AsQueryable<TElement>();
}
使用这种方法,我希望通过LINQ公开我的存储库层,而不导出有关技术的信息.
这样我就能做到:
var _repository = new MyRepositoryFactory<Product>();
var result = _repository.Read().Where(p=>p.RemoteId == "1")
此查询需要1或2毫秒.
相反
var _repository = new MyRepositoryFactory<Product>();
var result = _repository.Read().Where(p=>p.RemoteId == "29000")
it takes 2800 milliseconds!!!
我已经用命令正确地创建了一个唯一的索引
db.products.ensureIndex({"RemoteId":1, unique:true})
NB: Yes, I have also rebuilt the indexes with 100 command
奇怪的是...
public IEnumerable<TElement> Read(string remoteId)
{
var mongoCollection = _mongoDatabase.GetCollection<TElement>(_partitionName);
var query = Query<TElement>.EQ(p => p.RemoteId, remoteId);
return mongoCollection.Find(query);
}
如果我调用之前具有相同id的方法..
var _repository = new MyMongoRepository<Product>();
var result = _repository.Read("29000")
这需要1到2毫秒.为什么?
为什么在第一种方法中,随着id的增加,性能会下降,而在第二种方法中,不是吗?
附言,呃...真为我的英语感到抱歉