PostgreSQL 데이터베이스를 간단한 키 가치 저장소로 사용하는 가장 좋은 방법

StackOverflow https://stackoverflow.com/questions/2008439

문제

PostgreSQL 데이터베이스를 사용해야하며 현재 BerkeleyDB 사용을 대체합니다. 하지만; 나는 이것이 이상적인 상황이 아니라는 것을 알고 있습니다. 그것은 내가 통제 할 수 없습니다.

따라서 질문은 ... PostgreSQL을 키 가치 저장소로 만들어야한다면 가능한 한 효율적으로 만들면서 어떻게이 작업을 수행 할 것인가?

내 값은 바이트 어레이이고 내 키는 문자열이며,이 문자열의 길이에 약간의 제한 사항을 부과 할 수 있습니다.

나는 내 가치와 기본 키 열에 키를 보유하고 있다고 가정하지만,이 여정에 방금 통풍을 일으키기 때문에 스택 오버플로 커뮤니티의 누군가 가이 일을했는지, 또는 특정한 'gotchas'가 있는지 궁금합니다. 나는 찾아야한다.

도움이 되었습니까?

해결책

이를 올바르게 수행하기 위해 PostgreSQL의 확장을 HSTORE라고합니다. 다른 주요 가치 저장 시스템과 비슷한 방식으로 작동합니다. 확장자를로드하십시오. 구문은 독특하지만 Redis 또는 Mongo를 사용한 적이 있다면 빨리 얻을 수 있습니다. 그보다 어렵게 만들지 마십시오. 이해합니다. 우리는 종종 도구를 선택하지 않고해야합니다.
다음은 문서 페이지입니다.

http://www.postgresql.org/docs/9.1/static/hstore.html

다른 팁

관계형 데이터베이스를 사용해야한다면 구조화되지 않은 데이터 및 키 값 저장소에서 얻은 속도의 장점을 포기하기 때문에 데이터에서 구조를 찾아야합니다. 구조가 많을수록 곤경에서 더 나은 이점을 얻을 수 있습니다. 키에서 구조 만 찾더라도.

또한 데이터에 순차적 또는 임의의 액세스 만 필요 하고이 요구 사항에 따라 데이터베이스를 구조화하는지 고려하십시오. 예를 들어 유형별로 값에 대한 쿼리를 할 예정입니까? 이러한 각 질문은 데이터베이스를 구조화하는 방법에 영향을 줄 수 있습니다.

PostgreSQL의 블로브에 대한 한 가지 구체적인 고려 사항은 내부적으로 pg_largetable로 표시됩니다 (LOID : OID, PAGENO : Int4, DATA : BYTEA). 청크의 크기는 lobblksize에 의해 정의되지만 일반적으로 2k. 따라서 블로브 대신 테이블에서 바이트 어레이를 사용할 수 있고 블록 크기 아래에서 값/키 쌍의 크기를 제한 할 수 있다면 두 번째 테이블을 통해이 간접을 피할 수 있습니다. 데이터베이스 구성에 액세스 할 경우 블록 크기를 늘릴 수도 있습니다.

데이터 액세스의 데이터 및 패턴의 구조를 찾고 더 자세하게 질문을 다시 요청하는 것이 좋습니다.

실제로 키가 무엇인지에 달려 있어야합니다. 항상 255 자 미만의 문자열 인 경우 varchar를 Yoru PK로 사용한 다음 값에 대해 Blob (큰 값을 가정)을 사용하십시오. 항상 숫자 인 경우 int 등을 사용하십시오.

다시 말해, 정말 좋은 답변을 제공하려면 더 많은 정보가 필요합니다 :)

값으로 무엇을 저장해야합니까? 문자열? ints? 물체 (예 : 직렬화 된 Java 객체). 간단한 구현은 다음과 같이 보이는 3 열 테이블과 함께 작동합니다.

NAME(VARCHAR)   TYPE(VARCHAR)   VALUE(VARCHAR)

(아마도 유형은 일부 열거 일 것입니다). 위의 내용은 직렬화 된 객체와 같은 이진 데이터에 대해서는 작동하지 않지만 아마도 블로브가 필요할 것입니다.

대안 적으로 (아마도 a 많이 더 나은 아이디어), 당신은 보셨습니까? Apache Commons 구성 ? 데이터베이스를 사용하여 (JDBC를 통해)이를 다시 복귀 할 수 있으며 다음을 검색 할 수있는 속성을 저장할 수 있습니다.

// get a property called 'number'
Double double = config.getDouble("number");
Integer integer = config.getInteger("number");

그것은 구현 측면에서 많은 슬픔을 절약 할 수 있습니다. 너 5월 이진 데이터를 저장하는 데 문제가 있습니다. 삽입 및 재조정 후 직렬화해야합니다. 그러나 과거에는 XStream을 통해 INT, 복식 및 직렬화 된 Java 객체를 저장하는 데 사용 했으므로 잘 작동하는지 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top