0

我有四个表:

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 方法还是可以有一些不同的存储机制?

4

1 回答 1

0

好吧,您没有详细解释您遇到的问题,但由于它很可能与性能相关,因此有一些选项无需使用 NoSQL 或更确切地说是 NewSQL。

似乎您有某种“带有风味”的产品数据库,并且现代系统应该能够处理具有规范化数据库的巨大产品树,前提是该应用程序是一个好公民。

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

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

仅当您完成/考虑了以上所有内容后,我才会去规范化数据库,除非它从一开始就脑死了;-)

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

干杯,//贾里

于 2014-03-06T18:04:32.647 回答