Theo truyền thống, việc thực hiện một phương thức truy cập chỉ cách đọc kèo bóng đá 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.gistGiao 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ữ cách đọc kèo bóng đá đượ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.
cách đọc kèo bóng đá này không nên bị nhầm lẫn với cách đọc kèo bóng đá của các cây tìm kiếm tiêu chuẩn khác về dữ liệu mà chúng có thể xử lý. Ví dụ,PostgreSQLHỗ trợ các chỉ cách đọc kèo bóng đá b và 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 so với bất kỳ loại dữ cách đọc kèo bóng đá 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ỉ cách đọc kèo bóng đá băm chỉ hỗ trợ các truy vấn bình đẳng.
Vì vậy, nếu bạn lập chỉ cách đọc kèo bóng đá, hãy nói, một bộ sưu tập hình ảnh vớiPostgreSQLB-cây, bạn chỉ có thể phát hành cách đọc kèo bóng đá truy vấn như10055_10082”,HồiIS IS ISTIMX nhỏ hơn ImageyxôngvàHồi10225_10256Hồi. Tùy thuộc vào cách bạn xác địnhHồibằngHồi,nhỏ hơnxôngvà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ỉ cách đọc kèo bóng đá 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ách đọc kèo bóng đá ngựaHồihoặcHồiTìm tất cả cách đọc kèo bóng đá hình ảnh tiếp xúc quá mứcHồi.
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ách đọc kèo bóng đá các khóa trong cây. Tất nhiên, các phương pháp này phải khá lạ mắt để hỗ trợ các truy vấn ưa thích, nhưng đối với tất cả các truy vấn tiêu chuẩn (B-cây, cây R, v.v.), chúng tương đối đơn giản.gistKết hợp độ mở rộng cùng với tính tổng quát, tái sử dụng mã và giao diện sạch.
Có năm phương thức mà một lớp toán tử chỉ cách đọc kèo bóng đá chogistphải cung cấp và sáu là tùy chọn. Tính chính xác của chỉ cách đọc kèo bóng đá đượ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ỉ cách đọc kèo bóng đá 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ỉ cách đọc kèo bóng đá có dữ liệu cây bên trong thuộc loại khác với dữ liệu mà nó chỉ cách đọc kèo bóng đá. Lá phải thuộc loại dữ liệu được lập chỉ cách đọc kèo bóng đá, 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ữ cách đọc kèo bóng đá ở đây, xem vềVarlena
cho dữ cách đọc kèo bóng đá có kích thước biến). Nếu kiểu dữ cách đọc kèo bóng đá nội bộ của cây tồn tại ở cấp SQL, thìlưu trữ
Tùy chọn cách đọc kèo bóng đáTạ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ỉ có chỉ cách đọc kèo bóng đá, 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 một tùy chọnSortsupport
được sử dụng để tăng tốc xây dựng Agistindex.
nhất quán
Đã cho cách đọc kèo bóng đá nhập chỉ cách đọc kèo bóng đáP
và giá trị truy vấnq
, Hàm này xác định xem cách đọc kèo bóng đá nhập chỉ cách đọc kèo bóng đá lànhất quánHồivới truy vấn; nghĩa là, có thể là vị ngữinstioned_column
Indexable_operator
q
HồiTrue cho bất kỳ hàng nào được biểu thị bằng cách đọc kèo bóng đá nhập chỉ cách đọc kèo bóng đá? Đối với một cách đọc kèo bóng đá 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ỉ cách đọc kèo bóng đá, 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.TRUE
, ARecheck
Cờ cũng phải được trả về. Điều này cho biết cách đọc kèo bóng đá vị ngữ chắc chắn là đúng hay chỉ có thể đúng.RECHECK
=Sai
Sau đó, chỉ cách đọc kèo bóng đá đã kiểm tra chính xác điều kiện vị ngữ, trong khi nếuRECHECK
=TRUE
Hàng chỉ là một trận đấu ứng cử viên. Trong trường hợp đó, hệ thống sẽ tự động đánh giáIndexable_operator
so với giá trị hàng thực tế để xem nó có thực sự là một 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.
TheSQLTuyên bố chức cách đọc kèo bóng đá phải trông như thế này:
Tạo hoặc thay thế hàm my_consistent (nội bộ, data_type, smallint, oid, nội bộ)
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_consistent);
ở đây,Key
là một yếu tố trong chỉ cách đọc kèo bóng đá vàTruy vấn
Giá trị được tra cứu trong chỉ cách đọc kèo bóng đá. TheStrategyNumber
Tham số cho biết toán tử nào cách đọc kèo bóng đá lớp toán tử cách đọc kèo bóng đá bạn đang được áp dụng - Nó phù hợp với một trong các 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ữ cách đọc kèo bóng đá 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ỉ cách đọc kèo bóng đá 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ỉ cách đọc kèo bóng đá 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 mục, chức cách đọc kèo bóng đá này tạo ra một mục chỉ mục mới đại diện cho tất cả các mục đã cho.
TheSQLTuyên bố chức cách đọc kèo bó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ộ)
và mã phù hợp trong mô -đun C sau đó có thể theo bộ xương này:
pg_function_info_v1 (my_union);
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ữ cách đọc kèo bóng đá trong đóUnion (X, Y, Z) = Union (Union (X, Y), Z)
. Nó đủ dễ dàng để hỗ trợ các loại dữ cách đọc kèo bóng đá trong đó đây không phải là trường hợp, bằng cách thực hiện thuật toán liên minh thích hợp trong nàyGistPhương pháp hỗ trợ.
Kết quả cách đọc kèo bóng đáUnion
Hàm phải là giá trị của loại lưu trữ của chỉ cách đọc kèo bóng đá, 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ỉ cách đọc kèo bóng đá). TheUnion
Hàm sẽ trả một 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à mộtgistEntryVector
Con trỏ. Đối số thứ hai là một con trỏ tới một biến số nguyên, có thể bị bỏ qua.Union
Hàm lưu trữ kích thước cách đọc kèo bóng đá giá trị kết quả cách đọc kèo bóng đá 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 một cách đọc kèo bóng đá dữ liệu thành một định dạng phù hợp để lưu trữ vật lý trong một trang chỉ cách đọc kèo bóng đá. Nếunén
Phương thức bị bỏ qua, các cách đọc kèo bóng đá dữ liệu được lưu trữ trong chỉ cách đọc kèo bóng đá mà không cần sửa đổi.
TheSQLTuyên bố chức cách đọc kèo bóng đá phải trông như thế này:
Tạo hoặc thay thế hàm my_compress (nội bộ)
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);
Bạn phải điều chỉnhnén_data_type
sang loại cụ thể mà bạn đang chuyển đổi để nén các nút lá cách đọc kèo bóng đá 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 cách đọc kèo bóng đá 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 pháp bị bỏ qua, giả sử rằng các phương thức chính khác có thể hoạt động trực tiếp trên định dạng dữ cách đọc kèo bóng đá được lưu trữ. (giải nén
không nhất thiết là mặt trái cách đọc kèo bóng đáné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ữ cách đọc kèo bóng đá gốc.giải nén
không nhất thiết phải tương đương vớiFetch
, vì các phương thức định chính khác có thể không yêu cầu tái cấu trúc dữ cách đọc kèo bóng đá đầy đủ.)
TheSQLTuyên bố chức cách đọc kèo bóng đá phải trông như thế này:
Tạo hoặc thay thế hàm my_decompress (nội bộ)
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);
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ícủa việc chèn cách đọc kèo bóng đá mới vào một nhánh cụ thể của cây. Các cách đọc kèo bóng đá sẽ được chèn xuống đường dẫn ít nhấthình phạt
Trong cây. Giá trị được trả về bởihình phạt
nên không âm. Nếu một giá trị âm được trả về, nó sẽ được coi là 0.
TheSQLTuyên bố chức cách đọc kèo bó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ộ)
Và mã phù hợp trong mô -đun C sau đó có thể tuân theo bộ xương này:
pg_function_info_v1 (my_penalty);
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.
Thehình phạt
Hàm rất quan trọng đối với hiệu suất tốt của chỉ cách đọc kèo bóng đá. 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 cách đọc kèo bóng đá nhập mới vào cây.
PickSplit
Khi cần phân chia trang chỉ mục, chức cách đọc kèo bóng đá này quyết định mục nhập nào trên trang sẽ ở trên trang cũ và sẽ chuyển sang trang mới.
TheSQLTuyên bố chức cách đọc kèo bó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ộ)
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_picksplit);
Lưu ý rằngpicksplit
Kết quả của chức cách đọc kèo bó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ách đọc kèo bóng đáV
.
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ỉ cách đọc kèo bóng đá. 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 biểu diễn tốtGistLIES LIES.
cùng
Trả về đúng nếu hai cách đọc kèo bóng đá chỉ cách đọc kèo bóng đá giống hệt nhau, sai. (MỘTMạnhcách đọc kèo bóng đá nhập chỉ cách đọc kèo bóng đálà giá trị của loại lưu trữ của chỉ cách đọc kèo bóng đá, không nhất thiết là loại cột được lập chỉ cách đọc kèo bóng đá gốc.)
TheSQLTuyên bố chức cách đọc kèo bóng đá phải trông như thế này:
Tạo hoặc thay thế hàm my_same (Storage_Type, Storage_Type, Internal)
Và mã phù hợp trong mô -đun C sau đó có thể theo bộ xương này:
pg_function_info_v1 (my_same);
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.
Khoảng cách
Cho cách đọc kèo bóng đá nhập chỉ cách đọc kèo bóng đáP
và giá trị truy vấnQ
, Hàm này xác định cách đọc kèo bóng đá nhập của cách đọc kèo bóng đá nhậpHồiKhoả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.Khoảng cáchHồiĐầu tiên, vì vậy các kết quả phải phù hợp với ngữ nghĩa của nhà điều hành. Đối với cách đọc kèo bóng đá nhập chỉ số lá, kết quả chỉ thể hiện khoảng cách đến cách đọc kèo bóng đá nhập chỉ cách đọc kèo bóng đá;
TheSQLTuyên bố chức cách đọc kèo bó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ộ)
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_distance);
cách đọc kèo bóng đá đối số choKhoảng cách
Hàm giống hệt với các đối số cách đọc kèo bóng đánhất quán
chức cách đọc kèo bó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 cách đọc kèo bóng đá. 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.*Recheck
để đúng. .
Nếu hàm khoảng cách trả về*Rebheck = true
Đối với bất kỳ nút lá nào, loại trả về cách đọc kèo bóng đá toán tử đặt hàng ban đầu phải làfloat8
hoặcfloat4
và các giá trị kết quả của hàm khoảng cách phải tương đương với các 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 cách đọc kèo bóng đá khoảng cách và kết quả điều hành đơn hàng được tính toán lại. Nếu không, các 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ách đọc kèo bóng đá các 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ý các trường hợp như nulls, do đóKhoảng cách
Hàm trả về cách đọc kèo bóng đá giá trị này.)
Fetch
Chuyển đổi biểu diễn chỉ cách đọc kèo bóng đá nén của cách đọc kèo bóng đá dữ liệu thành kiểu dữ liệu gốc, để quét chỉ có chỉ cách đọc kèo bóng đá. 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ỉ cách đọc kèo bóng đá ban đầu.
TheSQLTuyên bố chức cách đọc kèo bóng đá phải trông như thế này:
Tạo hoặc thay thế hàm my_fetch (nội bộ)
Đối số là một con trỏ tớigistEntry
Cấu trúc. Khi nhập cảnh, nóKey
Trường chứa một mốc dữ cách đọc kèo bóng đá 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 cách đọc kèo bóng đá nén của OPClass không làm gì cho các mục lá, thìFetch
Phương thức có thể trả về đối số as-is. Hoặc, nếu opclass không có chức cách đọc kèo bóng đá nén,Fetch
Phương pháp 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);
Nếu phương thức nén bị mất cho các cách đọc kèo bóng đá nhập lá, lớp toán tử không thể hỗ trợ các lần quét chỉ có chỉ cách đọc kèo bóng đá và không được xác địnhFetch
chức cách đọc kèo bóng đá.
Tùy chọn
Cho phép định nghĩa các tham số có thể nhìn thấy người dùng có thể điều khiển hành vi cách đọc kèo bóng đá lớp toán tử.
TheSQLTuyên bố chức cách đọc kèo bóng đá phải trông như thế này:
Tạo hoặc thay thế hàm my_options (nội bộ)
Hàm được chuyển một con trỏ đến Alocal_relopts
struct, cần được lấp đầy với một tập hợp các tùy chọn cụ thể của lớp vận hành. Các tùy chọn có thể được truy cập từ các chức cách đọc kèo bó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à các tham số sử dụng từ các chức cách đọc kèo bóng đá hỗ trợ khác được đưa ra dưới đây:
typedef enum myenumtype
Kể từ khi biểu diễn khóa trongGistlà linh hoạt, nó có thể phụ thuộc vào các tham số do người dùng chỉ định. Ví dụ, độ dài cách đọc kèo bóng đá chữ ký khóa có thể được chỉ định.gtsVector_options ()
Ví dụ.
Sortsupport
Trả về hàm so sánh để sắp xếp dữ cách đọc kèo bóng đá theo cách bảo tồn địa phương. Nó được sử dụng bởiTạo chỉ cách đọc kèo bóng đá
vàReindex
lệnh. Chất lượng của chỉ cách đọc kèo bóng đá đượ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ỉ cách đọc kèo bóng đá
Xây dựng chỉ cách đọc kèo bóng đá 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 cách đọc kèo bóng đá, chậm hơn nhiều.
TheSQLTuyên bố chức cách đọc kèo bóng đá phải trông như thế này:
Tạo hoặc thay thế hàm my_sortsupport (nội bộ)
Đối số là một con trỏ tớiSortsupport
Cấu trúc. Ở mức tối thiểu, chức cách đọc kèo bóng đá phải điền vào trường so sánh của nó.Sortsupport
Cấu trúc. Các mốc dữ liệu là hai giá trị được lập chỉ cách đọc kèo bóng đá trong định dạng mà chúng được lưu trữ trong chỉ cách đọc kèo bóng đá;nén
Phương pháp. API đầy đủ được xác định trongSRC/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ất cả cách đọc kèo bóng đá 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.fcinfo- flinfo- fn_mcxt
, và giữ một 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ỉ cách đọc kèo bóng đá (ví dụ: một lần quét chỉ cách đọc kèo bóng đá GIST duy nhất, xây dựng chỉ cách đọc kèo bóng đá hoặc chèn tăng chỉ số).fn_extra
Giá trị hoặc rò rỉ sẽ tích lũy trong thời gian hoạt động.
Nếu bạn thấy bất cứ điều gì trong tài cách đọc kèo bóng đá không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài cách đọc kèo bóng đá.