2009-04-16 7 views
6

우리는 포함 된 값이나 레코드 수를 변경하는 가격 데이터 집합을 가지고 있습니다. 추가되거나 제거 된 레코드의 수는 값의 변경에 비해 적습니다. 일반적으로 데이터 세트에는 8 개의 속성이있는 50 ~ 500 개의 항목이 있습니다.데이터 변경을 감지하는 최고의 해시 기능?

현재 AJAX를 사용하여 데이터 세트를 나타내는 JSON 구조를 반환하고이 구조를 사용하여 새 값으로 웹 페이지를 업데이트하고 필요한 경우 항목을 제거하거나 추가합니다.

두 개의 해시 값 (하나는 값, 다른 하나는 레코드)으로 요청합니다. JSON 구조로 반환 된 MD5 해시는 다음 요청과 함께 전송됩니다. 해시가 변경된 경우 새로운 JSON 구조가 필요하다는 것을 알고 있으면 해시가 반환되어 대역폭을 절약하고 불필요한 클라이언트 측 처리를 제거합니다.

일반적으로 MD5는 암호화와 함께 사용되므로 데이터 변경을 감지하기위한 해싱 알고리즘을 선택하는 것이 가장 좋습니다.

추가 또는 제거 된 항목을 감지하고 이에 따라 페이지 DOM을 조작 할뿐만 아니라 값 변경 및 업데이트를 감지 할 수있는 다른 방법은 무엇입니까?

답변

10

MD5는 일련의 데이터에 대한 변경을 감지하는 데 적합한 알고리즘입니다. 그러나 암호화 속성에 관심이없고 알고리즘의 성능에 매우 관심이있는 경우 암호로 안전하게 설계되지 않은 간단한 체크섬 스타일의 알고리즘을 사용할 수 있습니다. (MD5의 약점은 최근 몇 년 동안 발견되었지만 여전히 암호로 보호되도록 설계되어 있으므로 시나리오에 필요한 것보다 많은 작업이 필요합니다.)

그러나 MD5의 계산 성능이 만족 스럽다면 나는 그것에 충실 할 것입니다.

-3

저는 일반적으로 사용되는 해시 함수가 원하는 것을 수행 할 것이라고 생각합니다. 엔티티의 고유 한 표현을 제공하십시오.

해결하려는 문제에 대한 나의 해결책은 모든 변경 사항을 기록하는 백엔드 테이블을 갖는 것입니다. 변경 자체는 아니지만 변경된 행의 식별자입니다. 주기적으로 서버에 콜백하고 변경된 모든 객체의 목록을 가져 와서이 행을 사용하여 업데이트/삭제/추가가 필요한 행을 결정합니다.

+1

이것은 일반적인 오해입니다. 해시 함수는 "엔티티의 고유 한 표현"을 제공하지 않습니다. 사실 도메인이 범위보다 큰 해시 함수의 경우에는 해당하지 않는 것이 보장됩니다. – recursive

0

당신이하는 일은 나에게 꽤 좋은 것처럼 들립니다.

서버 측 용량이 저렴하고 네트워크 사용을 최소화하는 것이 중요한 경우 서버가 각 클라이언트에 대해 마지막 데이터 세트를 기억하고 차이점 만 전송할 수 있습니다 (삽입, 삭제 및 편집 목록으로).)를 요청합니다. 데이터 행을 먼저 정렬하는 경우 이러한 차이는 diff에서 사용되는 것과 같은 차이 알고리즘을 사용하여 상당히 효율적으로 계산할 수 있습니다.

이 접근법은 네트워크 중단에 민감합니다. 한 응답을 클라이언트가 수신하지 않으면 오류가 누적됩니다. 그러나 클라이언트가 각 요청마다 MD5 해시를 전송하도록하면이 문제를 해결할 수 있습니다. 서버가 예상하는 것과 다른 경우 MD5 해시 목록에 변경 목록 대신 전체 목록이 전송됩니다.

4

MD5는 훌륭합니다. 성능이 너무 낮 으면 Adler-32과 같이 빠른 체크섬 알고리즘을 시도 할 수 있습니다.

0

MD5에 관한 Jonathan의 답변에 동의합니다. 변화를 감지하는 또 다른 방법으로, 가장 최근에 변경 한 시간/날짜를 서버에 저장 (또는 이미 저장)하려는 경우, 클라이언트로 그 변경 사항을 전달할 수 있습니다.계산을 완전히 피할 수 있으며 대부분의 기존 코드를 사용할 수도 있습니다.

-
BMB

관련 문제