2011-12-14 2 views
3

복잡한 프로세스를 SQL에서 .NET 응용 프로그램으로 옮깁니다. SQL에서 필요한 데이터 만 가져 와서 데이터 테이블에 저장함으로써 무차별 대입 방식을 취하고 있습니다. 스테핑과 함께 파이프 라인 패턴을 사용하여 병렬 처리 (다른 프로세스에 종속적이지 않고 동일한 데이터 비트에서 작업하지 않음)로 수행 할 수있는 프로세스를 파기했습니다.데이터 세트 대신 메모리에

모든 것이 잘 진행되고 있지만 DataSet/DataTable 구조보다 성능이 좋은 메모리 내장 SQL 솔루션이 있는지 알고 싶습니다. 우리는 한 번에 최대 50m 행을 지원하며 데이터 행을 지원합니다 (5b 행 읽음). 1 행 (모든 데이터 행 지원)의 행 크기는 아마도 약 1K avg입니다 (큰 문자열로 인해).

제 질문은 특별히 DataSets, 메모리 오버 헤드 및 지속성의 성능에 관한 것입니다. 복구를 위해 각 단계의 데이터를 디스크에 직렬화해야합니다.

강하게 입력 된 모델에 행을 매핑하는 것이 더 좋을까요? 필자는 데이터 세트의 관계 나 다른 이점을 필요로하지 않습니다. 필자는 대부분의 검색 기능을 병렬 처리를 사용하는 자체 도구로 교체했습니다.

데이터는 SQLite는 살펴보고, 원시 형, 아니 모양, 스트림, 지리 등 지역의 SQL 조작의

+0

강력하게 형식화 된 모델로 변환하는 한, 사용자가 나타내는 데이터에 따라 달라집니다. 또한, 당신은 메모리에서 한 번 데이터와 함께 무엇을하려고합니까? 이 사실을 알면 자신과 다른 사람들이 상황에 대한 최선의 방법/최선의 조언을 결정하는 데 도움이 될 수 있습니다. – JesseBuesking

+0

약 100 가지 프로세스가 필요합니다. 중복, 데이터 계산 및 집계, 업데이트, 삭제 등에 대한 레코드 검사 결과 최종 데이터 세트가 SQL로 다시 푸시됩니다. 일부 프로세스에는 조인 및 그룹과 같은 기능이 필요합니다. –

답변

3

를 사용합니다. 내가 독점적으로 메모리에서 실행할 수 있지만 디스크 캐싱 및 트랜잭션 저널링을 해제하면 아마도 거의 닫을 것입니다.

Steve Shaunessey는 수년 전에 볼랜드에서 빠른 메모리 내장 SQL 엔진을 개발했습니다. 나는 그것이 제품화되었는지 알지 못한다. Embarcadero.com 웹 사이트에서 그의 작품의 잔재가 생존했는지 확인하십시오.

helpaim.com은 메모리 내 SQL 엔진을 알립니다. 그것으로 경험, 다만 FYI.

또한 메모리 내 쿼리 작업을 위해 LINQ를 고려하십시오. 현재 수행중인 작업에주의를 기울이면 LINQ의 쿼리 작성 및 지연된 실행은 대규모 데이터 인 IMO에서 잘 작동합니다. 그리고 SQL 구문 분석기가 필요하지 않습니다.

+3

+1 - 예, 메모리에서 완전히 실행할 수 있습니다. http://www.sqlite.org/inmemorydb.html – bryanmac

+0

아하, 작은 회색 세포가 모든 실린더에서 변화를 일으키고 있습니다. SQLite를 사용하여 Google Gears를 만든 이후로 SQLite를 사용해 보지는 못했지만 메모리가 필요하다는 모호한 추억이있었습니다. 감사! – dthorpe

+0

+1 감사합니다 @dthorpe,이 게시물을 만들기 전에 SQLite를 먼저 다운로드했으나 아직 재생하지 못했습니다. –