2011-08-23 5 views
0

저는 데이터베이스에 익숙하지 않습니다.이 질문은 데이터베이스가 얼마나 영리하리라고 기대할 수 있는지와 관련이 있습니다. 여기에 "데이터베이스"라는 말은 "MySQL과 H2와 비슷한 것"을 의미합니다 (실제로이 두 가지가 비슷한지, 실제로 인기가 있는지는 전혀 알지 못합니다). 실제로 ScalaQuery를 사용하므로 기본 데이터베이스에서 추상화됩니다.중복성 최소화와 관련하여 MySQL 및 H2와 같은 데이터베이스가 얼마나 똑똑합니까?

String 항목에 중복성이 많은 유형의 (String, Int) 항목이있는 테이블이 있다고 가정합니다. 그래서 내 표는 보일 수 있습니다 같은 :

(아담, 18) (아담, 24) 계속 (아담, 34) ... (아담, 3492) (베다니, 4) (베다니, 45) 은 ... 나는 H2와이 테이블을 저장하는 경우는 "아담"과 "베다니"를 실현하기에 충분히 스마트 될 것입니다 ... (베다니, 2842)

을 계속 많이 반복 시간, 조회 테이블을 가리키는 열거 형으로 바꿀 수 있습니까? 아니면 많은 저장 공간을 낭비 할 것입니까?

관련 : H2가 문자열과 관련하여 현명한 경우 두 배로 똑같은 방식으로 똑똑한가요? 아마 두뇌가 무너지는 초기 테이블에서 필자는 반복 된 이중 필드를 많이 가지고 있습니다.

감사합니다.

답변

6

데이터베이스 엔진은 데이터의 중복을 인식하고 수정하도록 구축되지 않았습니다. 그것이 디자이너/개발자의 임무입니다.

+0

감사합니다. 일반적으로 데이터베이스 엔진이 제공하는 서비스는 무엇입니까? DB를 연구 한 적이 없기 때문에 저는 일종의 캐싱과 일종의 교차 인덱싱을 가정합니다. 이러한 유효한 가정입니까? DB를 사용하는 다른 것들은 저를 사들입니까? – emchristiansen

+0

@emchristiansen 나는 데이터베이스에 관한 책을 얻고 실제로 DB를 연구 할 때라고 생각한다. 당신의 질문에 대답하려고하는 책을 쓸 수 있습니다. – trailmax

2

데이터베이스는 정보를 저장하도록 설계되었습니다. 데이터베이스가 (Adam, 44)와 (Adam, 55)가 압축 될 수 있는지를 알 수있는 방법은 없으며, 데이터베이스가 제안한대로 작업을 시도하면 심각해질 것입니다. 이는 다양한 성능 및/또는 논리적 문제.

반대로 데이터베이스는 저장소를 최소화하지 않으며 색인 및 키와 같은 중복 정보와 DB에 필요한 기타 내부 추가 정보를 추가합니다.

DB는 정보를 빠르게 검색하고 공간 효율적으로 저장하지 않도록 제작되었습니다. 복잡성에 관해서는 데이터베이스가 스토리지 공간을 늘리고 쿼리 성능을 저하시킵니다.

1

페이지를 압축하는 일부 스토리지 시스템이 있으므로 질문이 유효합니다. MySQL에 관해서는 이야기 할 수 없지만, 그것은 H2와 유사하다고 생각합니다. H2는이 점에서별로 똑똑하지 않습니다. H2는 데이터를 압축하지만 다음과 같은 경우에만 해당됩니다.

  • 데이터베이스의 저장 크기는 다음과 같지 않습니다. H2는 현재 LZF을 사용하여 쓰기 작업을 수행 할 때 실행 취소 로그를 압축하므로 페이지에 반복되는 데이터로 인해 쓰기 성능이 약간 향상되지만 체크 포인트 이후에만 실행됩니다. 그러나 이것은 미래에 변할 수 있습니다.

또한 H2는 텍스트를 저장하기 위해 UTF-8과 유사한 코드를 사용하지만이 압축을 호출하지는 않습니다.

0

연속 스토리지를 기반으로하는 MySQL 및 기타 SQL 제품은 이런 종류의 작업에는 전혀 현명하지 않습니다.

하나는 다른 하나 (즉, 외래 키)를 참조하는 두 개의 논리 세트를 고려하십시오.한 가지 가능한 구현은 물리적으로 두 세트에 공통된 값을 한 번만 저장하고 두 테이블 모두 값에 대한 포인터를 저장하는 것입니다 (C#과 같은 3GL 프로그래밍 언어에서 참조 유형 변수를 생각 함). 그러나 대부분의 SQL 제품은 두 테이블에 물리적으로 값을 저장합니다. 포인터를 원할 경우 최종 사용자는 일반적으로 자동 증가 정수 '대리 키'를 사용하여이를 구현해야합니다.이 키는 슬프게도 논리적 모델에 노출됩니다.

0

데이터베이스 엔진에서 수행 할 수있는 데이터 압축에 대해 이야기하고 있으므로 걱정할 필요가 없습니다. 또는 데이터 정규화에 대해 이야기하고 있습니다. 그런 다음 데이터베이스 디자인을 읽어야합니다.

데이터베이스는 데이터를 저장하기위한 것이므로 약간의 중복성에 대해 걱정할 필요가 없습니다. 수백만 줄 및 기가 바이트의 데이터가있는 경우 옵션을 고려할 수 있습니다. 그러나 그 수준까지는 성능에 문제가 없습니다.

관련 문제