【发布时间】:2014-11-28 18:46:42
【问题描述】:
我是房地产联合网站的开发人员,目前无法找到有效更新大量房源/记录(超过 2,000,000 个房源)的方法。
我们目前接受来自大约 20 个不同网站的 XML 提要,其中包含房地产列表。大多数传入的提要都很小(大约 100 个列表),但我们有几个 XML 提要包含约 1,000,000 个列表。小提要的解析快速而简单,但是,大提要每个要花费 2-3 小时以上。
包含在网站上查看列表的当前“实时”数据库表是 MyISAM。我选择 MyISAM 是因为对表的约 95% 的查询是 SELECTs。实际上,只有在处理 XML 提要期间才会有写入(UPDATE/INSERT 查询)。
目前的流程如下:
有一个启动主解析脚本的 CRON。
它遍历
feeds表并获取外部 XML 提要源文件。然后,它遍历所述文件,并针对 XML 文件中的每条记录检查listings表以查看是否需要更新或插入列表(如果它是新列表)。
这一切都发生在现场桌子上。我想知道的是是否有人有更好的逻辑来使这些更新/插入在后台发生,以免减慢生产表的速度,并最终降低用户体验。
delta 表会是最佳选择吗?也许在一个单独的数据库上完成所有繁重的工作,然后将新表复制到生产数据库?完全在一个单独的 workhorse 域上?我是否应该有一个单独的 listings 表来执行所有解析,这将是 InnoDB 而不是 MyISAM?
我们想要完成的是让我们的系统能够在一天中频繁更新列表,而不会降低网站速度。我们的竞争对手吹嘘他们在某些情况下每 5 分钟更新一次列表。我只是不明白这怎么可能。
我现在正在工作,所以这更像是一个大脑转储,只是为了让球滚起来。如果有人希望我提供表格示意图,我会非常高兴。
总之:我正在寻找一种方法,通过几十个外部 XML 提要/文件频繁更新我们数据库中的数百万条记录(每天)。我只需要一些关于如何有效且高效地实现这一点的逻辑,以免拖累生产服务器。
【问题讨论】:
-
So this question is more of a discussion.与堆栈溢出无关。 -
如果你能指出我正确的方向,而不是仅仅指出一个新手的错误,这会很有帮助。干杯。
-
别担心@Marcus - 一套盔甲有时在这里很有用!但即使是离题的问题,有时也可以在 cmets 中收集到有用的花絮。