[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.당신은 간단한 데이터 구조 레디 스에 사용할 수 있는지 정확하고, (당신이 그런 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"
하나의 명령에있어서,이 장치 / 포트 세트의 내용을 검색하고 대응하는 고객 정보를 가져온다.
당신은 레디 스 복잡한 데이터 구조를 나타낼 수 있지만이 예는, 사소한,하지만 더 일반적이었다, 그것은 바로이 아니다. 당신은 신중하게 구조의 용어 및 데이터 액세스의 두 모델에 대해 생각해야합니다 (즉, 디자인 타임에, 당신의 데이터와 사용 사례에 스틱).
from https://stackoverflow.com/questions/9425733/need-help-conceptualizing-in-redis-nosql by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스에서 다른 목록으로 목록을 삽입 (0) | 2020.01.07 |
---|---|
[REDIS] 레디 스의 루아 때 정말 그것을 사용하는 방법? (0) | 2020.01.07 |
[REDIS] 중간 크기의 문서를 저장 수천 가장 효율적인 문서 지향 데이터베이스 엔진은 무엇입니까? (0) | 2020.01.07 |
[REDIS] 레디 스 투명 거대한 페이지 해제하는 경우 (0) | 2020.01.07 |
[REDIS] 레디 스은 / 접두사와 레디 스에서 모든 키 및 값을 가져옵니다 (0) | 2020.01.07 |