Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong kèo bóng đá pháp phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

65.4. Chỉ kèo bóng đá pháp gin#

65.4.1. Giới thiệu#

kèo bóng đá pháplà viết tắt của chỉ kèo bóng đá pháp đảo ngược tổng quát.kèo bóng đá phápđược thiết kế để xử lý các trường hợp trong đó các kèo bóng đá pháp được lập chỉ kèo bóng đá pháp là các giá trị tổng hợp và các truy vấn được xử lý bởi chỉ kèo bóng đá pháp cần tìm kiếm các giá trị phần tử xuất hiện trong các kèo bóng đá pháp tổng hợp. Ví dụ: các kèo bóng đá pháp có thể là tài liệu và các truy vấn có thể là tìm kiếm các tài liệu có chứa các từ cụ thể.

Chúng tôi sử dụng từkèo bóng đá phápđể đề cập đến một giá trị tổng hợp sẽ được lập chỉ kèo bóng đá pháp và từKeyđể tham khảo giá trị phần tử.kèo bóng đá phápLuôn lưu trữ và tìm kiếm các khóa, không phải giá trị kèo bóng đá pháp mỗi se.

Akèo bóng đá phápINDEX lưu trữ một bộ (khóa, danh sách đăng bài), trong đó ADanh sách đănglà một tập hợp các ID hàng trong đó khóa xảy ra. ID hàng tương tự có thể xuất hiện trong nhiều danh sách đăng bài, vì một kèo bóng đá pháp có thể chứa nhiều hơn một khóa.kèo bóng đá phápChỉ kèo bóng đá pháp rất nhỏ gọn cho các trường hợp cùng một khóa xuất hiện nhiều lần.

kèo bóng đá phápđược khái quát theo nghĩa làkèo bóng đá phápMã phương thức truy cập không cần biết kèo bóng đá pháp hoạt động cụ thể mà nó tăng tốc. Thay vào đó, nó sử dụng kèo bóng đá pháp chiến lược tùy chỉnh được xác định cho kèo bóng đá pháp loại dữ liệu cụ thể.

Một lợi thế củakèo bóng đá pháplà nó cho phép phát triển kèo bóng đá pháp loại dữ liệu tùy chỉnh với kèo bóng đá pháp phương thức truy cập phù hợp, bởi một chuyên gia trong lĩnh vực của loại dữ liệu, thay vì một chuyên gia cơ sở dữ liệu. Đây là lợi thế tương tự như sử dụngGist.

Thekèo bóng đá phápTriển khai trongPostgreSQLchủ yếu được duy trì bởi Teodor Sigaev và Oleg Bartunov. Có thêm thông tin vềkèo bóng đá pháptrên của họTrang web.

65.4.2. kèo bóng đá pháp lớp toán tử tích hợp#

CorePostgreSQLPhân phối bao gồmkèo bóng đá phápkèo bóng đá pháp lớp toán tử hiển thị trongBảng 65.3. (Một số mô -đun tùy chọn được mô tả trongPhụ lục FCung cấp bổ sungkèo bóng đá phápkèo bóng đá pháp lớp vận hành.)

Bảng 65.3. Tích hợpkèo bóng đá phápkèo bóng đá pháp lớp toán tử

tên Các toán tử có thể lập chỉ kèo bóng đá pháp
Array_ops && (AnyArray, AnyArray)
@ (AnyArray, AnyArray)
<@ (AnyArray, AnyArray)
= (AnyArray, AnyArray)
jsonb_ops @ (jsonb, jsonb)
@? (jsonb, jsonpath)
@@ (jsonb, jsonpath)
? (jsonb, văn bản)
? | (jsonb, văn bản [])
? & (Jsonb, văn bản [])
JSONB_PATH_OPS @ (jsonb, jsonb)
@? (jsonb, jsonpath)
@@ (jsonb, jsonpath)
TSVector_ops @@ (TSVECTOR, TSQUERY)

của hai lớp toán tử cho loạiJSONB, jsonb_opslà mặc định.JSONB_PATH_OPSHỗ trợ ít toán tử hơn nhưng cung cấp hiệu suất tốt hơn cho kèo bóng đá pháp toán tử đó. Nhìn thấyPhần 8.14.4Để biết chi tiết.

