【问题标题】:what is more important speed(time) or space速度(时间)和空间哪个更重要
【发布时间】:2015-02-20 18:58:36
【问题描述】:

当我接到一个让我思考了一段时间的任务时,我遇到了这个问题。但无法提出更准确或更令人满意的答案。

任务是这样的,
我已经拥有的东西

  • 包含用户详细信息的“用户”表。比如createdTime, type(agent, admin, other), id等,(这个表里面的行(条目)太多了)

交给我的任务是

  • 创建一个新表来跟踪被删除的用户。
  • 然后将“用户”表与这个新创建的表连接起来,并显示尚未删除且类型='代理'的用户。

现在我的问题是

  • “为什么他们要求我创建一个新表而不是创建一个新列(在用户表中),它将存储一个标志(如果用户被删除,则为真,否则不删除)
  • “加入不是很耗时吗?”
  • (在当前的“用户”表中创建一个新列将有助于保持用户的详细信息不变。但是创建一个新表 - 这会有什么帮助?)

当我向我的团队成员提出这个问题时,他回答“如果你创建一个新列,很多行的值可能是空的,并且空间浪费”(他说的是也对。)

这表明他在查询时间上越来越关心空间。
现在我们可以用钱获得任何数量的空间,但速度更重要。如果速度较慢,那么节省磁盘空间的任何东西有什么用。
我们不应该更多地关心时间和更少的空间吗?

我想知道你对此有何看法。什么对你更重要,为什么?
我知道这个问题可能会被否决但我想知道大多数开发人员在这种情况下的想法。他们更关心的是空间还是时间?
感谢您的宝贵时间。

【问题讨论】:

    标签: performance diskspace benchmarking


    【解决方案1】:

    这将是一个答案,即使它是个人发言,因为它太大而无法评论:

    这两者很少相互分离,而是彼此的功能。

    速度也不仅仅是“查询时间”——而是基本上包括数据处理在内的执行时间。从请求到回复。
    因此,如果你有一些占用空间的东西,你就会有更多的 I/O 和更多的内存使用,并且需要花费更多的时间来访问数据和传输数据。 所以我的“答案”是:
    平等对待并最小化两者。

    这表明他在查询时间上越来越关心空间。 :
    不,这是一个错误的假设。

    如果您在考虑性能时开始考虑数据库中的规范化和反规范化,那么对数据进行规范化总是会更好。 这不仅是为了节省空间,也是为了节省数据/数据完整性的维护(更新更快,锁定更少);索引(空间,是的 - 但也有速度),然后在使用数据 I/O 时,从磁盘传输到服务器,再到内存使用,跨网络。另外-空间使用意味着内存使用,占用空间的东西越多,您也想放入内存的越多。

    所有这些都会导致性能,也就是速度。

    当您开始考虑数据库中的士气低落时,您通常会结合预先计算结果和查询并利用缓存,因此您不必按需进行连接。因此,虽然在某些情况下,去规范化是一个合理的解决方案——通常情况下,你最好还是规范化数据。

    【讨论】:

    • 移至带有此类标志的设计不会影响规范化本身。这些表是不同的,因此对于相同的结果和完整性,查询和约束是不同的。例如,一个已删除 ID 表的 FK 变成了一个 FK 加上标志指示已删除的 CHECK;但是现在对已删除 ID 的查询不需要 WHERE 标志。此类更改不会特别影响基表的规范化。所以“非规范化”不是合适的词/概念。这意味着别的东西。您的意思是“考虑到在此应用程序中重要的(子类型-超类型)区别,非直接表含义”。
    猜你喜欢
    • 2012-01-06
    • 2013-01-02
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多