2012-06-02 31 views
2

我有一个通过参考距离矩阵工作的应用程序。在目前的设计中,我们正在收集Google Maps v3 API的距离矩阵,将其转换为散列并保存到本地文本文件中。如何在本地数据库中保存距离矩阵?

我的数据由一点到另一点之间的距离;我有5000分。

我面临着与尺寸有关的问题。文件大小已经是250MB。

  1. 什么是存储这种数据的最佳方式?
  2. 有什么办法可以快速获得这么多的数据?
  3. 如何从这样一个大列表中搜索数据?
+3

由于您存储的数据实际上只是一些相当简单的纬度/经度数学的结果,如果将它的纬度/经度长度存储在数据库中的每个点不是更好,并计算两个给定根据要求从这些数字中指出?是的,它会稍微增加加载时间,但是会对数据使用的节省进行权衡,我个人认为这是值得的。 – DaveRandom

+0

你在餐桌上吃了多少个记录?你可以发布该表的模式吗?也许还有一张来自该表的记录样本? – 2012-06-02 17:30:09

+0

您使用PHP,MySQL,Perl和SQLite标记了您的帖子。 tihs应用程序中使用了哪些特定的技术组合?你能用其他技术来解决这个问题吗,比如PostgreSQL? –

回答

1

我不相信谷歌的Terms of Service允许你存储他们的数据。请参阅10.1.3(b):

除了可以存储以下内容外,您不得预取,缓存或存储任何内容:(i)有限的内容量,用于提高您的性能如果您暂时,安全地以及不允许在服务之外使用内容的方式进行Google地图API实施; (ii)Google Maps API文档专门允许您存储的任何内容标识符或密钥。例如,您不得使用内容创建“地点”或其他本地列表信息的独立数据库。

“不允许使用服务以外的内容”的“临时安全”存储基本上是浏览器缓存。它可能在浏览器中包含HTML5本地存储。它不包括允许数据在其他地方使用的任何外部数据库。而250MB几乎不是“有限的”!

Distance Matrix文档中的任何内容都不会覆盖此子句并允许存储该数据。

所以:只限于存储直线距离(假设您不使用Google geocoder查找位置)。

我不完全确定为什么谷歌是这种限制性的;这可能是他们自己从数据提供商获得许可的结果。


所以这并不完全悲观和沮丧,存储距离数据将需要一个表有三列:origindestinationdistance。从5000中选择一行会很快。