现有mysql表中的其他字段或单独的表

时间:2012-04-16 23:16:33

标签: mysql

我一直在寻找堆栈的建议,我仍然不是100%确定最好的方法来改善这一点。我有一个mysql INNODB'产品'表,存储大约130K记录。 misc产品数据有大约80个字段,然后我们为每个供应商添加供应商库存数据字段x 3(成本/ ID /库存),从而产生另外35-40个额外字段。

我们通过loaddata或php脚本为xml / xls提要将供应商数据源运行到每个供应商的单独表中。然后,我们运行单个查询来更新产品中的成本/库存,其中相关供应商表中的最新数据与每个表中的ID匹配。然后,这个过程针对我们的每个供应商供稿(目前大约15个)运行,在某些情况下每天一次,其他的两次/ 3/4次进料尺寸从几百到1/3/20 / 30K不等。

然后我们运行一个脚本(由于供应商数据源的不同导入时间表,每天几次)比较所有供应商的库存(来自主要产品表数据)并根据最便宜的供应商生成价格点。然后,这会在产品表中更新每个库存的最佳产品价格。

更新最佳价格脚本选择表格中具有某些库存的所有记录并进行计算,然后再单独更新每个产品的价格。我们遇到的问题是,在这段时间内我们会慢下来,有时可能只有一分钟或2分钟,但有时可能需要5/6到10分钟,具体取决于网站流量等,大概是因为产品tabe正在更新和重新-indexed,每次运行时最多可记录20/30,000条记录。

产品表是该站点最繁忙的表,当更新正在运行时,我们看到cpu上升到300/350%。我们正试图弄清楚我们最好的选择最初是将存储的最佳价格和总库存值分成另一个表,并在我们提取产品数据以解决索引/锁定问题时加入此表或者我们是否只是需要迁移到仍可以处理db / webserver / email等的新服务器或运行专用数据库服务器。

问题重新迁移或新的专用数据库服务器是成本,当服务器在这些缓慢更新周期的10/20/30/40%CPU超出时处理时,老板的停止点。如果我们要使用数据库服务器,最简单的选择是获取一个新服务器并从中运行数据库以保存重新安装我们的自定义应用程序/邮件服务器/网站应用程序文件等。如果我们这样做,我们将能够获得远离我们目前拥有的较低规格服务器或者我们真的需要考虑数据库服务器是2的更好规格吗?任何帮助或一般建议将不胜感激!!!感谢。

1 个答案:

答案 0 :(得分:1)

听起来你的产品表是非规范化的。如果您不太确定这意味着什么,阅读。了解这对您的成功至关重要。

如果我是你,我会选择这个选项:“将存储的最佳价格和总库存值分成另一个表,并在我们提取产品数据以结合索引/锁定问题时加入此表” 。也就是说,我相信您应该从产品表的非规范化模式切换到规范化模式以及相关的供应商信息。

但是,转换将需要开发人员的劳动力。通常开发人员劳动力比新服务器硬件更昂贵。将mySQL数据库实例从一台服务器机器迁移到另一台服务器机器并不难。如果您购买了新的服务器机器,请购买您能买得起的最快的磁盘存储子系统。如果您使用RAID,请使用RAID 1-0(条带和镜像)而不是RAID 5.除此之外,如果您安装了具有4GB内存和双处理器或四处理器的新服务器,您应该没问题。

换句话说,购买一台具有良好磁盘存储子系统的2012年普通中端服务器机器。把你的mySQL放在新机器上(别管其他东西)。

但是,请考虑您的应用程序需要扩展多少。

这个产品表的尺寸是否已经接近几年了?或者贵公司是否计划在未来几个月和几年内增加大量新产品和新供应商?如果必须扩展此系统,则必须选择第一个选项(使用developer labor并更改为更好的,规范化的DBMS模式)。如果您现在咬了一下子弹并进行了此更改,您的系统将更容易扩展。

但是,如果贵公司的产品线相当静态,那么添加一台价值五或一万美元左右的新服务器是最便宜的方式。