我正在构建自己的http路由器,我想知道哪种算法最适合以某种数据格式注册路径,然后以最快的方式将其与http路由请求匹配。我做了一个Radix Tree,速度相当快,距离路线不到1毫秒,但我没有注册大量路线,我确信(无知)有路线更快的方式。
例如,让我们采取一些uri路线:
我的Radix Tree正在这样做:
/
├s
|├earch
|└upport
|
├user\
| └info
| └profile/
| └:string
├post\
| └:int\/
| └/view/
| └/:string
└hello
你对这棵树有什么看法,有什么我可以做得更好吗?
感谢您阅读
答案 0 :(得分:2)
Radix Tree实际上是实现它的好方法。根据您实现节点的方式,您可以以某些空间为代价加快速度。
如果将节点定义为:
Class Node
{
public string Name;
public List<Node> Children;
}
然后,您必须对子项进行顺序搜索才能找到匹配的段。如果任何节点的子节点数相对较小,那就没问题了。如果每个节点有大量子节点,那么您可能希望将List<Node>
替换为Dictionary<string, Node>
。这将加速查找。
除此之外,我无法为您描述的情况考虑更合适的数据结构。