PostgreSQL
支持多种索引,也能通过插件做到自定义索引,实现替换多种专业数据库的能力。
📌 B-Link树
行id作为主键id,跟所在页的页码,作为键值对存为新表。以缩小查询范围。
类似B+树,但并发效率更强。
通过该种索引,平替关系型数据库,如Mysql
📌 GIN
文本切分为词元,通过词元反查主键id,做交并集运算,在pg中称为通用倒排索引。
通过该种索引,平替ElasticSearch。
🚁 GIN + JSON
在pg中,普通json文本读写效率慢,因此优化:去掉空格、换行等冗余信息,并转为二进制格式存储。
这种优化后的数据类型称为JSON Binary,简称JSONB。
pg将JSONB的键值对拆分,并生成哈希值,构建倒排索引,以提高查询效率。(代价是存储空间)
通过这种方式,平替MongoDB。
📌 GIST
地理信息系统用到的实现,如搜索附近1公里的店铺。
参考b+树,将二维的数据,如经纬度范围放入非叶子节点,具体店铺经纬度放叶子节点,最终取交集的部分。
这种索引结构称为矩形树,R-Tree。rectangle
在pg中,这种处理多维数据的搜索结构,称为通用搜索树,简称GIST。
📌 BRIN
时序数据库,按时间顺序插入大量数据,如日志、监控打点数据,索引空间紧张。
以每批数据页,取时间范围做摘要。
不理解数据本身,只关注范围边界,在pg中称为块范围索引,Block Range Index。以极小的存储代价,换取可观的查询性能。
通过这种方式,平替InfluxDB。