2013-05-25 2 views
2

현재 서버에서 이미 본 메시지의 기록을 유지해야하는 메시지 큐를 작성하고 있습니다. 각 메시지마다 고유 한 고정 크기의 ID 필드가 있으므로 사소한 문제가됩니다. 그러나 나는 모든 메시지의 ID를 저장하는 장기 전망에 대해 우려하고있다. 현재 ID의 길이는 160 비트입니다 (예, SHA1).여러 임의 값에 대한 비교를위한 저장소 알고리즘

메모리를 절약하기 위해 여러 ID를 하나의 필드로 압축하는 방법이 있다면 이상적으로 알고 싶습니다. 그렇다면 알고리즘에 대한 false-pos 및 false-neg 비율은 다음과 같습니다. 메시지 압축 기능 이상적으로, 나는 진짜로 가짜 부정적인 비율을 걱정하지 않는다. 그러나 을 많이 신경 쓰지 말고에 대한 거짓 긍정은 agrep와 같은 비교가된다.

+0

순수한 질문은 여기에 있습니다. 달리기 번호를 쓰지 않는 이유는 무엇입니까? –

+0

@AdamSmith : 나는 그것을 생각했다. 복수의 가능한 실행 번호가있는 여러 서버로 인해 수행 할 수 없습니다. –

+0

(노드가 다른 노드의 메시지를 중계하는 "피어 투 피어 노드 배포"라고 생각하십시오.) –

답변

1

질문에 확실한 답을 얻기에 충분한 정보가 실제로 포함되어 있지 않지만 bloom filters을 살펴볼 수 있습니다.

+0

토마스 : 편집하겠습니다. 한편 ... 블룸 필터의 아이디어는 훌륭합니다. 그러나, 나는 정확히 반대의 속성을 찾고 있어요 : 가양 성이 없으며 필요에 따라 많은 위음성이 있습니다. 데이터를 다시 보내도 상관 없습니다 - 데이터가 그리드에서 떨어지는 것을 염두에 두십시오. –

+0

@ SébastienRenauld [This] (http://cstheory.stackexchange.com/questions/6596/a-probabilistic-set-with-no-false-positives)/[this] (http://stackoverflow.com/questions/) 635728/반대 - 블룸 - 필터) 도움이 될 수도 있습니다. – Dukeling

1

각 메시지의 128 다이제스트 인 MD5를 사용하는 것이 좋습니다. 충돌은 바이트와 일치하는 바이트를 항상 두 번 확인할 수 있기 때문에 분명히 부적합합니다. 128 비트의 장점은 SHA1보다 다소 짧습니다 (16 바이트).

MD5를 기수 트리에 저장할 수 있습니다. 이렇게하면 데이터가 작고 쉽게 검색 할 수 있습니다.

0

나는 당신이 Persistent Hash Map 또는 Persistent Set을 원한다고 생각한다. 대부분의 해시 맵/세트 구현은 실제 객체를 비교하여 충돌을 처리합니다.

모든 키 해시를 메모리에 저장할 수 있으면 상각 된 일정 시간 조회를 수행합니다.

관련 문제