我需要设计一些数据库表,但我不确定性能影响.在我的情况下,它更多地关于读取性能而不是保存数据.
情况
在模式识别的帮助下,我发现需要在postgresql数据库中保存多少个特定对象的值.
其他数量让我们说固定属性唯一的区别是需要保存相同类型的1,2或3个值.
目前,我有3个实体/表,它们的区别仅在于具有相同类型的1,2或3个不可空的属性.
例如:
EntityTestOne/TableOne { ... other (same) properties String optionOne; } EntityTestTwo/TableTwo { ... other (same) properties String optionOne; String optionTwo; } EntityTestThree/TableThree { ... other (same) properties String optionOne; String optionTwo; String optionThree; }
我希望在生产中有数百万条记录,并且我正在考虑这种变体的性能影响以及可能的替代方案.
备择方案
我想到的其他选择:
>仅使用一个具有3个选项的实体类或表(optionTwo和optionThree将可为空).如果要谈论数百万的预期记录
加上缓存我问自己,在至少两个(缓存)层(数据库本身和hibernate)中保存数百万个空值并不是一种“浪费”.在我昨天读到的另一个答案中,在postgresql中保存一个空值只需要1比特我认为如果我们谈论可以包含一些可以为空的属性的数百万条记录(link)那么多.
>创建另一个实体/表并使用集合(列表或集)关系
例如:
EntityOption { String value; } EntityTest { ... other (same) properties List<EntityOption> options; }
>如果要使用此关系:在创建新记录的情况下,什么会提供更好的性能:
为每个新的EntityTest创建新的EntityOption或者做一个
查找之前并引用现有的EntityOption(如果存在)?稍后获取它们时的读取性能以及当时需要的连接怎么样?
与具有三个选项的一个普通实体的变体相比,我可以想象它可能会稍慢……
因为我不是那么强大的数据库设计和使用hibernate我对这些方法的优点和缺点感兴趣,如果有更多的选择.
我甚至想问一个问题,如果postgresql是正确的选择,或者是否应该考虑使用另一个(免费)数据库.
谢谢!