2010-03-19 4 views
1

데이터베이스에 수천 개의 레코드를 저장해야합니다. CastleProject ActiveRecord를 사용하고 있습니다. 그 양의 객체를 저장하는주기가 너무 오래 작동합니다.CastleProject ActiveRecord에서 일괄 저장

ActiveRecord를 사용하여 일괄 저장을 실행할 수 있습니까? 성능을 향상시키기 위해 권장되는 방법은 무엇입니까?

답변

1

해결책을 찾은 것 같습니다. 두 가지 주요 단계가 있습니다 :

  1. 파일을 config (설정)하는 일괄 처리를 추가 <이 개체를 절약 주위에 키 = "hibernate.batch_size"값 = "100"/ >
  2. 사용하여 TransactionScope를 추가 :

using (TransactionScope scope = new TransactionScope()) 
{ 
    for (int i = 0; i < 100; i++) 
    { 
    Contact contact = new Contact(); 
    contact.Save(); 
    } 
} 
0

ActiveRecord (및 대부분의 ORM)는 배치 작업에 적합하지 않습니다. ORM 내부에서 진행되는 모든 변경 추적으로 인해 실제로 느려질 수 있습니다.

최대의 성능을 얻으려면 직선형 ADO.NET 또는 SQL 일괄 가져 오기를 사용해야합니다.

+0

액티브 일괄 작업을로드하는 동안에 대한 다양한 옵션이 있습니다. 배치 저장을 위해 무언가를 가지기를 바랍니다. 그렇지 않은 경우 어떻게 ADO.NET 배치와 A.R을 연결할 수 있습니까? – Alex

+0

배치 (http://davybrion.com/blog/2008/10/batching-nhibernates-dm-statements/)에서 배치를 사용하기 위해 NHibernate를 가리키는 접근법을 설명했습니다. 그러나, 의견에서 누군가 SQLite (내 프로그램에서 사용되는 데이터베이스)와 함께 작동하지 않는다고 언급합니다. 그것은 내가 NHibernate 사람이 상태에 대해 물어 봐야 것 같습니다. – Alex

0
+0

귀하의 링크 Mauricio에 감사드립니다. 그러나, 나는 내 솔루션 (아래)이 잘 작동하고 내가 원하는 것을 수행한다고 생각한다. 나는 100 개의 클래스를 저장하고 향상된 성능을 20 번 배치하는 것에 대해 이것을 테스트했습니다! – Alex

관련 문제