我需要存储大约60000个类似IP地址的内容,以便我可以快速确定商店是否包含地址或返回与3.4.*.*
或*.5.*.*
等模式匹配的所有地址。之前的实现使用了HashTables
嵌套的四层深度。它不是完全线程安全的,这导致我们的错误。我需要通过锁定外层来使这个线程安全,或者我可以将所有这些更改为ConcurrentDictionaries
,但这两个选项似乎都不对。对字典中的键使用一个字节一般对我来说从来都不对,特别是一个重量级字典。建议?
答案 0 :(得分:0)
Guava使用前缀trie来存储IP查找匹配项。你可以在这里看到代码:
这是Java代码,但我确信您可以轻松地将其改编为C#。前缀trie的技术可以独立于语言使用,并且可以免费跟踪通配符匹配。如果你想要任意通配符,你仍然需要自己实现。或者,您可以构建类似于Directed acyclic word graph(DAWG)的数据结构。这将让您更直接地实现任意通配符匹配。