dbt*_*dbt 5 database-design sql-server disk-space restore sql-server-2012
我在一次采访中被问到这个问题,如果每个月处理 650MB 的数据,那么独立 SQL 服务器的数据库大小是多少。我在采访中无法给出任何答案,后来也没有找到任何答案。任何帮助将不胜感激。
Dan*_*man 13
这是一个没有确切答案的开放式面试问题。为清楚起见,面试官可能希望您多问一些问题。
实际空间需求将取决于“已处理”(插入?)、数据保留(数据是否曾经被删除?)、列数据类型、索引、存储开销、压缩功能的使用(包括列存储)以及额外的可用空间的含义用于日常维护。
J.D*_*.D. 11
在我看来,这类问题是愚蠢的面试问题,肯定需要更多的上下文。也许他们只是想看看你的想法以及你会问的后续问题是什么。
如果通过处理它们意味着每月添加 650 MB 的数据(即使这里假设添加的 650 MB 是数据 + 所有索引 + 任何其他消耗空间的补充对象),并且没有给出其他上下文,因此我们必须假设它们纯粹是指数据库的总数据文件大小(不是事务日志文件或其他任何东西 - 因为这些将取决于未知变量,如恢复模型和备份频率),那么数据库的大小是 650 MB 乘以它的月数在线的。
正如评论中所讨论的:在最简单的例子中,如果一个全新的数据库是使用完全恢复模式创建的,它没有索引(或任何其他会导致数据重复的东西),并且会向其中写入 650 MB 的数据。在那个时刻,当前消耗了大约 1.3 GB 的磁盘空间,其中 650 MB 用于数据,650 MB 用于将数据插入数据库并现在位于事务日志中的事务。因为它们在我最简单的示例中没有提供任何这些额外的细节,所以您只能假设它们最多是原始数据,此时是 650 MB。
但是,即使在一个简单的示例中,您也可以看到它可以变得如何变快。即使在那个例子中,我假设“处理”这个词的意思是“添加”。但处理可能意味着添加了 350 MB,然后删除了 300 MB。现在数据库大小(仅用于原始数据)仅为 50 MB。在我之前的示例中,消耗的总磁盘空间约为 700 MB,因为此时有 650 MB 的事务发生并位于事务日志中,另外还有 50 MB 的数据库中的实际数据。
如果我们知道更多信息,例如备份事务日志的频率,那么这也可能会改变上面的答案。例如,如果事务日志备份每 5 分钟发生一次,并且如果将 350 MB 的数据插入到上述同一个示例数据库中,则 7 分钟后删除了 300 MB,则磁盘上消耗的总空间当前为 350 MB。50 MB 实际数据 + 300 MB 当前位于事务日志中用于删除操作。初始插入操作的事务在此时消失,因为在事务日志的备份发生后,事务会从中刷新,并且它们之前消耗的空间被新事务重新使用。
所以不幸的是,这个问题有很多解释方式,最好在面试中通过问正确的后续问题来展示你的知识,比如“我们是只讨论数据库文件数据还是事务日志数据?”,“什么样的恢复模式到位?” (简单与完整恢复模型将导致存储在事务日志中的数据量不同), "计划了哪种类型的备份以及它们多久运行一次?", "数据库是否有索引,它们为 650 MB 的数据库数据消耗的大小是多少?" 等等。如果面试官知道他们在做什么,那么这些后续问题会告诉他们,问题的实际答案并不重要,因为你通过询问需要知道什么才能解决这个问题来证明你的能力一种问题。
关于动态增加可用磁盘空间和内存的最后一个问题:是的,绝对可以动态添加更多磁盘空间和内存,甚至在保持数据库在线的情况下也是如此。实际执行此操作的方式取决于您的服务器主机,无论是本地服务器还是云中、物理服务器或虚拟机,以及适用时每种服务器的提供商。
最后,这里有一些我觉得非常有帮助的博客(排名不分先后):
像这样一个模糊的问题没有唯一的正确答案,面试官也不会期待(当然,如果他们自己知道的话)。他们希望测试您如何意识到问题过于模糊,以及您如何在真实情况下开始尝试回答这样的问题——看看您是否了解需要哪些额外的细节,以及您可能会如何要求或寻找来自文档、开发团队或检查现有数据库的详细信息。
唯一错误的答案是没有答案(包括直接的“我不知道”)或没有任何警告的幼稚答案(650MB * 个月)。
我可能会用类似的东西回答这样的问题
天真的答案是将 650Mb 乘以我们期望服务运行的月数,假设该数量包括指数增长和其他方面的成本,并且我们每个月都保留所有传入的数据,但要给出一个适当的估计我们需要知道有多少处理过的数据是新的,或者更新现有数据,或者因为它已经存在但被外部系统重新发送而被丢弃,我们需要知道数据如何的更多细节被存储和索引,这将对存储需求产生重大影响。此外,由于工作 tempdb 和事务日志增长,数据的处理方式将增加其他临时存储需求。
这告诉他们你知道这个问题是模糊的,你知道什么是幼稚且可能不正确的答案(所以你会认识到这样的答案来自其他地方),并且你知道为了朝着一个目标前进所需的那种细节有用的估计。然后,他们可能会要求您扩展其中的一些要点,或者根据您所说的内容向您提出更具体的问题。