복붙노트

[REDIS] 레디 스 / NoSQL에의 도움이 필요의 개념화

REDIS

레디 스 / NoSQL에의 도움이 필요의 개념화

나는 레디 스를 사용하는 모든 명령의 좋은 파악을 가지고 있다고 생각하지만, 나는 그것을 사용하는 가장 좋은 방법을 알아내는 데 문제가 있어요. 나는 그들의 회로의에 알람이있을 때 선호하는 방법 (이메일, SNMP, 시스템 로그)를 통해이를 통지합니다 고객 알림 시스템을 설계하고있다.

그래서, 장치 이름 및 포트를 얻을. 나는 하나의 고객과 그 연결하고 전달 방법으로 해당 고객을 연결해야합니다. 관계형 DB, 그것은 아마 다음과 같이 보일 보일 것이다 :

Device name: Los_Angeles
Port: 11

SELECT Customer_ID, Customer_name from device_info where device_port = 'Los_Angeles:11'
SELECT Customer_protocol, SNMP_destination, Syslog_destination from CUSTOMER 
    where Customer_ID = <customer_id from above>

(예를 크게 단순화).

나는 목록 또는 해시의 해시의 해시이 프로그래밍 방식으로 작업을 수행하는 방법을 볼 수 있습니다. 하지만 제가 레디 스에서에 문제가있어하는 사람들보다 복잡한 데이터 구조 (내가 아는까지로) 나에게 사용할 수없는 것입니다 같아요. 그래서, 어떻게 하나의 키와 여러 정보를 연결합니까? 나는 그것을 할 수있는 몇 가지 방법을 생각할 수 있지만, 그들은 모두 여러 단계를 포함하는 것, 나는 "최고"방법이 작업을 수행 할 작업에 대한 현재의 레디 스 프로그래머에서 일부 입력을하고 싶습니다.

해결법

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

    1.당신은 간단한 데이터 구조 레디 스에 사용할 수 있는지 정확하고, (당신이 그런 CouchDB를 나 MongoDB를 같은 문서 지향 데이터베이스와 함께 할 수 있었던 것처럼) 그들은 값으로 구성 할 수 없습니다. 그러나, 참조 데이터 구조를 구성 할 수 있고, 이는 매우 일반적인 패턴이다.

    당신은 간단한 데이터 구조 레디 스에 사용할 수 있는지 정확하고, (당신이 그런 CouchDB를 나 MongoDB를 같은 문서 지향 데이터베이스와 함께 할 수 있었던 것처럼) 그들은 값으로 구성 할 수 없습니다. 그러나, 참조 데이터 구조를 구성 할 수 있고, 이는 매우 일반적인 패턴이다.

    예를 들어, 한 세트에 포함 된 항목은 다른 개체 (목록, 해시 테이블, 다른 세트 등)을위한 열쇠가 될 수 있습니다. 이제 귀하의 예제에이를 적용 해보자.

    고객과 장치 + 포트 사이의 관계를 모델링하기 위해, 당신은 고객의 ID가 포함 된 세트를 사용할 수 있습니다. 고객에 대한 정보를 저장하려면, 고객 당 하나 개의 해시 테이블은 괜찮습니다.

    여기에 고객은 다음과 같습니다 :

    hmset c:1 name Smith protocol tcp snmp_dest 127.0.0.1 syslog_dest 127.0.0.2
    hmset c:2 name Jackson protocol udp snmp_dest 127.0.0.1 syslog_dest 127.0.0.2
    hmset c:3 name Davis protocol tcp snmp_dest 127.0.0.3 syslog_dest 127.0.0.4
    

    이 레코드의 키는 C입니다 : ID

    하자의 장치와 포트로의 연관이 :

    sadd d:Los_Angeles:11 2 3
    

    이 세트의 키는 D이다 디바이스 포트. 는 C :와 D : 접두사 그냥 컨벤션입니다. 장치 / 포트 당 한 세트가 생성되어야한다. 주어진 고객은 여러 세트에 속할 (따라서 여러 장치 / 포트에 연결) 할 수있다.

    이제이 장치 / 포트에 연결된 전달 방법으로 고객을 찾기 위해, 우리는 단지 세트의 내용을 검색 할 수 있습니다.

    smembers d:Los_Angeles:11
    1) "2"
    2) "3"
    

    그런 다음 해당 고객의 정보는 hgetall 명령의 수를 파이프 라이닝하여 검색 할 수 있습니다 :

    hgetall c:2
    hgetall c:3
    1) "name"
    2) "Jackson"
    3) "protocol"
    4) "udp"
    5) "snmp_dest"
    6) "127.0.0.1"
    7) "syslog_dest"
    8) "127.0.0.2"
    1) "name"
    2) "Davis"
    3) "protocol"
    4) "tcp"
    5) "snmp_dest"
    6) "127.0.0.3"
    7) "syslog_dest"
    8) "127.0.0.4"
    

    명령의 수를 두려워하지 마십시오. 그들은 매우 빠르고, 가장 레디 스 클라이언트는 왕복의 최소 번호가 필요하다는 쿼리 때문에 파이프 라인 기능을 가지고있다. 한 smembers 여러 hgetall를 사용하여, 문제는 두 왕복으로 해결 될 수있다.

    지금, 더 유비쿼터스 SORT 명령 덕분에 조금을 최적화 할 수 있습니다. 이것은 아마도 레디 스에서 가장 복잡한 명령이며, 여기에 왕복을 저장하는 데 사용할 수 있습니다.

    sort d:Los_Angeles:11 by nosort get c:*->name get c:*->protocol get c:*->snmp_dest get c:*->syslog_dest
    1) "Jackson"
    2) "udp"
    3) "127.0.0.1"
    4) "127.0.0.2"
    5) "Davis"
    6) "tcp"
    7) "127.0.0.3"
    8) "127.0.0.4"
    

    하나의 명령에있어서,이 장치 / 포트 세트의 내용을 검색하고 대응하는 고객 정보를 가져온다.

    당신은 레디 스 복잡한 데이터 구조를 나타낼 수 있지만이 예는, 사소한,하지만 더 일반적이었다, 그것은 바로이 아니다. 당신은 신중하게 구조의 용어 및 데이터 액세스의 두 모델에 대해 생각해야합니다 (즉, 디자인 타임에, 당신의 데이터와 사용 사례에 스틱).

  2. from https://stackoverflow.com/questions/9425733/need-help-conceptualizing-in-redis-nosql by cc-by-sa and MIT license