DynamoDB 支持地理空间查询吗?

原生不支持。DynamoDB 没有地理空间数据类型,也没有距离或边界框运算符。地理空间查询是一种建模模式:将 geohash 或 S2 单元 ID 存储在键中,使邻近点排在一起,查询覆盖你搜索区域的单元,然后在你的应用中按精确距离细化。

geohash 模式

geohash(或 S2 单元 ID,如 AWS 面向 DynamoDB 的 Geo Library 所用)将纬度/经度编码为一个字符串或数字,其_前缀_标识一个网格单元——关键在于,邻近点共享前缀。将其存储为分区键或排序键,就把"我附近的点"变成了普通的键范围查询:

  • 矩形查询——计算覆盖某矩形的单元,对每个单元执行 Query,合并结果。
  • 半径查询——同理,遍历覆盖某圆的单元,然后在客户端按精确距离过滤。

分辨率很重要:选择一个单元大小,让多数搜索只触及目标单元及其邻居。

库与工具

AWS 发布了面向 Amazon DynamoDB 的 Geo Library(Java),演示了基于 S2 的模式,社区也有面向其他语言的移植(例如 Node.js 的 dynamodb-geo)。采用前请检查维护状态——该模式本身足够简单,可以直接实现。

何时改用搜索引擎

对于丰富的地理谓词(多边形、按距离排序、将地理与全文结合),将表复制到一个专用索引中——处理全文搜索的零 ETL OpenSearch 集成同样能给你一个具备原生地理空间查询的搜索引擎。DynamoDB vs Elasticsearch 全面权衡了这种数据库加索引的分工。

深入了解

该模式本质上是一个排序键技巧——排序键策略指南讲解了整套工具箱,表达式构建器生成单元查询所用的 begins_with/BETWEEN 条件,而 DynoTable 让你检视真实项目上编码后的键。

参考资料

最后核实于 2026-07-13,依据上方所链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。