2012-06-18 1 views
1

언어 코드가있는 객체가 키 필드로 많이 있습니다. Java와 Mongodb은 기본적으로 UTF-8을 사용하기 때문에 언어 코드가 ASCII이기 때문에 문자 당 1 바이트와 \ 0 터미네이터를 사용해야합니다. 따라서 언어 코드 "en"은 BSON 객체와 색인에서 3 바이트 만 가져야합니다.ASCII 문자열을 바이트로 변환하여 Mongodb 색인의 공간을 절약 할 수 있습니까?

이 정보가 맞습니까? 자바 드라이버를 사용하여 MongoDB에 저장하기 전에

byte[] lcBytes = langCode.getBytes("ISO-8859-1"); 

: 나는 같은 바이트 배열로 내 필드를 변환하여 아무것도 저장 여부를 궁금?

답변

3

bson spec에 따르면,이 차이하지 않습니다 즉

string ::= int32 (byte*) "\x00" 
binary ::= int32 subtype (byte*) 

을, 문자열이 바이너리는 1 바이트의 하위 유형을 필요로하면서, (따라서 한 바이트를 낭비)는 0이 끝나는 들.

물론 완벽하게 일치하는 문자 세트는 바이트 배열 자체가 더 작을 수 있습니다 (예 : 자주 사용하는 문자에는 3 바이트가 필요하지 않고 하나만 필요함). 다시 말하지만, 정규식, map/reduce, js 함수 등을 사용하는 것이 불가능하기 때문에 혼전의 가치가 있다고 생각하지는 않습니다. 아크 랜스 문자 집합의 경우일지도 모르지만, 8859-1은 너무 특별하지 않습니다.

줄임표로, index size is limited to about 1k을 염두에 두어 색인에 매우 긴 문자열을 던질 수는 없으며 성능면에서는 좋지 않습니다.

평등을 기준으로 쿼리해야하는 경우 대신 해시를 선택할 수 있습니까? 매우 큰 문자열 (인덱싱되지 않음)을 저장해야하는 경우 압축 알고리즘을 사용하는 것이 좋습니다.

관련 문제