상점에 주소가 포함되어 있는지 빠르게 확인하거나 3.4.*.*
또는 *.5.*.*
과 같은 패턴과 일치하는 모든 주소를 반환 할 수 있도록 약 60000 개의 IP 주소와 같은 항목을 저장해야합니다. 이전 구현에서는 네 레벨 깊이로 중첩 된 HashTables
을 사용했습니다. 스레드가 완전히 안전하지는 않으며 이로 인해 버그가 발생합니다. 이 스레드를 외부 레이어에서 잠글 때 안전하게 할 필요가 있거나 모두를 ConcurrentDictionaries
으로 변경할 수 있지만 그 옵션 중 어느 것도 적합하지 않은 것으로 보입니다. 사전에있는 키에 대한 바이트를 사용하는 것은 나에게 일반적으로, 특히 중량이 큰 사전을 느낄 수 없었습니다. 제안?아이디어?
Q
아이디어?
1
A
답변
0
구아바는 IP 조회 일치를 저장하기 위해 접두어 trie를 사용합니다. 당신은 여기에 코드를 볼 수 있습니다
이 자바 코드입니다,하지만 난 당신이 쉽게 C 번호에 적응할 수있는 확신합니다. 접두어 trie의 기술은 언어와 독립적으로 적용 가능하며 자유로운 와일드 카드 매치를 얻을 수 있습니다. 임의의 와일드 카드를 원한다면 직접 구현해야합니다. 또는 Directed acyclic word graph (DAWG)과 비슷한 데이터 구조를 만들 수도 있습니다. 이렇게하면 임의의 와일드 카드 일치를 직접 구현할 수 있습니다.
+0
"trie"는 내가 필요한 단어입니다. 감사. – Brannon
관련 문제
- 1. 좋은 아이디어/나쁜 아이디어 (/ 다른 아이디어?)
- 2. 아이디어
- 3. 아이디어
- 4. 아이디어
- 5. ... 아이디어
- 6. 아이디어?
- 7. mvn 아이디어 : 아이디어 제외 폴더 와일드 카드?
- 8. MQ 캐시? 좋은 아이디어 또는 나쁜 아이디어?
- 9. DataDeduplication 아이디어
- 10. 아이디어 업데이트
- 11. 아이디어 검증
- 12. 디자인 아이디어
- 13. 어떤 아이디어
- 14. 앱 아이디어
- 15. ASP.NET 페이지 속성 좋은 아이디어 또는 나쁜 아이디어
- 16. PK가없는 데이터베이스가있는 EF - 좋은 아이디어/잘못된 아이디어/Fuhgeddaboudit
- 17. CMS 구조에 대한 좋은 아이디어 또는 나쁜 아이디어?
- 18. MVVM 및 상태 기반 명령 - 좋은 아이디어 또는 나쁜 아이디어?
- 19. 해시지도 사용법 및 아이디어
- 20. 자바 스크립트 상속 아이디어?
- 21. 캘린더 컨트롤을 만들기위한 아이디어
- 22. 스마트 폼 업데이트 아이디어
- 23. 자바 코드 커버리지 아이디어?
- 24. 분산 처리 프로젝트 아이디어?
- 25. 콘텐츠 제한 아이디어
- 26. LINQ 개체 : 빠른 아이디어?
- 27. XML 프로젝트 아이디어
- 28. 자동화 아이디어 필요
- 29. PHP 그룹 데이터 아이디어
- 30. SSH 오류 어떤 아이디어?
목록이 변경되거나 정적입니까? – spender
60,000은 계산식으로 말하면 꽤 작은 숫자입니다. 중첩 된 HashTables의 고정 오버 헤드가 전체 목록을 반복하고 기준에 맞는 모든 요소를 검사하는 것보다 높을 것입니다. 가장 간단한 구현을 시도하고 프로필을 작성한 다음 빠르게 작성해야하는지 확인하십시오. 그렇다면 다양한 색인을 사용하여 작업 속도를 높일 수 있지만 필요하지 않을 수도 있습니다. –
IP 주소는 얼마나 무작위입니까? 전체 서브넷을 가질 것으로 예상합니까 (IP/넷 마스크를 저장하는 것이 합리적입니다), 아니면 단일 주소가 될 가능성이 더 큽니까? –