文档

性能测试

更新时间:

本文介绍用维基百科英语语料库的数据做性能测试的结果,包含索引构建、单Term查询、多Term查询等多项性能测试结果。

测试实例规格

  • 引擎版本:AnalyticDB PostgreSQL 7.0版

  • 内核小版本:v7.1.0.0。

  • 实例系列:高可用版。

  • 节点规格:4 C 32 GB。

  • 节点数量:4 Segment。

  • 节点存储容量:200 GB。

  • 存储磁盘类型:ESSD云盘PL1。

  • Master资源:8 CU。

测试数据集

数据来源为维基百科英语语料库的快照,包含500万条数据。下载数据,请参见测试数据。本次测试了1亿条数据(将本次测试数据重复导入20次)下的性能情况。

  • 数据由url、title和body组成。

  • 数据格式为JSON

  • 数据大小为2.34 GB。

性能测试结果

  • BM25索引构建耗时约为Gin(tsvector)索引耗时的63%。

  • 在单Term查询方面,BM25索引的QPS性能为Gin(tsvector)索引的6-7倍。

  • 在多Term查询方面,BM25索引的QPS性能为Gin(tsvector)索引的6-11倍。

  • 在单Term AND点查询方面,BM25索引的QPS性能为Gin(tsvector)+btree索引的6-9倍。

  • 在单Term AND范围查询方面,BM25索引的QPS性能为Gin(tsvector)+btree索引的1-9倍。

索引构建

索引

数据导入耗时

构建索引耗时

带索引流式导入耗时

BM25

24 min

36 min

84 min

Gin(tsvector)

137 min

57 min

-

查询单个Term

在body列上查询包含某个Term的TOP 20结果,例如body:"Gabriel Basso"。这些Term的平均出现频率为56685(单位:次)。结果取最大的QPS以及对应时间点的RT。

并发数

BM25

Gin(tsquery)

QPS

RT (ms)

QPS

RT (ms)

1

158.86

6.45

25.97

38.35

5

544.43

9.19

73.92

64.35

10

738.21

12.63

89.90

128.65

20

863.07

20.69

172.83

262.89

30

925.02

31.05

239.74

378.18

40

1234.45

39.64

203.91

616.93

查询多个Term

在body列上查询包含多个Term中任意一个或多个的TOP20结果,例如body:handsworth OR body:cern。所有的Term都是从数据集中提取的,本次结果排除了罕见的Term(出现次数少于100次)。每个查询所包含的Term数量符合权重分布[0.03, 0.15, 0.25, 0.25, 0.15, 0.08, 0.04, 0.03, 0.02]。即有3%的查询包含1个Term、15%的查询包含2个Term等。

并发数

BM25

GIN(tsvector)

QPS

RT (ms)

QPS

RT (ms)

1

216.88

4.54

31.97

31.49

5

842.12

5.86

104.89

47.27

10

1161.79

8.58

112.89

87.40

20

1332.61

15.03

118.87

159.25

30

1380.56

21.66

120.93

264.10

40

1470.47

26.73

131.87

341.69

查询单Term AND点查

点查条件只命中一条数据。

SELECT * FROM articles ORDER BY body @@@ pgsearch.config('body:"David" AND id:80000000');
SELECT * FROM articles_gin WHERE  body_ts @@ to_tsquery('David') AND id = '80000000';

并发数

BM25

GIN(tsvector)+Btree

QPS

RT (ms)

QPS

RT (ms)

1

342.92

2.81

2.00

985.66

5

1434.90

3.30

4.99

2401.95

10

2293.54

4.21

6.99

4306.61

20

3084.70

6.32

13.98

8536.26

30

2835.97

10.38

19.98

12565.44

40

3081.71

12.78

24.97

17342.22

查询单Term AND范围查询

范围查询过滤掉99.99%的数据,命中1万条数据。

SELECT * FROM articles WHERE body @@ pgsearch.config('body:"David" AND id:[110000 TO 120000]');
SELECT * FROM articles_gin WHERE  body_ts @@ to_tsquery('David') AND id >= '110000' AND id <= '120000';

并发数

BM25

GIN(tsvector)+Btree

QPS

RT (ms)

QPS

RT (ms)

1

9.99

110.55

1.00

1189.95

5

22.97

229.57

4.99

2074.63

10

25.97

451.81

8.99

4236.33

20

32.97

951.86

14.99

8674.06

30

29.97

1366.22

19.98

13458.88

40

39.97

2071.66

32.96

18251.81