2010-12-19 4 views
1

0.1 초마다 약 1k 바이트의 데이터를 저장할 응용 프로그램이 있습니다. 그것은 36MByte/hour 또는 대략 600MByte/day입니다.어떤 기술을 사용하여 데이터를 저장할 수 있습니까?

데이터의 압축률이 높기 때문에 10 : 1에서 100 : 1로 압축해야합니다. 모든 데이터는 타임 스탬프에 의해 참조됩니다.

내 질문은 :이 데이터를 저장하는 데 사용할 수있는 기술은 무엇입니까?

제약 :

  • 데이터베이스의 크기가 커질수록 증가 할 수없는 데이터베이스에 데이터를 삽입 할 수있는 시간입니다. 이 제약 조건은 Microsoft SQL Server를 배제합니다 (5 일 후에 각 "삽입"이 완료 될 때까지 중단됩니다).
  • 우리는 하루 4 시간 동안 데이터를 효과적으로 일시 중지 할 수 있으므로 압축 등의 작업을 수행 할 수 있습니다.
  • LINQ for .NET과 호환되기를 바랍니다. 즉, 데이터베이스가 필요합니다. LINQ 어댑터 (MySQL 스타일 인터페이스는 괜찮을 것입니다).
+2

SQL 서버를 잘못 구성했습니다. 인서트가 무한정 일정한 시간을 갖도록 설정할 수 있습니다. –

+1

1 분 이상 삽입합니까? 시간의 99 %는 쿼리가 아니라 데이터베이스의 문제입니다. NOLOCK을 사용하여 Insert를 지정하고 삽입되는 행에 인덱스가있는 경우 삽입 된 행이 중간에 무작위가 아닌 인덱스의 "끝"또는 그 근처에서 어딘가에 있는지 확인하십시오. – Juliet

+1

나는 Linq를 사용해야 할 필요성을 재평가하겠다. Linq가 멋지다고 생각하고 나는 이것을 스스로 사용한다. 이런 식으로, 나는 클라이언트 측 처리를 장려하는 프로그래밍 방식에주의해야한다. (서버 측보다는 처리). – Arafangion

답변

3

한 가지 방법은 들어오는 데이터를 디스크의 파일에 추가하는 것입니다. 하루가 지나면 새 파일로 전환 한 다음 전날 파일을 압축하고 저장하는 프로세스를 생성합니다.

이유를 설명하지 않고 데이터베이스에 데이터를 저장해야한다고 가정하는 것 같습니다. 너?

+0

데이터베이스에 데이터를 가지고 싶기 때문에 쉽게 쿼리 할 수 ​​있습니다. LINQ 쿼리는 매우 표현력이 뛰어나고 작업을 훨씬 쉽게 만듭니다. – Contango

+0

오늘 데이터를 즉시 사용할 필요가없는 경우 백그라운드 프로세스에서 데이터베이스에 실제로 삽입 할 수도 있습니다. 이렇게하면 온라인 로깅이 데이터베이스에 전혀 의존하지 않습니다. 이것은보다 견고한 시스템의 한 측면 일 것입니다. –

+0

동시 작성자가없는 경우 실제로 매우 좋은 솔루션입니다. – Ronnis

1

적시에 작은로드를 처리 할 수없는 SQL Server를 얻는다면 데이터를 삽입하는 방법을 탐색하지 않으면 RDBMS가 효과적인지 궁금합니다.

다른 인덱스/함수/프로세스 블로킹/읽기가없는 단일 테이블 (기본 키 포함)에 아주 간단한 삽입 만하고 있습니까? 아니면이 과정은 실제로 당신이 이야기하고있는이 단순한/작은 삽입물보다 조금 더 복잡합니까?

Linq를 사용하여 죽은 사람이라면 linq 문을 프로파일 링하여 ORM에게 무언가를하도록 말하지 않습니까?

+0

간단한 삽입 작업을 수행하고 있습니다. 나는 당신이 제안한대로 할 것입니다 - LINQ를 프로파일 링하여 우리가 어리석은 일을하지 않도록하십시오 (예 : "Orderby"를 사용하여 전체 테이블의로드를 메모리에 저장하여 정렬 할 수 있음). – Contango

1

아마도 모든 내용을 이진 파일에 저장하고 메타 데이터를 DB에 저장할 수 있습니다.

관련 문제