RDBMS用于键值对信息存储的表的非规范化

时间:2014-03-06 16:15:53

标签: rdbms denormalization keyvaluepair

我有四张桌子:

ProductAttribute            - Stored Product Attribute (Color, Size, etc.)
ProductAttributeValue       - Stored Product Attribute Value (Green, 10, etc.) 
MapProductAttributeValue    - Stored relation between Product Attribute and its Values (COlor-Green, COlor-Blue)
MapProductAndAttributeValue - Stored relation between Product table and MapProductAttributeValue table

如何对此架构MySQL进行非规范化?我不想去NOSQL。 我想只使用RDBMS方法,还是可以使用不同的存储机制?

1 个答案:

答案 0 :(得分:0)

好吧,你没有详细解释你所遇到的问题,但因为它很可能与性能有关,所以有一些选择,而不是去NoSQL或者说是NewSQL。

看起来你有某种产品数据库“有味道”,现代系统应该能够处理具有标准化数据库的巨大产品树,只要该应用程序是一个好公民。

在对数据库进行非规范化之前,我说了一些你可能已经做过的事情,但是因为你的问题没有这些细节,以防我添加一些事情要考虑:

  • 您的问题很可能是一个瓶颈问题。您能否提供有关不同主轴的IO分布的任何细节?由于主要瓶颈的io-bootleneck(或者更糟糕的内存)对性能的影响是指数而不是线性的,因此首先要检查IO的卸载和/或分配。
  • 您是否详细分析了io-profile?您使用的是“普通”MySQL还是InnoDB?
  • 优化RAM用于缓存数据库。 DB的大小是多少?几千兆字节的内存很便宜,让您有时间真正了解挑战。请记住:局部性是一个挑战,如果您的需求超过资源(io / RAM)10%,您可能会受到90%的性能损失。通过解决主要和次要瓶颈以及为RDBMS设置正确的参数,您可能会发现巨大的差异。
  • 如果上述方法都不起作用,请考虑使用符合SQL的IMDB(内存数据库),其中大多数都有相当复杂的算法来优化数据的“热点”。

只有你已经完成/考虑了以上所有内容,我才会对数据库进行非规范化,除非它从一开始就是脑死亡; - )

简而言之:监控系统,收集瓶颈所在的证据,然后解决真正的问题,无论它是什么。

欢呼,// Jari