PHP-处理900,000条记录数据库和邮政编码的最佳方法?
作者:互联网
与我们有业务往来的公司希望每天提供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上存储和处理数据库,如果在处理1.2 gb CSV的过程中VPS的运行速度慢得令人难以忍受,那将不是问题.我们甚至可以在台式计算机上离线处理文件,然后每天远程更新数据库…除非我仍然遇到邮政编码和产品列表需要交叉引用的问题.
解决方法:
您可能需要研究PostgreSQL和Postgis.它具有与MySQL spacial indexing类似的功能,而无需使用MyISAM(根据我的经验,与InnoDB相比,它倾向于损坏).
特别是Postgres 9.1,它允许使用GIST索引进行k-nearest neighbour search查询.
标签:amazon-simpledb,proximity,mysql,php,database 来源: https://codeday.me/bug/20191208/2090544.html