Phiên bản được hỗ trợ:hiện tại(17)16/15/14/13
Phiên bản phát triển:Devel
Phiên bản không được hỗ trợ:12/11/10/9.6/9.5/9.4/9.3/9.2

64.3.SP-Gist Indexes#

64.3.1.Giới thiệu#

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.

64.3.2.kèo bóng đá việt nam lớp toán tử tích hợp#

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_opslà mặc định.kd_point_opsHỗ 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_opsPoly_opskè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.

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

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ồmCộ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ồmkè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.

Lưu ý

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_consistentTrả về ABooleanKế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énChấ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ọnChấ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ớispgconfiginC 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ớispgconfigoutC 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ố,PrefixTypecó 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,LabelTypecó thể được đặt thànhVOIDOID.CanreturnDatanê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.LongValuesokChỉ nên đặt đúng khiatttypecó độ 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).

LeafTypeNên khớp với loại lưu trữ chỉ mục được xác định bởi lớp vận hànhOpckeyTypemục nhập danh mục. (Lưu ý rằngOpckeyTypecó 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,configPhương thức có thể đặtLeafTypevớ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.LeafTypeUninitialized (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.

KhiatttypeLeafTypelà khác nhau, phương pháp tùy chọnnénphải được cung cấp. Phương phápnénchị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ớispgchooseinC 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ớispgchooseoutC struct, mà hàm phải điền vào dữ kèo bóng đá việt nam kết quả.

Typedef struct spgchoosein

Datumlà dữ kèo bóng đá việt nam ban đầu củaspgconfigin.atttypeLoại được chèn vào chỉ mục.LeafDatumlà giá trị củaspgconfigout.LeafTypeLoại, ban đầu là kết quả của phương thứcnénÁp dụng choDatumKhi phương thứcnénđược cung cấp hoặc cùng giá trị vớiDatumnếu không.LeafDatumCó thể thay đổi ở kèo bóng đá việt nam cấp thấp hơn của cây nếuChọnhoặcPickSplitPhươ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ủaLeafDatumlà những gì sẽ được lưu trữ kèo bóng đá việt nam Tuple lá mới được tạo.cấplà 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.Allthesamelà đú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).Hasprefixlà đú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,PrefixDatumlà giá trị của nó.nnodeslà số nút con có kèo bóng đá việt nam phần bên kèo bóng đá việt nam vàNodelabelslà 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ọnHà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ấpgâ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ằngLeafDatumNế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ọnHà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 namSPGMatchNoderesult.

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 SETprefixprefixdatumvớ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.prefixnnodesvớ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 đặtPOSTFIXPREFIXDATUMvớ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ọnHà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 namspgaddnodeKết quả, nếu không có nút phù hợp nào được tạo bởispgsplittupleHành động. Sau cùngChọnphả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ớispgpicksplitinC 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ớispgpicksplitoutC Struct, mà hàm phải điền vào dữ kèo bóng đá việt nam kết quả.

typedef struct spgpicksplitin

ntupleslà số lượng kèo bóng đá việt nam bộ dữ liệu lá được cung cấp.Datumslà một mảng kèo bóng đá việt nam giá trị mốc của chúng làspgconfigout.LeafTypeloại.cấp41205_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 đặtprefixdatumvớ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ộMaptuplestonodescho 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àoDatumsNế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ằngpicksplitHàm chịu trách nhiệm cho việc palloc'ing theNodelabels,MaptuplestonodesLEAFTUPLEDATUMSmảng.

Nếu có nhiều hơn kèo bóng đá việt nam tuple được cung cấp, dự kiếnPickSplitHà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.picksplitHà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ọnInside_consistentkè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.

PickSplitchỉ 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ợpconfigbộ 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ớispginnerconsistentinC 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ớispginnerconsistentoutC 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_Strargetysk_argumentkè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ếtlà 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_consistentHàm không cung cấp giá trị ở cấp cha mẹ.TraversalValuelà 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_consistentTrên Tuple Index hoặc NULL ở cấp độ gốc.Traversalmemorycontextlà 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ấplà 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.returnDataTRUENế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ếuconfigChức năng được xác nhậnCanreturnData.Allthesamelà đú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).Hasprefixlà đú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,prefixdatumlà giá trị của nó.nnodeslà số nút con có kèo bóng đá việt nam bộ tuple bên kèo bóng đá việt nam vàNodelabelslà 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.

nnodesphải được đặt thành số nút con cần được truy cập bởi tìm kiếm vàNodenumbersphả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ếtnhư 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 namTyplenTYPBYVALThuộ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 theoOrderBysMả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ỏiTraversalValuesnhư null. Lưu ý rằngInside_consistentHàm chịu trách nhiệm cho việc palloc'ing theNodeNumbers,LevelAdds,khoảng cách,Tái thiếtTraversalValuesMả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ởiTraversalValuesMả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ớispgleafconsistentinC 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ớispgleafconsistentoutC 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_Strargetysk_argumentkè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ếtlà 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_consistentHàm không cung cấp giá trị ở cấp độ cha mẹ.TraversalValuelà 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_consistentTrên Tuple Index hoặc NULL ở cấp độ gốc.Cấplà cấp độ của Lá hiện tại, bắt đầu từ 0 cho mức gốc.returnDataTRUENế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ếuconfigchức năng được xác nhậnCanreturnData.LeafDatumlà 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ềTRUENếu bộ tple của lá phù hợp với truy vấn hoặcSaiNếu không. kèo bóng đá việt namTRUEtrường hợp, nếureturnDataTRUEsau đóLeafValuephả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,Recheckcó thể được đặt thànhTRUENế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 theoOrderBysMả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.atttypevà 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énPhươ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ấnSwunkeyKhô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_reloptsStruct, 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 ()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à,CurrentMemoryContextsẽ đượ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.configPhươ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àconfigPhươ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ế.

64.3.4.Triển khai#

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.

64.3.4.1.Giới hạn sp-gist#

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.LongValuesokchỉ đú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ànhPickSplitHà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.

KhiLongValuesoklà đú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ọnCuộc gọi phương thức.

64.3.4.2.Sp-gist không có nhãn nút#

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.PickSplitHàm có thể trả về null choNodelabelsmảng và tương tự như vậyChọnHàm có thể trả về null choPrefixNodelabelsmảng trong kèo bóng đá việt namspgsplittupleHà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ọnInside_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.

64.3.4.3.Tất cả-SameHàngBộ dữ kèo bóng đá việt nam bên trong#

Thesp-gistCore có thể ghi đè kết quả của lớp vận hànhPickSplitchức năng khiPickSplitKhô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. TheAllthesameCờ được đặt ở bộ bên kèo bóng đá việt nam để cảnh báoChọnInside_consistentkè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ýAllthesameTuple, AChọnKế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ấpNodenGiá 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; ThespgsplittupleHà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 namAllthesametuple, TheInside_consistentHà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_consistentHàm thường giả sử về ý nghĩa của kèo bóng đá việt nam nút.

64.3.5.Ví dụ#

ThePOSTGRESQLPhân phối nguồn bao gồm một số ví dụ về kèo bóng đá việt nam lớp toán tử chỉ mục chosp-gist, như được mô tả kèo bóng đá việt namBảng 64.2. Nhìn vàoSRC/Backend/Access/Spgist/src/backend/utils/adt/Để xem mã.

Gửi hiệu chỉnh

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.