京东云PostgreSQL在GIS场景的应用分享
在地图或地理信息有关的场景里,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中国农业大学”而不是精确到街道的详细地址信息。在地址关键词检索的背后,需要的是一款可以支持全文检索和模糊查询的数据库与之匹配,以此快速提高地址检索的效率。
PostgreSQL被誉为“世界上可获得的最先进的开源数据库 ”,拥有很强的文本搜索能力,不仅支持全文检索,PostgreSQL还支持模糊查询、正则查询。除此之外,PostgreSQL还内置了表达式索引、Gin索引功能,配合丰富的插件生态,在地址关键词检索方向有比较大的优势。
本文介绍了一种基于PostgreSQL物流地址关键词检索的方法,以此来说明如何用PostgreSQL提升物流地址关键词的检索效率。
一、应用背景
在需要地址检索的场景中,用户输入地址文本后需要对地址进行分词,然后通过全文索引技术与地址语料数据库进行匹配,得到规范化的地址信息,并在此基础上进行地址定位。通常地址查询语句在经过地址分词处理后会被分割成几段关键词,通过关键词匹配到历史地址语料数据库,再返回查询语句得到查询结果。
通常从用户输入关键词查询到得到返回结果由于关键词分词和匹配方法不同,会耗时几秒到几十秒不等。
检索数据库中的条目是很基本常见的功能,实现的方法也很多,常见包括:
1、基于Elasticsearch 或 Lucene这类专业独立的检索引擎实现
2、基于数据库自带的检索功能实现
虽然基于Elasticsearch这类系统能实现比较灵活的检索功能,但开发和运维成本也将大大增加,如何利用PostgresSQL内置的功能快速高效的实现大多数中文检索场景是我们要讨论的技术方案。
二、技术方案
GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一组出现过key的位置。如('hello', '14:2 23:4')中,表示hello在14:2和23:4这两个位置出现过,在PostgreSQL中这些位置实际上就是元组的tid。表中的每一个属性在建立索引时,都可能会被解析为多个键值,所以同一个元组的tid可能会出现在多个key的posting list中。通过这种索引结构可以快速的查找到包含指定关键字的元组。
pg_trgm是PostgreSQL基于N-gram模型分词的扩展插件,它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列,pg_trgm就是三元的3-Gram,每连续的3个字符为一个TOKEN,然后在对TOKEN建立GIN倒排索引,就可以进行高效、精准的模糊查询。
pgbigm与pg_trgm类似,也是PostgreSQL基于N-gram模型分词的扩展插件,区别在于pgbigm是二元的2-Gram。
结合PostgreSQL 索引和分词模型的特点,我们构建了1亿行左右的北京区域的本文地址数据进行性能测试,对比分析PostgreSQL在物流关键词检索的场景里有明显效率的提升,测试结果如下:
从以上结果可以看出,无论是pg_trgm+gin还是pgbigm+gin性能比常用的Btree在进行模糊查询的时候,性能要好很多。同时,因为pg_trgm生成的TOKEN是三个字符,只有在三个字符以上条件,才能匹配到对应的TOKEN,当小于3个字符,需要前后模糊搜索1个或者2个字符,所以检索性能下降比较明显,相比来说pgbigm(基于二元的Tri-Gram)在处理单字、双字字符的模糊查询效率都比较高。由于物流的关键字都是三个字符以上,所以采用的是pg_trgm+gin的方案进行关键词检索查询,从而保证毫秒级别的响应时间。
另外对于文本地址数据,往往都具备自然语言的特性,jieba结巴分词是一个强大的分词库,分词更加贴合业务属性特点,主要功能包含:支持不同模式的分词、自定义字典、关键字提取、词性标注。pg_jieba运用了jieba分词算法,构建了PostgreSQL中文分词插件,分词效果也有不错的表现。
三、总结
综上,PostgreSQL支持丰富的索引,具备强大的全文检索能力以及多样的插件生态,支持不同场景下的文本查询,用户完全不需要将数据同步到搜索引擎,再来查询,使用PostgreSQL可以大幅度的简化用户的架构,开发成本,同时保证数据查询的绝对实时性。
京东云基于开源的 PostgreSQL构建的一款功能强大的关系型数据库云数据库 PostgreSQL ,支持丰富的数据类型及地理信息扩展,具有强大的并行计算能力。支持备份、监控、迁移等全套解决方案。
作者:曲艺伟/彭智
京东云PostgreSQL在GIS场景的应用分享的更多相关文章
- 京东云入选2019年度TOP100全球软件案例 新一代服务治理框架加速行业落地
11月14日-17日, 2019TOP100全球软件案例研究峰会(TOP100summit)在北京国家会议中心举办.Top100summit是科技界一年一度的案例研究峰会,每年会秉承"从用户 ...
- 京东云开发者|京东云RDS数据迁移常见场景攻略
云时代已经来临,云上很多场景下都需要数据的迁移.备份和流转,各大云厂商也大都提供了自己的迁移工具.本文主要介绍京东云数据库为解决用户数据迁移的常见场景所提供的解决方案. 场景一:数据迁移上云 数据迁移 ...
- 京东云罗玉杰:OpenResty 在直播场景中的应用
2019 年 3 月 23 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·北京站,京东云技术专家罗玉杰在活动上做了< OpenResty ...
- 京东云、新浪微博等专家畅谈Docker未来格局:开放与竞争(下)
在上次推送的文章中(传送门),田琪老师分享了他的DockerCon 2015峰会见闻.在“QCon高可用架构群”中,田老师分享之后,几位专家也参与了讨论.他们是: 闫国旗:京东资深架构师,京东架构技术 ...
- Developer Friendly | 基础设施即代码的事实标准Terraform已支持京东云!
Developer Friendly | 基础设施即代码的事实标准Terraform已支持京东云! Chef.Puppet.Ansible.SaltStack 都可以称为配置管理工具,这些工具的主要目 ...
- 京东云与AI 10 篇论文被AAAI 2020 收录,京东科技实力亮相世界舞台
美国时间2月7-12日,AAAI 2020大会在纽约正式拉开序幕,AAAI作为全球人工智能领域的顶级学术会议,每年评审并收录来自全球最顶尖的学术论文,这些学术研究引领着技术的趋势和未来.京东云与AI在 ...
- 利用京东云Serverless服务快速构建5G时代的IoT应用
10月31日,在2019年中国国际信息通信展览会上,工信部宣布:5G商用正式启动.5G商用时代来了! 5G的商用,使得数据传输速度.响应速度.连接数据.数据传输量.传输可靠性等方面都有了显著的提升,这 ...
- 从单个系统到云翼一体化支撑,京东云DevOps推进中的一波三折
作者:王利莹 采访嘉宾:京东云DevOps团队负责人 郑永宽 今年,IDC 特别针对中国地区发布了<IDC MarketScape:中国 DevOps 云市场2019,厂商评估>研究报告, ...
- 体验京东云 Serverless+AI 人脸属性识别
云原生计算基金会CNCF(Cloud Native Computing Foundation, CNCF)Serverless Whitepaper v1.0对无服务器计算作了如下定义: Server ...
随机推荐
- springboot2.7.x 集成log4j2配置写入日志到mysql自定义表格
在阅读之前请先查看[springboot集成log4j2] 本文暂不考虑抽象等实现方式,只限于展示如何自定义配置log4j2并写入mysql数据库(自定义结构) 先看下log4j2的配置 <?x ...
- Django cors跨域问题
Django cors跨域问题 前后端分离项目中的跨域问题 即同源策略 同源策略:同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器 ...
- Linux命令格式、终端类型和获取帮助的方法
Linux用户类型 Root用户:超级管理员,权限很大 普通用户:权限有限 终端 terminal 终端类型 物理终端:鼠标.键盘.显示器 虚拟终端:软件模拟出来的终端 控制台终端: /dev/con ...
- C#生成putty格式的ppk文件(支持passphrase)
背景 2022国家级护网行动即将开启,根据阿里云给出的安全建议,需要将登陆Linux的方式改为密钥对方式.我这里使用的远程工具是自己开发的,能够同时管理Windows和Linux,但是以前不支持密钥对 ...
- 配置SSM公钥及创建远程仓库和在IEDA中集成git操作
3.将.ssh下的id_rsa.pub公钥copy到gitee工作台中 4.创建个人仓库 5.设置开源许可证:开源是否可以随意转载,开源但是不能商业使用,不能转载,- 限制! 6.克隆到本地! IDE ...
- 树莓派实战:微信机器人(itchat实现)
背景 楼主有一台树莓派4B开发板(8G内存版),是目前的顶配机型.这一年来的业余时间,除了写Java.架构方面的文章,也陆续折腾了不少树莓派上的好玩小项目,在此新开一个树莓派实战的文章系列,分享给粉丝 ...
- Error:(4, 13) java: -source 1.5 中不支持默认方法 (请使用 -source 8 或更高版本以启用默认方法)
- javaweb 02: servlet
Servlet对象的生命周期 什么是Servlet对象生命周期? Servlet对象什么时候被创建. Servlet对象什么时候被销毁. Servlet对象创建了几个? Servlet对象的生命周期表 ...
- 0. 西门子 WinCC 组态软件 -- 概述
西门子 WinCC 组态软件 -- 概述 1.西门子WinCC各产品线及定位 WinCC是由SIEMENS(西门子)公司开发的SCADA(数据采集与监控)系统,能高效控制自动化过程,具有极强的开放性和 ...
- 零基础学Java(10)面向对象-使用LocalDate类完成日历设计
前言 在我们完成这个日历设计前,需要了解Java中的预定义类LocalDate的一些用法 语法 LocalDate.now() // 2022-07-01 会构造一个新对象,表示构造这个对象时的日期. ...