65.4.3. Khả năng mở rộng#

Thekèo bóng đá phápGiao diện có mức độ trừu tượng cao, yêu cầu người thực hiện phương thức truy cập chỉ để thực hiện ngữ nghĩa của kiểu dữ liệu được truy cập. Thekèo bóng đá phápBản thân lớp chăm sóc sự đồng thời, ghi nhật ký và tìm kiếm cấu trúc cây.

Tất cả những gì cần thiết để có đượckèo bóng đá phápPhương pháp truy cập làm việc là thực hiện một số phương pháp do người dùng xác định, xác định hành vi của các khóa trong cây và mối quan hệ giữa các khóa, kèo bóng đá pháp được lập chỉ kèo bóng đá pháp và truy vấn có thể lập chỉ kèo bóng đá pháp. Tóm lại,kèo bóng đá phápKết hợp độ mở rộng với tính tổng quát, tái sử dụng mã và giao diện sạch.

Có hai phương kèo bóng đá pháp mà một lớp toán tử chokèo bóng đá phápPhải cung cấp:

17872_17942

Trả về một mảng palloc'd gồm các phím được cung cấp một kèo bóng đá pháp được lập chỉ kèo bóng đá pháp. Số lượng khóa trả về phải được lưu trữ thành*NKEYS. Nếu bất kỳ phím nào có thể là null, cũng palloc một mảng*NKEYS boolTrường, lưu trữ địa chỉ của nó tại*nullflags, và đặt kèo bóng đá pháp cờ null này khi cần thiết.*nullflagscó thể để lạinull(giá trị ban đầu của nó) nếu tất cả kèo bóng đá pháp khóa không phải là null. Giá trị trả về có thể lànullNếu kèo bóng đá pháp không chứa khóa.

18652_18792

Trả về một mảng palloc'd gồm kèo bóng đá pháp khóa được cung cấp một giá trị được truy vấn; đó là,Truy vấnlà giá trị ở phía bên phải của toán tử có thể lập chỉ kèo bóng đá pháp có phía bên trái là cột được lập chỉ kèo bóng đá pháp.nlà số chiến lược của toán tử trong lớp toán tử (xemPhần 36.16.2). Thường,Trích xuấtSẽ cần tham khảo ý kiếnnĐể xác định loại dữ liệu củaTruy vấnvà phương pháp nó nên sử dụng để trích xuất kèo bóng đá pháp giá trị khóa. Số lượng khóa trả về phải được lưu trữ thành*NKEYS. Nếu bất kỳ phím nào có thể là null, cũng palloc một mảng*NKEYS BoolTrường, lưu trữ địa chỉ của nó tại*nullflags, và đặt kèo bóng đá pháp cờ null này khi cần thiết.*nullflagscó thể để lạinull(giá trị ban đầu của nó) nếu tất cả kèo bóng đá pháp khóa không phải là null. Giá trị trả về có thể lànullNếuTruy vấnkhông chứa khóa.

SearchModelà đối số đầu ra cho phépTrích xuấtĐể chỉ định chi tiết về cách tìm kiếm sẽ được thực hiện. Nếu như*SearchModeđược đặt thànhGin_Search_Mode_Default(là giá trị mà nó được khởi tạo trước khi gọi), chỉ các kèo bóng đá pháp phù hợp với ít nhất một trong các khóa trả về được coi là phù hợp ứng cử viên. Nếu như*SearchModeđược đặt thànhGIN_SEARCH_MODE_INCLUDE_EMPTY, sau đó ngoài các kèo bóng đá pháp chứa ít nhất một phím phù hợp, các kèo bóng đá pháp không chứa khóa nào được coi là phù hợp ứng cử viên. (Ví dụ: Chế độ này rất hữu ích để triển khai các toán tử là bộ phận của các toán tử.) Nếu*SearchModeđược đặt thànhGIN_SEARCH_MODE_ALL, thì tất cả các kèo bóng đá pháp không null trong chỉ kèo bóng đá pháp được coi là phù hợp với ứng cử viên, cho dù chúng có khớp với bất kỳ khóa nào được trả về hay không. .access/kèo bóng đá pháph.

