我正在为Web服务器实现会话存储。键是字符串 和存储的对象是指针。我尝试使用地图但需要一些东西 快点。我会查找一个物体5-20次 比插入频繁。
我尝试使用哈希映射但失败了。我觉得我有更多的限制而不是更多的空闲时间。
我在Linux下编写c / c ++编码。 我不想承诺提升,因为我的网络服务器将会超过提升。 :)
这是一个高度相关的问题,因为硬件(ssd磁盘)是 变化很快。什么是正确的解决方案不会在两年内。
答案 0 :(得分:5)
我打算建议map
,但我知道你已经排除了这一点。
我尝试使用地图但需要一些东西 更快。
这些是Wikipedia page提供的std :: map性能界限:
您如何衡量并确定地图未经充分优化?你看到的任何瓶颈都很可能出现在代码的其他部分,map
就足够了。
上述界限似乎符合最严格的可扩展性要求。
答案 1 :(得分:2)
将使用的数据结构类型取决于您要访问的数据。你应该问一些问题:
哈希表通常对查找效果非常好。您可以通过自己编写来大大优化速度(是的,您可以调整表格大小)。使用哈希表提高性能的建议:
BTrees也很好,一般表现不错。 (有人可以在这里插入关于btree的信息)。
我建议您查看要存储的数据,并确保数据尽可能小。根据需要使用short,unsigned char,bit字段。还有其他方法可以挤出改进的性能,例如在分配结构的同时在结构的末尾分配字符串数据。即。
struct foo {
int a;
char my_string[0]; // allocate an instance of foo to be
// sizeof(int) + sizeof(your string data) etc
}
您可能还会发现实现自己的字符串比较例程实际上可以显着提高性能,但这取决于您的输入数据。
答案 2 :(得分:1)
可以制作自己的。但是你不应该对boost或std :: tr1 :: unordered_map有任何问题。
对于较少数量的元素,三元组可能比哈希映射更快。