刚入行那会儿,我也天真地以为地理信息系统的数据库就那几个,什么Oracle Spatial,PostGIS,听着挺高大上。后来干了几年,才发现这玩意儿根本没法用“总数”来概括。你问“geo类的数据库总共有多少”,这问题就像问“世界上有多少种沙子”一样,让人头大。
首先得说清楚,市面上根本不存在一个权威的统计机构去数清楚到底有多少种Geo数据库。因为现在的趋势是“万物皆可GIS”。传统的空间数据库,比如PostgreSQL加上PostGIS插件,这算是开源界的扛把子,免费、开源、功能强,社区活跃。还有商业界的Oracle Spatial,虽然贵,但在大型国企、政府项目里依然稳如泰山。SQL Server也有Spatial扩展。这些是“正规军”,数量屈指可数,大概也就那么十几二十种主流产品,随便数数就出来了。
但问题出在“非传统”领域。现在搞大数据的,谁还老老实实用关系型数据库存坐标?HBase、Cassandra这些NoSQL数据库,加上专门的GeoHash或者S2几何库,也能存地理数据。还有MongoDB,内置了2dsphere索引,处理点数据简直不要太爽。这些算不算Geo数据库?算吧,它们能处理地理查询。那Redis呢?也有Geo模块,能算距离、找附近的人。这么一算,数量瞬间爆炸。
再往深了挖,时序数据库像InfluxDB,现在也支持空间索引,用来存轨迹数据。甚至一些轻量级的嵌入式数据库,比如SQLite加上spatialite扩展,在移动端、IoT设备上用得飞起。还有那些专门为了地图服务而生的图数据库,比如Neo4j,虽然主打关系,但也能处理拓扑结构。
所以,回到你的问题,“geo类的数据库总共有多少”?如果你只算那些名字里带“Spatial”或者专门宣传空间能力的,可能不到50个。但如果你把任何能高效存储、查询、分析地理空间数据的软件都算进去,那可能是几百个,甚至上千个。因为很多公司会自己封装一层,或者基于开源二次开发,换个名字就出来一个新“产品”。
我见过不少新手,一上来就问哪个数据库最好。其实没有最好,只有最合适。如果你是做实时轨迹追踪,数据量巨大,可能得选ClickHouse或者专门的时序库。如果你是做静态地图底图,PostGIS绝对是首选。如果是移动端离线地图,SQLite + Spatialite性价比最高。别盲目追求“大而全”,很多所谓的“全能型”数据库,在特定场景下反而不如专用工具快。
另外,别被厂商的宣传忽悠了。有些数据库号称支持GeoJSON,但查询性能烂得一塌糊涂。有些号称支持海量点数据,但扩展性极差。真正懂行的,都会根据业务场景去选型。有时候,甚至不需要专门的Geo数据库,直接用Elasticsearch的geo_point类型,配合Kibana,就能解决大部分可视化需求。
总之,别纠结于“总共有多少”这个数字。这个数字本身就没有意义。重要的是,你的数据量有多大?并发高不高?对查询精度要求多少?预算有多少?把这些想清楚了,剩下的选择其实很有限。
我见过太多人,为了选数据库纠结半年,最后发现业务逻辑都没理顺。数据模型设计错了,用什么数据库都救不回来。所以,先搞懂业务,再选工具。别本末倒置。
还有,开源社区的力量别忽视。很多小众的Geo数据库,虽然名气不大,但在特定领域(比如遥感、电力GIS)做得非常专业。多逛逛GitHub,多看看Stack Overflow上的讨论,比看那些千篇一律的评测文章有用得多。
最后说一句,技术迭代太快了。今天的热门,明天可能就过时。保持学习,保持好奇,比死记硬背“总共有多少”要有意义得多。毕竟,我们做技术的,最终目的是解决问题,而不是搞统计。