2011-08-20 2 views
3

.NET으로 온라인 상태가 아닌 ebanking 트랜잭션을 수집하는 프로젝트를 개발 중입니다. 전날 거래가 들어있는 텍스트 파일을 얻게 될 것입니다. 전체적으로 이것은 하루에 약 2,000,000 행을 포함합니다.SQL Server 2008에서 보관 된 엄청난 양의 레코드로 작업 할 때 가장 좋은 솔루션은 무엇입니까?

지난 달 트랜잭션 (최대 3 초)에서 검색하는 데 좋은 성능을 원하지만 이전 트랜잭션 (최대 30 초)에서 검색 할 수 있기를 원합니다. 아카이브 검색은 CardNumber, TransactionNumberTransactionDate을 기준으로합니다. 아카이브 검색 시나리오가 정적이며 다른 열을 검색하거나 모든 종류의 보고서를 얻지 않기를 바랍니다.

저는 보관 전략을 생각하고 있습니다. 기본 테이블에

  1. 튜닝과 최적화 인덱스 :

    몇 가지 옵션이 있습니다.

  2. 주 테이블을 분할하는 중입니다.

  3. 이전 트랜잭션을 야간에 다른 데이터베이스로 이동합니다.

  4. 오래된 트랜잭션을 매 시간 (TextFile, XmlSerialization, BinarySerialization)으로 이동 한 다음 메모리에서 검색합니다.

  5. 다른 오픈 소스 NON-RDBMS 데이터베이스 (텍스트 검색에서 Lucene 엔진과 같은)를 사용합니다.

우선이 시나리오에서 어떤 전략이 가장 적합한 지 알고 싶습니다.

또한 SQL Server 2008, Oracle, Sqlite, MySql 등과 같이 알려진 데이터베이스 엔진에서 지원하는 레코드 수는 얼마나됩니까? Table Partitioning은 언제 생각해야합니까?

+0

지원되는 행 수는 실제로 선택한 엔진의 요소가되지 않습니다. 행이 차지하는 공간의 양을 제외하고는 이론적 인 제한이 없습니다. 우리가 거물 (오라클, DB2, SQL 서버)에 대해 이야기 할 때 이것은 테이블 디자인, 아키텍처 및 하드웨어의 요소가 될 것입니다. 그 자체만으로 전환하는 것은 마술처럼 더 많은 행을 저장할 수있는 능력을 향상시킵니다. SqLite 또는 MySQL과 관련하여 많은 대용량 성공 사례를들은 적은 없지만 이들이 존재할 수도 있습니다. –

답변

3

필자는 파티션 분할이 아마도 월별 파티션 일 가능성이 가장 높다고 생각합니다. 이전 파티션을 전환하여 (시간이 지남에 따라 파일 그룹을 분리하고 읽기 전용으로 표시) 쿼리를 계속 사용할 수 있습니다. 하루 2MM 행은 그다지 거대한 것이 아니지만 동일한 파티션에서이 작업을 수집하는 경우 결국 일부 작업/쿼리는 결국 확장되지 않습니다. 클러스터 된 인덱스, 클러스터되지 않은 인덱스 및 분할 스키마/기능을 설정하는 방법에 대해서는 매우 신중해야합니다. 아직 파티셔닝에 익숙하지 않다면 익숙해지고 테스트/dev/준비 환경에서 프로덕션 환경에서 느슨하게하기 전에 숙련되고 익숙해 지도록 시간을 예산 책정하는 것이 좋습니다. This is probably a good a starting point as any이지만 공문서 이외에 실용적이고 실제적인 조언을 위해 블로그를 검색하는 데 두려움을 느끼지 마십시오.

+0

나는 거의 아카이브 된 데이터가 필요하지 않습니다. 테이블 분할을 사용하여 다른 파일 그룹에 저장하는 경우 가장 좋은 백업 시나리오는 무엇입니까? 파일 그룹에서 파일을 풀면 (이전 데이터가 포함 된 경우) 어떻게됩니까? 텍스트 파일에 보관하는 방법에 대한 아이디어가 있습니까? –

+1

파일 그룹을 읽기 전용으로 표시하면 해당 파일 그룹을 한 번 백업 한 다음 해당 시점부터 백업의 일부로 포함시키지 않을 수 있습니다. 파일을 잃는 방법을 모르지만 기본 백업을 잃는 것과 같은 방식으로 처리 할 수 ​​있습니다. SQL Server는 실제로 텍스트 파일이 무엇인지 알지 못합니다 ... 데이터를 BCP하거나 데이터를 추출하여 텍스트 파일에 저장하는 프로그램을 작성할 수는 있지만 백업이 충분하지 않은 이유는 무엇입니까? –

관련 문제