pmatchlà một đối số đầu ra để sử dụng khi hỗ trợ kết hợp một phần. Để sử dụng nó,Trích xuấtPhải phân bổ một mảng*NKEYS boolS và lưu trữ địa chỉ của nó tại*pmatch. Mỗi phần tử của mảng phải được đặt thành true nếu khóa tương ứng yêu cầu khớp một phần, sai nếu không.*pmatchđược đặt thànhnullSau đó, kèo bóng đá pháp giả định rằng không cần kết hợp một phần. Biến được khởi tạo thànhNULLTrước khi gọi, vì vậy đối số này có thể bị bỏ qua bởi kèo bóng đá pháp lớp toán tử không hỗ trợ khớp một phần.

Extra_Datalà đối số đầu ra cho phépTrích xuấtĐể truyền dữ liệu bổ sung chonhất quánSo sánhpartialPhương kèo bóng đá pháp. Để sử dụng nó,Trích xuấtPhải phân bổ một mảng*NKEYSCon trỏ và lưu trữ địa chỉ của nó tại*Extra_data, sau đó lưu trữ bất cứ điều gì nó muốn vào kèo bóng đá pháp con trỏ riêng lẻ. Biến được khởi tạo thànhnullTrước khi gọi, vì vậy đối số này có thể đơn giản bị bỏ qua bởi kèo bóng đá pháp lớp toán tử không yêu cầu thêm dữ liệu. Nếu như*Extra_datađược đặt, toàn bộ mảng được chuyển chonhất quánPhương kèo bóng đá pháp và phần tử thích hợp choso sánhspartialPhương kèo bóng đá pháp.

Một lớp toán tử cũng phải cung cấp một chức năng để kiểm tra xem một kèo bóng đá pháp được lập chỉ kèo bóng đá pháp có khớp với truy vấn không. Nó có hai hương vị, một booleannhất quánHàm và một ternaryTriconsistentchức năng.TriconsistentBao gồm chức năng của cả hai, vì vậy cung cấpTriconsistentMột mình là đủ. Tuy nhiên, nếu biến thể Boolean rẻ hơn đáng kể để tính toán, thì có thể thuận lợi để cung cấp cả hai.

23894_24043

Trả về đúng nếu một kèo bóng đá pháp được lập chỉ kèo bóng đá pháp thỏa mãn toán tử truy vấn với số chiến lượcn(hoặc có thể thỏa mãn nó, nếu chỉ báo kiểm tra lại). Chức năng này không có quyền truy cập trực tiếp vào giá trị của kèo bóng đá pháp được lập chỉ kèo bóng đá pháp, vìkèo bóng đá phápKhông lưu trữ các kèo bóng đá pháp một cách rõ ràng. Thay vào đó, những gì có sẵn là kiến ​​thức về giá trị khóa nào được trích xuất từ ​​truy vấn xuất hiện trong một kèo bóng đá pháp được lập chỉ kèo bóng đá pháp nhất định.Kiểm tramảng có độ dàiNKEYS, giống như số lượng khóa được trả về trước đóTrích xuấtcho điều nàyTruy vấnDatum. Mỗi yếu tố củaKiểm traMảng là đúng nếu kèo bóng đá pháp được lập chỉ kèo bóng đá pháp chứa khóa truy vấn tương ứng, tức là, nếu (kiểm tra [i] == true) phím thứ i củaTrích xuấtMảng kết quả có mặt trong kèo bóng đá pháp được lập chỉ kèo bóng đá pháp. Bản gốcTruy vấnDatum được truyền trong trường hợpnhất quánPhương kèo bóng đá pháp cần tham khảo nó, và cũng vậyQuerykeys []nullflags []mảng được trả về trước đóTrích xuất. Extra_Datalà mảng dữ liệu thêm được trả về bởiTrích xuấthoặcnullNếu không.

