【问题标题】:Should I manage pages or just lean on virtual memory?我应该管理页面还是仅仅依靠虚拟内存?
【发布时间】:2010-07-22 10:58:15
【问题描述】:

我正在用 C 编写一个数据库风格的东西(即它将存储和操作大约 500,000 条记录)。我将在内存受限的环境 (VPS) 中运行它,所以我不希望内存使用量激增。我不会处理大量数据——总共可能高达 200MB,但我希望内存占用保持在 30MB 的区域内(将这些数字从空中拉出来)。

我的直觉是自己进行页面处理(真正的数据库会这样做),但我收到的建议是我应该将其全部分配并允许操作系统为我进行 VM 分页。我的人数永远不会超过这个数量级。 在这种情况下,哪个是最佳选择?

假设第二个选择,程序在什么时候进行自己的分页是明智的?显然,可以处理千兆字节的 RDBMsses 必须这样做,但在规模上必须有一个值得提出的问题。

谢谢!

【问题讨论】:

    标签: c memory memory-management


    【解决方案1】:

    使用malloc 直到它运行。 然后只有这样,开始分析。如果您遇到与专有和主流“真实数据库”相同的性能问题,您自然会开始执行缓存/页面/对齐优化。在您拥有一个工作数据库之后,这些东西可以很容易地插入,并且与拥有一个工作数据库是正交的。

    【讨论】:

    • 唯一明智的答案。 “过早的优化是万恶之源”。
    • 每个人都喜欢这条线。在这里,我倾向于同意@Matt Joiner,但有一段时间可以从您自己的分页开始。如果他知道他要处理大型数据集,那么从分页开始而不是将时间浪费在一个幼稚的解决方案上可能真的很有意义。
    • Nahhh,不能保证您的第一个“实现”甚至会比“默认”更快。您最好从底部开始,这可能是顶部,或者您所知道的大部分已经开始,直到您开始从工作解决方案进行分析和调整。但是请记住,绝对没有理由不仔细设计它,从一开始就牢记性能和算法优化。但在可行的解决方案可以提供比较控制之前,我不会让这产生开发时间成本。
    【解决方案2】:

    执行自己的分页的数据库管理系统还受益于大量研究工作的投资,以确保其分页算法在不同的系统和负载条件下运行良好。除非您有类似的资源可供使用,否则我建议您不要采用这种方法。

    您可以使用的操作系统分页系统已经受益于许多人的调整工作。

    但是,您可以做一些事情来调整您的操作系统,以有利于数据库类型访问(大型顺序 I/O 操作)与典型的桌面调整(混合顺序和随机 I/O)。

    简而言之,如果您是单人团队或小型团队,您可能应该利用现有工具,而不是尝试在该特定领域自行开发。

    【讨论】:

    • 好吧,此时您不需要一个完整的研究团队来编写一个基本的分页系统。当然,已经写了很多论文,但对于 CS 中的任何事情都是如此。让一些基本的东西运行起来并没有那么糟糕,如果你一开始真的不需要它,那就多做一点工作。
    • 执行自己的分页的数据库系统只是 NIH 综合症的表现,和/或希望即使在损坏的操作系统上也有良好的性能。正确的解决方案是始终将操作系统用于它的用途,如果它表现不佳,请修复它。您确实有操作系统的源代码,对吗? :-)
    猜你喜欢
    • 2014-07-14
    • 2017-12-08
    • 2014-10-05
    • 2019-08-20
    • 2013-12-01
    • 1970-01-01
    • 2023-03-15
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多