我应该管理页面还是只依靠虚拟内存?

5
我正在使用C语言编写一个类似数据库的东西(即它将存储和操作大约500,000条记录)。我将在内存受限的环境(VPS)中运行它,因此我不希望内存使用量过高。我不会处理大量数据-最多可能达到总共200MB,但我希望内存占用保持在30MB左右(这些数字是随意取的)。
我的直觉是自己进行页面处理(真正的数据库就是这样做的),但我收到了建议,说我应该分配所有内存,并允许操作系统为我执行虚拟内存分页。我的数字永远不会超过这个数量级。在这种情况下,哪种选择最好?
假设选择第二种方法,那么什么时候对于程序来说自己进行分页才是明智的?显然,可以处理吉比字节的RDBMs必须这样做,但在某个点上,这个问题一定值得考虑。
谢谢!
2个回答

9

在运行前,请使用malloc。只有在这种情况下,才开始进行性能分析。如果你遇到与专有和主流“真实数据库”相同的性能问题,那么你自然会开始执行缓存/页面/对齐优化。这些事情可以在你拥有一个工作数据库之后轻松插入,并且与拥有工作数据库无关。


1
"过早的优化是万恶之源"。 - Alexandre C.
每个人都喜欢这行代码。在这里,我倾向于赞同@Matt Joiner的观点,但有时候自己编写分页功能也是有必要的。如果他知道自己将会使用大型数据集,那么最好一开始就使用分页而不是在原始解决方案上浪费时间。 - BobbyShaftoe
哦,你的第一个“实现”比“默认”的要快并没有保证。你可能会从底部开始,这也许就是顶部,或者大多数已经是最优的,直到你开始从工作解决方案进行分析和调整。然而请记住,从一开始就考虑性能和算法优化绝对没有任何问题。但我不会让它增加开发时间成本,直到一个工作的解决方案可以提供控制来进行比较。 - Matt Joiner

3
那些能够执行自己分页的数据库管理系统,也从巨大的研究投入中受益,以确保其分页算法在各种系统和负载条件下都能良好运行。除非您拥有类似的资源,否则我建议不要采取这种方法。
您可以利用操作系统分页系统已经经过许多人的调优的优势。
然而,您可以对操作系统进行一些调整,以使其受益于数据库类型访问(大型顺序I/O操作)而不是典型的桌面调整(混合顺序和随机I/O)。
简而言之,如果您是一个单人团队或小团队,那么您可能应该利用现有工具,而不是尝试在特定领域自己开发。

现在,你并不需要拥有一支完整的研究团队来编写一个基本的分页系统。当然,已经有很多论文写过了,但这对于计算机科学中的任何事情都是真实的。如果你一开始并不需要它,那么编写一个基本的分页系统并不是太难,只是需要更多的工作。 - BobbyShaftoe
自行分页的数据库系统只是NIH综合症的一种表现,或者出于对在损坏的操作系统上获得良好性能的渴望。正确的解决方案总是使用操作系统做它该做的事情,如果执行效果不佳,就修复它。你有操作系统的源代码,对吧? :-) - R.. GitHub STOP HELPING ICE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接