KhiTrích xuấtTrả về phím null trongTruy vấn [], tương ứngKiểm tra []Phần tử là đúng nếu kèo bóng đá pháp được lập chỉ kèo bóng đá pháp chứa khóa null; đó là ngữ nghĩa củaKiểm tra []giống nhưkhông khác biệt với. Thenhất quánHàm có thể kiểm tra tương ứngnullflags []Phần tử nếu nó cần cho biết sự khác biệt giữa phù hợp giá trị thông thường và khớp null.

Khi thành công,*Rechecknên được đặt thành true nếu tple heap cần được kiểm tra lại đối với toán tử truy vấn hoặc sai nếu kiểm tra chỉ kèo bóng đá pháp là chính xác. Đó là, một giá trị trả về sai đảm bảo rằng Tuple Heap không khớp với truy vấn;*RecheckĐặt thành Sai đảm bảo rằng Tuple Heap không khớp với truy vấn; và giá trị trả về thực sự với*Recheck26583_26765

26836_26995

Triconsistentgiống vớinhất quán, nhưng thay vì booleans trongKiểm traVector, có ba giá trị có thể cho mỗi khóa:gin_true, gin_falsegin_maybe. gin_falsegin_trueCó ý nghĩa tương tự như kèo bóng đá pháp giá trị boolean thông thường, trong khiGin_Maybecó nghĩa là sự hiện diện của khóa đó không được biết đến. Khigin_maybeGiá trị có mặt, hàm chỉ nên trả vềgin_trueNếu kèo bóng đá pháp chắc chắn khớp với việc kèo bóng đá pháp chỉ kèo bóng đá pháp có chứa các khóa truy vấn tương ứng hay không. Tương tự như vậy, hàm phải trả vềgin_falseChỉ khi vật phẩm chắc chắn không khớp, dù nó có chứaGin_MaybeKhóa. Nếu kết quả phụ thuộc vàogin_maybekèo bóng đá pháp nhập, tức là, trận đấu không thể được xác nhận hoặc bác bỏ dựa trên các khóa truy vấn đã biết, chức năng phải trả vềgin_maybe.

Khi không cóGin_MaybeGiá trị trongKiểm traVector, Agin_maybeGiá trị trả về tương đương với việc cài đặtRecheckcờ trong booleannhất quánchức năng.

Ngoài ra, Gin phải có cách sắp xếp các giá trị chính được lưu trữ trong chỉ kèo bóng đá pháp. Lớp toán tử có thể xác định thứ tự sắp xếp bằng cách chỉ định phương thức so sánh:

int so sánh (Datum A, Datum B)

So sánh hai khóa (không được lập chỉ kèo bóng đá pháp!) Và trả về một số nguyên nhỏ hơn 0, 0 hoặc lớn hơn 0, cho biết phím thứ nhất có nhỏ hơn hoặc bằng hoặc lớn hơn thứ hai hay không. Các phím null không bao giờ được truyền cho chức năng này.

Ngoài ra, nếu lớp toán tử không cung cấp Aso sánhPhương thức, Gin sẽ tra cứu lớp toán tử Btree mặc định cho kiểu dữ liệu khóa chỉ kèo bóng đá pháp và sử dụng chức năng so sánh của nó. Bạn nên chỉ định chức năng so sánh trong lớp toán tử GIN chỉ dành cho một kiểu dữ liệu, vì việc tìm kiếm lớp toán tử Btree có giá một vài chu kỳ.Array_ops) Thông thường không thể chỉ định một hàm so sánh duy nhất.

Lớp toán tử chokèo bóng đá phápcó thể tùy chọn cung cấp kèo bóng đá pháp phương pháp sau:

30038_30126

So sánh khóa truy vấn khớp một phần với khóa chỉ kèo bóng đá pháp. Trả về một số nguyên có dấu cho biết kết quả: nhỏ hơn 0 có nghĩa là khóa chỉ kèo bóng đá pháp không khớp với truy vấn, nhưng việc quét chỉ kèo bóng đá pháp sẽ tiếp tục;ncủa toán tử tạo truy vấn khớp một phần được cung cấp, trong trường hợp ngữ nghĩa của nó là cần thiết để xác định thời điểm kết thúc quét. Cũng,Extra_Datalà phần tử tương ứng của mảng dữ liệu phụ được thực hiện bởiTrích xuấthoặcnullNếu không có. kèo bóng đá pháp phím null không bao giờ được truyền cho chức năng này.

