2008-09-16 2 views
1

저는 매일 대량의 데이터를 가져 오는 응용 프로그램을 가지고 있으며, 수십만 개의 레코드가 있습니다.
데이터의 출처가 다릅니다. 데이터는 C#을 사용하여 읽은 다음 데이터베이스에 대량 삽입됩니다.

이 데이터는 후 처리 :많은 양의 데이터 - 저장 프로 시저 또는 데이터 집합 또는 기타 관리?

  • 다른 테이블
  • 새로운 테이블
  • 데이터 복잡한 algorithmns를 사용하여 보정된다 생성 연결된
(특정 테이블의 합계는 제로 합계가)

이 처리의 대부분은 저장 프로 시저에서 수행됩니다.
복잡한 처리 중 일부는 C#에서 더 간단 할 수 있지만 데이터 집합을 데이터 집합으로 추출하고 다시 삽입하면 작업이 상당히 느려집니다.
데이터베이스에 데이터를 삽입하기 전에 데이터를 처리하지 않는 이유를 묻지 만 메모리에서 레코드를 100,000 개 조작하는 것이 실용적이지 않다고 생각할 수 있으며 SQL 집합 기반 명령은 많은 레코드를 생성 할 때 도움이됩니다.

이렇게하면 저장 프로 시저 및 장단점을 사용하는 것과 관련된 오래된 질문이 제기 될 것입니다. (예 : 단위 테스트 저장 프로 시저는 어떻게합니까?)

대용량 데이터 사용 경험 및 문제 해결 방법에 대한 답변을 원합니다.

답변

1

SSIS 또는 DTS (MSSQL에 대해 말하는 것으로 가정)를 사용합니다. 그 목적을 위해 만들어졌으며 필요하다면 SP와 협력합니다.

또 다른 옵션은 Perl을 사용하여 데이터를 사전 처리하는 것입니다. 비록 그것은 이상한 제안처럼 들리지만 펄은 실제로 이러한 시나리오에서 매우 빠릅니다. 나는 과거에 그것을 사용해 합리적인 시간 (수 주 대신에 일)에 수십억 개의 레코드를 처리했습니다.

"How do Unit Test Store Procedures"와 관련하여 다른 것들처럼 MBUnit을 사용하여 단위 테스트를 수행합니다. 조언 만하면됩니다. 데이터의 설정과 롤백이 까다로울 수 있습니다. DTS 트랜잭션이나 명시 적 SQL 문을 사용할 수 있습니다.

1

일반적으로 MSSQL에서 작업 할 때는 Skliwz에 동의해야합니다. SSIS와 DTS는 갈 길이 멀지 만 그 기술에 익숙하지 않으면 작업하기가 번거로울 수 있습니다. 그러나 C#에서 처리하고 SQL Server 내부에 데이터를 보관할 수있는 대안이 있습니다.

C#에서 처리가 더 간단하다고 생각한다면 SQL Server Project을 사용하여 database objects using C#을 생성하는 것이 좋습니다. SQL Server 내부의 CLR 개체로 수행 할 수있는 많은 강력한 작업이 있습니다. 이렇게하면 데이터베이스에 닿기 전에 코드를 작성하고 테스트 할 수 있습니다. 표준 단위 테스트 프레임 워크 (NUnit, MSTest)를 사용하여 VS 내부에서 CLR 코드를 단위 테스트 할 수 있으며 관리하기 어려울 수있는 일련의 설치 및 제거 스크립트를 작성할 필요가 없습니다.

스토어드 프로 시저를 테스트하는 것에 관해서는 정직하게는 DBFit을 조사했습니다.데이터베이스가 테스트되지 않은 기능의 블랙홀 일 필요는 없습니다.

0

여기서 처리하는 데이터는 수행중인 작업에 따라 크게 다릅니다. 예를 들어, 데이터베이스에서 원하지 않는 데이터를 버리려면, C# 코드에서 처리해야합니다. 그러나 데이터베이스에서 처리 할 데이터는 일반적으로 "구현에 독립적"이어야하는 데이터 여야합니다. 따라서 다른 사람이 Java 클라이언트에서 데이터를 삽입하려면 데이터베이스가 잘못된 데이터를 거부 할 수 있어야합니다. C# 코드에이 논리를 넣으면 Java 코드는이 논리를 알 수 없습니다.

일부 사람들은 "데이터베이스에 다른 언어를 사용하지 않겠습니다."라고 말하고 말합니다. 사실이라도 DBA 또는 개발자가 데이터베이스 작업을하고 논리가 없으면 실수 할 것입니다. 또는 새로운 C# 개발자가 C#으로 작성된 데이터 프리 프로세서에 대해 알지 못하거나 데이터 무시를 시도합니다.

요약하면 데이터베이스에 입력하는 로직으로 외부 소프트웨어에 의존하지 않고 데이터가 올바른지 확인할 수 있습니다.

관련 문제