2011-08-14 3 views
0

X와 Y의 두 종류의 사용자가있는 웹 사이트를 구축 중입니다. X는 몇백 개가되고 Y는 수백만 개가됩니다. 기본적으로 각 X에 대해 Y 세트가 있습니다. Y는 네트워크에 친구를 추가합니다. X는 특정 Y 세트에 표시 될 수있는 메시지를 게시하고 해당 사용자는 해당 메시지를 친구에게 전달할 수 있습니다. 친구들은 그 메시지를 볼 수 있으며 친구에게 전달하거나 발신자에게 답장 할 수 있습니다.Redis/NoSQL 데이터베이스의 유스 케이스와 관련된 질문

이것은 나의 유스 케이스로, 웹 사이트의 주요 관심사로 시스템의 확장 성 및 성능을 고려 중이므로 다른 종류의 데이터베이스를 주로 탐색하고있었습니다. 스프링 데이터 Redis API를 사용하기 시작했고, 유스 케이스에 유용하다고 생각했습니다. 여기 내 질문은 Redis에서 특별히 NoSQL 데이터베이스에서 '업데이트'작업을 수행하는 방법입니다. Redis에 저장된 사용자 정보를 업데이트하려고합니다. 또 다른 질문은 '연령'필드가있는 Redis에 사용자 정보를 저장 한 경우 30 세 미만의 모든 사용자를 확보하는 것과 같은 작업을 수행하는 방법입니다.

저는 NoSQL 세계에서 상당히 새로운 경험을 가지고 있습니다. 또한 유스 케이스의 올바른 데이터베이스에 대해 숙련 된 사람들의 의견을 듣고 싶습니다. 나는 이전에 데이터베이스와 같이 MySQL과 Spring, Hibernate 조합을 사용했으며 시스템에 부하가 많은 경우 시스템의 성능에 만족하지 않았습니다. 여기

감사합니다, Sachin

답변

2

내 질문은 우리가 레디 스에서 데이터베이스 특별히되는 NoSQL의 '갱신'작업을 수행 할 방법이다. Reddy에 저장된 정보 을 업데이트하려고합니다.

이것은 사용자를 저장하는 구조에 따라 다릅니다. A fifteen minute introduction to Redis data types 자습서를 사용하면 이러한 데이터 구조에 대한 더 큰 그림을 얻을 수 있습니다. 일반적으로 업데이트는 SET 작업으로 수행되므로 사용자 정보를 hash 구조에 저장하고 특정 필드를 업데이트하려면 HSET 명령을 사용합니다. 내가 등의 작업을 수행 할 어떻게

또 다른 질문은 나에게 우리가 사용자에게 '나이'필드를 가지고 레디 스에서 정보를 저장 만 있으면 30 세 이하 모든 사용자를 얻을 수있다.

Redis는 고급 키/값 데이터 저장소이며 SQL 월드에서 익숙한 것처럼 데이터를 쿼리하는 ad hoc을 지원하지 않습니다. 이 질의 기능이 필요한 경우,이를 지원하는 다른 NoSQL 솔루션을 살펴보아야합니다 (예 : MongoDB 또는 this 목록에서 확인하십시오).

2

Redis가 원하는 것을 수행 할 수 있는지 확인하는 가장 좋은 방법은 개발 컴퓨터에 설치하고 redis-cli을 시도하는 것입니다. 이 내장 클라이언트는 명령 완성과 도움을받을 수 있습니다 (범주를 보려면 help <TAB>을 누르십시오). http://redis.io/commands에서 좋은 설명서를 볼 수 있습니다.

귀하의 요청에 따라 sorted set 데이터 구조를 연구하여 사용자 정보를 저장해야합니다.

것은 당신이 포함 된 데이터베이스, 18에서 30 세 사이의 모든 사용자를 조회 할 수 있도록한다고 가정 : 이것은 는 않기 때문에 당신이 볼 것 같은, 당신에게 쿼리의 몇 가지 기본적인 형태를 허용, 혼자 sets보다 낫다 (예) 3 명의 사용자 : 조, 28 년; 밥, 17 년; 아담, 50 년. 구문은 ZADD [key] [score] [member]입니다

ZADD age 28 Joe 
ZADD age 17 Bob 
ZADD age 50 Adam 

:

당신은 레디 스를 채우는 것입니다. 세트는 [key]이며, 정렬 된 세트는 각각 [member]입니다. [score]입니다. 은 두 번이어야합니다. 이는 문자열 패턴이나 문자열 값을 사용하여 점수를 쿼리 할 수 ​​없다는 것을 의미합니다 (이 시점에서 Mongo는 더 좋을 것입니다).

그래서 쿼리 할 시간입니다. 지금 redis-cli 쿼리를 붙여 넣습니다 :


18에서 30 세 사이의 모든 사용자를 나열하려면, 당신은 할 것 :

redis> ZRANGEBYSCORE age 18 30 
1) "Joe" 
redis> ZRANGEBYSCORE age 18 30 WITHSCORES 
1) "Joe" 
2) "28" 

옵션 WITHSCORES는 결과의 각 멤버의 점수를 보여줍니다.


는 18 세 미만의 모든 사용자를 나열하려면 다음

redis> ZRANGEBYSCORE age 0 (18 
1) "Bob" 
redis> ZRANGEBYSCORE age 0 (18 WITHSCORES 
1) "Bob" 
2) "17" 

( 수정은 시작 또는 끝 간격이 열려있을 수 있습니다. where age >=0 and age < 18과 같습니다.

redis> ZRANGEBYSCORE age 30 +inf 
1) "Adam" 
redis> ZRANGEBYSCORE age 30 +inf WITHSCORES 
1) "Adam" 
2) "50" 

+inf은 무한대이기 때문에, 상한은 where age >= 30 같은 결과에 없다 :


은 30 세 이상 모든 사용자를 나열합니다.

등등.


이것은 실제로 시작에 불과합니다. 최적화 된 라이브러리 (예 : phpredis)를 사용하는 경우 교차점, 결합 및 select count(*) 조작을 정렬 된 세트로 모두 수행 할 수 있습니다. 지금 당신이 그것에 대해 좋은 인상을 주길 바랍니다.

관련 문제