【发布时间】:2011-06-08 05:37:10
【问题描述】:
与我们有业务往来的公司希望每天向我们提供一个 1.2 GB 的 CSV 文件,其中包含大约 900,000 个产品列表。每天只有一小部分文件更改,可能不到 0.5%,而且实际上只是添加或删除的产品,而不是修改。我们需要向我们的合作伙伴展示产品列表。
让事情变得更复杂的是,我们的合作伙伴只能看到其邮政编码半径 30-500 英里范围内的产品列表。每个产品列表行都有一个产品实际半径的字段(有些只有 30,有些是 500,有些是 100,等等。500 是最大值)。给定邮政编码的合作伙伴可能只有 20 个左右的结果,这意味着将有大量未使用的数据。我们无法提前知道所有合作伙伴的邮政编码。
我们必须考虑性能,所以我不确定最好的方法是什么。
我是否应该有两个数据库 - 一个包含邮政编码和纬度/经度,并使用 Haversine 公式计算距离……另一个是实际产品数据库……然后我该怎么办?返回给定半径内的所有邮政编码并在产品数据库中查找匹配项?对于 500 英里的半径,这将是大量的邮政编码。或者写一个MySQL函数?
我们可以使用 Amazon SimpleDB 来存储数据库……但我仍然遇到邮政编码问题。我可以像亚马逊所说的那样创建两个“域”,一个用于产品,一个用于邮政编码?不过,我认为您不能跨多个 SimpleDB 域进行查询。至少,我在他们的文档中没有看到任何地方。
我完全愿意接受其他一些解决方案。它不必是 PHP/MySQL 或 SimpleDB。请记住,我们的专用服务器是 2 GB 的 P4。我们可以升级 RAM,只是我们不能为此投入大量的处理能力。甚至每晚都在 VPS 上存储和处理数据库,如果 VPS 在处理 1.2 gb CSV 时速度慢得无法忍受,这不会是一个问题。我们甚至可以在台式计算机上离线处理文件,然后每天远程更新数据库……除此之外,我仍然遇到需要交叉引用的邮政编码和产品列表的问题。
【问题讨论】:
-
你应该降低你的文字墙。现在还不清楚您的问题是什么以及您想要实现什么
-
我建议你问问他们是否有可能获得差异提要,而不是完整提要。这可能会减少工作量。这可能是他们可以轻松完成的事情。
-
问题是如何在只有 Pentium 4 和 2 GB RAM 的服务器上存储 900,000 条必须通过邮政编码半径交叉引用的记录。我是升级它并尝试完全在 MySQL 中执行此操作,还是使用 Amazon SimpleDB?如果我在 MySQL 中执行此操作,那么在第二个数据库中考虑邮政编码接近度的最佳方法是什么,请记住,我不能只返回 500 英里半径内的所有邮政编码而不会受到性能影响?还是完全有其他解决方案?
-
@Phil:编辑你的第一篇文章。开始降低它。不要发布更多的文字墙
标签: php mysql database amazon-simpledb proximity