gistlà viết tắt của cây tìm kiếm tổng quát. Đây là một phương pháp truy cập có cấu trúc cây cân bằng, hoạt động như một mẫu cơ sở để thực hiện các sơ đồ lập chỉ kèo bóng đá hom nay tùy ý. B-cây, cây r và nhiều sơ đồ lập chỉ kèo bóng đá hom nay khác có thể được thực hiện trongGist.
kèo bóng đá hom nay lợi thế củaGistCó phải nó cho phép phát triển các loại dữ kèo bóng đá hom nay tùy chỉnh với các phương thức truy cập phù hợp, bởi một chuyên gia trong miền của kiểu dữ kèo bóng đá hom nay, thay vì chuyên gia cơ sở dữ kèo bóng đá hom nay.
Một số thông tin ở đây có nguồn gốc từ Đại học California tại Dự án lập chỉ kèo bóng đá hom nay GIST của BerkeleyTrang webvà Luận án của Marcel Kornacker,Phương thức truy cập cho các hệ thống cơ sở dữ kèo bóng đá hom nay thế hệ tiếp theo. Thegisttriển khai trongPostgreSQLchủ yếu được duy trì bởi Teodor Sigaev và Oleg Bartunov, và có nhiều thông tin hơn về của họTrang web.
CorePostgreSQLPhân phối bao gồmGistkèo bóng đá hom nay lớp toán tử hiển thị trongBảng 64.1. (kèo bóng đá hom nay số mô -đun tùy chọn được mô tả trongPhụ lục FCung cấp bổ sungGistkèo bóng đá hom nay lớp toán tử.)
Bảng 64.1. Tích hợpGistkèo bóng đá hom nay lớp toán tử
tên | Các toán tử có thể lập chỉ kèo bóng đá hom nay | kèo bóng đá hom nay toán tử đặt hàng |
---|---|---|
Box_ops |
<< (hộp, hộp) |
<- (hộp, điểm) |
& <(hộp, hộp) |
||
&& (hộp, hộp) |
||
& (hộp, hộp) |
||
(hộp, hộp) |
||
~ = (hộp, hộp) |
||
@ (hộp, hộp) |
||
<@ (hộp, hộp) |
||
& <| (hộp, hộp) |
||
<< | (hộp, hộp) |
||
| (hộp, hộp) |
||
| & (hộp, hộp) |
||
Circle_ops |
<< (Circle, Circle) |
<- (vòng tròn, điểm) |
& <(vòng tròn, vòng tròn) |
||
& (vòng tròn, vòng tròn) |
||
(vòng tròn, vòng tròn) |
||
<@ (vòng tròn, vòng tròn) |
||
@ (vòng tròn, vòng tròn) |
||
~ = (vòng tròn, vòng tròn) |
||
&& (vòng tròn, vòng tròn) |
||
| (vòng tròn, vòng tròn) |
||
<< | (vòng tròn, vòng tròn) |
||
& <| (vòng tròn, vòng tròn) |
||
| & (vòng tròn, vòng tròn) |
||
inet_ops |
<< (inet, inet) |
|
<< = (inet, inet) |
||
(inet, inet) |
||
= (inet, inet) |
||
= (inet, inet) |
||
< (inet, inet) |
||
<(inet, inet) |
||
17952_17972 |
||
(inet, inet) |
||
= (inet, inet) |
||
&& (inet, inet) |
||
Multirange_ops |
= (Anymultirange, Anymultirange) |
|
&& (Anymultirange, Anymultirange) |
||
&& (Anymultirange, Anyrange) |
||
@ (Anymultirange, AnyEuity) |
||
@ (Anymultirange, Anymultirange) |
||
@ (Anymultirange, Anyrange) |
||
<@ (Anymultirange, Anymultirange) |
||
<@ (Anymultirange, Anyrange) |
||
<< (Anymultirange, Anymultirange) |
||
<< (Anymultirange, Anyrange) |
||
(Anymultirange, Anymultirange) |
||
(Anymultirange, Anyrange) |
||
& <(Anymultirange, Anymultirange) |
||
& <(Anymultirange, Anyrange) |
||
& (Anymultirange, Anymultirange) |
||
& (Anymultirange, Anyrange) |
||
- |- (Anymultirange, Anymultirange) |
||
- |- (Anymultirange, Anyrange) |
||
point_ops |
| (điểm, điểm) |
<- (điểm, điểm) |
<< (điểm, điểm) |
||
(điểm, điểm) |
||
<< | (điểm, điểm) |
||
~ = (điểm, điểm) |
||
<@ (điểm, hộp) |
||
<@ (điểm, polygon) |
||
<@ (điểm, vòng tròn) |
||
poly_ops |
<< (Polygon, Polygon) |
<- (Polygon, Point) |
& <(đa giác, đa giác) |
||
& (đa giác, đa giác) |
||
(đa giác, đa giác) |
||
<@ (Polygon, Polygon) |
||
@ (đa giác, đa giác) |
||
~ = (Polygon, Polygon) |
||
&& (đa giác, đa giác) |
||
<< | (đa giác, đa giác) |
||
& <| (đa giác, đa giác) |
||
| & (đa giác, đa giác) |
||
| (đa giác, đa giác) |
||
Range_ops |
= (Anyrange, Anyrange) |
|
&& (Anyrange, Anyrange) |
||
&& (Anyrange, Anymultirange) |
||
@ (Anyrange, AnyEuity) |
||
@ (Anyrange, Anyrange) |
||
@ (Anyrange, Anymultirange) |
||
<@ (Anyrange, Anyrange) |
||
<@ (Anyrange, Anymultirange) |
||
<< (Anyrange, Anyrange) |
||
<< (Anyrange, Anymultirange) |
||
(Anyrange, Anyrange) |
||
(Anyrange, Anymultirange) |
||
& <(Anyrange, Anyrange) |
||
& <(Anyrange, Anymultirange) |
||
& (Anyrange, Anyrange) |
||
& (Anyrange, Anymultirange) |
||
- |- (Anyrange, Anyrange) |
||
- |- (Anyrange, Anymultirange) |
||
tsquery_ops |
<@ (tsquery, tsquery) |
|
@ (tsquery, tsquery) |
||
tsVector_ops |
@@ (TSVector, Tsquery) |
Vì lý do lịch sử,inet_ops
26371_26424inet
vàCIDR
. Để sử dụng nó, hãy đề cập đến tên lớp trongTạo chỉ kèo bóng đá hom nay
, ví dụ
Tạo chỉ kèo bóng đá hom nay trên my_table bằng Gist (my_inet_column inet_ops);
Theo truyền thống, việc thực hiện một phương thức truy cập chỉ kèo bóng đá hom nay mới có nghĩa là rất nhiều công việc khó khăn. Cần phải hiểu các hoạt động bên trong của cơ sở dữ liệu, chẳng hạn như trình quản lý khóa và nhật ký ghi. TheGISTGiao 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ữ kèo bóng đá hom nay được truy cập. TheGISTBả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.
27482_27635PostgreSQLHỗ trợ các chỉ kèo bóng đá hom nay B và chỉ số băm có thể mở rộng. Điều đó có nghĩa là bạn có thể sử dụngPOSTGRESQLĐể xây dựng một cây b hoặc băm trên bất kỳ loại dữ kèo bóng đá hom nay nào bạn muốn. Nhưng B-cây chỉ hỗ trợ các vị từ phạm vi (<
, =
, ) và chỉ các chỉ kèo bóng đá hom nay băm chỉ hỗ trợ các truy vấn bình đẳng.
Vì vậy, nếu bạn lập chỉ kèo bóng đá hom nay, hãy nói, một bộ sưu tập hình ảnh cóPostgreSQLB-tree, bạn chỉ có thể phát hành kèo bóng đá hom nay truy vấn nhưIS IS ISTIVHàng, IS IS ISTIVEvà28402_28433. Tùy thuộc vào cách bạn xác địnhHồibằngHồi, ít hơnvàlớn hơnHồiTrong bối cảnh này, điều này có thể hữu ích. Tuy nhiên, bằng cách sử dụngGistChỉ kèo bóng đá hom nay dựa trên, bạn có thể tạo các cách để hỏi các câu hỏi cụ thể về tên miền, có lẽTìm tất cả hình ảnh của ngựaVoihoặcTìm tất cả kèo bóng đá hom nay hình ảnh tiếp xúc quá mức”.
Tất cả những gì cần thiết để có đượcGISTPhương thức truy cập lên và chạy là thực hiện một số phương thức do người dùng xác định, xác định hành vi của kèo bóng đá hom nay khóa trong cây. Tất nhiên, kèo bóng đá hom nay phương pháp này phải khá lạ mắt để hỗ trợ kèo bóng đá hom nay truy vấn ưa thích, nhưng đối với tất cả kèo bóng đá hom nay truy vấn tiêu chuẩn (B-cây, cây R, v.v.), chúng tương đối đơn giản. Tóm lại,Gist29438_29521
Có năm phương thức mà một lớp toán tử chỉ kèo bóng đá hom nay choGistphải cung cấp và sáu là tùy chọn. Tính chính xác của chỉ kèo bóng đá hom nay được đảm bảo bằng cách thực hiện đúngcùng
, nhất quán
vàUnion
Phương pháp, trong khi hiệu quả (kích thước và tốc độ) của chỉ kèo bóng đá hom nay sẽ phụ thuộc vàohình phạt
vàPickSplit
Phương pháp. Hai phương thức tùy chọn lànén
vàgiải nén
, cho phép một chỉ kèo bóng đá hom nay có dữ liệu cây bên trong thuộc loại khác với dữ liệu mà nó chỉ kèo bóng đá hom nay. Lá phải thuộc loại dữ liệu được lập chỉ kèo bóng đá hom nay, trong khi các nút cây khác có thể thuộc bất kỳ cấu trúc C nào (nhưng bạn vẫn phải theo dõiPostgreSQLQuy tắc kiểu dữ kèo bóng đá hom nay ở đây, xem vềVarlena
cho dữ kèo bóng đá hom nay có kích thước biến). Nếu kiểu dữ kèo bóng đá hom nay nội bộ của cây tồn tại ở cấp SQL, thìlưu trữ
Tùy chọn củaTạo lớp toán tử
Có thể sử dụng lệnh. Phương thức thứ tám tùy chọn làKhoảng cách
, cần thiết nếu lớp toán tử muốn hỗ trợ quét theo thứ tự (tìm kiếm lân cận gần nhất). Phương pháp thứ chín tùy chọnFetch
là cần thiết nếu lớp toán tử muốn hỗ trợ các lần quét chỉ chỉ kèo bóng đá hom nay, ngoại trừ khinén
Phương pháp bị bỏ qua. Phương pháp thứ mười tùy chọnTùy chọn
là cần thiết nếu lớp toán tử có tham số do người dùng chỉ định. Phương pháp thứ mười kèo bóng đá hom nay tùy chọnSortsupport
được sử dụng để tăng tốc xây dựng AGistindex.
31444_31456
Đã cho kèo bóng đá hom nay nhập chỉ kèo bóng đá hom nayP
31551_31572Q
, Hàm này xác định xem kèo bóng đá hom nay nhập chỉ kèo bóng đá hom nay có phải lànhất quánvới truy vấn; nghĩa là, có thể là vị ngữinstioned_column
Indexable_operator
Q
True cho bất kỳ hàng nào được biểu thị bằng kèo bóng đá hom nay nhập chỉ kèo bóng đá hom nay? Đối với một kèo bóng đá hom nay nhập chỉ số lá, điều này tương đương với việc kiểm tra điều kiện có thể lập chỉ kèo bóng đá hom nay, trong khi đối với một nút cây bên trong, bạn có cần thiết phải quét cây con của chỉ số được biểu thị bằng nút cây hay không. Khi kết quả làTRUE
, ARecheck
Cờ cũng phải được trả về. Điều này cho biết kèo bóng đá hom nay vị ngữ chắc chắn là đúng hay chỉ có thể đúng. Nếu nhưRecheck
=false
Sau đó, chỉ kèo bóng đá hom nay đã kiểm tra chính xác điều kiện vị ngữ, trong khi nếuRecheck
=TRUE
32654_32748Indexable_operator
so với giá trị hàng thực tế để xem nó có thực sự là kèo bóng đá hom nay trận đấu hay không. Quy ước này cho phépGistĐể hỗ trợ cả cấu trúc chỉ số không mất và mất.
TheSQL33043_33094
Tạo hoặc thay thế hàm my_consistent (nội bộ, data_type, smallint, oid, nội bộ) Trả lại bool Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Và mã phù hợp trong mô -đun C sau đó có thể theo bộ xương này:
33409_34276
ở đây,Key
là một yếu tố trong chỉ kèo bóng đá hom nay vàTruy vấn
34398_34445StrategyNumber
Tham số cho biết toán tử nào của lớp toán tử của bạn đang được áp dụng - Nó phù hợp với một trong kèo bóng đá hom nay số toán tử trongTạo lớp toán tử
lệnh.
Tùy thuộc vào toán tử bạn đã đưa vào lớp, kiểu dữ kèo bóng đá hom nay củaTruy vấn
có thể thay đổi theo toán tử, vì nó sẽ là bất kỳ loại nào ở phía bên phải của toán tử, có thể khác với loại dữ liệu được lập chỉ kèo bóng đá hom nay xuất hiện ở phía bên trái. (Bộ xương mã trên giả định rằng chỉ có một loại có thể; nếu không, tìm nạpTruy vấn
Giá trị đối số sẽ phải phụ thuộc vào toán tử.)nhất quán
Hàm sử dụng kiểu dữ liệu được lập chỉ kèo bóng đá hom nay của OPClass choTruy 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ử.
Union
Phương pháp này củng cố thông tin trong cây. Cho một tập hợp các kèo bóng đá hom nay, chức năng này tạo ra một kèo bóng đá hom nay chỉ kèo bóng đá hom nay mới đại diện cho tất cả các kèo bóng đá hom nay đã cho.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_union (nội bộ, nội bộ) Trả về Storage_Type Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Và mã phù hợp trong mô -đun C sau đó có thể theo bộ xương này:
pg_function_info_v1 (my_union); Mốc thời gian my_union (pg_function_args) GistEntryVector *entryVec = (gistEntryVector *) pg_getarg_pulum (0); GistEntry *ent = entryVec- vector; data_type *out, *TMP, *cũ; int numranges, i = 0; numRanges = entryVec- n; tmp = datumgetDatateType (ent [0] .Key); ra = tmp; if (numRanges == 1) out = data_type_deep_copy (TMP); Pg_return_data_type_p (ra); for (i = 1; i <numranges; i ++) cũ = ra; tmp = datumgetDatateType (ent [i] .key); ra = my_union_implementation (ra, tmp); Pg_return_data_type_p (ra);
Như bạn có thể thấy, trong bộ xương này, chúng tôi đang xử lý một kiểu dữ kèo bóng đá hom nay trong đóUnion (X, Y, Z) = Union (Union (X, Y), Z)
36968_37090GistPhương pháp hỗ trợ.
Kết quả củaLiên minh
Hàm phải là giá trị của loại lưu trữ của chỉ kèo bóng đá hom nay, bất cứ điều gì (nó có thể hoặc không khác với loại cột được lập chỉ kèo bóng đá hom nay). TheUnion
Hàm sẽ trả kèo bóng đá hom nay con trỏ mớipalloc ()
Bộ nhớ ED. Bạn không thể trả về giá trị đầu vào as-is, ngay cả khi không có loại thay đổi.
Như được hiển thị ở trên,Union
First FirstNội bộ
Đối số thực sự là kèo bóng đá hom naygistEntryVector
Con trỏ. Đối số thứ hai là kèo bóng đá hom nay con trỏ tới kèo bóng đá hom nay biến số nguyên, có thể bị bỏ qua. (Nó đã từng được yêu cầu rằngUnion
Hàm lưu trữ kích thước của giá trị kết quả của nó vào biến đó, nhưng điều này không còn cần thiết nữa.)
nén
Chuyển đổi kèo bóng đá hom nay dữ liệu thành một định dạng phù hợp để lưu trữ vật lý trong trang chỉ kèo bóng đá hom nay. Nếunén
Phương pháp bị bỏ qua, các kèo bóng đá hom nay dữ liệu được lưu trữ trong chỉ kèo bóng đá hom nay mà không cần sửa đổi.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_compress (nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Và mã phù hợp trong mô -đun C sau đó có thể theo dõi bộ xương này:
pg_function_info_v1 (my_compress); Mốc thời gian my_compress (pg_function_args) GistEntry *entry = (gistEntry *) pg_getarg_pulum (0); Gistentry *retval; Nếu (Entry- LeafKey) / * Thay thế Entry- phím bằng phiên bản nén */ nén_data_type *nén_data = palloC (sizeof (nén_data_type)); / *điền *nén_data từ Entry- Key ... *// retval = palloc (sizeof (gistentry)); gistentryinit (*retval, pulongetdatum (nén_data), Entry- rel, Entry- Page, Entry- Offset, False); khác / * Thông thường chúng ta không cần làm bất cứ điều gì với các kèo bóng đá hom nay không lá */ retval = kèo bóng đá hom nay nhập; Pg_return_pulum (retval);
Bạn phải điều chỉnhnén_data_type
sang loại cụ thể mà bạn chuyển đổi thành để nén kèo bóng đá hom nay nút lá của bạn, tất nhiên.
giải nén
Chuyển đổi biểu diễn được lưu trữ của một kèo bóng đá hom nay dữ liệu thành một định dạng có thể được thao tác bởi các phương thức GIST khác trong lớp toán tử. Nếugiải nén
Phương thức bị bỏ qua, người ta cho rằng các phương thức GIST khác có thể hoạt động trực tiếp trên định dạng dữ kèo bóng đá hom nay được lưu trữ. (giải nén
không nhất thiết là mặt trái củanén
Phương pháp; Cụ thể, nếunén
là mất thì không thể chogiải nén
Để xây dựng lại chính xác dữ kèo bóng đá hom nay gốc.giải nén
không nhất thiết tương đương vớiFetch
, vì các phương thức GIST khác có thể không yêu cầu tái cấu trúc dữ kèo bóng đá hom nay đầy đủ.)
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_decompress (nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Và mã phù hợp trong mô -đun C sau đó có thể theo dõi bộ xương này:
pg_function_info_v1 (my_decompress); Mốc thời gian my_decompress (pg_function_args) Pg_return_pulum (pg_getarg_pulum (0));
Bộ xương trên phù hợp cho trường hợp không cần giải nén. (Nhưng, tất nhiên, việc bỏ qua phương pháp hoàn toàn thậm chí còn dễ dàng hơn và được khuyến nghị trong những trường hợp như vậy.)
hình phạt
Trả về giá trị biểu thịchi phí41515_41518của việc chèn kèo bóng đá hom nay mới vào một nhánh cụ thể của cây. Các kèo bóng đá hom nay sẽ được chèn xuống đường dẫn ít nhấthình phạt
41672_4170741728_41737
nên không âm. Nếu kèo bóng đá hom nay giá trị âm được trả về, nó sẽ được coi là 0.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_penalty (nội bộ, nội bộ, nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt; - Trong một số trường hợp, kèo bóng đá hom nay chức năng hình phạt không cần phải nghiêm ngặt
Và mã phù hợp trong mô -đun C sau đó có thể theo bộ xương này:
pg_function_info_v1 (my_penalty); Mốc thời gian my_penalty (pg_function_args) GistEntry *origentry = (gistEntry *) pg_getarg_pulum (0); GistEntry *newEntry = (gistEntry *) pg_getarg_pulum (1); phao *hình phạt = (float *) pg_getarg_pulum (2); data_type *orig = datumgetDatateType (origentry- key); data_type *new = datumgetDatateType (key- key); *hình phạt = my_penalty_implementation (orig, mới); Pg_return_pulum (hình phạt);
Vì lý do lịch sử,hình phạt
Hàm không chỉ trả vềfloat
Kết quả; Thay vào đó, nó phải lưu trữ giá trị tại vị trí được biểu thị bằng đối số thứ ba. Giá trị trả về mỗi se bị bỏ qua, mặc dù thông thường để chuyển lại địa chỉ của đối số đó.
Thehình phạt
Hàm rất quan trọng đối với hiệu suất tốt của chỉ kèo bóng đá hom nay. Nó sẽ được sử dụng vào thời gian chèn để xác định chi nhánh nào sẽ làm theo khi chọn nơi thêm kèo bóng đá hom nay nhập mới vào cây. Vào thời điểm truy vấn, chỉ kèo bóng đá hom nay càng cân bằng, tra cứu càng nhanh.
PickSplit
43531_43687
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_picksplit (nội bộ, nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Và mã phù hợp trong mô -đun C sau đó có thể theo dõi bộ xương này:
44088_46220
Lưu ý rằngPickSplit
Kết quả của chức năng được phân phối bằng cách sửa đổi thông quaV
Cấu trúc. Giá trị trả về mỗi se bị bỏ qua, mặc dù thông thường để truyền lại địa chỉ củaV
.
nhưhình phạt
, ThePickSplit
Hàm rất quan trọng đối với hiệu suất tốt của chỉ kèo bóng đá hom nay. Thiết kế phù hợphình phạt
vàPickSplit
triển khai là nơi thách thức thực hiện hoạt động tốtGISTLIES LIES.
cùng
47028_47100Mạnhkèo bóng đá hom nay nhập chỉ kèo bóng đá hom nay”là giá trị của loại lưu trữ của chỉ kèo bóng đá hom nay, không nhất thiết là loại cột được lập chỉ kèo bóng đá hom nay gốc.)
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_same (Storage_Type, Storage_Type, Internal) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
và mã phù hợp trong mô -đun C sau đó có thể theo bộ xương này:
pg_function_info_v1 (my_same); Mốc thời gian my_same (pg_function_args) prefix_range *v1 = pg_getarg_prefix_range_p (0); prefix_range *v2 = pg_getarg_prefix_range_p (1); bool *result = (bool *) pg_getarg_pulum (2); *result = my_eq (v1, v2); Pg_return_pulum (result);
Vì lý do lịch sử,cùng
Hàm không chỉ trả về kết quả boolean; Thay vào đó, nó phải lưu trữ cờ tại vị trí được biểu thị bằng đối số thứ ba. Giá trị trả về mỗi se bị bỏ qua, mặc dù thông thường để chuyển lại địa chỉ của đối số đó.
Khoảng cách
Cho kèo bóng đá hom nay nhập chỉ kèo bóng đá hom nayP
và giá trị truy vấnq
, Hàm này xác định kèo bóng đá hom nay nhập của kèo bóng đá hom nay nhậpKhoảng cáchKhănTừ giá trị truy vấn. Hàm này phải được cung cấp nếu lớp toán tử chứa bất kỳ toán tử đặt hàng nào. Truy vấn sử dụng toán tử đặt hàng sẽ được triển khai bằng cách trả về các kèo bóng đá hom nay nhập chỉ kèo bóng đá hom nay với nhỏ nhấtKhoảng cáchĐầu tiên, vì vậy kết quả phải phù hợp với ngữ nghĩa của nhà điều hành. Đối với kèo bóng đá hom nay nhập chỉ số lá, kết quả chỉ thể hiện khoảng cách đến kèo bóng đá hom nay nhập chỉ kèo bóng đá hom nay; Đối với một nút cây bên trong, kết quả phải là khoảng cách nhỏ nhất mà bất kỳ kèo bóng đá hom nay nhập con nào cũng có thể có.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_distance (nội bộ, data_type, smallint, oid, nội bộ) Trả lại float8 Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
và mã phù hợp trong mô -đun C sau đó có thể theo bộ xương này:
pg_function_info_v1 (my_distance); Mốc thời gian my_distance (pg_function_args) GistEntry *entry = (gistEntry *) pg_getarg_pulum (0); data_type *truy vấn = pg_getarg_data_type_p (1); Chiến lược chiến lược = (StrategyNumber) PG_GetArg_Uint16 (2); /* Oid phân nhóm = pg_getarg_oid (3); */ / *bool *RecHeck = (bool *) pg_getarg_pulum (4); */ data_type *key = datumGetDatatype (entry- key); gấp đôi retval; /* * Xác định giá trị trả về là kèo bóng đá hom nay hàm của chiến lược, khóa và truy vấn. */ Pg_return_float8 (retval);
kèo bóng đá hom nay đối số choKhoảng cách
Hàm giống hệt với kèo bóng đá hom nay đối số củanhất quán
chức năng.
Một số xấp xỉ được cho phép khi xác định khoảng cách, miễn là kết quả không bao giờ lớn hơn khoảng cách thực tế của kèo bóng đá hom nay. Do đó, ví dụ, khoảng cách đến một hộp giới hạn thường là đủ trong các ứng dụng hình học. Đối với một nút cây bên trong, khoảng cách được trả về không được lớn hơn khoảng cách đến bất kỳ nút con nào. Nếu khoảng cách trả về không chính xác, hàm phải đặt*REMHECK
Đúng. .
Nếu hàm khoảng cách trả về*Recheck = true
Đối với bất kỳ nút lá nào, loại trả về của toán tử đặt hàng ban đầu phải làfloat8
hoặcfloat4
và kèo bóng đá hom nay giá trị kết quả của hàm khoảng cách phải tương đương với kèo bóng đá hom nay giá trị của toán tử đặt hàng ban đầu, vì người thực thi sẽ sắp xếp bằng cả kết quả chức năng khoảng cách và kết quả điều hành đặt hàng được tính toán lại. Nếu không, kèo bóng đá hom nay giá trị kết quả của hàm khoảng cách có thể là bất kỳ hữu hạnfloat8
Giá trị, miễn là thứ tự tương đối của kèo bóng đá hom nay giá trị kết quả khớp với thứ tự được trả về bởi toán tử đặt hàng. (Vô cực và trừ vô cực được sử dụng bên trong để xử lý kèo bóng đá hom nay trường hợp như nulls, do đóKhoảng cách
Hàm trả về kèo bóng đá hom nay giá trị này.)
Fetch
Chuyển đổi biểu diễn chỉ kèo bóng đá hom nay nén của kèo bóng đá hom nay dữ liệu thành kiểu dữ liệu gốc, để quét chỉ có chỉ kèo bóng đá hom nay. Dữ liệu được trả về phải là một bản sao chính xác, không bị mất của giá trị được lập chỉ kèo bóng đá hom nay ban đầu.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_fetch (nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Đối số là kèo bóng đá hom nay con trỏ tớigistEntry
Cấu trúc. Khi nhập cảnh, nóKey
Trường chứa một mốc dữ kèo bóng đá hom nay lá không null ở dạng nén. Giá trị trả về là một giá trị khácgistentry
struct, cóKey
Trường chứa cùng một mốc trong dạng ban đầu, không nén. Nếu chức năng nén của OPClass không làm gì cho các kèo bóng đá hom nay lá, thìFetch
52941_53040Fetch
Phương thức cũng có thể được bỏ qua, vì nó nhất thiết phải là không có op.
Mã phù hợp trong mô -đun C sau đó có thể tuân theo bộ xương này:
pg_function_info_v1 (my_fetch); Mốc thời gian my_fetch (pg_function_args) GistEntry *entry = (gistEntry *) pg_getarg_pulum (0); input_data_type *in = datumGetPulum (entry- khóa); fetched_data_type *fetched_data; Gistentry *retval; retval = palloc (sizeof (gistentry)); fetched_data = palloC (sizeof (fetched_data_type)); /* * Chuyển đổi 'fetched_data' thành một mốc của kiểu dữ kèo bóng đá hom nay gốc. */ / * điền * retval từ fetched_data. */ gistentryinit (*retval, pulongetdatum (coltred_datum), Entry- rel, Entry- Page, Entry- Offset, False); Pg_return_pulum (retval);
Nếu phương thức nén bị mất cho các kèo bóng đá hom nay nhập lá, lớp toán tử không thể hỗ trợ các lần quét chỉ có chỉ kèo bóng đá hom nay và không được xác địnhFetch
chức năng.
Tùy chọn
Cho phép định nghĩa kèo bóng đá hom nay tham số có thể nhìn thấy người dùng điều khiển hành vi của lớp toán tử.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_options (nội bộ) Trả về khoảng trống Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Hàm được chuyển kèo bóng đá hom nay con trỏ cho kèo bóng đá hom nay54648_54663
struct, cần được lấp đầy với một tập hợp kèo bóng đá hom nay tùy chọn cụ thể của lớp vận hành. kèo bóng đá hom nay tùy chọn có thể được truy cập từ kèo bóng đá hom nay chức năng hỗ trợ khác bằng cách sử dụngPG_HAS_OPCLASS_OPTES ()
vàPG_GET_OPCLASS_OPTES ()
Macros.
Một ví dụ triển khai my_options () và kèo bóng đá hom nay tham số sử dụng từ kèo bóng đá hom nay chức năng hỗ trợ khác được đưa ra dưới đây:
55102_58453
Kể từ khi biểu diễn khóa trongGISTlà linh hoạt, nó có thể phụ thuộc vào kèo bóng đá hom nay tham số do người dùng chỉ định. Ví dụ, độ dài của chữ ký khóa có thể được chỉ định. Nhìn thấygtsVector_options ()
Ví dụ.
Sortsupport
Trả về hàm so sánh để sắp xếp dữ kèo bóng đá hom nay theo cách bảo tồn địa phương. Nó được sử dụng bởiTạo chỉ kèo bóng đá hom nay
vàReindex
lệnh. Chất lượng của chỉ kèo bóng đá hom nay được tạo phụ thuộc vào mức độ sắp xếp được xác định bởi hàm so sánh bảo tồn địa phương của các đầu vào.
TheSortsupport
Phương pháp là tùy chọn. Nếu nó không được cung cấp,Tạo chỉ kèo bóng đá hom nay
Xây dựng chỉ kèo bóng đá hom nay bằng cách chèn mỗi tuple vào cây bằng cách sử dụnghình phạt
vàPickSplit
Chức năng, chậm hơn nhiều.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hoặc thay thế hàm my_sortsupport (nội bộ) Trả về khoảng trống Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Đối số là kèo bóng đá hom nay con trỏ tớiSortsupport
Cấu trúc. Ở mức tối thiểu, chức năng phải điền vào trường so sánh của nó. Bộ so sánh có ba đối số: hai mốc dữ kèo bóng đá hom nay để so sánh và một con trỏ tớiSortsupport
Cấu trúc. Các mốc dữ liệu là hai giá trị được lập chỉ kèo bóng đá hom nay trong định dạng mà chúng được lưu trữ trong chỉ kèo bóng đá hom nay; nghĩa là, ở định dạng được trả về bởinén
60232_60270SRC/bao gồm/Utils/Sortsupport.h
.
Mã phù hợp trong mô -đun C sau đó có thể tuân theo bộ xương này:
pg_function_info_v1 (my_sortsupport); Tĩnh int my_fastcmp (datum x, datum y, sortSupport SSUP) / * Thiết lập thứ tự giữa x và y bằng cách tính toán kèo bóng đá hom nay số giá trị sắp xếp z */ int z1 = computespatialCode (x); int z2 = computespatialCode (y); Trả về Z1 == Z2? 0: Z1 Z2? 1: -1; Mốc thời gian my_sortsupport (pg_function_args) Sắp xếp SSUP = (SortSupport) PG_GetArg_Pulum (0); ssup- so sánh = my_fastcmp; Pg_return_void ();
Tất cả kèo bóng đá hom nay phương thức hỗ trợ GIST thường được gọi trong bối cảnh bộ nhớ ngắn; đó là,currentMemoryContext
sẽ được đặt lại sau mỗi lần xử lý. Do đó, không phải là rất quan trọng để lo lắng về việc mọi thứ bạn palloc. Tuy nhiên, trong một số trường hợp, nó hữu ích cho một phương thức hỗ trợ để lưu trữ dữ kèo bóng đá hom nay qua các cuộc gọi được lặp lại. Để làm điều đó, phân bổ dữ kèo bóng đá hom nay tồn tại lâu hơn trongfcinfo- flinfo- fn_mcxt
, và giữ kèo bóng đá hom nay con trỏ cho nó trongfcinfo- flinfo- fn_extra
. Dữ liệu đó sẽ tồn tại cho tuổi thọ của hoạt động chỉ kèo bóng đá hom nay (ví dụ: một lần quét chỉ kèo bóng đá hom nay GIST duy nhất, xây dựng chỉ kèo bóng đá hom nay hoặc chèn tăng chỉ số). Hãy cẩn thận với giá trị trước đó khi thay thếfn_extra
61738_61810
Cách đơn giản nhất để xây dựng một chỉ kèo bóng đá hom nay GIST chỉ là để chèn tất cả các kèo bóng đá hom nay, từng người một. Điều này có xu hướng chậm đối với các chỉ kèo bóng đá hom nay lớn, bởi vì nếu các tổng chỉ kèo bóng đá hom nay nằm rải rác trên chỉ kèo bóng đá hom nay và chỉ kèo bóng đá hom nay đủ lớn để không phù hợp với bộ đệm, sẽ cần rất nhiều I/O ngẫu nhiên.PostgreSQLHỗ trợ hai phương pháp thay thế cho bản dựng ban đầu của chỉ kèo bóng đá hom nay GIST:Sắp xếpvàBufferedchế độ.
Phương thức được sắp xếp chỉ khả dụng nếu mỗi OPClass được sử dụng bởi Chỉ kèo bóng đá hom nay cung cấp mộtSortsupport
Hàm, như được mô tả trongPhần 64.2.3. Nếu họ làm như vậy, phương pháp này thường là tốt nhất, vì vậy nó được sử dụng theo mặc định.
Phương pháp đệm hoạt động bằng cách không chèn các bộ dữ liệu trực tiếp vào chỉ kèo bóng đá hom nay ngay lập tức. Nó có thể giảm đáng kể lượng I/O ngẫu nhiên cần thiết cho các bộ dữ liệu không được đặt hàng. Đối với các tập dữ liệu được đặt hàng tốt, lợi ích nhỏ hơn hoặc không tồn tại, bởi vì chỉ có một số lượng nhỏ các trang nhận được các bộ dữ liệu mới tại một thời điểm và các trang đó phù hợp với bộ đệm ngay cả khi toàn bộ chỉ kèo bóng đá hom nay không.
Phương thức được đệm cần gọihình phạt
63664_64069
Nếu không thể sắp xếp, thì theo mặc định, bản dựng chỉ kèo bóng đá hom nay GIST chuyển sang phương thức đệm khi kích thước chỉ kèo bóng đá hom nay đạt đếnhiệu quả_cache_size. Bộ đệm có thể bị buộc hoặc ngăn chặn bằng tay bởibộ đệm
Tham số cho lệnh tạo chỉ kèo bóng đá hom nay. Hành vi mặc định là tốt cho hầu hết các trường hợp, nhưng tắt bộ đệm có thể tăng tốc độ xây dựng nếu dữ liệu đầu vào được đặt hàng.
ThePostgreSQLPhân phối nguồn bao gồm một số ví dụ về các phương thức chỉ kèo bóng đá hom nay được triển khai bằng cách sử dụngGIST. Hệ thống cốt lõi hiện cung cấp hỗ trợ tìm kiếm văn bản (lập chỉ kèo bóng đá hom nay chotsVector
vàtsquery
) cũng như chức năng tương đương r-tree cho một số loại dữ kèo bóng đá hom nay hình học tích hợp (xemsrc/phụ trợ/truy cập/gist/gistproc.c
). SauĐóng góp
Mô -đun cũng chứagist65424_65444
btree_gist
65620_65676
khối
lập chỉ kèo bóng đá hom nay cho các khối đa chiều
Hstore
Mô -đun để lưu trữ (khóa, giá trị) cặp
intarray
66121_66171
Ltree
lập chỉ kèo bóng đá hom nay cho các cấu trúc giống như cây
PG_TRGM
Sự tương đồng về văn bản bằng cách sử dụng Trigram khớp
SEG
lập chỉ kèo bóng đá hom nay choPhạm vi nổi
Nếu bạn thấy bất cứ điều gì trong tài kèo bóng đá hom nay không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài kèo bóng đá hom nay.