当前位置: 首页 > 面试题库 >

标准化数据库会对资源产生什么影响?

马欣德
2023-03-14
问题内容

从相对不规范的形式获取数据库并将其规范化时,人们可能期望资源利用率 发生 什么 变化 (如果有)?

例如,规范化通常意味着可以从更少的表中创建更多的表,这意味着数据库现在具有更多的表,但是其中许多表都非常小,可以使经常使用的表更好地适合内存。

表的数量越多,意味着(潜在地)需要更多的联接才能获取抽象出的数据,因此,人们可能会期望系统需要执行的联接数量越多,就会产生某种影响。

那么,标准化未标准化的数据库会对资源使用产生什么影响(即,将发生什么变化)?

编辑:要添加一点上下文,我有一个现有的(即旧版)数据库,其中包含300多个可怕的表。大约1/2的数据是TEXT,另一半是char字段或整数。没有任何限制。我要求这样做的原因主要是为了获得更多信息,以说服其他人需要进行更改,并且性能或可维护性不会降低。不幸的是,我不得不说服的人们对非规范化数据库的性能好处了解得足够多,希望尽可能避免标准化。


问题答案:

实际上,这不能完全以一般的方式回答,因为其影响会因所涉及的数据库和使用该数据库的应用程序的具体情况而有 很大 差异。

因此,您基本上陈述了有关影响的总体期望:

  1. 随着冗余数据的删除,对存储的总体内存需求应下降
  2. CPU需求 可能 会上升,因为查询 可能 会变得更昂贵(请注意,在许多情况下,即使规范化数据库上的查询实际上更为复杂,查询也会实际上更快,因为查询引擎有更多优化选项)
  3. 开发资源的需求 可能 会上升,因为开发人员 可能 需要构建更复杂的查询(但是,另一方面,您需要较少的开发工作来维护数据完整性)

因此,唯一真正的答案是通常的:取决于;)

注意:假设我们正在谈论 谨慎和有意的 非规范化。如果您指的是 经验丰富的开发人员 只需将一些表放在一起”的
方法,这种方法对于经验不足的开发人员来说是常见的,我冒这样的说法,即规范化将减少所有级别的资源需求;)

编辑:关于cdeszaq添加的特定上下文,我想说“祝你好运通过”;)

显然,具有300多个表且 没有任何限制 (!),您的问题的答案肯定是“规范化将减少所有级别的资源需求”(而且可能非常大), 但是:

整顿这样一团糟 将是一项艰巨的任务 。如果只有一个应用程序在使用此数据库,那么它已经很可怕了-如果有很多应用程序,那么它可能会成为一场噩梦!

因此,即使从长远来看,规范化可以从实质上减少资源需求,但根据情况的不同,这样做 可能 也不值得。这里的主要问题是关于长期范围的问题-
该数据库有多重要,它将使用多长时间,将来会使用更多的应用程序,当前的维护工作量是恒定的还是在增加等?

不要忽略它是一个 正在运行的系统 -即使它丑陋而可怕,根据您的描述, 它还没有(但)坏掉 ;-)



 类似资料:
  • 本文向大家介绍什么是数据标准化,为什么要进行数据标准化?相关面试题,主要包含被问及什么是数据标准化,为什么要进行数据标准化?时的应答技巧和注意事项,需要的朋友参考一下 数据标准化是预处理步骤,将数据标准化到一个特定的范围能够在反向传播中保证更好的收敛。一般来说,是将该值将去平均值后再除以标准差。如果不进行数据标准化,有些特征(值很大)将会对损失函数影响更大(就算这个特别大的特征只是改变了1%,但是

  • 为什么以下未有效使用的行(在方法中:getAllDefinedVars)会对最终结果产生影响: List collect=AllVars.Stream().Filter(v->false).collect(Collectors.ToList()); 如果我删除整个方法和调用此方法的一行代码(generateOneSetOfBools中的第一行),我最终会得到另一个结果。 如果... 提到的行对列表

  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我有一些想法,随着时间的推移我已经积累了一些想法,但是我真的很想知道是什么使您在对数据库建模时使事情顺利进行: 表名称与主键名称和描述键匹配 模式按功能区域划分 尽可能避免使用复合主键(使用唯一约束) 骆驼案例表名称和字段名称 不要在表前加上tbl_前缀,也不要在proc时加上SP_(无匈

  • 我的问题是批处理规范化(BN)正在规范化什么。 我在问,BN是单独标准化每个像素的通道还是一起标准化所有像素的通道。它是在每张图像的基础上还是在整个批次的所有通道上进行的。 具体而言,BN在X上运行。比如说,。因此,当轴=3时,它在“c”维度上运行,即通道数(对于rgb)或特征图数。 因此,假设X是rgb,因此有3个通道。BN是否做到了以下几点:(这是BN的简化版本,用于讨论维度方面。我知道gam

  • 问题内容: 我已经接管了一个存储健身信息的数据库,而我们正在讨论某个桌子以及该桌子应该保留为一张表还是分成三张表。 今天,有一张表叫做: workouts ,具有以下字段 id, exercise_id, reps, weight, date, person_id 因此,如果我一天进行2组3个不同的练习,那一天我在该表中将有6条记录。例如: 所以问题是,鉴于在多个记录中有一些冗余数据(日期,人员I

  • 问题内容: 我了解对数据库事务处理概念的一般理解。我们访问事务内的数据库以确保ACID属性。 在Hibernate中,有一个称为会话的概念。会话的用途是什么?什么时候应该在两个会话中而不是在同一会话中进行数据库访问? 为了进一步说明,我已经看到了hibernate代码, 从会话工厂获取会话 打开会议 开始交易 提交交易 关闭会议 我需要知道的是在这里召开会议的重要性是什么?为什么没有像交易工厂这样