2012-06-06 4 views
4

나는 redis를 사용하여 키 값 저장소를 개발하려고합니다. 나는 String(key)-->Object(value) 타입의 hashmap을 사용하도록 제안했다. 나는 protobuf을 사용하여 객체 serilaize에게 조언을받습니다.proto는 항상 redis에서 필요합니까?

플랫폼 독립적 인 Java를 사용하여이 데이터를 읽는 경우에도 protobuf을 사용하면 어떤 이점이 있습니까? 객체를 직접 redis에 넣고 다시 가져 와서 캐스팅하면 문제가 발생합니까?

이 제품의 효율성에 중점을두고 있으므로 불필요한 처리를 원하지 않습니다.

답변

10

redis와 함께 protobuf를 사용할 필요가 전혀 없습니다. 핵심은 대개 간단합니다 : 오늘, 내일 및 내년에 데이터를 안정적으로 얻을 수있는 직렬화 프레임 워크를 선택하는 것입니다. 당신은 json, xml 등을 사용할 수 있습니다. 많은 경우, 하나의 문자열 값이 직렬화를 완전히 우회하기에 충분합니다 (직렬화로 "인코딩"하지 않는 한).

일반적으로 플랫폼 독점 직렬화에 대해 조언합니다. 이는 수년 내에 데이터를 C++로 다시 가져와야하는 경우 도움이되지 않을 수 있으며 일반적으로 버전 관리 측면에서 유연성이 떨어집니다.

Protobuf는 같은 주요 기능이 같은 합리적인 선택 :

  • 작은 출력을
  • CPU를 효율적으로 처리 (앱에서 처리를 감소 (응용 프로그램 및 레디 스, 스토리지 요구 사항 사이의 대역폭 감소))
  • ,

그러나 버전 허용

  • 크로스 플랫폼을 위해 설계된 다른 무척 lizers도 작동합니다. 일반 텍스트와 redis 해시, 즉 객체 속성 당 해시 속성을 사용할 수도 있습니다. 그러나 대부분의 경우 전체 객체를 가져 오려고하므로 간단한 "get"및 적절한 직렬화 API에 대한 데이터 전달이 일반적으로 더 적절합니다.

    우리 자신의 redis 사용에서 우리는 을 수행합니까?은 protobuf를 사용하지만, 우리는 또한 "protobuf 출력을 gzip으로 압축합니까?" - 그럴 경우 gzip 데이터를 보냅니다 (또는 작은 경우 원래의 압축되지 않은 데이터를 저장하고 분명히 해당 데이터를 나타내는 마커).

  • +0

    재 지정 맵의 값은 바이트 배열입니다. redis get 작업 후에 바이트 배열을 캐스팅하는 바이트 형식으로 개체를 직접 넣는 것처럼 간단한 직렬화 프레임 워크가 있습니까? 내 개체에 대한 문자열 클래스 getBytes() 인터페이스와 같은 것이 필요합니다. – user1017860

    관련 문제