Tùy chọn void (local_relopts *relopts)

Xác định một tập hợp kèo bóng đá pháp tham số có thể nhìn thấy người dùng có thể điều khiển hành vi của lớp toán tử.

TheTùy chọnHàm được chuyển một con trỏ cho mộtlocal_reloptsstruct, cần được lấp đầy với một tập hợp kèo bóng đá pháp tùy chọn cụ thể của lớp vận hành. kèo bóng đá pháp tùy chọn có thể được truy cập từ kèo bóng đá pháp chức năng hỗ trợ khác bằng cách sử dụngPG_HAS_OPCLASS_OPTES ()PG_GET_OPCLASS_OPTES ()Macros.

Vì cả hai trích xuất chính của các giá trị được lập chỉ kèo bóng đá pháp và biểu diễn của khóa trongkèo bóng đá pháplinh hoạt, chúng có thể phụ thuộc vào kèo bóng đá pháp tham số do người dùng chỉ định.

Để hỗ trợHồiKết hợp một phầnTruy vấn, lớp toán tử phải cung cấpso sánhspartialPhương kèo bóng đá pháp và nóTrích xuấtPhương thức phải đặtpmatchTham số khi gặp truy vấn một phần. Nhìn thấyPhần 65.4.4.2Để biết chi tiết.

kèo bóng đá pháp loại dữ liệu thực tế của kèo bóng đá pháp loại khác nhauDatumCác giá trị được đề cập ở trên thay đổi tùy thuộc vào lớp toán tử. Các giá trị kèo bóng đá pháp được truyền đếnExtractValueluôn thuộc loại đầu vào của lớp toán tử và tất cả kèo bóng đá pháp giá trị chính phải là của lớplưu trữLoại. Loại củaTruy vấnĐối số được chuyển choTrích xuất, nhất quánTriconsistentlà bất cứ thứ gì là loại đầu vào bên phải của toán tử thành viên lớp được xác định bởi số chiến lược. Điều này không cần phải giống như loại được lập chỉ kèo bóng đá pháp, miễn là các giá trị chính của loại chính xác có thể được trích xuất từ ​​nó.Truy vấnĐối số, mặc dù loại thực tế có thể là thứ khác tùy thuộc vào toán tử.

65.4.4. Triển khai#

Nội bộ, Akèo bóng đá phápINDEX chứa một chỉ số B-cây được xây dựng trên các khóa, trong đó mỗi khóa là một phần tử của một hoặc nhiều kèo bóng đá pháp được lập chỉ kèo bóng đá pháp (ví dụ như một thành viên của một mảng) và trong đó mỗi bộ tu trong một trang lá chứa một con trỏ đến một cây b của các đầu trỏ (APosting Tree) hoặc một danh sách đơn giản kèo bóng đá pháp con trỏ heap (ADanh sách đăng) Khi danh sách đủ nhỏ để phù hợp với một bộ chỉ kèo bóng đá pháp duy nhất cùng với giá trị khóa.Hình 65.1Minh họa các thành phần này của chỉ kèo bóng đá pháp gin.

kể từPOSTGRESQL9.1, các giá trị khóa NULL có thể được bao gồm trong chỉ kèo bóng đá pháp. Ngoài ra, null giữ chỗ được bao gồm trong chỉ kèo bóng đá pháp cho các kèo bóng đá pháp được lập chỉ kèo bóng đá pháp là null hoặc không chứa các phím theoExtractValue. Điều này cho phép các tìm kiếm nên tìm các kèo bóng đá pháp trống để làm như vậy.

Multicolumnkèo bóng đá phápCác chỉ kèo bóng đá pháp được triển khai bằng cách xây dựng một cây B duy nhất trên các giá trị tổng hợp (số cột, giá trị khóa). Các giá trị khóa cho các cột khác nhau có thể thuộc các loại khác nhau.

Hình 65.1. kèo bóng đá pháp Internals


65.4.4.1. Kỹ thuật cập nhật nhanh kèo bóng đá pháp#

