我们有一个 Postgres 数据库,其中包含一个表“foo”和辅助表“bar_1”...“bar_k”,它们保存特定类型 foo 的附加数据。基本上,我们可以将“foo”视为具有公共属性的父类,而每个“bar_i”表都是“foo”的子类,它添加了额外的属性。
我们正在考虑重新设计模式,以便我们有一个“foo_metadata”表来代替几个“bar”表,它列出了每种“bar”表中的不同列,以及一个“foo_attributes”表通常在“条形”表中的值。
这样一个系统的优点是它非常通用:我们基本上会将每个类的元数据放入数据库中,这样就不需要为每个更改或添加的类更新应用程序和编写测试。
我想这会影响性能:我们不是从“foo”表中读取一行,从“bar”表中读取一行,而是从“foo_metadata”和“foo_attributes”表中读取几行。更新也是如此(尽管我们只会更新未编入索引的值和时间戳。)
我的问题是:我们会得到多少性能影响?有没有办法将性能影响降到最低?在投入大量开发人员时间重新设计系统之前,我们可以使用哪些指标来估计性能损失。
(我们不关心 Postgres 对值强制执行类型,因为它们通常是字符串,并且应用程序需要在将值插入数据库之前检查它们......)