복붙노트

[REDIS] 레디 스 GET SQL SELECT 대

REDIS

레디 스 GET SQL SELECT 대

나는 NoSQL에에 아주 새로운 오전,하지만 난 항상의 아이디어를 좋아했다. 나는 레디 스에서 살펴 보았다, 그리고 저장하고 여러 해시를 잡의 최선의 방법에 대한 몇 가지 질문을 얻었다.

다음과 같은 시나리오를 가정 :

Store a list of objects (redis 'Hashes') and select them by their timestamp.

SQL이를 보관하기 위해서는 하나 개의 테이블과 두 개의 간단한 쿼리 (INSERT 및 SELECT)를 필요로한다.

레디 스에서이 작업을 수행하려고, 나는 다음과 같은 구조를 만들어 결국 :

내가 대신 하나 개의 테이블 (SQL)의 두 개의 키의 추가 유지 보수 작업과 함께 살 수있는 동안, 나는 여러 개체를 선택하는 과정에 대해 궁금합니다 :

ZRANGEBYSCORE index:timestamp:$id timestampStart timestampEnd

이 timestampStart 및 timestampEnd 사이에있어 모든 ID의 배열을 반환합니다. 나는에 의해 모든 하나 하나를 요청하고 객체 자체를 얻으려면 :

GET object:$id 

해결법

  1. ==============================

    1.ZRANGEBYSCORE 비용 O (로그 (N) + M) 여기서 N = | 당신의 설정 항목 | 및 M = | 항목 당신에게있는 거 선택을 |. 그래서, ZRANGEBYSCORE 다음 M의 GET 작업을하고 그냥 O (긴 (N) + M + M) = O (로그 (N) + M)와가에서 가장 느린 배 될 것입니다. 네트워크 앞뒤로 주요 천천히 아래로 수 있었다, 그러나 도착하여 각각 독립적 인 작업이기 때문에, 당신은 그들을 단지 파이프 라인 수 있습니다. 또한 루아 스크립트에서 모든 것을 넣어 바로 최적의 것 등 하나 개의 뒷면을 가질 수 있습니다. 나는이 빠른 SQL에서 같은 일을하는 것보다 것 99 % 확실하게 말할 것입니다.

    ZRANGEBYSCORE 비용 O (로그 (N) + M) 여기서 N = | 당신의 설정 항목 | 및 M = | 항목 당신에게있는 거 선택을 |. 그래서, ZRANGEBYSCORE 다음 M의 GET 작업을하고 그냥 O (긴 (N) + M + M) = O (로그 (N) + M)와가에서 가장 느린 배 될 것입니다. 네트워크 앞뒤로 주요 천천히 아래로 수 있었다, 그러나 도착하여 각각 독립적 인 작업이기 때문에, 당신은 그들을 단지 파이프 라인 수 있습니다. 또한 루아 스크립트에서 모든 것을 넣어 바로 최적의 것 등 하나 개의 뒷면을 가질 수 있습니다. 나는이 빠른 SQL에서 같은 일을하는 것보다 것 99 % 확실하게 말할 것입니다.

    이 당신을 위해 매우 빈번한 작업이있는 경우 또한, 당신은 더 얻으려면, 당신의 소트 세트에 전체 개체를 저장하는 대신에 단지 ID로 속도를 높일 수 있습니다. 당신은 키 =이 JSON, 점수 = 타임 스탬프로 인코딩 된 객체가 것입니다. 이것은 어떤 가져 할 필요가 없다는 점에서 당신의 작업에 당신이 O (M)을 저장합니다.

    이 일을하는 좋은 방법입니다 여부에 상관없이 정말 사용 사례에 따라 달라집니다. 얼마나 속도 당신이 정말로 필요하고 얼마나 중요한지 당신에게 전통적인 데이터베이스의 다른 특징은 무엇입니까? 레디 스 전통적인 데이터베이스보다 훨씬 많은 단지 데이터 구조체에 액세스 클라이언트에서, 그리고 그것이 RAM의 모든 내용을 저장해야합니다 기억하십시오. 당신을 위해 옳은 일인지 알고, 우리는 더 많은 정보가 필요 것입니다.

  2. from https://stackoverflow.com/questions/16886603/redis-get-vs-sql-select by cc-by-sa and MIT license