2011-01-05 1 views
2

Redis를 실험 해본 결과 테이블에 적용되는 확장 성이 정말 좋았습니다. 그러나, 이미 생산중인 시스템의 데이터 구조 변경을 처리하는 방법이 궁금합니다.데이터 구조에 대한 Redis - handling 변경

예를 들어 사용자에 대한 정보를 수집 중이며 user_id를 키로 사용하고 사용자에 대한 다른 데이터를 쉼표로 구분 된 값으로 덤핑한다고 가정 해 보겠습니다. 이제

user_id: name, email, etc. 

은 약 10 만 기록 후, 나는 email에 의해 쿼리에 필요한 것을 깨닫게 말 - 내가 어떻게 지금 기존 데이터의 스냅 샷을하고 그것을위한 새로운 인덱스를 만들 것인가?

답변

0

Redis에 대한 나의 이해에서, 이것은 Redis가하도록 설계된 것이 필요합니다. 모든 레코드 (키 * 사용)를 반복 한 다음 데이터 순서를 변경하고 새 키를 만들어야합니다. 개인적으로 쉼표로 구분 된 문자열 대신 목록을 사용하는 것이 좋습니다. 목록에서 redis 내부에서 재정렬 할 수 있습니다. Redis 목록은 다음과 같습니다.

"Colum" => [0] [email protected] 
      [1] password 
      [2] Something 

동일한 문제가 발생한 앱을 구축 중입니다. 나는 모든 사용자의 정보에 대한 목록을 가지고 그것을 해결하고 사용자의 ID 값을 가진 사용자의 이메일을 가진 키를 가지고있다. 따라서 내 데이터베이스는 다음과 같습니다.

"Colum" => [0] [email protected] 
      [1] password 
      [2] Something 
"[email protected]" => "Colum" 

따라서 ID 나 전자 메일을 쿼리하여 필요한 정보를 얻을 수 있습니다.

죄송합니다. 귀하의 질문에 직접 답변 할 수 없었습니다. 이 도움이 되었기를 바랍니다.

+0

네, 감사합니다. 목록을 사용하는 것이 여기에서 가장 중요한 규칙 인 것 같습니다. CSV의 어떤 형태로든 미래의 변화를 매우 어렵게 만듭니다. – jeffreyveon

+0

기꺼이 도와 드리겠습니다. 내가 Redis에서 시작했을 때 나는 이것을 어려운 길에서 발견했다. – Colum

1

변경 사항을 지원하려면 csv를 사용하는 것은 좋지 않습니다. 모든 것이 하나의 키에있는 경우 누락 된 값이나 새 값을 처리하는 serializer를 사용해야하거나 이름이 지정된 하위 키를 제공하는 redis 해시를 사용할 수 있습니다. 어느 쪽이든 당신은 당신의 코드가 새로운 값없이 레코드를 읽었을 때해야할 일을 알고 있다는 유일한 요구 사항으로 필드를 추가/삭제할 수 있습니다.

이메일 조회를 허용하려면 기본적으로 사용자 아이디를 값으로하는 각 이메일의 키 (또는 목록)를 추가해야합니다. 모든 키를 한 번 가져 와서이 색인을 채워야하고 이메일이 바뀔 때 업데이트해야합니다.

모든 키를 반복하고 다른 ID를 사용하여 저장할 수는 있지만 그만한 가치가 있습니다.