Cập nhật Akèo bóng đá phápChỉ kèo bóng đá pháp có xu hướng chậm vì tính chất nội tại của các chỉ kèo bóng đá pháp đảo ngược: Chèn hoặc cập nhật một hàng đống có thể gây ra nhiều chèn vào chỉ kèo bóng đá pháp (một cho mỗi khóa được trích xuất từ ​​kèo bóng đá pháp được lập chỉ kèo bóng đá pháp).kèo bóng đá phápcó khả năng hoãn phần lớn công việc này bằng cách chèn các bộ dữ liệu mới vào một danh sách tạm thời, chưa được phân loại các kèo bóng đá pháp đang chờ xử lý. Khi bảng được hút bụi hoặc tự động hóa, hoặc khigin_clean_pending_listHàm được gọi hoặc nếu danh sách đang chờ xử lý lớn hơngin_pending_list_limit, các kèo bóng đá pháp được chuyển đến chínhkèo bóng đá phápCấu trúc dữ liệu sử dụng cùng một kỹ thuật chèn số lượng lớn được sử dụng trong quá trình tạo chỉ kèo bóng đá pháp ban đầu. Điều này cải thiện đáng kểkèo bóng đá phápTốc độ cập nhật chỉ kèo bóng đá pháp, thậm chí đếm chi phí chân không bổ sung. Ngoài ra, công việc trên cao có thể được thực hiện bằng một quy trình nền thay vì xử lý truy vấn tiền cảnh.

Nhược điểm chính của phương pháp này là các tìm kiếm phải quét danh sách các kèo bóng đá pháp đang chờ xử lý ngoài việc tìm kiếm chỉ kèo bóng đá pháp thông thường, và do đó, một danh sách lớn các kèo bóng đá pháp đang chờ xử lý sẽ làm chậm các tìm kiếm đáng kể. Một nhược điểm khác là, trong khi hầu hết các bản cập nhật đều nhanh, một bản cập nhật khiến danh sách đang chờ xử lý trở thànhquá lớnsẽ phải chịu một chu kỳ dọn dẹp ngay lập tức và do đó chậm hơn nhiều so với kèo bóng đá pháp bản cập nhật khác. Việc sử dụng đúng autovacuum có thể giảm thiểu cả hai vấn đề này.

Nếu thời gian phản hồi nhất quán quan trọng hơn tốc độ cập nhật, việc sử dụng các kèo bóng đá pháp đang chờ xử lý có thể bị vô hiệu hóa bằng cách tắtFastupDateTham số lưu trữ cho Akèo bóng đá phápINDEX. Nhìn thấyTạo chỉ kèo bóng đá phápđể biết chi tiết.

65.4.4.2. Thuật toán kết hợp một phần#

kèo bóng đá pháp có thể hỗ trợKết hợp một phầnKhăn37941_38153so sánhPhương kèo bóng đá pháp hỗ trợ). TheTrích xuấtPhương thức, thay vì trả về một giá trị khóa được khớp chính xác, trả về giá trị khóa là giới hạn dưới của phạm vi được tìm kiếm và đặtpmatchcờ đúng. Phạm vi khóa sau đó được quét bằng cách sử dụngso sánhspartialPhương kèo bóng đá pháp.so sánhspartial38587_38784

65.4.5. Mẹo và thủ thuật kèo bóng đá pháp#

Tạo so với Chèn

Chèn vào Akèo bóng đá phápChỉ kèo bóng đá pháp có thể chậm do khả năng nhiều khóa được chèn cho mỗi kèo bóng đá pháp. Vì vậy, đối với các chèn số lượng lớn vào một bảng, nên bỏ chỉ số gin và tạo lại nó sau khi hoàn thành việc chèn số lượng lớn.

KhiFastupDateđược bật chokèo bóng đá pháp(xemPhần 65.4.4.1Để biết chi tiết), hình phạt nhỏ hơn khi nó không. Nhưng đối với các bản cập nhật rất lớn, nó vẫn có thể tốt nhất để bỏ và tạo lại chỉ kèo bóng đá pháp.

bảo trì_work_mem

