【发布时间】:2009-03-05 10:15:55
【问题描述】:
如果有人提出任何建议,我将不胜感激:
您如何有效地将 gps(或任何浮点数)存储在可索引的 varchar 字段中。
背景:
我们开发了一个内容管理系统,可以有效地将任何类型的文件与元数据集合一起存储。该文件/元数据存储如下:
file_table metadata_table
---------- --------------
file_id -> file_id (number)
file_name metadata_id (number)
file_location metadata_value (varchar)
...etc
我被要求为地理标记文件提供支持(即,将 gps 坐标存储为元数据)。此外,我们还希望支持具有多个地理标签的文件。
现在据我所知,我有几个选择:
1) 将纬度和经度存储在同一个 metadata_value varchar 中(例如,'52.4343242,-1.32324')。
我将如何查询这个字符串?我可以用 sql 做些什么聪明的事情来让我查询字符串的“组件”?我可以将坐标存储为 xml 字符串吗?这有帮助吗?如何有效地对其进行索引?
2) 将纬度和经度作为单独的行存储在 metadata_table 中。
此解决方案解决了支持更轻松查询的问题(以复杂性和笨拙为代价,特别是当我将在每个文件中存储多个地理标签时),但是我仍然面临索引问题。
我可以在查询时将 varchars 转换为浮点数,但我不确定这是否会忽略我在 metadata_table.metadata_value 上的索引并改为执行表扫描。
3) 创建专用浮点字段来存储 GPS 数据。
这是最不可取的选项,因为它违背了为特定元数据添加数据库字段的设计原则。并非所有文件都会存储 GPS 数据。
任何帮助或建议表示赞赏。
【问题讨论】: