WWW 프레임 워크에서 API 호출을 많이 캐싱하고 버퍼링하는 것을 사용하고 있으며, 핑거 프린팅 (fingerprinting) '데이터를 사용하여 캐시 파일 이름을 일치시키고 이미 만들어진 API 호출을 탐지합니다.배열 지문 채취를위한 가장 빠른 방법 (데이터 배열에서 고유 한 해시 계산)
많은 데이터가 GET, POST 등과 같이 배열로 이동됩니다. 결과적으로 API 호출의 고유성은 데이터에 따라 다릅니다.
결과적으로이 정보를 지문 채취해야합니다. 그렇게하려면 데이터 배열에서도 '지문'을 생성해야하며이를 저장하고 비교할 수있는 문자열로 해싱해야합니다.
배열 직렬화의 경우 PHP에서 serialize() 및 json_encode()가 있습니다. 다양한 벤치 마크 이후에 나는 json_encode()를 배열을 직렬화하는 더 빠른 방법이라고 생각하고 꽤 만족한다.
해시에는 md5() 및 sha1() 함수가 있으며, 그 중 md5()는 내 벤치 마크에 따라 더 빠릅니다.
$fingerprint=md5(json_encode($array));
그러나 나는이 PHP에서 배열을 지문에 대한 '가장 빠른'방법인지 의문을 데 :
그래서 내 현재의 지문 알고리즘이다. 나는 Google과 StackOverflow를 시도했지만 좋은 대안을 찾지 못했다. 올바른 길을 가고 있습니까? 아니면 다른 것을해야합니까?
'md5 (var_export ($ data, true)) '는 어떻게 비교됩니까? 또한'json_encode'에 의해 보존 될 순서에 의존 할 수 있는지 궁금합니다. 키 순서가 다르기 때문에 캐시를 놓치는 것이 좋지 않습니다. – Hamish
var_export()는 serialize()보다 빠르지 만 테스트 결과에 따라 json_encode()보다 느립니다. mc5()를 대체하기 위해 crc32()를 찾고 있습니다. 테스트해야합니다. – kingmaple
음, 분명히 (놀랍게도) crc32()는 실제로 md5()보다 느리고 물론 충돌 가능성이 더 큽니다. 그래서 나는 md5 (json_encode ($ array))에서 이전 위치로 되돌아 간다. – kingmaple