나는 여러 XML 파일을 가지고 있으며 각 파일은 Linq를 XML로 구문 분석 한 다음 NHibernate와 예리한 아키텍처 저장소를 사용하여 유지하는 실제 루트 객체를 만드는 '루트 객체'의 데이터를 포함하고있다. 데이터 삽입을 최적화하기 시작했으며 약 1 시간 40 분 동안 30000 개의 개체를 데이터베이스에 추가 할 수있었습니다. 그러나 이것은 여전히 너무 느립니다.NHibernate insert/lookup performance
IO가 필요한 데이터베이스에서 개체를 조회하는 것이 병 목이라고 생각합니다. 다시 사용할 수 있도록 개체를 찾아야합니다.
루트 객체는 여러 저자을 가지고 : 나는 평소하지 않을 형식화 된 아이디 (뭔가를 사용하여 큰 속도를 달성
public class Author : Entity
{
public virtual Initials Initials { get; set; }
public virtual ForeName ForeName { get; set; }
public virtual LastName LastName { get; set; }
}
:
public virtual IList<Author> Authors { get; set; }
저자는이 구조를 가지고) :
public class LastName : EntityWithTypedId<string>, IHasAssignedId<string>
{
public LastName()
{
}
public LastName(string Id)
{
SetAssignedIdTo(Id);
}
public virtual void SetAssignedIdTo(string assignedId)
{
Id = assignedId;
}
}
다음과 같이 조회합니다. (잠재적으로 생성) :
LastName LastName = LastNameRepository.Get(TLastName);
if (LastName == null)
{
LastName = LastNameRepository.Save(new LastName(TLastName));
LastNameRepository.DbContext.CommitChanges();
}
Author.LastName = LastName;
나는이 같은 저자를 찾고 있어요 :
propertyValues = new Dictionary<string, object>();
propertyValues.Add("Initials", Author.Initials);
propertyValues.Add("ForeName", Author.ForeName);
propertyValues.Add("LastName", Author.LastName);
Author TAuthor = AuthorRepository.FindOne(propertyValues);
if (TAuthor == null)
{
AuthorRepository.SaveOrUpdate(Author);
AuthorRepository.DbContext.CommitChanges();
Root.Authors.Add(Author);
}
else
{
Root.Authors.Add(TAuthor);
}
내가이 문제를 개선 할 수 있습니까? 조회를 수행하는 대신 저장 프로 시저/HQL/pure SQL/ICriteria를 사용해야합니까? 조회 속도를 높이고 IO를 줄이기 위해 어떤 형태의 캐싱을 사용할 수 있습니까? CommitChanges가 필요하거나 트랜잭션으로 모든 것을 래핑해야합니까?
나는 이미 10 개의 루트 개체마다 내 세션 등을 내뿜습니다.
모든 의견은 매우 환영받을 것입니다. 미리 감사드립니다.
행복을 빌며,
기독교
xsd2code를 사용하여 종료되었습니다. xml에 dtd 정보가 포함되어 있으면 다음을 사용하십시오. BlaClassBlaClass = ((BlaClass) (serializer.Deserialize (System.Xml.XmlReader.Create (new XmlTextReader (filepath), new System.Xml.XmlReaderSettings() {ProhibitDtd = false }})))); – cs0815