SQL數據庫與Lucene數據庫性能測試報告
<spanlang=en-us style="font-size: 14pt;">一、 測試目的
<spanstyle='font-family:宋體'>本測試試圖對用相同數據製作的SQL<spanstyle='font-family:宋體'>數據庫與Lucene<spanstyle='font-family:宋體'>數據庫對語義相同的查詢語句的性能作一個簡單的比較與分析,以找出各自的優缺點,並討論其各自的適用場合。
<spanlang=en-us>
<spanlang=en-us style="font-size: 14pt;">二、 測試環境
CPU<spanstyle='font-family:宋體'>:AMD Atholon64 3200+<spanstyle='font-family:宋體'>,<span lang=en-us>2.0G
<spanstyle='font-family:宋體'>內存:896MB
OS<spanstyle='font-family:宋體'>:Windows 2003
Jre<spanstyle='font-family:宋體'>版本:<span lang=en-us>1.6.0_01
Jdk<spanstyle='font-family:宋體'>版本:<span lang=en-us>1.5.0_06
Lucene<spanstyle='font-family:宋體'>版本:<span lang=en-us>2.2.0
JDBC<spanstyle='font-family:宋體'>版本:Microsoft SQL Server 2005JDBC Driver 1.2
<spanlang=en-us style="font-size: 14pt;">三、 測試數據設計
本次測試採用的數據來自校訊通的真實運營數據,原始數據是<spanlang=en-us>SQL數據庫的一張數據表,該表共有<spanlang=en-us>33個字段,各字段名稱及類型描述如下:
其中,本測試選取了<spanlang=en-us>ID、senderName<spanstyle='font-family:宋體'>、msgBody<spanstyle='font-family:宋體'>、msgTo<spanstyle='font-family:宋體'>四列來測試。ID<spanstyle='font-family:宋體'>代表了已做索引的int<spanstyle='font-family:宋體'>型字段;senderName<spanstyle='font-family:宋體'>代表varchar<spanstyle='font-family:宋體'>型的短文本字段;msgBody<spanstyle='font-family:宋體'>代表nvarchar<spanstyle='font-family:宋體'>型長文本字段;msgTo<spanstyle='font-family:宋體'>代表保存爲varchar<spanstyle='font-family:宋體'>型的數值字段。
原始數據共有<spanlang=en-us>5623689組,佔用約<spanlang=en-us>2GB的硬盤空間。在本測試中,分別選取其中前<spanlang=en-us>100萬組數據和前<spanlang=en-us>491萬組數據來參與測試。相同數據量的<spanlang=en-us>Lucene索引使用自寫的<spanlang=en-us>RDB2Lucene Java包生成。對所有的列都進行了索引化和詞元化。
設計測試數據時,考慮到以下幾個方面的對比:
<spanlang=en-us style="font-family: Wingdings;">ü 不同字段的查詢的對比;
<spanlang=en-us style="font-family: Wingdings;">ü 不同結果集規模的對比;
<spanlang=en-us style="font-family: Wingdings;">ü 不同查詢數據規模的對比;
<spanlang=en-us style="font-family: Wingdings;">ü 同一項測試連續進行多次的前後效率對比
具體測試數據及測試結果見以下兩個統計表:
100<spanstyle='font-family:宋體'>萬組數據測試統計表:
|
|
SQL |
Lucene |
|
||||
<span style="font-family: 宋體;">用例 |
搜索字段 |
搜索詞 |
結果集 |
用時 |
搜索詞 |
結果集 |
用時 |
結果集 |
1 |
ID |
%1% |
491542 |
10906 |
|
|
|
不同 |
2 |
ID |
1% |
153660 |
1250 |
1* |
153660 |
24502 |
相同 |
3 |
ID |
1234 |
1 |
1453 |
1234 |
1 |
2047 |
相同 |
4 |
ID |
2% |
110981 |
1109 |
2* |
110981 |
16845 |
相同 |
5 |
ID |
3% |
108023 |
1094 |
3* |
108023 |
3672 |
相同 |
6 |
ID |
111_ |
10 |
1437 |
111? |
10 |
63 |
相同 |
7 |
ID |
1%2% |
66133 |
1578 |
1*2* |
66133 |
1907 |
相同 |
8 |
ID |
7%8% |
44493 |
1531 |
7*8* |
44493 |
2750 |
相同 |
9 |
ID |
4_5_ |
100 |
1406 |
4?5? |
100 |
735 |
相同 |
10 |
senderName |
林% |
4753 |
1235 |
|
|
|
不同 |
11 |
senderName |
%<span style="font-family: 宋體;">林% |
9124 |
1141 |
林 |
9124 |
281 |
相同 |
12 |
senderName |
%<span style="font-family: 宋體;">林雨% |
6 |
1141 |
林雨 |
6 |
78 |
相同 |
13 |
senderName |
%<span style="font-family: 宋體;">家長%' |
103 |
1141 |
家長 |
103 |
32 |
相同 |
14 |
msgBody |
%<span style="font-family: 宋體;">林%' |
17579 |
14767 |
林 |
17579 |
219 |
相同 |
15 |
msgBody |
%<span style="font-family: 宋體;">林雨% |
46 |
14595 |
林雨 |
46 |
78 |
相同 |
16 |
msgBody |
%<span style="font-family: 宋體;">家長% |
532790 |
10798 |
家長 |
532790 |
3406 |
相同 |
17 |
msgBody |
%<span style="font-family: 宋體;">家長% |
532790 |
10501 |
家長 |
532790 |
375 |
相同 |
18 |
msgBody |
'%<span style="font-family: 宋體;">小學% |
61657 |
14861 |
小學 |
61679 |
890 |
不同 |
19 |
msgBody |
%<span style="font-family: 宋體;">小% |
132968 |
14439 |
小* |
132968 |
32 |
相同 |
20 |
msgBody |
小%孩<span lang="EN-US">% |
3666 |
1359 |
小*孩<span lang="EN-US">* |
0 |
16 |
不同 |
21 |
msgBody |
%<span style="font-family: 宋體;">你的孩子已於% |
680 |
14876 |
你的孩子已於 |
680 |
2828 |
相同 |
22 |
msgBody |
%<span style="font-family: 宋體;">小% |
50014 |
15032 |
|
|
|
不同 |
23 |
msgTo |
%1% |
999949 |
2906 |
1* |
999943 |
19609 |
不同 |
24 |
msgTo |
%1% |
999949 |
2454 |
1* |
999943 |
45750 |
不同 |
25 |
msgTo |
'%1% |
999949 |
2375 |
1* |
999943 |
5969 |
不同 |
26 |
msgTo |
%13% |
998059 |
2547 |
|
|
|
不同 |
27 |
msgTo |
13% |
997901 |
2110 |
13* |
997926 |
6203 |
不同 |
28 |
msgTo |
1392.22 |
3371 |
921 |
139222* |
3371 |
15 |
相同 |
29 |
msgTo |
139222%9 |
345 |
1750 |
139222*9 |
345 |
78 |
相同 |
30 |
msgTo |
13912345678 |
74 |
1672 |
13912345678 |
74 |
171 |
相同 |
31 |
msgTo |
1_9_2_0_0_9 |
95 |
1766 |
1?9?2?0?0?9 |
95 |
125 |
相同 |
32 |
msgTo |
'1%9%2%0%0%9 |
710 |
3891 |
1*9*2*0*0*9 |
710 |
219 |
相同 |
<spanlang=en-us style="font-size: 14pt;">四、 對測試數據的分析
可以從兩個方向來分析這兩個數據表
<spanlang=en-us style="font-family: Wingdings;">Ø 縱向比較
通過對比不同測試數據的用時,我們發現以下規律:
<spanlang=en-us>1) <spanlang=en-us>SQL數據庫的搜索用時與被搜索字段密切相關,返回結果集的大小對搜索用時的影響相對較小,對大數據量字段的查詢會造成性能急劇下降。
<spanstyle='font-family:宋體'>在數據量爲100<spanstyle='font-family:宋體'>萬條記錄的統計表中,對ID<spanstyle='font-family:宋體'>列的查詢時間基本爲1.2<spanstyle='font-family:宋體'>秒~1.4<spanstyle='font-family:宋體'>秒(例外是數據1<spanstyle='font-family:宋體'>);對senderName<spanstyle='font-family:宋體'>列的查詢時間基本爲1.1<spanstyle='font-family:宋體'>秒~1.2<spanstyle='font-family:宋體'>秒;對msgBody<spanstyle='font-family:宋體'>列的查詢時間基本爲14<spanstyle='font-family:宋體'>秒(例外是數據20<spanstyle='font-family:宋體'>),對msgTo<spanstyle='font-family:宋體'>的查詢時間基本爲1.7<spanstyle='font-family:宋體'>秒~2.4<spanstyle='font-family:宋體'>秒
<spanstyle='font-family:宋體'>在數據量爲491<spanstyle='font-family:宋體'>萬條記錄的統計表中,對ID<spanstyle='font-family:宋體'>列的查詢時間基本爲4.5<spanstyle='font-family:宋體'>秒~6<spanstyle='font-family:宋體'>秒;對senderName<spanstyle='font-family:宋體'>列的查詢時間基本爲50<spanstyle='font-family:宋體'>秒;對msgBody<spanstyle='font-family:宋體'>列的查詢時間基本爲70<spanstyle='font-family:宋體'>秒~80<spanstyle='font-family:宋體'>秒,對msgTo<spanstyle='font-family:宋體'>的查詢時間基本爲47<spanstyle='font-family:宋體'>秒~50<spanstyle='font-family:宋體'>秒(例外是數據35<spanstyle='font-family:宋體'>)
<spanlang=en-us>2) <spanlang=en-us>Lucene索引的搜索用時與返回結果集的大小密切相關,而與被查詢列關係不大。
將<spanlang=en-us>100萬數據表按不同查詢列進行染色,再按返回結果集的大小進行排序,或先按查詢列排序,再按結果集排序,便得到以下兩表(連續的同項測試只保留第一項):
數據 |
搜索字段 |
結果集 |
用時 |
|
20 |
msgBody |
0 |
16 |
|
3 |
ID |
1 |
2047 |
|
12 |
senderName |
6 |
78 |
|
6 |
ID |
10 |
63 |
|
15 |
msgBody |
46 |
78 |
|
30 |
msgTo |
74 |
171 |
|
31 |
msgTo |
95 |
125 |
|
9 |
ID |
100 |
735 |
|
13 |
senderName |
103 |
32 |
|
29 |
msgTo |
345 |
78 |
|
21 |
msgBody |
680 |
2828 |
|
32 |
msgTo |
710 |
219 |
|
28 |
msgTo |
3371 |
15 |
|
11 |
senderName |
9124 |
281 |
|
14 |
msgBody |
17579 |
219 |
|
8 |
ID |
44493 |
2750 |
|
18 |
msgBody |
61679 |
890 |
|
7 |
ID |
66133 |
1907 |
|
5 |
ID |
108023 |
3672 |
|
4 |
ID |
110981 |
16845 |
|
19 |
msgBody |
132968 |
32 |
|
2 |
ID |
153660 |
24502 |
|
16 |
msgBody |
532790 |
3406 |
|
27 |
msgTo |
997926 |
6203 |
|
23 |
msgTo |
999943 |
19609 |
|
數據 |
搜索字段 |
結果集 |
用時 |
|
3 |
ID |
1 |
2047 |
|
6 |
ID |
10 |
63 |
|
9 |
ID |
100 |
735 |
|
8 |
ID |
44493 |
2750 |
|
7 |
ID |
66133 |
1907 |
|
5 |
ID |
108023 |
3672 |
|
4 |
ID |
110981 |
16845 |
|
2 |
ID |
153660 |
24502 |
|
20 |
msgBody |
0 |
16 |
|
15 |
msgBody |
46 |
78 |
|
21 |
msgBody |
680 |
2828 |
|
14 |
msgBody |
17579 |
219 |
|
18 |
msgBody |
61679 |
890 |
|
19 |
msgBody |
132968 |
32 |
|
16 |
msgBody |
532790 |
3406 |
|
30 |
msgTo |
74 |
171 |
|
31 |
msgTo |
95 |
125 |
|
29 |
msgTo |
345 |
78 |
|
32 |
msgTo |
710 |
219 |
|
28 |
msgTo |
3371 |
15 |
|
27 |
msgTo |
997926 |
6203 |
|
23 |
msgTo |
999943 |
19609 |
|
12 |
senderName |
6 |
78 |
|
13 |
senderName |
103 |
32 |
|
11 |
senderName |
9124 |
281 |
|
<brclear=all style="page-break-before: auto;"><brclear=all style="page-break-before: auto;">
可見,搜索用時與結果集的大小密切相關,用時有明顯地隨結果集增大而增多(雖然不是絕對的)特別地,當結果集進一步加大時,搜索用時可能會急劇增加而使程序無法終止,這一點在<spanlang=en-us>491萬數據組的測試中非常常見。也就是說,當數據庫規模增長到<spanlang=en-us>490萬條記錄,<span lang=en-us>2G數據時,獲取全部結果集的做法已變得不太現實。
<spanlang=en-us>3) <spanstyle='font-family:宋體'>當連續測試同一組數據時,SQL<spanstyle='font-family:宋體'>數據庫和Lucene<spanstyle='font-family:宋體'>數據庫的用時都會比第一次測試用時要少。相關的測試數據在100<spanstyle='font-family:宋體'>萬數據組是:
|
|
SQL |
Lucene |
||||
<span style="font-size: 12pt; font-family: 宋體;">用例 |
搜索字段 |
搜索詞 |
結果集 |
用時 |
搜索詞 |
結果集 |
用時 |
16 |
msgBody |
%<span style="font-family: 宋體;">家長% |
532790 |
10798 |
家長 |
532790 |
3406 |
17 |
msgBody |
%<span style="font-family: 宋體;">家長% |
532790 |
10501 |
家長 |
532790 |
375 |
23 |
msgTo |
%1% |
999949 |
2906 |
1* |
999943 |
19609 |
24 |
msgTo |
%1% |
999949 |
2454 |
1* |
999943 |
45750 |
25 |
msgTo |
'%1% |
999949 |
2375 |
1* |
999943 |
5969 |
在491<spanstyle='font-family:宋體'>萬數據組是:
|
|
SQL |
Lucene |
||||
<span style="font-size: 12pt; font-family: 宋體;">用例 |
搜索字段 |
搜索詞 |
結果集 |
用時 |
搜索詞 |
結果集 |
用時 |
4 |
ID |
3% |
1103743 |
4453 |
|
|
|
5 |
ID |
3% |
1103743 |
4829 |
|
|
|
17 |
|
|
|
|
家長 |
349 |
157 |
17 |
|
|
|
|
家長 |
349 |
16 |
17 |
|
|
|
|
家長 |
349 |
0 |
20 |
|
|
|
|
林 |
168364 |
500 |
20 |
|
|
|
|
林 |
168364 |
31 |
20 |
|
|
|
|
林 |
168364 |
16 |
30 |
msgTo |
'%1% |
4909927 |
64126 |
|
|
|
30 |
msgTo |
'%1% |
4909927 |
46563 |
|
|
|
30 |
msgTo |
'%1% |
4909927 |
44941 |
|
|
|
相比之下,重複測試帶來的性能提升在<spanlang=en-us>Lucene表現得更爲明顯。
<spanlang=en-us style="font-family: Wingdings;">Ø 橫向比較
我們現在逐條數據地比較<spanlang=en-us>SQL數據庫與Lucene數據庫的用時差異,可以發現,當返回結果集不是太大(少於<spanlang=en-us>100萬組)的情況下,一般來說Lucene的表現是比<spanlang=en-us>SQL要好的。尤其是在SQL被查詢列沒有做索引,而該查詢列剛好又是長文本列的時候。用時有時可以相關上百倍。但當結果集比較大時,<spanlang=en-us>Lucene用時會急劇上升,有時甚至無法終止。此時,程序佔用物理內存大約在<span lang=en-us>700M上下,佔用虛擬內存大約在<span lang=en-us>1G上下,CPU佔用一開始很高,但約兩秒後下降至幾可忽略,硬盤燈狂閃,但任務管理器顯示<spanlang=en-us>IO並無太大變化,所以懷疑是內存抖動造成頻繁調頁,使得系統性能急劇下降。
<spanlang=en-us style="font-family: Wingdings;">Ø 表間比較
作<spanlang=en-us>SQL對比表,選出兩表中搜索詞相同的項,並使之一一對應(相同項僅保留第一次測試的結果),得:
|
|
|
100萬SQL |
491萬SQL |
|
||
<span style="font-family: 宋體;">用例 |
搜索字段 |
SQL搜索詞 |
結果集 |
用時 |
|
用時 |
用時增長 |
3 |
ID |
1234 |
1 |
1453 |
1 |
5578 |
3.8389539 |
2 |
ID |
1% |
153660 |
1250 |
1088349 |
4453 |
3.5624 |
4 |
ID |
2% |
110981 |
1109 |
1106148 |
4595 |
4.1433724 |
5 |
ID |
3% |
108023 |
1094 |
1103743 |
4453 |
4.0703839 |
6 |
ID |
111_ |
10 |
1437 |
10 |
5391 |
3.7515658 |
7 |
ID |
1%2% |
66133 |
1578 |
503923 |
6735 |
4.2680608 |
8 |
ID |
7%8% |
44493 |
1531 |
44493 |
5297 |
3.4598302 |
9 |
ID |
4_5_ |
100 |
1406 |
100 |
5579 |
3.9679943 |
10 |
senderName |
林% |
4753 |
1235 |
42840 |
46850 |
37.935223 |
11 |
senderName |
%<span style="font-family: 宋體;">林% |
9124 |
1141 |
63667 |
52552 |
46.057844 |
12 |
senderName |
%<span style="font-family: 宋體;">林雨% |
6 |
1141 |
5 |
45318 |
39.717791 |
13 |
senderName |
%<span style="font-family: 宋體;">家長%' |
103 |
1141 |
349 |
49880 |
43.716039 |
14 |
msgBody |
%<span style="font-family: 宋體;">林%' |
17579 |
14767 |
168364 |
72572 |
4.9144715 |
15 |
msgBody |
%<span style="font-family: 宋體;">林雨% |
46 |
14595 |
131 |
73759 |
5.053717 |
16 |
msgBody |
%<span style="font-family: 宋體;">家長% |
532790 |
10798 |
3196271 |
91398 |
8.4643452 |
18 |
msgBody |
'%<span style="font-family: 宋體;">小學% |
61657 |
14861 |
646573 |
73936 |
4.9751699 |
19 |
msgBody |
%<span style="font-family: 宋體;">小% |
132968 |
14439 |
1049424 |
68300 |
4.7302445 |
21 |
msgBody |
%<span style="font-family: 宋體;">你的孩子已於% |
680 |
14876 |
680 |
76211 |
5.1230842 |
23 |
msgTo |
%1% |
999949 |
2906 |
4909927 |
64126 |
22.066758 |
26 |
msgTo |
%13% |
998059 |
2547 |
4859042 |
45535 |
17.877896 |
28 |
msgTo |
139222% |
3371 |
921 |
20006 |
51709 |
56.144408 |
29 |
msgTo |
139222%9 |
345 |
1750 |
1804 |
219443 |
125.396 |
30 |
msgTo |
13912345678 |
74 |
1672 |
78 |
47817 |
28.598684 |
31 |
msgTo |
1_9_2_0_0_9 |
95 |
1766 |
186 |
48020 |
27.191393 |
32 |
msgTo |
'1%9%2%0%0%9 |
710 |
3891 |
3903 |
53240 |
13.682858 |
可見,隨着數據庫數據量的增大,所有的測試用例用時均有不同程度的增長。其中,用時增長幅度在<spanlang=en-us>3倍~8倍的有14組。此外,還有也有<spanlang=en-us>11組增長幅度更大。
用同樣的方法制作<spanlang=en-us>Lucene對比表:
|
|
|
100萬Lucene |
491萬Lucene |
|
||
<span style="font-size: 12pt; font-family: 宋體;">用例 |
搜索字段 |
Lucene搜索詞 |
結果集 |
用時 |
結果集 |
用時 |
用時增長 |
3 |
ID |
1234 |
1 |
2047 |
1 |
390 |
0.190523 |
6 |
ID |
111? |
10 |
63 |
10 |
812 |
12.88889 |
8 |
ID |
7*8* |
44493 |
2750 |
44493 |
1641 |
0.596727 |
9 |
ID |
4?5? |
100 |
735 |
100 |
844 |
1.148299 |
11 |
senderName |
林 |
9124 |
281 |
63667 |
594 |
2.113879 |
12 |
senderName |
林雨 |
6 |
78 |
6 |
63 |
0.807692 |
13 |
senderName |
家長 |
103 |
32 |
349 |
157 |
4.90625 |
14 |
msgBody |
林 |
17579 |
219 |
168364 |
500 |
2.283105 |
15 |
msgBody |
林雨 |
46 |
78 |
131 |
172 |
2.205128 |
16 |
msgBody |
家長 |
532790 |
3406 |
3196271 |
31846 |
9.349971 |
18 |
msgBody |
小學 |
61679 |
890 |
646623 |
11298 |
12.69438 |
19 |
msgBody |
小* |
132968 |
32 |
1049424 |
469 |
14.65625 |
21 |
msgBody |
你的孩子已於 |
680 |
2828 |
680 |
38097 |
13.47136 |
28 |
msgTo |
139222* |
3371 |
15 |
20006 |
969 |
64.6 |
29 |
msgTo |
139222*9 |
345 |
78 |
1804 |
32 |
0.410256 |
30 |
msgTo |
13912345678 |
74 |
171 |
78 |
16 |
0.093567 |
31 |
msgTo |
1?9?2?0?0?9 |
95 |
125 |
186 |
438 |
3.504 |
32 |
msgTo |
1*9*2*0*0*9 |
710 |
219 |
3903 |
562 |
2.56621 |
可見,<spanlang=en-us>Lucene的搜索用時增幅遠較SQL數據庫爲小,有<spanlang=en-us>5個用例甚至出現了負增長。這說明Lucene數據庫的搜索用時較不穩定,受除被搜索數據的規模以外的因素影響較大。
<spanlang=en-us style="font-size: 14pt; font-family: 宋體-方正超大字符集;">五、<spanstyle='font:7.0pt times="" new="" roman=""> 原因分析
要分析產生上述各種現象的原因,首先要對<spanlang=en-us>SQL數據庫與Lucene數據庫的數據結構及算法實現有一個簡單的瞭解。
(補數據庫實現原理<spanlang=en-us>)
由於關係型數據庫的查找採用順序遍歷表的方法,因此它的查找用時是與表規模和被查找列的數據量成正比的。縱向比較的規律<spanlang=en-us>1證實了這一點。
Lucene數據庫使用了一個倒排文件索引來提供快速查找。該索引按關鍵詞的字典序進行排序。從而使該索引支持快速的二分查找,相比於海量的文件內容而言,關鍵詞的數量是微不足道的,所以這一步所需時間非常短,在本測試中,它花費的時間是毫秒級的。
Lucene在索引中記錄了出現了該關鍵詞的記錄號、出現次數、位置等信息。因此,可以在海量的記錄集中快速地定位該關鍵詞的位置。從整體的方面來說,<spanlang=en-us>Lucene的倒排索引相當於實現了一個Hash表。我們知道,<spanlang=en-us>Hash表的查找複雜度是O(1)的,也就是說,<spanlang=en-us>Lucene的查找用時幾乎與記錄集的規模無關。這一點在《100萬組數據測試統計表》與《<spanlang=en-us>491萬組數據測試統計表》的對比中體現得非常明顯。
Lucene數據庫在索引中的檢索速度很快,但每匹配一個記錄後,就要進行一次磁盤的讀寫以獲取相關的數據。同時,用<spanlang=en-us>Java實現的Luene無論是在程序執行效率上、內存使用效率上還是文件的<spanlang=en-us>IO效率上,都要比編譯成二進制代碼的SQL server要低,這種先天不足使得<spanlang=en-us>Lucene在生成結果集的效率較低,縱向比較中的規律2證實了這一點。
<spanlang=en-us style="font-size: 14pt; font-family: 宋體-方正超大字符集;">六、<spanstyle='font:7.0pt times="" new="" roman=""> 結論:關係型數據庫與Lucene數據庫的適用場合
關係型數據庫的適用場合
<spanlang=en-us style="font-family: Wingdings;"> 涉及多種類型數據的處理(包括數值、二進制流等)
<spanlang=en-us style="font-family: Wingdings;"> 複雜的查詢類型(如組合查詢等)
<spanlang=en-us style="font-family: Wingdings;"> 複雜的權限和事務管理。
<spanlang=en-us style="font-family: Wingdings;"> 需要處理結果集中的所有數據(如數據轉換)
<spanlang=en-us style="font-family: Wingdings;"> 統計分析。
Lucene數據庫的適用場合
<spanlang=en-us style="font-family: Wingdings;"> 對大文本的匹配查找。
<spanlang=en-us style="font-family: Wingdings;"> 對文本的模糊匹配查找。需要匹配度控制的場合
<spanlang=en-us style="font-family: Wingdings;"> 基於詞元的匹配
<spanlang=en-us style="font-family: Wingdings;"> 只需處理結果集中的小部分數據(通常是指匹配度最高的數據),並且需要很高效地取出這些數據,如搜索引擎。
可見,兩種類型數據庫的適用場合差別是相當明顯的。在實際應用中,應該根據數據特點和應用需求來決定採用哪一種形式的數據庫。