2011-09-11 5 views
1

나는 형태의 URL의 1000 년대를했습니다 : 나는 관련 이동 경로를 저장하려는 각 URL에 대한PHP는 데이터 구조의 제안은 필요

http://www.downloadformsindia.com/index.php?option=com_download&e=n&task=showpage&file=Forms%252Fmisc%252Ficc%252Fhdfcbank%252FBlocking%20ATM%20and%20Debit%20Card%20Form.pdf&title=HDFC%3ABlocking%2BATM%2B%26%2BDebit%2BCard%2BForm&code=igi 

. 따라서 이와 같은 URL을 방문 할 때마다 사이트 링크가 표시됩니다.

그래서 빵 부스러기가있는 URL을 저장하는지도가 필요합니다. URL은 해시 키입니다.

제 문제는 PHP에서는 작동하지 않았지만 C++/Java 또는 Perl에서만 작동한다는 것입니다. 나는 디스크 변수를 영구히 저장하기 위해 그것을 직렬화하는 PHP 변수에 10,000 개의 그러한 값을 포함하는 해시를 원한다. 각 페이지로드마다 저장된 해시 변수를 즉석에서 만들고 URL을 해시 키로 검색합니다. 꽤 빨라야합니다. PHP 해시가 트리 맵 또는 해시 맵을 사용하는지 잘 모르겠습니다. 좋아, 내가 해시지도로 간다면 어떻게 모든 URL이 단일 양동이에 들어갈 수 있도록 URL을 키로 균등하게 분배합니까?

아이디어를 환영합니다.

+0

Joomla를 사용하는 것처럼 보입니다. 내장 빵 부스러기를 사용하지 않고 시간과 노력을 절약 해보십시오. –

+0

Joomla 1.5의 breadcrumb가 제대로 작동하지 않습니다. 나는 그것이 버그라고 생각한다. 그래서 나 자신이 빵 부스러기를 표시하기 위해 맞춤 코딩을했습니다. – user911216

답변

1

간단한 연관 배열을 사용해 볼 수 있습니다. PHP는 기본적으로 배열 인덱스에 문자열을 사용할 수 있습니다. 기본 데이터 구조가 확실하지 않지만 항상 벤치마킹 할 수 있습니다.

1

PHP의 연관 배열은 해시 테이블 (해시 맵)입니다.

모든 문자열을 키로 허용하므로 URL에 직접 키를 사용할 수 있습니다.

$data = array(); 
$data[$url] = $data_for_this_url; 

을 그리고 (특히 연산 코드 캐시 가져올 빠르게 될 수있는 이상) serialize() 또는 var_export()로 내보낼 :

당신은 단지 배열을 생성하고 이런 식으로 할당 할 수 있습니다.

이것은 해시 테이블이므로 키가 해시 테이블에 고르게 분산되도록 해시 테이블입니다. 테이블은 너무 많은 충돌을 피하기 위해 필요에 따라 커집니다. 이 일을 처리 할 필요가 없습니다.

+0

고마워요.하지만 내 주요 질문은 어떻게 URL을 (위에서 언급 한) withnin 연관 배열 확산됩니다. 최악의 경우 모든 URL은 단일 버킷으로 들어갑니다. 그것들을 고르게 분산시키는 방법? – user911216

+0

이것은 ** 해시 ** 테이블이므로 키가 균등하게 분배되도록 해시되어 있으므로이 키를 관리 할 필요가 없습니다. FYI [이것은 해시 함수입니다.] (https://github.com/php/php-src/blob/0611a4d6fff81c22cd85b88496f82cfcc146dcb0/Zend/zend_hash.h#L261) – arnaud576875

0

더 빠른 출력을 위해 데이터 구조를 사용하려면 redis으로 php를 사용할 수 있습니다. 아래 확장자를 확인할 수 있습니다.

https://github.com/phpredis/phpredis 

희망이 도움이 될 것입니다.

관련 문제