一家与我们有业务往来的公司希望每天向我们提供一个 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 时速度慢得无法忍受,这不会是一个问题。我们甚至可以在台式计算机上离线处理文件,然后每天远程更新数据库……除此之外,我仍然遇到需要交叉引用的邮政编码和产品列表的问题。