2011-09-14 4 views
2

내 응용 프로그램은 저장할 필요가있는 아주 작은 이벤트를 계속 수신하며이를 처리하는 가장 좋은 방법은 무엇인지 생각하고있었습니다.Firebird 2.1은 DB의 테이블에 대량의 행을 저장하는 데 효율적입니까?

EVENT 
id 
timestamp 
some_data (integer) 
fk_to_some_holder_table 

내가 행으로 각 이벤트를 저장 유지하는 경우, BLOB 압축/치료의 일부 종류의 구현에 대한 몇 가지 단점이있을 것이다 :이 이벤트의 표는이 같은 것? 아니면 내가 너무 멀어?

저는 Firebird 2.1을 사용하고 있습니다. 필요한 경우 Firebird 2.5로 업그레이드 할 수 있습니다.

미리 감사드립니다.

+4

귀하의 질문은 정말로 내 취향에 비하면 너무 많은 버그를 가지고, 내가 지금 2.1 다루고 싶어요

언급 명확한. 데이터베이스는 방대한 양의 데이터를 저장하도록 설계되었으며 명확하게 제공 한 정의에는 얼룩 또는 압축을 사용할 필요가 없으며 둘 중 하나를 사용하면 불필요한 오버 헤드가 추가 될 수 있습니다. 당신이 정확히 무엇을 요구하고 있는지 명확히 할 수 있습니까? –

+1

올바른 방법으로 수행하고 있습니다. 데이터베이스 시스템은 방대한 양의 행을 저장하기 위해 설계되었습니다. 압축에 대해 걱정하지 마십시오. 시간을 낭비하게됩니다. 그리고 어떤 상황에서도 얼룩을 사용하려고 시도하지 마십시오! –

+0

당신 말이 맞아요. 제 질문은 Firebird 2.1 구현에 관한 것입니다. 나는 그 질문을 편집했다. 고마워요 – ivarec

답변

4

난 당신이 "기존의 행 기반의 기록"와 더 낫다 확신 :

  • 당신이 바로, 기록을 조회 할? BLOB를 쿼리하는 것은 어렵고 느립니다.
  • 레코드 크기가 너무 작기 때문에 압축 할 수 없으므로 대부분의 압축 알고리즘을 사용하면 결과가 별도의 필드보다 커질 수 있습니다.

""문서에 따르면 한 테이블의 최대 크기는 32TB 또는 16G 행입니다.

이 특정 사례에서 2.1과 2.5 사이에 차이가 있다고 생각하지 않지만 다른/일반적인 개선으로 인해 2.5를 사용합니다. 행이 모양보다 훨씬 더 의미가로

+0

그러나 작은 레코드가 많으면 BLOB에 넣고 BLOB를 압축 할 수 있습니다. 몇 가지 테스트를하고 결과를 게시 할 것입니다. – ivarec

+1

글쎄, 그게 가져 오는 추가 작품을 즐기는 것 같아. 내 대답의 숫자로 계산을해라. 공간에 대해 걱정하는 것이 의미가 있나? 한계에 부딪 힐 위험이 너무 많다. ? 'id'와'fk_to_some_holder_table'이 64 비트 정수라고 가정하면 레코드는 224 비트 또는 28 바이트입니다. 따라서 32TB/28 = 1.1T 행, 즉 행 제한이 더 중요합니다. 그러나 1 초당 1 행을 얻으면 16G 행은 16G/86400 = 185185 일 또는 약 500 년 동안 양호합니다. – ain

+1

@haole AFAIK, Firebird는 데이터를 저장할 때 내부적으로 RLE 압축을 사용합니다. 외부에서 수행하는 것만큼이나 효율적 일 수도 있습니다. 압축이 이미 수행되었음을 유의하는 것이 좋습니다. – Harriv

0

이유로, 저장 이미 2.5

+1

2.5의 버그는 무엇입니까? 최신 스냅 샷 빌드를 시도 했습니까? –

관련 문제