【发布时间】:2017-08-09 07:33:53
【问题描述】:
我知道我可以在 STL 中使用各种容器类,但这样做的代价太大而且成本很高。
我们有超过 100 万在线用户,每个用户我们需要维护 8 个不相关的 32 位数据项。目标是
- 查找列表中是否存在项目,
- 如果没有,请插入。如果已满,则删除最旧的条目。
蛮力方法是维护最后一个写入指针并进行迭代(因为只有 8 个项目),但我正在寻找输入以更好地分析和实施。
期待在设计模式和算法方面提出一些有趣的建议。
【问题讨论】:
-
C或C++?答案可能会有很大差异...... -
别打扰了。 1M 用户 * 8 个字段/用户 * 4 字节/字段 = 32 MBytes。在一个体面的服务器处理器上,相关数据将一直在 L3 缓存中。任何算法都是矫枉过正。编写干净、简单、可维护的代码并继续前进。最好花时间(您会浪费在过早的优化上)为您的用户实现另一个功能。
-
我推荐一个简单的数组,对项目进行线性搜索(并将项目与 32 字节边界对齐,因此它永远不会越过缓存线)。按到货顺序存放物品,如果已满,则先取出并转移。我认为任何复杂的算法都不会明显更快。
-
您可能需要澄清一些细节。我假设您的意思是“给定用户的 8 个数据项中最旧的数据项”。而且我不知道您是否想要插入的年龄,或者最后一次查找的年龄。 LRU 建议后者,但您建议的实现是前者。
-
@drop 谢谢,我同意。我们当前的实现使用线性数组,但正在探索是否有更好的可能性。
标签: c++ c algorithm data-structures