Xây dựng thời gian cho Akèo bóng đá phápChỉ kèo bóng đá pháp rất nhạy cảm vớibảo trì_work_memCài đặt; nó không trả tiền để tiết kiệm bộ nhớ làm việc trong quá trình tạo chỉ kèo bóng đá pháp.

gin_pending_list_limit

Trong một loạt kèo bóng đá pháp phần chèn vào hiện tạikèo bóng đá phápINDEX cóFastupdateĐã bật, hệ thống sẽ dọn dẹp danh sách nhập cảnh đang chờ xử lý bất cứ khi nào danh sách phát triển lớn hơngin_pending_list_limit. Để tránh sự biến động trong thời gian phản hồi quan sát, mong muốn được làm sạch trong danh sách đang chờ xử lý xảy ra trong nền (tức là, thông qua Autovacuum).gin_pending_list_limithoặc làm cho Autovacuum trở nên tích cực hơn. Tuy nhiên, việc mở rộng ngưỡng của hoạt động dọn dẹp có nghĩa là nếu việc dọn dẹp tiền cảnh xảy ra, nó sẽ mất nhiều thời gian hơn.

gin_pending_list_limitcó thể được ghi đè cho các chỉ kèo bóng đá pháp GIN riêng lẻ bằng cách thay đổi các tham số lưu trữ, cho phép mỗi chỉ kèo bóng đá pháp GIN có ngưỡng làm sạch riêng. Ví dụ: chỉ có thể tăng ngưỡng cho chỉ số gin có thể được cập nhật rất nhiều và giảm nó.

gin_fuzzy_search_limit

kèo bóng đá pháp tiêu chính của việc phát triểnkèo bóng đá phápIndexes là để tạo hỗ trợ cho tìm kiếm văn bản đầy đủ có thể mở rộng trongPostgreSQLvà thường có kèo bóng đá pháp tình huống khi một tìm kiếm toàn văn lại trả về một tập hợp kết quả rất lớn. Hơn nữa, điều này thường xảy ra khi truy vấn chứa kèo bóng đá pháp từ rất thường xuyên, do đó tập kết quả lớn thậm chí không hữu ích.

Để tạo điều kiện thực hiện có kiểm soát kèo bóng đá pháp truy vấn đó,kèo bóng đá phápcó giới hạn trên mềm có thể định cấu hình trên số lượng hàng được trả về: Thegin_fuzzy_search_limitTham số cấu hình. Nó được đặt thành 0 (có nghĩa là không có giới hạn) theo mặc định.

MạnhSoftcó nghĩa là số lượng kết quả trả về thực tế có thể khác với giới hạn được chỉ định, tùy thuộc vào truy vấn và chất lượng của bộ tạo số ngẫu nhiên của hệ thống.

Từ kinh nghiệm, kèo bóng đá pháp giá trị trong hàng ngàn (ví dụ: 5000 - 20000) hoạt động tốt.

65.4.6. Hạn chế#

kèo bóng đá phápGiả sử rằng các toán tử có thể lập chỉ kèo bóng đá pháp là nghiêm ngặt. Điều này có nghĩa làExtractValueSẽ không được gọi trên giá trị kèo bóng đá pháp NULL (thay vào đó, kèo bóng đá pháp nhập chỉ kèo bóng đá pháp giữ chỗ được tạo tự động) vàExtractQuerysẽ không được gọi trên giá trị truy vấn null (thay vào đó, truy vấn được cho là không hài lòng). Tuy nhiên, lưu ý rằng các giá trị khóa NULL có trong một kèo bóng đá pháp tổng hợp không null hoặc giá trị truy vấn được hỗ trợ.

65.4.7. Ví dụ#

CorePOSTGRESQLPhân phối bao gồmkèo bóng đá phápkèo bóng đá pháp lớp toán tử được hiển thị trước đó trongBảng 65.3. SauĐóng gópMô -đun cũng chứakèo bóng đá phápkèo bóng đá pháp lớp vận hành:

btree_gin

Chức năng tương đương B-cây cho một số loại dữ liệu

Hstore

Mô -đun để lưu trữ (khóa, giá trị) cặp

intarray

Hỗ trợ nâng cao choint []

PG_TRGM

Sự tương đồng về văn bản bằng cách sử dụng Trigram khớp