1

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

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

然后,我们运行一个脚本(由于供应商数据馈送的导入计划不同,每天运行几次)比较所有供应商的库存(来自主产品表数据),并根据当时有库存的最便宜的供应商生成价格。然后,这会更新产品表中在某处有库存的每个项目的总体最佳产品价格。

update best price 脚本从表中选择所有有库存的记录,然后进行计算,然后用价格单独更新每个产品。我们遇到的问题是,在此期间我们会变慢,有时可能只有一两分钟,但有时似乎需要 5/6 到 10 分钟,这取决于网站流量等,大概是因为产品标签正在更新和重新-索引,而每次运行最多可记录 20/30,000 条记录。

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

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

4

1 回答 1

1

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

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

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

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

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

这个产品表是否已经接近几年后的大小?或者您的公司是否计划在未来几个月和几年内增加大量新产品和新供应商?如果你必须扩展这个系统,你真的必须选择第一个选项(使用开发人员的劳动力并更改为更好的、规范化的 DBMS 模式)。如果您现在咬紧牙关并进行此更改,您的系统将更容易扩展。

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

于 2012-04-17T00:13:46.630 回答