2010-02-16 8 views
7

키 값 저장소에 인덱스가있는 데이터베이스 테이블을 시뮬레이션하는 가장 쉬운 방법은 무엇입니까? 키 값 저장소에는 범위 지정 쿼리가없고 정렬 된 키가 없습니다.키 값 저장소에 인덱스가있는 데이터베이스 테이블을 시뮬레이션하는 가장 쉬운 방법은 무엇입니까?

내가 시뮬레이션하고 싶은 일을 (우선 순위의 순서대로) :

  1. 이 테이블을 작성
  2. 임의에 따라 기본 키
  3. 쿼리를 기반으로 인덱스를
  4. 쿼리 만들기 열을
  5. 추가 열
+3

어떤 부분을 시뮬레이션합니까? SQL 호환성? 성능 특성? 그냥 정수 기본 키를 기반으로 올바른 개체를 받고? –

+0

성능면에서 구현할 수있는 모든면. – Zubair

+0

귀하의 질문은 명확하지 않으며 귀하의 "설명"은 어떤 것도 명확히하지 않았습니다. @ MB의 의견에 응답하면 더 나은 응답을 얻을 수 있습니다. –

답변

4

Redis (문자열, 목록, 집합 등을 지원하는 고급 키 - 값 저장소)을 사용하는 경우 매우 간단합니다. 나는 이미 C# redis client을 개발했으며, POCO의 데이터 모델을 저장하기위한 기본 지원을 제공합니다. 정확하게 동일한 POCO를 OrmLite이 사용하여 RDBMS에 저장할 수 있습니다. 레디 스가 빠르고 그런데

, 나는 benchmark 그 매장을 가지고 있으며 1.2에서 초 (A 3yo 아이맥에 유닛 테스트 내에서 실행)에서 전체 Northwind 데이터베이스 (3202 개 레코드) 검색합니다.

나는 두 가지 방법

고유 키, 예를 들어를 만들 내가 클래스 형의 이름과 기본 키를 결합
  • 고유 개체에서 개체를 저장 urn:user:1
    • 나는 다음과 같은 키를 사용, 내 모든 실체를 추적하기 (A 레디 스 세트에서) 기본 키의 세트를 별도로 유지하십시오 레디 스 서버 측 목록에서 ids:user
  • 를 - 이는 역할 다음과 같은 키를 사용하여 페이징을 지원하는 테이블과 매우 비슷합니다. lists:user
+0

나는 과거에 Redis를 사용 했었습니다. 그렇습니다. 정말 빨랐습니다. 특히, 모든 범위, 설정 및 원자 (incr 및 decr) 연산이 좋았습니다. 지금은 동적으로 확장 할 수있는 데이터베이스 (Riak)에 수십억 개의 레코드를 저장하는 시스템을 다루므로 Redis는 모든 것을 메모리에 맞춰야하므로 적절하지 않습니다 – Zubair

+0

실제로 redis 트렁크는 여전히 1.6GB의 메모리만으로 1,000 만 개의 키를 저장할 수 있으며, 여전히 놀랍도록 빠르다. http://antirez.com/post/redis-virtual-memory-story.html – mythz

+0

그래, 나 그것을 보았다, 매우 시원한! 사실, Riak조차도 Redis 기반 백엔드를 보유하고 있습니다. 그래도 수십억 개의 레코드로 확장되지는 않지만 매우 훌륭합니다. – Zubair

2

해시 테이블이나 사전을 사용하십시오. 고유 한 키 값을 원할 경우 GUID 또는 해시 코드를 사용할 수 있습니다.

+0

기본 키에 대한 hastable을 의미합니까? 그리고 사전은 어디에 들어 맞습니까? – Zubair

+0

사실, 해시 테이블이 아마도 당신에게 더 잘 어울릴 것이라고 생각합니다. 사전은 또 다른 가능한 옵션입니다. –

1

키 - 값 저장소는 키 정렬 순서와 키에 대한 액세스 권한을 지원해야합니다.

그럼 당신은 작성해야 두 개의 사전 : payload 모든 데이터베이스 테이블에 포함 할 데이터와를 포함해야 두 번째 사전의 키를 포함해야

id -> payload 

col1, id -> NULL 

, 첫 번째 사전의 각 항목에서 (col1, id)의 값.

+0

사용중인 키 값 저장소가 키 정렬이나 원거리 액세스를 지원하지 않습니다. – Zubair

+0

또한, 당신은 대답을 바꿀 수 있습니까, 나는 사전에 관한 부분을 이해하지 못했습니다. 또한 col1은 무엇입니까? – Zubair