많은 데이터를 가져올 시스템이 있습니다. 데이터에는 다양한 유형의 XML 파일이 포함될 수 있으며 지금은 C# 개체에 매핑되어 있습니다. 이제 우리는 이름 (고유 할 것이지만 ID가 아님)이 원하는 이름으로있는 기존 개체를 업데이트하거나 일치하는 이름이없는 경우 새 문서를 만듭니다.RavenDb는 xml, cvs와 같은 여러 소스에서 데이터를 가져옵니다.
가장 효율적인 방법으로 어떻게이를 수행 할 수 있습니까?
많은 데이터를 가져올 시스템이 있습니다. 데이터에는 다양한 유형의 XML 파일이 포함될 수 있으며 지금은 C# 개체에 매핑되어 있습니다. 이제 우리는 이름 (고유 할 것이지만 ID가 아님)이 원하는 이름으로있는 기존 개체를 업데이트하거나 일치하는 이름이없는 경우 새 문서를 만듭니다.RavenDb는 xml, cvs와 같은 여러 소스에서 데이터를 가져옵니다.
가장 효율적인 방법으로 어떻게이를 수행 할 수 있습니까?
기존 확인 여부에 신경 쓰지 않는다면 Bulk Insert을 수행 할 수 있습니다.
그 외에도 Name
으로로드해야합니다 (내가 말한 것처럼 고유하다고 가정하기 때문에). 이 같은
using (var documentSession = documentStore.OpenSession())
{
// We are doing an import, so allow us to do LOTS of queries to the db.
documentSession.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue;
foreach (var foo in newFoosToImport())
{
var existingFoo = documentSession
.Query<Foo>()
.SingleOrDefault(x => x.Name == foo.Name);
if (existingFoo == null)
{
// Doesn't exist, so just save this new data.
documentSession.Store(foo);
}
else
// Map the required new data to the existing object.
MapNewDataToExistingObject(foo, existingFoo);
// Now save the existing.
documentSessionStore(existingFoo);
}
}
// Commit these changes.
documentSession.SaveChanges();
}
이 코드 방식의 또 다른 대안은 Names
을 일괄 처리하여 DB에 왕복의 수를 감소하는 것입니다. 의미, 당신은 Where
절에 이름의 목록을 전달합니다. 그래서 10시 30 분에 Names
으로 합격하십시오. 존재하는 경우 해당 레코드를 업데이트하고, 그렇지 않으면 삽입하십시오.
큰 데이터 세트가있는 경우 SaveChanges
일괄 처리를 고려해보십시오.
예 :
if (storeCount % 1024 == 0)
{
documentSession.SaveChanges();
}
그래서 모든 1024 Stores
, 당신이 다음 SaveChanges
. 그게 도움이되는지 아닌지는 잘 모르겠지만 생각입니다. (팁 : 당신이 경우에 .. 다음 당신이 루프 후 한 번 더 SaveChanges
그래서 u는 루프에서 데이터의 마지막 세트를 커밋이 있는지 확인 그렇게
HTH
을 잘 이것이 지금 작동하는 방법.. , 좀 더 효율적인 솔루션을 찾고 있었다. : – NPehrsson
대량 업로드를 위해 문서를 체크 아웃하라 .- 저장하기 전에 업데이트 확인을해라.하지만 업데이트 확인 조건이 무엇인지 모르겠다. . –