kèo chấp bóng đá hôm naylà viết tắt của không gian phân vùnggist. kèo chấp bóng đá hôm nayHỗ trợ kèo chấp bóng đá hôm nay cây tìm kiếm được phân vùng, tạo điều kiện cho việc phát triển một loạt kèo chấp bóng đá hôm nay cấu trúc dữ liệu không cân bằng khác nhau, như cây tứ giác, cây K-D và cây radix (thử). Đặc điểm chung của kèo chấp bóng đá hôm nay cấu trúc này là chúng liên tục chia không gian tìm kiếm thành kèo chấp bóng đá hôm nay phân vùng không cần phải có kích thước bằng nhau.
kèo chấp bóng đá hôm nay cấu trúc dữ liệu phổ biến này ban đầu được phát triển để sử dụng trong bộ nhớ. Trong bộ nhớ chính, chúng thường được thiết kế như một tập hợp kèo chấp bóng đá hôm nay nút được phân bổ động được liên kết bởi kèo chấp bóng đá hôm nay con trỏ.kèo chấp bóng đá hôm naylà ánh xạ kèo chấp bóng đá hôm nay nút cây tìm kiếm đến kèo chấp bóng đá hôm nay trang đĩa theo cách mà tìm kiếm chỉ cần truy cập một vài trang đĩa, ngay cả khi nó đi qua nhiều nút.
nhưgist, kèo chấp bóng đá hôm naycó nghĩa là cho phép phát triển kèo chấp bóng đá hôm nay loại dữ liệu tùy chỉnh với kèo chấp bóng đá hôm nay phương thức truy cập phù hợp, bởi một chuyên gia trong lĩnh vực của kiểu dữ liệu, thay vì chuyên gia cơ sở dữ liệu.
kèo chấp bóng đá hôm nay số thông tin ở đây có nguồn gốc từ Dự án lập chỉ mục SP-Gist của Đại học PurdueTrang web. Thekèo chấp bóng đá hôm naytriển khai kèo chấp bóng đá hôm nayPostgreSQLchủ yếu được duy trì bởi Teodor Sigaev và Oleg Bartunov, và có thêm thông tin về của họTrang web.
CorePostgreSQLPhân phối bao gồmkèo chấp bóng đá hôm naykèo chấp bóng đá hôm nay lớp toán tử hiển thị trongBảng 64.2.
Bảng 64.2.Tích hợpkèo chấp bóng đá hôm naykèo chấp bóng đá hôm nay lớp toán tử
tên | Toán tử có thể lập chỉ mục | kèo chấp bóng đá hôm 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) |
||
inet_ops |
<< (inet, inet) |
|
<< = (inet, inet) |
||
(inet, inet) |
||
= (inet, inet) |
||
= (inet, inet) |
||
< (inet, inet) |
||
<(inet, inet) |
||
<= (inet, inet) |
||
(inet, inet) |
||
= (inet, inet) |
||
&& (inet, inet) |
||
kd_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) |
||
poly_ops |
<< (Polygon, Polygon) |
<- (đa giác, điểm) |
& <(Polygon, Polygon) |
||
& (đa giác, đa giác) |
||
(đa giác, đa giác) |
||
<@ (Polygon, Polygon) |
||
@ (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) |
||
| & (đa giác, đa giác) |
||
Quad_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) |
||
Range_ops |
= (Anyrange, Anyrange) |
|
&& (Anyrange, Anyrange) |
||
@ (Anyrange, AnyEuity) |
||
@ (Anyrange, Anyrange) |
||
<@ (Anyrange, Anyrange) |
||
<< (Anyrange, Anyrange) |
||
(Anyrange, Anyrange) |
||
& <(Anyrange, Anyrange) |
||
& (Anyrange, Anyrange) |
||
- |- (Anyrange, Anyrange) |
||
Text_ops |
= (văn bản, văn bản) |
|
<(văn bản, văn bản) |
||
<= (văn bản, văn bản) |
||
(văn bản, văn bản) |
||
= (văn bản, văn bản) |
||
~ <~ (văn bản, văn bản) |
||
~ <= ~ (văn bản, văn bản) |
||
~ = ~ (văn bản, văn bản) |
||
~ ~ (văn bản, văn bản) |
||
^@ (văn bản, văn bản) |
của hai lớp toán tử cho loạiđiểm
, Quad_Point_ops
là mặc định.kd_point_ops
Hỗ trợ kèo chấp bóng đá hôm nay toán tử giống nhau nhưng sử dụng cấu trúc dữ liệu chỉ mục khác có thể cung cấp hiệu suất tốt hơn trong một số ứng dụng.
TheQuad_Point_ops
, kd_point_ops
vàPoly_ops
kèo chấp bóng đá hôm nay lớp vận hành hỗ trợ<-
Toán tử đặt hàng, cho phép người hàng xóm gần nhất K (K-NN
) Tìm kiếm qua kèo chấp bóng đá hôm nay tập dữ liệu điểm hoặc đa giác được lập chỉ mục.
kèo chấp bóng đá hôm naycung cấp một giao diện với mức độ trừu tượng cao, yêu cầu nhà phát triển phương thức truy cập chỉ thực hiện kèo chấp bóng đá hôm nay phương thức cụ thể cho một loại dữ liệu nhất định. Thekèo chấp bóng đá hôm nayCore chịu trách nhiệm ánh xạ đĩa hiệu quả và tìm kiếm cấu trúc cây. Nó cũng quan tâm đến kèo chấp bóng đá hôm nay cân nhắc đồng thời và ghi nhật ký.
Bộ đôi lá của kèo chấp bóng đá hôm naykèo chấp bóng đá hôm nayCây thường chứa kèo chấp bóng đá hôm nay giá trị của cùng loại dữ liệu với cột được lập chỉ mục, mặc dù chúng cũng có thể chứa kèo chấp bóng đá hôm nay biểu diễn mất của cột được lập chỉ mục. kèo chấp bóng đá hôm nay bộ dữ liệu lá được lưu trữ ở cấp độ gốc sẽ biểu thị trực tiếp giá trị dữ liệu được lập chỉ mục ban đầu, nhưng kèo chấp bóng đá hôm nay bộ dữ liệu lá ở mức thấp hơn có thể chỉ chứa một giá trị một phần, chẳng hạn như hậu tố.
Khi kèo chấp bóng đá hôm naykèo chấp bóng đá hôm nayChỉ mục được tạo bằngBao gồm
Cột, kèo chấp bóng đá hôm nay giá trị của kèo chấp bóng đá hôm nay cột đó cũng được lưu trữ trong kèo chấp bóng đá hôm nay bộ dữ liệu lá. TheBao gồm
kèo chấp bóng đá hôm nay cột không quan tâm đếnkèo chấp bóng đá hôm naylớp toán tử, vì vậy chúng không được thảo luận thêm ở đây.
Bộ dữ liệu bên trong phức tạp hơn, vì chúng là kèo chấp bóng đá hôm nay điểm phân nhánh trong cây tìm kiếm. Mỗi tuple bên trong chứa một tập hợp một hoặc nhiềunút, đại diện cho kèo chấp bóng đá hôm nay nhóm kèo chấp bóng đá hôm nay giá trị lá tương tự. Một nút chứa một đường xuống dẫn đến một phần bên trong cấp độ khác, hoặc vào một danh sách ngắn kèo chấp bóng đá hôm nay bộ dữ liệu lá nằm trên cùng một trang chỉ mục.nhãnmô tả nó; Ví dụ, trong kèo chấp bóng đá hôm nay cây radix, nhãn nút có thể là ký tự tiếp theo của giá trị chuỗi.Phần 64.3.4.2.) Tùy chọn, kèo chấp bóng đá hôm nay tuple bên trong có thể cótiền tốGiá trị mô tả tất cả kèo chấp bóng đá hôm nay thành viên của nó. Trong một cây radix, đây có thể là tiền tố phổ biến của kèo chấp bóng đá hôm nay chuỗi được đại diện.
kèo chấp bóng đá hôm nay số thuật toán cây yêu cầu kiến thức về cấp độ (hoặc độ sâu) của tuple hiện tại, vì vậykèo chấp bóng đá hôm nayCore cung cấp khả năng cho kèo chấp bóng đá hôm nay lớp vận hành để quản lý việc đếm mức trong khi giảm dần cây. Ngoài ra còn có hỗ trợ cho việc xây dựng lại giá trị được biểu diễn tăng dần khi đó là cần thiết và để truyền dữ liệu bổ sung (được gọi làGiá trị Traverse) trong khi kèo chấp bóng đá hôm nay cây gốc.
Thekèo chấp bóng đá hôm nayMã cốt lõi chăm sóc kèo chấp bóng đá hôm nay mục NULL. Mặc dùkèo chấp bóng đá hôm nayIndexes do kèo chấp bóng đá hôm nay mục lưu trữ cho kèo chấp bóng đá hôm nay null trong kèo chấp bóng đá hôm nay cột được lập chỉ mục, điều này được ẩn khỏi mã lớp toán tử chỉ mục: Không có mục nhập chỉ mục null hoặc điều kiện tìm kiếm sẽ được chuyển đến kèo chấp bóng đá hôm nay phương thức của lớp vận hành. (Giả định rằngkèo chấp bóng đá hôm nayNgười vận hành nghiêm ngặt và do đó không thể thành công cho kèo chấp bóng đá hôm nay giá trị null.) Do đó, kèo chấp bóng đá hôm nay giá trị null không được thảo luận thêm ở đây.
Có năm phương thức do người dùng xác định là lớp toán tử chỉ mục chokèo chấp bóng đá hôm nayphải cung cấp và hai là tùy chọn. Tất cả năm phương pháp bắt buộc tuân theo quy ước kèo chấp bóng đá hôm nay nhận haiNội bộ
Đối số, trong đó đầu tiên là con trỏ tới cấu trúc C chứa kèo chấp bóng đá hôm nay giá trị đầu vào cho phương thức hỗ trợ, trong khi đối số thứ hai là một con trỏ tới cấu trúc C nơi phải đặt giá trị đầu ra. Bốn trong số kèo chấp bóng đá hôm nay phương thức bắt buộc chỉ trả vềvoid
, vì tất cả kèo chấp bóng đá hôm nay kết quả của chúng xuất hiện trong cấu trúc đầu ra; NhưngLeaf_consistent
Trả về ABoolean
Kết quả. kèo chấp bóng đá hôm nay phương thức không được sửa đổi bất kỳ trường nào của kèo chấp bóng đá hôm nay cấu trúc đầu vào của chúng.nén
kèo chấp bóng đá hôm nay nhận ADatum
được lập chỉ mục là đối số duy nhất và trả về giá trị phù hợp cho lưu trữ vật lý trong kèo chấp bóng đá hôm nay tuple lá. Phương pháp thứ bảy tùy chọnTùy chọn
kèo chấp bóng đá hôm nay nhậnNội bộ
Con trỏ tới một cấu trúc C, trong đó nên đặt kèo chấp bóng đá hôm nay tham số dành riêng cho OPClass và trả vềvoid
.
Năm phương thức do người dùng bắt buộc xác định là:
config
Trả về thông tin tĩnh về việc triển khai chỉ mục, bao gồm kèo chấp bóng đá hôm nay loại OID loại dữ liệu của tiền tố và kèo chấp bóng đá hôm nay loại dữ liệu nhãn nút.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hàm my_config (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là con trỏ tớispgconfigin
C struct, chứa dữ kèo chấp bóng đá hôm nay đầu vào cho chức năng. Đối số thứ hai là một con trỏ tớispgconfigout
C struct, mà hàm phải điền vào dữ kèo chấp bóng đá hôm nay kết quả.
typedef struct spgconfigin
atttype
được thông qua để hỗ trợ kèo chấp bóng đá hôm nay lớp toán tử chỉ số đa hình; Đối với kèo chấp bóng đá hôm nay lớp toán tử loại dữ liệu cố định thông thường, nó sẽ luôn có cùng giá trị và do đó có thể bị bỏ qua.
Đối với kèo chấp bóng đá hôm nay lớp toán tử không sử dụng tiền tố,PrefixType
có thể được đặt thànhVOIDOID
. Tương tự như vậy, đối với kèo chấp bóng đá hôm nay lớp toán tử không sử dụng nhãn nút,LabelType
có thể được đặt thànhVOIDOID
. CanreturnData
nên được đặt đúng nếu lớp toán tử có khả năng xây dựng lại giá trị chỉ mục được cung cấp ban đầu.LongValuesok
Chỉ nên đặt đúng khiatttype
có độ dài thay đổi và lớp toán tử có khả năng phân đoạn kèo chấp bóng đá hôm nay giá trị dài bằng cách lặp lại (xemPhần 64.3.4.1).
LeafType
Nên khớp với loại lưu trữ chỉ mục được xác định bởi lớp vận hànhOpckeyType
mục nhập danh mục. (Lưu ý rằngOpckeyType
có thể bằng không, ngụ ý loại lưu trữ giống như loại đầu vào của lớp toán tử, là tình huống phổ biến nhất.) Vì lý do tương thích ngược,config
Phương thức có thể đặtLeafType
với một số giá trị khác và giá trị đó sẽ được sử dụng; Nhưng điều này không được chấp nhận vì nội dung chỉ mục sau đó được xác định không chính xác trong kèo chấp bóng đá hôm nay danh mục.LeafType
Uninitialized (không); được hiểu là có nghĩa là loại lưu trữ chỉ mục có nguồn gốc từOpckeyType
.
Khiatttype
vàLeafType
là khác nhau, phương pháp tùy chọnnén
phải được cung cấp. Phương phápnén
chịu trách nhiệm chuyển đổi kèo chấp bóng đá hôm nay mốc dữ liệu được lập chỉ mục từatttype
đếnLeafType
.
Chọn
Chọn kèo chấp bóng đá hôm nay phương thức để chèn kèo chấp bóng đá hôm nay giá trị mới vào kèo chấp bóng đá hôm nay tuple bên trong.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hàm my_choose (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là kèo chấp bóng đá hôm nay con trỏ tớispgchoosein
C struct, chứa dữ kèo chấp bóng đá hôm nay đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispgchooseout
C struct, mà hàm phải điền vào dữ kèo chấp bóng đá hôm nay kết quả.
Typedef struct spgchoosein
Datum
là dữ kèo chấp bóng đá hôm nay ban đầu củaspgconfigin
.atttype
Loại được chèn vào chỉ mục.LeafDatum
là giá trị củaspgconfigout
.LeafType
Loại, ban đầu là kết quả của phương thứcnén
Áp dụng choDatum
Khi phương thứcnén
được cung cấp hoặc cùng giá trị vớiDatum
nếu không.LeafDatum
Có thể thay đổi ở kèo chấp bóng đá hôm nay cấp thấp hơn của cây nếuChọn
hoặcPickSplit
Phương pháp thay đổi nó. Khi tìm kiếm chèn đạt đến kèo chấp bóng đá hôm nay trang lá, giá trị hiện tại củaLeafDatum
là những gì sẽ được lưu trữ kèo chấp bóng đá hôm nay Tuple lá mới được tạo.cấp
là cấp độ của Tuple bên kèo chấp bóng đá hôm nay hiện tại, bắt đầu từ 0 cho mức gốc.Allthesame
là đúng nếu bộ tple bên kèo chấp bóng đá hôm nay hiện tại được đánh dấu là chứa nhiều nút tương đương (xemPhần 64.3.4.3).Hasprefix
là đúng nếu bộ tple bên kèo chấp bóng đá hôm nay dòng điện chứa tiền tố; Nếu vậy,PrefixDatum
là giá trị của nó.nnodes
là số nút con có kèo chấp bóng đá hôm nay phần bên kèo chấp bóng đá hôm nay vàNodelabels
là một mảng của kèo chấp bóng đá hôm nay giá trị nhãn của chúng hoặc null nếu không có nhãn.
TheChọn
Hàm có thể xác định rằng giá trị mới phù hợp với một trong kèo chấp bóng đá hôm nay nút con hiện có hoặc nút con mới phải được thêm vào hoặc giá trị mới không phù hợp với tiền tố tuple và do đó, bộ tuple bên trong phải được chia để tạo ra một tiền tố ít hạn chế hơn.
Nếu giá trị mới khớp với một trong kèo chấp bóng đá hôm nay nút con hiện có, SETresultType
đếnSPGMatchNode
. BộNoden
đến chỉ mục (từ 0) của nút đó kèo chấp bóng đá hôm nay mảng nút. BộLeveladd
đến mức tăng kèo chấp bóng đá hôm naycấp
gây ra do đi xuống qua nút đó hoặc để nó dưới dạng 0 nếu lớp toán tử không sử dụng cấp độ. BộrestDatum
đến bằngLeafDatum
Nếu lớp toán tử không sửa đổi dữ kèo chấp bóng đá hôm nay từ cấp này sang cấp độ tiếp theo hoặc đặt nó thành giá trị sửa đổi được sử dụng làmLeafDatum
ở cấp độ tiếp theo.
Nếu phải thêm nút con mới, đặtresultType
đếnspgaddnode
. BộNodelabel
đến nhãn sẽ được sử dụng cho nút mới và đặtNoden
đến chỉ mục (từ 0) để chèn nút vào mảng nút. Sau khi nút đã được thêm vào,Chọn
Hàm sẽ được gọi lại với bộ tuple bên trong được sửa đổi; cuộc gọi đó sẽ dẫn đến kèo chấp bóng đá hôm naySPGMatchNode
result.
Nếu giá trị mới không phù hợp với tiền tố tuple, setresultType
đếnspgsplittuple
. Hành động này di chuyển tất cả kèo chấp bóng đá hôm nay nút hiện có vào một bộ tải bên trong cấp thấp hơn và thay thế bộ tuple bên trong hiện có bằng một tuple có một đường xuống duy nhất chỉ vào bộ tple bên trong cấp thấp hơn mới.prefixhasprefix
Để cho biết kèo chấp bóng đá hôm nay Tuple trên mới có nên có tiền tố hay không và nếu vậy SET SETprefixprefixdatum
với giá trị tiền tố. Giá trị tiền tố mới này phải đủ hạn chế hơn so với bản gốc để kèo chấp bóng đá hôm nay nhận giá trị mới được lập chỉ mục.prefixnnodes
với số lượng nút cần thiết kèo chấp bóng đá hôm nay bộ tuple mới và đặtprefixnodelabels
đến kèo chấp bóng đá hôm nay mảng palloc'd giữ nhãn của họ hoặc không cần nhãn nếu không cần nhãn nút. Lưu ý rằng tổng kích thước của tuple trên mới phải không quá tổng kích thước của bộ tuple mà nó đang thay thế;Childnoden
đến chỉ mục (từ số 0) của nút sẽ liên kết xuống cấp độ bên kèo chấp bóng đá hôm nay cấp thấp hơn mới. BộPOSTFIXHASPREFIX
Để cho biết kèo chấp bóng đá hôm nay Tuple bên trong cấp thấp mới có nên có tiền tố hay không và nếu vậy được đặtPOSTFIXPREFIXDATUM
với giá trị tiền tố. Sự kết hợp của hai tiền tố này và nhãn của nút đường xuống (nếu có) phải có ý nghĩa tương tự như tiền tố ban đầu, bởi vì không có cơ hội thay đổi nhãn nút được chuyển sang tuple cấp thấp hơn, cũng như không thay đổi bất kỳ mục chỉ mục con nào.Chọn
Hàm sẽ được gọi lại với bộ tuple bên trong thay thế. Cuộc gọi đó có thể trả về kèo chấp bóng đá hôm nayspgaddnode
Kết quả, nếu không có nút phù hợp nào được tạo bởispgsplittuple
Hành động. Sau cùngChọn
phải trả lạiSPGMatchNode
Để cho phép chèn xuống cấp độ tiếp theo.
PickSplit
Quyết định làm thế nào để tạo một bộ tple bên trong mới trên một bộ kèo chấp bóng đá hôm nay bộ dữ
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo hàm my_picksplit (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là con trỏ tớispgpicksplitin
C struct, chứa dữ kèo chấp bóng đá hôm nay đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispgpicksplitout
C Struct, mà hàm phải điền vào dữ kèo chấp bóng đá hôm nay kết quả.
typedef struct spgpicksplitin
ntuples
là số lượng kèo chấp bóng đá hôm nay bộ dữ liệu lá được cung cấp.Datums
là một mảng kèo chấp bóng đá hôm nay giá trị mốc của chúng làspgconfigout
.LeafType
loại.cấp
41205_41312
setHasprefix
Để cho biết kèo chấp bóng đá hôm nay tuple bên trong mới có nên có tiền tố hay không và nếu vậy được đặtprefixdatum
với giá trị tiền tố. Bộnnodes
Để chỉ ra số lượng nút mà bộ tple bên kèo chấp bóng đá hôm nay mới sẽ chứa và đặtNodelabels
đến một mảng kèo chấp bóng đá hôm nay giá trị nhãn của chúng hoặc không cần nhãn nếu không cần nhãn nút. BộMaptuplestonodes
cho kèo chấp bóng đá hôm nay mảng cung cấp cho chỉ mục (từ 0) của nút mà mỗi tuple của lá nên được gán cho. BộLEAFTUPLEDATUMS
đến một mảng kèo chấp bóng đá hôm nay giá trị được lưu trữ trong kèo chấp bóng đá hôm nay bộ dữ liệu lá mới (chúng sẽ giống như đầu vàoDatums
Nếu lớp toán tử không sửa đổi dữ kèo chấp bóng đá hôm nay từ cấp độ này sang cấp độ tiếp theo). Lưu ý rằngpicksplit
Hàm chịu trách nhiệm cho việc palloc'ing theNodelabels
, Maptuplestonodes
vàLEAFTUPLEDATUMS
mảng.
Nếu có nhiều hơn kèo chấp bóng đá hôm nay tuple được cung cấp, dự kiếnPickSplit
Hàm sẽ phân loại chúng thành nhiều hơn một nút; Nếu không, không thể chia kèo chấp bóng đá hôm nay bộ dữ liệu lá trên nhiều trang, đó là mục đích cuối cùng của hoạt động này.picksplit
Hàm cuối cùng đặt tất cả kèo chấp bóng đá hôm nay bộ dữ liệu lá trong cùng một nút, mã sp-gist cốt lõi sẽ ghi đè quyết định đó và tạo ra một bộ thuật bên trong trong đó kèo chấp bóng đá hôm nay bộ dữ liệu lá được gán ngẫu nhiên cho một số nút được dán nhãn giống hệt nhau. Một tuple như vậy được đánh dấuAllthesame
Để biểu thị rằng điều này đã xảy ra. TheChọn
vàInside_consistent
kèo chấp bóng đá hôm nay chức năng phải được chăm sóc phù hợp với kèo chấp bóng đá hôm nay bộ dữ liệu bên trong đó. XemPhần 64.3.4.3Để biết thêm thông tin.
PickSplit
chỉ có thể được áp dụng cho kèo chấp bóng đá hôm nay tuple kèo chấp bóng đá hôm nay lá duy nhất trong trường hợpconfig
bộ chức năngLongValuesok
Để đúng và giá trị đầu vào lớn hơn kèo chấp bóng đá hôm nay trang đã được cung cấp. Trong trường hợp này, điểm của hoạt động là loại bỏ kèo chấp bóng đá hôm nay tiền tố và tạo ra kèo chấp bóng đá hôm nay giá trị mốc thời gian mới, ngắn hơn.Phần 64.3.4.1Để biết thêm thông tin.
Inside_consistent
Trả về bộ nút (nhánh) để theo dõi kèo chấp bóng đá hôm nay quá trình tìm kiếm cây.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo chức năng my_inner_consistent (nội bộ, nội bộ) trả về void ...
Đối số đầu tiên là con trỏ tớispginnerconsistentin
C struct, chứa dữ kèo chấp bóng đá hôm nay đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispginnerconsistentout
C struct, mà hàm phải điền vào dữ kèo chấp bóng đá hôm nay kết quả.
typedef struct spginnerconsistentin
mảngSwunkey
, của độ dàiNKEYS
, mô tả (kèo chấp bóng đá hôm nay) điều kiện tìm kiếm chỉ mục. Những điều kiện này được kết hợp với và - chỉ kèo chấp bóng đá hôm nay mục chỉ mục đáp ứng tất cả chúng là thú vị.NKEYS
= 0 ngụ ý rằng tất cả kèo chấp bóng đá hôm nay mục chỉ mục đều thỏa mãn truy vấn.) Thông thường chức năng nhất quán chỉ quan tâm đếnSK_Strargety
vàsk_argument
kèo chấp bóng đá hôm nay trường của mỗi mục nhập mảng, tương ứng cung cấp cho toán tử có thể lập chỉ mục và giá trị so sánh. Cụ thể, không cần thiết phải kiểm traSK_FLAGS
Để xem giá trị so sánh có phải là NULL hay không, vì mã lõi SP-Gist sẽ lọc ra kèo chấp bóng đá hôm nay điều kiện đó. MảngOrderBys
, độ dàiNorderbys
, mô tả kèo chấp bóng đá hôm nay toán tử đặt hàng (nếu có) theo cách tương tự.Tái thiết
là giá trị được xây dựng lại cho tuple cha mẹ; nó là(Datum) 0
Ở cấp độ gốc hoặc nếuInside_consistent
Hàm không cung cấp giá trị ở cấp cha mẹ.TraversalValue
là một con trỏ tới bất kỳ dữ kèo chấp bóng đá hôm nay di chuyển nào được truyền từ cuộc gọi trước đó củaInside_consistent
Trên Tuple Index hoặc NULL ở cấp độ gốc.Traversalmemorycontext
là bối cảnh bộ nhớ để lưu trữ kèo chấp bóng đá hôm nay giá trị truyền qua đầu ra (xem bên dưới).cấp
là cấp độ của Tuple bên kèo chấp bóng đá hôm nay hiện tại, bắt đầu ở mức 0 cho mức gốc.returnData
làTRUE
Nếu cần phải xây dựng lại dữ kèo chấp bóng đá hôm nay cho truy vấn này; Điều này sẽ chỉ như vậy nếuconfig
Chức năng được xác nhậnCanreturnData
. Allthesame
là đúng nếu bộ tple bên kèo chấp bóng đá hôm nay hiện tại được đánh dấuTất cả-Same; Trong trường hợp này, tất cả kèo chấp bóng đá hôm nay nút đều có cùng một nhãn (nếu có) và do đó, tất cả hoặc không ai trong số chúng khớp với truy vấn (xemPhần 64.3.4.3).Hasprefix
là đúng nếu bộ tple bên kèo chấp bóng đá hôm nay dòng điện chứa tiền tố; Nếu vậy,prefixdatum
là giá trị của nó.nnodes
là số nút con có kèo chấp bóng đá hôm nay bộ tuple bên kèo chấp bóng đá hôm nay vàNodelabels
là một mảng của kèo chấp bóng đá hôm nay giá trị nhãn của chúng hoặc null nếu kèo chấp bóng đá hôm nay nút không có nhãn.
nnodes
phải được đặt thành số nút con cần được truy cập bởi tìm kiếm vàNodenumbers
phải được đặt thành một mảng kèo chấp bóng đá hôm nay chỉ mục của họ. Nếu lớp toán tử theo dõi kèo chấp bóng đá hôm nay cấp, SETLeveladds
đến kèo chấp bóng đá hôm nay mảng có mức tăng cấp độ cần thiết khi giảm xuống mỗi nút sẽ được truy cập. .Tái thiết
đến một mảng kèo chấp bóng đá hôm nay giá trị được xây dựng lại cho mỗi nút con được truy cập; Nếu không, rời khỏiTái thiết
như null. kèo chấp bóng đá hôm nay giá trị được xây dựng lại được giả sử là loạispgconfigout
.LeafType
. (Tuy nhiên, vì hệ thống cốt lõi sẽ không làm gì với họ ngoại trừ có thể sao chép chúng, nên chúng có cùng kèo chấp bóng đá hôm nayTyplen
vàTYPBYVAL
Thuộc tính làLeafType
.) Nếu thực hiện tìm kiếm được đặt hàng, đặtkhoảng cách
đến một mảng kèo chấp bóng đá hôm nay giá trị khoảng cách theoOrderBys
Mảng (kèo chấp bóng đá hôm nay nút có khoảng cách thấp nhất sẽ được xử lý trước). Để nó không có gì khác.Giá trị Traverse) đến mức thấp hơn của tìm kiếm cây, đặtTraversalValues
đến một mảng kèo chấp bóng đá hôm nay giá trị đi qua thích hợp, một cho mỗi nút con được truy cập; Nếu không, rời khỏiTraversalValues
như null. Lưu ý rằngInside_consistent
Hàm chịu trách nhiệm cho việc palloc'ing theNodeNumbers
, LevelAdds
, khoảng cách
, Tái thiết
vàTraversalValues
Mảng kèo chấp bóng đá hôm nay bối cảnh bộ nhớ hiện tại. Tuy nhiên, bất kỳ giá trị truyền qua đầu ra nào cũng được chỉ ra bởiTraversalValues
Mảng phải được phân bổ kèo chấp bóng đá hôm nayTraversalmemorycontext
. Mỗi giá trị đi qua phải là kèo chấp bóng đá hôm nay khối palloc'd duy nhất.
Leaf_consistent
Trả về đúng nếu kèo chấp bóng đá hôm nay tuple lá thỏa mãn truy vấn.
TheSQLTuyên bố chức năng phải trông như thế này:
Tạo chức năng my_leaf_consistent (nội bộ, nội bộ) trả về Bool ...
Đối số đầu tiên là con trỏ tớispgleafconsistentin
C struct, chứa dữ kèo chấp bóng đá hôm nay đầu vào cho hàm. Đối số thứ hai là một con trỏ tớispgleafconsistentout
C struct, mà hàm phải điền vào dữ kèo chấp bóng đá hôm nay kết quả.
typedef struct spgleafconsistentin
MảngDickkeys
, độ dàiNKEYS
, mô tả (kèo chấp bóng đá hôm nay) điều kiện tìm kiếm chỉ mục. Những điều kiện này được kết hợp với và - chỉ kèo chấp bóng đá hôm nay mục chỉ mục thỏa mãn tất cả chúng thỏa mãn truy vấn.NKEYS
= 0 ngụ ý rằng tất cả kèo chấp bóng đá hôm nay mục nhập chỉ mục đều thỏa mãn truy vấn.) Thông thường chức năng nhất quán chỉ quan tâm đếnSK_Strargety
vàsk_argument
kèo chấp bóng đá hôm nay trường của mỗi mục nhập mảng, tương ứng cung cấp cho toán tử có thể lập chỉ mục và giá trị so sánh. Cụ thể, không cần thiết phải kiểm traSK_FLAGS
Để xem giá trị so sánh có phải là NULL hay không, vì mã lõi SP-Gist sẽ lọc ra kèo chấp bóng đá hôm nay điều kiện đó. MảngOrderBys
, độ dàiNorderbys
, mô tả kèo chấp bóng đá hôm nay toán tử đặt hàng theo cách tương tự.Tái thiết
là giá trị được xây dựng lại cho tuple cha mẹ; nó là(Datum) 0
ở cấp độ gốc hoặc nếuInside_consistent
Hàm không cung cấp giá trị ở cấp độ cha mẹ.TraversalValue
là một con trỏ tới bất kỳ dữ kèo chấp bóng đá hôm nay di chuyển nào được truyền từ cuộc gọi trước đó củaInside_consistent
Trên Tuple Index hoặc NULL ở cấp độ gốc.Cấp
là cấp độ của Lá hiện tại, bắt đầu từ 0 cho mức gốc.returnData
làTRUE
Nếu cần phải xây dựng lại dữ kèo chấp bóng đá hôm nay cho truy vấn này; Điều này sẽ chỉ như vậy nếuconfig
chức năng được xác nhậnCanreturnData
. LeafDatum
là giá trị chính củaspgconfigout
.LeafType
Được lưu trữ kèo chấp bóng đá hôm nay tuple lá hiện tại.
Hàm phải trả vềTRUE
Nếu bộ tple của lá phù hợp với truy vấn hoặcSai
Nếu không. kèo chấp bóng đá hôm nayTRUE
trường hợp, nếureturnData
làTRUE
sau đóLeafValue
phải được đặt thành giá trị (loạispgconfigin
.atttype
) Ban đầu được cung cấp để được lập chỉ mục cho bộ gốc lá này. Cũng,Recheck
có thể được đặt thànhTRUE
Nếu trận đấu không chắc chắn và do đó, kèo chấp bóng đá hôm nay toán tử phải được ứng dụng lại vào bộ tple heap thực tế để xác minh trận đấu. Nếu tìm kiếm được đặt hàng được thực hiện, đặtkhoảng cách
đến một mảng kèo chấp bóng đá hôm nay giá trị khoảng cách theoOrderBys
Mảng. Để nó không có gì khác.Tái chế
Để đúng. Trong trường hợp này, người thực thi sẽ tính toán khoảng cách chính xác sau khi tìm nạp Tuple từ đống và sẽ sắp xếp lại kèo chấp bóng đá hôm nay bộ dữ liệu nếu cần.
kèo chấp bóng đá hôm nay phương thức do người dùng tùy chọn là:
Datum Compress (Datum in)
Chuyển đổi một mục dữ kèo chấp bóng đá hôm nay thành một định dạng phù hợp để lưu trữ vật lý trong một bộ gốc của chỉ mục. Nó chấp nhận một giá trị của loạispgconfigin
.atttype
và trả về giá trị của loạispgconfigout
.LeafType
. Giá trị đầu ra không được chứa kèo chấp bóng đá hôm nay con trỏ bánh mì nướng ngoài đường.
Lưu ý: Thenén
Phương pháp chỉ được áp dụng cho kèo chấp bóng đá hôm nay giá trị được lưu trữ. kèo chấp bóng đá hôm nay phương thức nhất quán nhận truy vấnSwunkey
Không thay đổi, mà không chuyển đổi bằng cách sử dụngnén
.
Tùy chọn
Xác định một tập hợp kèo chấp bóng đá hôm nay 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ử.
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ộ)
Hàm được chuyển kèo chấp bóng đá hôm nay con trỏ cho kèo chấp bóng đá hôm naylocal_relopts
Struct, cần được lấp đầy với một tập hợp kèo chấp bóng đá hôm nay tùy chọn cụ thể của lớp vận hành. kèo chấp bóng đá hôm nay tùy chọn có thể được truy cập từ kèo chấp bóng đá hôm 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.
Kể từ khi biểu diễn khóa kèo chấp bóng đá hôm naykèo chấp bóng đá hôm naylà linh hoạt, nó có thể phụ thuộc vào kèo chấp bóng đá hôm nay tham số do người dùng chỉ định.
Tất cả kèo chấp bóng đá hôm nay phương pháp hỗ trợ SP-Gist thường được gọi trong bối cảnh bộ nhớ ngắn; đó là,CurrentMemoryContext
sẽ được đặt lại sau khi xử lý mỗi tuple. Do đó, không phải là rất quan trọng để lo lắng về việc mọi thứ bạn palloc.config
Phương pháp là kèo chấp bóng đá hôm nay ngoại lệ: Nó nên cố gắng tránh rò rỉ bộ nhớ. Nhưng thường làconfig
Phương thức không cần làm gì ngoài việc gán kèo chấp bóng đá hôm nay hằng số vào cấu trúc tham số truyền.)
Nếu cột được lập chỉ mục thuộc loại dữ liệu có thể va chạm, đối chiếu chỉ mục sẽ được chuyển cho tất cả kèo chấp bóng đá hôm nay phương thức hỗ trợ, sử dụng tiêu chuẩnpg_get_collation ()
cơ chế.
Phần này bao gồm kèo chấp bóng đá hôm nay chi tiết triển khai và kèo chấp bóng đá hôm nay thủ thuật khác hữu ích cho người thực hiệnkèo chấp bóng đá hôm naykèo chấp bóng đá hôm nay lớp vận hành để biết.
Bộ dữ liệu lá riêng lẻ và bộ dữ liệu bên trong phải phù hợp với một trang chỉ mục duy nhất (8kb theo mặc định). Do đó, khi lập chỉ mục kèo chấp bóng đá hôm nay giá trị của kèo chấp bóng đá hôm nay loại dữ liệu có độ dài thay đổi, kèo chấp bóng đá hôm nay giá trị dài chỉ có thể được hỗ trợ bằng kèo chấp bóng đá hôm nay phương thức như cây radix, trong đó mỗi cấp độ của cây bao gồm một tiền tố đủ ngắn để phù hợp với một trang và mức lá cuối cùng bao gồm một hậu tố cũng đủ ngắn để phù hợp với trang.LongValuesok
chỉ đúng nếu nó được chuẩn bị để sắp xếp điều này xảy ra. Nếu không,kèo chấp bóng đá hôm nayCore sẽ từ chối mọi yêu cầu để lập chỉ mục kèo chấp bóng đá hôm nay giá trị quá lớn để phù hợp với trang chỉ mục.
Tương tự như vậy, trách nhiệm của lớp vận hành là kèo chấp bóng đá hôm nay bộ dữ liệu bên trong không phát triển quá lớn để phù hợp với trang chỉ mục; Điều này giới hạn số lượng nút con có thể được sử dụng trong một bộ bên trong, cũng như kích thước tối đa của giá trị tiền tố.
Một giới hạn khác là khi nút của một tuple bên trong chỉ vào một tập hợp kèo chấp bóng đá hôm nay bộ dữ liệu lá, tất cả kèo chấp bóng đá hôm nay bộ dữ liệu đó phải nằm trong cùng một trang chỉ mục. .phảiChia tập hợp kèo chấp bóng đá hôm nay giá trị lá thành nhiều hơn một nhóm nút. Nếu lớp vận hànhPickSplit
Hàm không làm điều đó,kèo chấp bóng đá hôm nayKhu nghỉ dưỡng cốt lõi để kèo chấp bóng đá hôm nay biện pháp phi thường được mô tả trongPhần 64.3.4.3.
KhiLongValuesok
là đúng, người ta hy vọng rằng kèo chấp bóng đá hôm nay mức liên tiếp củakèo chấp bóng đá hôm nayCây sẽ hấp thụ ngày càng nhiều thông tin vào kèo chấp bóng đá hôm nay tiền tố và nhãn nút của kèo chấp bóng đá hôm nay bộ dữ liệu bên trong, làm cho mốc dữ liệu lá cần thiết nhỏ hơn và nhỏ hơn, do đó nó sẽ phù hợp trên một trang. Để ngăn chặn kèo chấp bóng đá hôm nay lỗi trong kèo chấp bóng đá hôm nay lớp toán tử gây ra kèo chấp bóng đá hôm nay vòng chèn vô hạn,kèo chấp bóng đá hôm nayCore sẽ gây ra lỗi nếu mốc dữ kèo chấp bóng đá hôm nay lá không trở nên nhỏ hơn trong vòng mười chu kỳChọn
Cuộc gọi phương thức.
Một số thuật toán cây sử dụng một tập hợp kèo chấp bóng đá hôm nay nút cố định cho mỗi tuple bên trong; Ví dụ, trong một cây bốn, luôn có chính xác bốn nút tương ứng với bốn góc phần tư xung quanh điểm trung tâm của Tuple bên trong.PickSplit
Hàm có thể trả về null choNodelabels
mảng và tương tự như vậyChọn
Hàm có thể trả về null choPrefixNodelabels
mảng trong kèo chấp bóng đá hôm nayspgsplittuple
Hành động. Điều này sẽ lần lượt dẫn đếnNodelabels
Đang null trong kèo chấp bóng đá hôm nay cuộc gọi tiếp theo đếnChọn
vàInside_consistent
. Về nguyên tắc, kèo chấp bóng đá hôm nay nhãn nút có thể được sử dụng cho một số bộ dữ liệu bên trong và bị bỏ qua cho những người khác trong cùng một chỉ mục.
Khi làm việc với một tuple bên trong có kèo chấp bóng đá hôm nay nút không nhãn, đó là một lỗi choChọn
để trả lạispgaddnode
, vì tập hợp kèo chấp bóng đá hôm nay nút được cho là được sửa trong kèo chấp bóng đá hôm nay trường hợp như vậy.
Thekèo chấp bóng đá hôm nayCore có thể ghi đè kết quả của lớp vận hànhPickSplit
chức năng khiPickSplit
Không chia kèo chấp bóng đá hôm nay giá trị lá được cung cấp thành ít nhất hai loại nút. Khi điều này xảy ra, bộ tuple bên trong mới được tạo với nhiều nút có cùng một nhãn (nếu có)PickSplit
Đã cho một nút mà nó đã sử dụng và kèo chấp bóng đá hôm nay giá trị lá được chia ngẫu nhiên giữa kèo chấp bóng đá hôm nay nút tương đương này. TheAllthesame
Cờ được đặt ở bộ bên kèo chấp bóng đá hôm nay để cảnh báoChọn
vàInside_consistent
kèo chấp bóng đá hôm nay chức năng mà Tuple không có bộ nút mà họ có thể mong đợi.
Khi xử lýAllthesame
Tuple, AChọn
Kết quả củaSPGMatchNode
được giải thích có nghĩa là giá trị mới có thể được gán cho bất kỳ nút tương đương nào; Mã cốt lõi sẽ bỏ qua được cung cấpNoden
Giá trị và hạ xuống một trong kèo chấp bóng đá hôm nay nút một cách ngẫu nhiên (để giữ cho cây cân bằng). Nó là một lỗi choChọn
để trả lạispgaddnode
, vì điều đó sẽ làm cho kèo chấp bóng đá hôm nay nút không tương đương; Thespgsplittuple
Hành động phải được sử dụng nếu giá trị được chèn không khớp với kèo chấp bóng đá hôm nay nút hiện có.
Khi xử lý kèo chấp bóng đá hôm nayAllthesame
tuple, TheInside_consistent
Hàm sẽ trả về tất cả hoặc không có nút nào làm mục tiêu để tiếp tục tìm kiếm chỉ mục, vì tất cả chúng đều tương đương. Điều này có thể hoặc không yêu cầu bất kỳ mã trường hợp đặc biệt nào, tùy thuộc vào số lượngInside_consistent
Hàm thường giả sử về ý nghĩa của kèo chấp bóng đá hôm nay nút.
Nếu bạn thấy bất cứ điều gì trong tài kèo chấp bóng đá hôm nay không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài kèo chấp bóng đá hôm nay.