ken*_*enn 8 mysql optimization ruby-on-rails geolocation latitude-longitude
我想知道在MySQL + Rails上存储纬度/经度的最佳列类型是什么.
来自谷歌的官方文件:
http://code.google.com/apis/maps/articles/phpsqlajax_v3.html
使用Google地图的当前缩放功能,您应该只需要小数点后的6位精度.要将表所需的存储空间保持在最小,可以指定lat和lng属性是大小为浮点数(10,6).这将使字段在小数点后存储6位数,加上小数点前最多4位数,例如-123.456789度.
所以,实际上FLOAT(10,6)是谷歌推荐的.
但是,使用Rails 3,似乎没有简单的方法来FLOAT在小数点后精确定义列类型.例如,您可以使用原始SQL编写迁移,如下所示:
def self.up
execute <<-SQL
ALTER TABLE places
ADD `lat` FLOAT(10,6),
ADD `lng` FLOAT(10,6)
SQL
add_index :places, [ :lat, :lng ]
end
Run Code Online (Sandbox Code Playgroud)
但schema.rb结果将如下所示:
t.float "lat", :limit => 10
t.float "lng", :limit => 10
Run Code Online (Sandbox Code Playgroud)
这缺少了小数部分的精度.
在这里,我可以看到几个选项:
FLOAT(10,6)以达到最佳生产性能,不转储模式(如rake db:test:load开发).DECIMAL(10,6),由Rails支持,但它需要6个字节,大于1.5倍FLOAT(参见:http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html).也许这将是一个很好的妥协?DOUBLE,比Google的要求更宽敞,占用8个字节,比2倍大FLOAT.它也很简单.你的建议是什么?
| 归档时间: |
|
| 查看次数: |
7707 次 |
| 最近记录: |