2013-08-22 2 views
2

스토어 오브젝트 메타 데이터 사용이 테이블을 고려포스트 그레스 UUID 레퍼런스 오버

CREATE TABLE meta (
    "obj_uuid" uuid, 
    "type"  int, 
    "value"  text 
); 

오브젝트 메타 데이터의 행이 참조 uuiduuid의 1 차 키를 사용하여 식별된다. 이제 이것이 DB 크기를 기하 급수적으로 날려 버릴까 우려합니다.

Postgres는이 문제를 스스로 최적화합니까, 아니면 uuidserial으로 매핑하고 대신이 일련 번호를 메타 데이터 테이블에서 참조하는 중간 테이블을 만드는 것이 더 좋습니까?

+0

시리얼이 적절한 경우 uuid를 사용하는 이유는 무엇입니까? –

+0

@ClodoaldoNeto UUID는 CouchDB에서 제공되기 때문에 –

+0

DBA.StackExchange에 관한이 질문은 도움이 될 것입니다. http://dba.stackexchange.com/questions/322/what-are-the-drawbacks-with-using-uuid-or-guid-as-a-primary-key –

답변

3

이제 I 이것이 DB 크기를 날려 걱정 지수

64 비트 bigint 또는 32 비트 integer에 비해 UUID는 128 비트이다. 따라서 최악의 경우 오버 헤드는 키 공간의 4 배입니다.

키/값 쌍이 매우 작 으면 큰 문제가있을 수 있습니다. 이 경우 sequence을 기반으로 integer 또는 biginteger 키를 사용하고 uuid을 참조 무결성 검사에 나타나지 않는 고유 보조 키로 사용하십시오.

+0

사실, UUID를 사용하면이 경우 공간을 절약 할 수 있습니다. . 현재 64b (메인 테이블) + 64b (PK 인덱스) + 64b (ref 테이블)가 필요합니다. 32 + 64 (메인 테이블 uuid + 시리얼) 32 + 64 (시리얼 및 유니크 인덱스) + 32 (ref 테이블)을 취할 것을 제안했다. –

+0

@IgorRomanchenko UUID는 64 비트가 아니라 128 비트입니다. 그렇습니다. 1 : 1 마스터 대 테이블 관계라면 이점이 없습니다. 메인 행당 많은 'meta' 행이 있으면 서둘러 큰 차이. '128 + n * 128' 대'(128 + 32) + n * (32)'의 경우, 후자는 n = 1 인 경우에도 승리하지만, 주당 여러 개의 메타 행을 가질 때까지는 복잡하지 않습니다. 열. 주 행마다'bigint' 키가 필요하다면 메인 행 당 수십 또는 수백 개의 메타 행이 없으면 귀찮을 것입니다. 2 : 1로 만들기 위해서는 거의 n = 10이 필요합니다. –