Database design 如何计算数据库设计存储成本?

Database design 如何计算数据库设计存储成本?,database-design,nosql,rdbms,capacity-planning,Database Design,Nosql,Rdbms,Capacity Planning,在开始这个项目时,我经常会想到几个不同的模式。在粗略猜测之后,我意识到有些产品在增长或存储空间方面不如其他产品优化。显然,列值的大小是最主要的。但表元数据、索引和行标题也都发挥了作用 此外,RDBMS使用与对象或键值数据库完全不同的数据存储方法 有什么好的资源可以用来计算数据库存储的成本(或所需空间)? 注意,我的问题与选择数据库无关,而是知道如何最有效地正确利用每个数据库的设计。PostgreSQL、MySQL、CouchDB等数据库都有不同的目标用例和多种方法来解决同一问题。因此,了解每个解

在开始这个项目时,我经常会想到几个不同的模式。在粗略猜测之后,我意识到有些产品在增长或存储空间方面不如其他产品优化。显然,列值的大小是最主要的。但表元数据、索引和行标题也都发挥了作用

此外,RDBMS使用与对象或键值数据库完全不同的数据存储方法

有什么好的资源可以用来计算数据库存储的成本(或所需空间)?


注意,我的问题与选择数据库无关,而是知道如何最有效地正确利用每个数据库的设计。PostgreSQL、MySQL、CouchDB等数据库都有不同的目标用例和多种方法来解决同一问题。因此,了解每个解决方案的存储成本将有助于为模式选择最佳解决方案。

我发现一篇AskTom文章很有帮助。不过,这是甲骨文特有的

RDBMS使用与对象或键值数据库完全不同的数据存储方法

关系模型假设您不知道将来需要什么数据,也不知道将来如何访问数据。根据我的经验,这是一个相当可靠的假设

这就是SQL dbms允许您根据需要添加索引,并允许您删除被证明无效的索引的原因之一。它将允许您添加已知的约束(有时需要添加更多表的约束),并在需求更改时删除约束。当你发现更多值得了解的事情时,它会让你添加专栏。它将允许您用视图替换表,并用表替换视图。有些dbms可以让您创建物化视图——它们对查询速度的影响是巨大的,对磁盘使用的影响是毁灭性的

有用的数据库扩展了它们的范围。根据关系模型设计的SQL数据库可以相对轻松地添加在初始设计期间没有人想到的功能,并且不会破坏系统的其他部分。因此,他们经常被要求去做他们最初的设计师想象不到的事情

所有这些

  • 随着时间的推移添加和删除索引
  • 随时间添加和删除约束
  • 随着时间的推移添加和删除列
  • 随着时间的推移添加和删除表
对磁盘使用情况的任何估计都是浪费时间。它们中的任何一个都可以极大地改变数据库所需的磁盘空间

您可以相当准确地计算一行和一页所需的空间。(请在谷歌上搜索“YourDBMSname行布局”和“YourDBMSname页面布局”。)但当您尝试乘以所需的行数时,您必须估计行数。这让你处于史蒂夫·麦康奈尔所谓的“世界”的最末端

如果您还没有在自己公司的多个项目中测量磁盘使用率,那么估计上述要点的影响只是猜测

我工作的上一家财富100强公司有一个自20世纪70年代开始生产的运营数据库。在40年的时间里,每天都有数百个应用程序以超过25种编程语言编写。(我认为它最初是建立在IBM的IMS上的;现在它运行在Oracle上。)

就在几年前,那里还没有人想到他们的数据库会被用来将工程图纸和材料清单翻译成中文,还可以用来制作他们将成品运出中国所需的海关文件。实现这些新特性需要在实时库存中存储关于每个零件和每个设计文档的附加数据。在那个项目的早期,我们的估计相差甚远。那是圆锥体的大头。(我们估计了几件事,但没有估计磁盘使用率。我们需要成功,所以无论我提出什么设计,都需要有人提供所需的磁盘空间。)但当我们上线时,我们知道每个估计的准确值,因为我们已经完成了这项工作。(那是圆锥体的窄端。)

那么,如何降低数据库设计和部署环境中的猜测风险呢?以1972年为例

构建一个原型,并对其进行测量。

化学工程师很久以前就知道,一种在 实验室不能在一个工厂里一步到位。一 中间步骤称为中试装置,是必要的 具有在非保护性环境下进行扩容和操作的经验 环境

。一个接一个的项目设计了一套算法,然后投入到客户可交付软件的构建中,其进度要求交付构建的第一件东西

因此,管理问题不在于是否建立一个试点制度并将其抛弃。你会的。唯一的问题是,是提前计划建立一次性服务,还是承诺向客户提供一次性服务


小弗雷德·布鲁克斯,在《神秘的人月》第116页

在设计模式时,为什么要计算它。。这听起来不太合理,因为模式本身根本无法决定数据库的大小。还考虑到存储空间成本将是总体成本中最不重要的因素,例如选择所需的数据库。@ManfredMoser,数据库模式是应用程序数据设计的核心。它的构建方式显示了您对数据存储的计划。是的。。但许多其他因素将显著影响存储,因此,仅从模式进行任何评估都不会带来性能(缓存、索引等)或查询(数据仓库等)等进一步要求