이 형식의 SQL 테이블을 제공하는 ip2location 서비스에 대한 구독이 있습니다.
FromIP (int), ToIP(int), lat, long, city etc etc
내 액세스 로그를 구문 분석하고 모든 사용자를 분류하고 싶습니다. 액세스 로그에는 IP 주소와 사용자 ID (예)가 있습니다.
그래서 다음과 같은 쿼리를 실행합니다.
select city from ip2location where FromIP <= $ipAsInt AND ToIP => $ipAsInt
그러나 이것은 내가 파싱 해야하는 백만 개 이상의 레코드에 너무 오래 걸립니다. 나는 이것이 ip2location의 매우 일반적인 사용이어야한다고 생각합니다. 구조를 최적화 할 수 있습니까?
가장 쉬운 방법은 정렬 된 IP 순서로 조회하는 것이 었습니다. IP를 조회 할 때 마지막 IP도 선택합니다.
이렇게
FromIP <= $ ipAsInt AND ToIP => $ ipAsInt 인 ip2location에서 city, ToIP 선택
이제 다음 주소를 조회해야 할 때 다음 IP가 이미 마지막 $ ToIP보다 작은 경우 테이블을 쿼리하지 않습니다.
1,000 회 조회마다 여기서는 약 80 번만 쿼리합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다