sp-gistlà viết tắt của không gian phân vùnggist.sp-gistHỗ trợ kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam phân vùng không cần phải có kích thước bằng nhau.
kèo bóng đá việt nam 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 bóng đá việt nam nút được phân bổ động được liên kết bởi kèo bóng đá việt nam con trỏ.sp-gistlà ánh xạ kèo bóng đá việt nam nút cây tìm kiếm đến kèo bóng đá việt nam 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,sp-gistcó nghĩa là cho phép phát triển kèo bóng đá việt nam loại dữ liệu tùy chỉnh với kèo bóng đá việt nam 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 bóng đá việt nam 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. Thesp-gisttriển khai kèo bóng đá việt namPostgreSQLchủ 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ồmsp-gistkèo bóng đá việt nam lớp toán tử hiển thị trongBảng 64.2.
Bảng 64.2.Tích hợpsp-gistkèo bóng đá việt nam lớp toán tử
tên | Toán tử có thể lập chỉ mục | kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam tập dữ liệu điểm hoặc đa giác được lập chỉ mục.
sp-gistcung 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 bóng đá việt nam phương thức cụ thể cho một loại dữ liệu nhất định. Thesp-gistCore 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 bóng đá việt nam cân nhắc đồng thời và ghi nhật ký.
Bộ đôi lá của kèo bóng đá việt namsp-gistCây thường chứa kèo bóng đá việt nam 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 bóng đá việt nam biểu diễn mất của cột được lập chỉ mục. kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt namsp-gistChỉ mục được tạo bằngBao gồm
Cột, kèo bóng đá việt nam giá trị của kèo bóng đá việt nam cột đó cũng được lưu trữ trong kèo bóng đá việt nam bộ dữ liệu lá. TheBao gồm
kèo bóng đá việt nam cột không quan tâm đếnsp-gistlớ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 bóng đá việt nam đ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 bóng đá việt nam nhóm kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam tuple bên trong có thể cótiền tốGiá trị mô tả tất cả kèo bóng đá việt nam 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 bóng đá việt nam chuỗi được đại diện.
kèo bóng đá việt nam 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ậysp-gistCore cung cấp khả năng cho kèo bóng đá việt nam 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 bóng đá việt nam cây gốc.
Thesp-gistMã cốt lõi chăm sóc kèo bóng đá việt nam mục NULL. Mặc dùsp-gistIndexes do kèo bóng đá việt nam mục lưu trữ cho kèo bóng đá việt nam null trong kèo bóng đá việt nam 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 bóng đá việt nam phương thức của lớp vận hành. (Giả định rằngsp-gistNgười vận hành nghiêm ngặt và do đó không thể thành công cho kèo bóng đá việt nam giá trị null.) Do đó, kèo bóng đá việt nam 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 chosp-gistphả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 chấp 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 bóng đá việt nam 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 kèo bóng đá việt nam giá trị đầu ra. Bốn trong số kèo bóng đá việt nam phương thức bắt buộc chỉ trả vềvoid
, vì tất cả kèo bóng đá việt nam 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 bóng đá việt nam phương thức không được sửa đổi bất kỳ trường nào của kèo bóng đá việt nam cấu trúc đầu vào của chúng.nén
Chấp 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 bóng đá việt nam tuple lá. Phương pháp thứ bảy tùy chọnTùy chọn
Chấp nhậnNội bộ
Con trỏ tới một cấu trúc C, trong đó nên đặt kèo bóng đá việt nam 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 bóng đá việt nam loại OID loại dữ liệu của tiền tố và kèo bóng đá việt nam 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 bóng đá việt nam đầ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 bóng đá việt nam kết quả.
typedef struct spgconfigin
atttype
được thông qua để hỗ trợ kèo bóng đá việt nam lớp toán tử chỉ số đa hình; Đối với kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam mốc dữ liệu được lập chỉ mục từatttype
đếnLeafType
.
Chọn
Chọn kèo bóng đá việt nam phương thức để chèn kèo bóng đá việt nam giá trị mới vào kèo bóng đá việt nam 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 bóng đá việt nam con trỏ tớispgchoosein
C struct, chứa dữ kèo bóng đá việt nam đầ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 bóng đá việt nam kết quả.
Typedef struct spgchoosein
Datum
là dữ kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam trang lá, giá trị hiện tại củaLeafDatum
là những gì sẽ được lưu trữ kèo bóng đá việt nam Tuple lá mới được tạo.cấp
là cấp độ của Tuple bên kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam phần bên kèo bóng đá việt nam vàNodelabels
là một mảng của kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam nút con hiện có, SETresultType
đếnSPGMatchNode
. BộNoden
đến chỉ mục (từ 0) của nút đó kèo bóng đá việt nam mảng nút. BộLeveladd
đến mức tăng kèo bóng đá việt namcấ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 bóng đá việt nam 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 bóng đá việt namSPGMatchNode
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 bóng đá việt nam 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 bóng đá việt nam 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 để chấp 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 bóng đá việt nam bộ tuple mới và đặtprefixnodelabels
đến kèo bóng đá việt nam 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 bóng đá việt nam cấp thấp hơn mới. BộPOSTFIXHASPREFIX
Để cho biết kèo bóng đá việt nam 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 bóng đá việt namspgaddnode
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 bóng đá việt nam 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 bóng đá việt nam đầ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 bóng đá việt nam kết quả.
typedef struct spgpicksplitin
ntuples
là số lượng kèo bóng đá việt nam bộ dữ liệu lá được cung cấp.Datums
là một mảng kèo bóng đá việt nam giá trị mốc của chúng làspgconfigout
.LeafType
loại.cấp
41205_41312
setHasprefix
Để cho biết kèo bóng đá việt nam 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 bóng đá việt nam mới sẽ chứa và đặtNodelabels
đến một mảng kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam giá trị được lưu trữ trong kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam chức năng phải được chăm sóc phù hợp với kèo bóng đá việt nam bộ dữ liệu bên trong đó. Nhìn thấyPhần 64.3.4.3Để biết thêm thông tin.
PickSplit
chỉ có thể được áp dụng cho kèo bóng đá việt nam tuple kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam tiền tố và tạo ra kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam đầ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 bóng đá việt nam kết quả.
typedef struct spginnerconsistentin
mảngSwunkey
, của độ dàiNKEYS
, mô tả (kèo bóng đá việt nam) đ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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam điều kiện đó. MảngOrderBys
, độ dàiNorderbys
, mô tả kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam giá trị truyền qua đầu ra (xem bên dưới).cấp
là cấp độ của Tuple bên kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam hiện tại được đánh dấuTất cả-Same; Trong trường hợp này, tất cả kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam bộ tuple bên kèo bóng đá việt nam vàNodelabels
là một mảng của kèo bóng đá việt nam giá trị nhãn của chúng hoặc null nếu kèo bóng đá việt nam 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 bóng đá việt nam chỉ mục của họ. Nếu lớp toán tử theo dõi kèo bóng đá việt nam cấp, SETLeveladds
đến kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt namTyplen
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 bóng đá việt nam giá trị khoảng cách theoOrderBys
Mảng (kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt namTraversalmemorycontext
. Mỗi giá trị đi qua phải là kèo bóng đá việt nam khối palloc'd duy nhất.
Leaf_consistent
Trả về đúng nếu kèo bóng đá việt nam 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 bóng đá việt nam đầ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 bóng đá việt nam kết quả.
typedef struct spgleafconsistentin
MảngDickkeys
, độ dàiNKEYS
, mô tả (kèo bóng đá việt nam) đ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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam điều kiện đó. MảngOrderBys
, độ dàiNorderbys
, mô tả kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt namTRUE
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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam bộ dữ liệu nếu cần.
kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam giá trị được lưu trữ. kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam con trỏ cho kèo bóng đá việt namlocal_relopts
Struct, cần được lấp đầy với một tập hợp kèo bóng đá việt nam tùy chọn cụ thể của lớp vận hành. kèo bóng đá việt nam tùy chọn có thể được truy cập từ kèo bóng đá việt nam 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 bóng đá việt namsp-gistlà linh hoạt, nó có thể phụ thuộc vào kèo bóng đá việt nam tham số do người dùng chỉ định.
Tất cả kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam chi tiết triển khai và kèo bóng đá việt nam thủ thuật khác hữu ích cho người thực hiệnsp-gistkèo bóng đá việt nam 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 bóng đá việt nam giá trị của kèo bóng đá việt nam loại dữ liệu có độ dài thay đổi, kèo bóng đá việt nam giá trị dài chỉ có thể được hỗ trợ bằng kèo bóng đá việt nam 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,sp-gistCore sẽ từ chối mọi yêu cầu để lập chỉ mục kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam bộ dữ liệu lá, tất cả kèo bóng đá việt nam 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 bóng đá việt nam 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 đó,sp-gistKhu nghỉ dưỡng cốt lõi để kèo bóng đá việt nam 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 bóng đá việt nam mức liên tiếp củasp-gistCây sẽ hấp thụ ngày càng nhiều thông tin vào kèo bóng đá việt nam tiền tố và nhãn nút của kèo bóng đá việt nam 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 bóng đá việt nam lỗi trong kèo bóng đá việt nam lớp toán tử gây ra kèo bóng đá việt nam vòng chèn vô hạn,sp-gistCore sẽ gây ra lỗi nếu mốc dữ kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt namspgsplittuple
Hành động. Điều này sẽ lần lượt dẫn đếnNodelabels
Đang null trong kèo bóng đá việt nam cuộc gọi tiếp theo đếnChọn
vàInside_consistent
. Về nguyên tắc, kèo bóng đá việt nam 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 bóng đá việt nam nút không nhãn, đó là một lỗi choChọn
để trả lạispgaddnode
, vì tập hợp kèo bóng đá việt nam nút được cho là được sửa trong kèo bóng đá việt nam trường hợp như vậy.
Thesp-gistCore có thể ghi đè kết quả của lớp vận hànhPickSplit
chức năng khiPickSplit
Không chia kèo bóng đá việt nam 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 bóng đá việt nam giá trị lá được chia ngẫu nhiên giữa kèo bóng đá việt nam nút tương đương này. TheAllthesame
Cờ được đặt ở bộ bên kèo bóng đá việt nam để cảnh báoChọn
vàInside_consistent
kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam nút hiện có.
Khi xử lý kèo bóng đá việt namAllthesame
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 bóng đá việt nam nút.
Nếu bạn thấy bất cứ điều gì trong tài kèo bóng đá việt nam không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài kèo bóng đá việt nam.