2009-10-23 7 views
8

저는 CouchDB 및 Cassandra와 같은 키 - 값 저장소에서 머리를 감싸려고합니다. 나는 그들이 왜 유용한 지 이해하지만, MySql과 같은 RDBMS를 대체하는 한 이해하지 못합니다. 키 - 값 저장소 이해

은의이이 말을하자 내 내가 저장하는 데 필요한 :
{123456: {'model' : 'Ford' 
      'color': 'blue' 
      'MPG': 23}} 

은 그럼 파란색있는 모든 자동차를 찾아야합니다.

키 - 값 저장소는 값을 사용하여 키를 어떻게 쿼리합니까? map-reduce가 사용될 수있는 곳을 읽었지만 예제를 찾을 수없는 몇 가지 프로젝트의 출처를 살펴 보았습니다.

내가 올바른 질문을하고 있는지 알려주세요.

답변

8

기본적으로 키 - 값 저장소를 사용하는 경우 관계형 데이터베이스가 내부적으로 가지고있는 것과 동일한 구성 요소로 데이터베이스를 구축하고 있습니다. 이렇게하는 이유는 스케일링과 성능에 대한 제어력과 유연성 또는 직설성 때문입니다.

이 경우 테이블 행과 인덱스에 해당하는 것을 두 개의 개별 항목으로 저장해야합니다. 그래서 당신이 색깔에 색인을 붙이고 싶다면,

{'blue': {123456}} 

을 색인 표와 동등하게 저장해야합니다.

물론 일부 키 - 값 저장소는 색인 생성 및 검색 메커니즘을 제공하므로 모든 사용자에게 맞는 일반적인 규칙은 없습니다.

+0

그것은 될 필요가있다 : {{ '색상': '블루'} : [123456]}이 언급 된 것을 파란색 알 것입니다 그렇지 않으면 어떻게 . 텍스트는 어떻습니까? { 'Lorem ipsum dolor sit amet, consipetuer adipiscing elit ...': [123456]} 키 - 값 저장소는 검색을 할 수 있습니까? – user142006

+1

나는 색인이 단지 색으로 키를 포함 할 것이라고 가정하고있었습니다. 이 세부 사항은 사용할 키 - 값 저장소에 따라 다릅니다. 당신은 당신의 대답에서 두 가지 다른 것들을 언급 했으므로 나는 질문이 일반적인 키 - 값 저장소 질문에 더 가깝다고 가정했다. Redis, Hadoop, Tokyo Cabinet, Metakit, Berkeley db, gdbm은 모두 키 - 값 저장소에 대해 서로 다른 기능을 제공합니다. –

2

기본적으로 인덱스 인 별도의 키/값 저장소를 유지해야합니다. "파란색"을 키로 사용하고 "주"자동차 상점의 모든 ID 목록을 파란색으로 표시합니다.

예, 일반 rdbms의 색인 기능을 복제합니다.

이것은 FriendFeed 팀이이 문제에 어떻게 접근했는지, 그리고 그 이유와 함께이 솔루션에 어떻게 합의했는지에 대한 좋은 기사입니다. (저는 알고 있습니다. RDBMS를 키/값 저장소로 사용했기 때문에 약간 이상하지만, 건전한 이론) :
http://bret.appspot.com/entry/how-friendfeed-uses-mysql

관련 문제