2009-07-18 4 views
0

데이터베이스에 저장된 특정 개체 유형이 있습니다. 이제이 유형은 인스턴스와 구조가 다른 추가 정보를 얻습니다. 인스턴스 그룹의 경우 정보가 동일하게 구조화되지만 구조는 런타임에만 알 수 있고 시간이 지나면 변경됩니다.RDBMS에서 가장 적합한 키/값 쌍 직렬화 형식은 무엇입니까?

난 그냥 테이블에 BLOB 필드를 추가하고 일부 직렬화 된 형식으로 키/값 쌍을 저장하기로 결정했습니다. 귀하의 경험에 비추어 볼 때 가장 적합한 형식은 무엇입니까?

내 응용 프로그램의 맥락에서이 저장 공간은 보조입니다. 주어진 키/값 쌍 (즉, 일종의 가변 필드 복합 키)에 대한 올바른 인스턴스를 찾는 특정 작업이 빠릅니다. 나는 이것이 전형적인 데이터베이스 인덱싱에 특히 적합한 포맷인가?

또한 같은 키 집합을 공유하는 인스턴스 세트를 찾고 싶을 수도 있습니다 (원하는 경우 "adhoc"클래스).

저는 이것을 Java로 작성하고 있으며 다양한 유형의 SQL 데이터베이스에 저장하고 있습니다. 레이더에는 JSON, GPB 및 원시 Java 직렬화가있어 교차 언어 형식을 선호합니다. 나는 두 가지 기본 전략을 생각할 수 있습니다 :

  • 가게 테이블에있는 값의 집합 및 키 세트
  • 저장소를 포함하는 별도의 테이블에 외래 키를 추가 할 테이블
  • 의 키/값 쌍

답변

1

데이터베이스 인덱스를 활용하는 것이 목표라면 구조화되지 않은 데이터를 BLOB에 저장하는 것이 효과적이지 않을 것입니다. BLOB는 본질적으로 RDBMS의 관점에서 불투명하다.

데이터의 구조화되지 않은 부분이 개체와 관련된 임의의 키 - 값 쌍의 형식을 취하는 것으로 설명했습니다. 맞습니까? 음, 모든 키의 유형이 동일하면 (예 : 모두 문자열 임) 키, 값 및 부모에 대한 외래 키 (적어도 세 개의 열)를 가진 하위 테이블을 만드는 것이 좋습니다. 테이블에있는 객체의 행. 키는 데이터베이스에 일반 열로 저장되므로 효율적으로 색인을 생성 할 수 있습니다. 인덱스에는 상위 테이블에 대한 외래 키도 포함되어야합니다.

전혀 다른 접근법은 구조화되지 않은 데이터를 처리하도록 특별히 설계된 CouchDB과 같은 "스키마가없는"데이터베이스 엔진을 보는 것입니다. 이러한 시스템에 대한 경험이 전혀 없으므로 나머지 응용 프로그램이이 대체 스토리지 전략에 얼마나 도움이되는지 잘 모릅니다. 그러나 살펴볼 가치가 있습니다.

+0

스키마가없는 접근 방식을 선택하면 Amazon.com SimpleDB를 살펴볼 수 있습니다. http://aws.amazon.com/simpledb/ –

+0

데이터의 일부가 이미 스키마가없는 상태에서 일부 객체를 완전히 직렬화하고 저장합니다. FriendFeed와 매우 흡사 한 일반 테이블 (http://bret.appspot.com/entry/how-friendfeed-uses-mysql 참조). 내가 RDBM 기능을 필요로하지 않는 곳에서 엄격한 스키마를 사용하면 작업을 더 어렵게 만들지 만 내 데이터의 일부는 표준 RDBM에 완벽하게 적합합니다. 이 하이브리드 전략을 사용하기 때문에 CouchDB 등으로 전환하고 싶지 않습니다. –

+0

키 - 값 테이블에 대한 의견을 보내 주셔서 감사합니다.나는 이미 그 접근법에 반대했지만, 당신의 글을 읽은 후에 다시 생각해 보았습니다. –

1

질문에 대한 답변은 아니지만 Java Edition of BerkeleyDB을 살펴 보셨습니까? 중복 된 키와 일련 화 된 값을이 (빠른) 엔진에 저장할 수 있습니다.

+0

감사합니다. 이것은 현재 상황에서 어떻게 도움이 될지 모르지만 흥미로운 링크입니다. –

관련 문제