PostgreSQL: soi kèo bóng đá truoctran liệu: 9.5: PostgreSQL | |||
---|---|---|---|
prev | UP | Chương 59. Chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay GIST | Tiếp theo |
Theo truyền thống, việc thực hiện một phương thức truy cập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay mới có nghĩa là rất nhiều công việc khó khăn. Cần phải hiểu các hoạt động bên trong của cơ sở dữ liệu, chẳng hạn như trình quản lý khóa và nhật ký ghi. ThegistGiao diện có mức độ trừu tượng cao, yêu cầu người thực hiện phương thức truy cập chỉ để thực hiện ngữ nghĩa của kiểu dữ tỷ lệ kèo bóng đá trực tuyến hôm nay được truy cập. ThegistBản thân lớp chăm sóc sự đồng thời, ghi nhật ký và tìm kiếm cấu trúc cây.
tỷ lệ kèo bóng đá trực tuyến hôm nay này không nên bị nhầm lẫn với tỷ lệ kèo bóng đá trực tuyến hôm nay của các cây tìm kiếm tiêu chuẩn khác về dữ liệu họ có thể xử lý. Ví dụ,PostgreSQLHỗ trợ các chỉ mục b và băm có thể tỷ lệ kèo bóng đá trực tuyến hôm nay. Đ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ữ tỷ lệ kèo bóng đá trực tuyến hôm nay nào bạn muốn. Nhưng B-cây chỉ hỗ trợ các vị từ phạm vi (<, =, ) và chỉ số băm chỉ hỗ trợ các truy vấn bình đẳng.
Vì vậy, nếu bạn lập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay, hãy nói, một bộ sưu tập hình ảnh với APostgreSQLB-tree, bạn chỉ có thể phát hành các truy vấn như"IS IS ISTIVE bằng hình ảnh", "IS ISTIMEvà"IS ISTIMX lớn hơn ImageSy". Tùy thuộc vào cách bạn xác định"bằng", "Ít hơn"và"Lớn hơn"tỷ lệ kèo bóng đá trực tuyến hôm nay 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ỉ tỷ lệ kèo bóng đá trực tuyến hôm nay dựa trên, bạn có thể tạo các cách để hỏi các câu hỏi cụ thể về tên miền, có lẽ"Tìm tất cả hình ảnh của ngựa"hoặc"Tìm tất cả các hình ảnh tiếp xúc quá mức".
Tất cả những gì cần thiết để có được mộtgist10804_11107gistKết hợp độ tỷ lệ kèo bóng đá trực tuyến hôm nay cùng với tính tổng quát, tái sử dụng mã và giao diện sạch.
Có bảy phương pháp mà một lớp toán tử chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay chogistphải cung cấp và hai là tùy chọn. Tính chính xác của chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay được đảm bảo bằng cách thực hiện đúngcùng
, nhất quán
vàLiên minh
Phương pháp, trong khi hiệu quả (kích thước và tốc độ) của chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay sẽ phụ thuộc vàohình phạt
vàPickSplit
Phương pháp. Hai phương pháp cơ bản còn lại lànén
vàgiải nén
11841_12066PostgreSQLQuy tắc kiểu dữ tỷ lệ kèo bóng đá trực tuyến hôm nay ở đây, xem vềVarlenacho dữ tỷ lệ kèo bóng đá trực tuyến hôm nay có kích thước biến). Nếu kiểu dữ tỷ lệ kèo bóng đá trực tuyến hôm nay nội bộ của cây tồn tại ở cấp SQL, thìlưu trữTùy chọn củaTạo lớp toán tửCó thể sử dụng lệnh. Phương thức thứ tám tùy chọn làKhoảng cách
, cần thiết nếu lớp toán tử muốn hỗ trợ quét theo thứ tự (tìm kiếm lân cận gần nhất). Phương pháp thứ chín tùy chọnFetch
là cần thiết nếu lớp toán tử muốn hỗ trợ quét chỉ chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay.
nhất quán
Đã cho tỷ lệ kèo bóng đá trực tuyến hôm nay nhập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nayPvà giá trị truy vấnQ, Hàm này xác định xem tỷ lệ kèo bóng đá trực tuyến hôm nay nhập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay là"nhất quán"với truy vấn; nghĩa là, có thể là vị ngữ"instioned_column Indexable_operator Q"13153_13440TRUE, ARecheckCờ cũng phải được trả về. Điều này cho biết tỷ lệ kèo bóng đá trực tuyến hôm nay vị ngữ chắc chắn là đúng hay chỉ có thể đúng. Nếu nhưRecheck=SaiSau đó, chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay đã kiểm tra chính xác điều kiện vị ngữ, trong khi nếuRecheck=TRUEHàng chỉ là một trận đấu ứng cử viên. tỷ lệ kèo bóng đá trực tuyến hôm nay trường hợp đó, hệ thống sẽ tự động đánh giá13932_13952so 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 tỷ lệ kèo bóng đá trực tuyến hôm nay 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ộ) Trả lại bool Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo bộ xương này:
pg_function_info_v1 (my_consistent); Mốc thời gian my_consistent (pg_function_args) GistEntry *entry = (gistEntry *) pg_getarg_pulum (0); data_type *truy vấn = pg_getarg_data_type_p (1); Chiến lược chiến lược = (StrategyNumber) PG_GetArg_Uint16 (2); /* Oid phân nhóm = pg_getarg_oid (3); */ bool *RecHeck = (bool *) pg_getarg_pulum (4); data_type *key = datumGetDatatype (entry- key); Bool retval; /* * Xác định giá trị trả về là một hàm của chiến lược, khóa và truy vấn. * * Sử dụng gist_leaf (tỷ lệ kèo bóng đá trực tuyến hôm nay) để biết nơi bạn được gọi trong cây chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay, * Ví dụ, có ích khi hỗ trợ = toán tử (bạn có thể * Kiểm tra không trống liên minh () trong các nút không lá và bình đẳng trong lá * nút). */ *kiểm tra lại = true; / * hoặc sai nếu kiểm tra là chính xác */ Pg_return_bool (retval);
ở đây,Keylà một yếu tố trong chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay vàTruy vấn15485_15532StrategyNumberTham số cho biết toán tử nào của lớp toán tử của bạn đang được áp dụng - Nó phù hợp với một tỷ lệ kèo bóng đá trực tuyến hôm nay các số toán tử tỷ lệ kèo bóng đá trực tuyến hôm nayTạo lớp toán tửlệnh. Tùy thuộc vào những toán tử bạn đã đưa vào lớp, loại dữ tỷ lệ kèo bóng đá trực tuyến hôm nay củaTruy vấnCó thể thay đổi với toán tử, nhưng bộ xương trên giả định rằng nó không.
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 tỷ lệ kèo bóng đá trực tuyến hôm nay 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 tỷ lệ kèo bóng đá trực tuyến hôm nay phải trông như thế này:
Tạo hoặc thay thế hàm my_union (nội bộ, nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo dõi bộ xương này:
16504_17203
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ữ tỷ lệ kèo bóng đá trực tuyến hôm nay trong đóUnion (X, Y, Z) = Union (Union (X, Y), Z). Nó đủ dễ dàng để hỗ trợ các loại dữ tỷ lệ kèo bóng đá trực tuyến hôm nay 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ợ.
TheUnion
Hàm thực hiện sẽ trả lại một con trỏ mớipalloc ()
Bộ nhớ ED. Bạn không thể trả lại bất cứ điều gì đầu vào.
nén
Chuyển đổi tỷ lệ kèo bóng đá trực tuyến hôm nay dữ liệu thành một định dạng phù hợp để lưu trữ vật lý trong trang chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay.
TheSQLTuyên bố chức tỷ lệ kèo bóng đá trực tuyến hôm nay phải trông như thế này:
Tạo hoặc thay thế hàm my_compress (nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo bộ xương này:
18218_18961
Bạn phải điều chỉnhnén_data_typesang loại cụ thể mà bạn đang chuyển đổi để nén các nút lá của bạn, tất nhiên.
giải nén
Mặt trái củanén
Phương pháp. Chuyển đổi biểu diễn chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay của tỷ lệ kèo bóng đá trực tuyến hôm nay dữ liệu thành một định dạng có thể được thao tác bởi các phương thức gist khác trong lớp toán tử.
TheSQL19452_19503
Tạo hoặc thay thế hàm my_decompress (nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo dõi bộ xương này:
pg_function_info_v1 (my_decompress); Mốc thời gian my_decompress (pg_function_args) Pg_return_pulum (pg_getarg_pulum (0));
Bộ xương trên phù hợp cho trường hợp không cần giải nén.
hình phạt
Trả về giá trị cho biết"Chi phí"để chèn tỷ lệ kèo bóng đá trực tuyến hôm nay mới vào một nhánh cụ thể của cây. Các tỷ lệ kèo bóng đá trực tuyến hôm nay sẽ được chèn xuống đường dẫn ít nhấthình phạt
tỷ lệ kèo bóng đá trực tuyến hôm nay 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 tỷ lệ kèo bóng đá trực tuyến hôm nay phải trông như thế này:
Tạo hoặc thay thế hàm my_penalty (nội bộ, nội bộ, nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt; - Trong một số trường hợp, các chức tỷ lệ kèo bóng đá trực tuyến hôm nay hình phạt không cần phải nghiêm ngặt
và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo dõi bộ xương này:
pg_function_info_v1 (my_penalty); Mốc thời gian my_penalty (pg_function_args) GistEntry *origentry = (gistEntry *) pg_getarg_pulum (0); GistEntry *newEntry = (gistEntry *) pg_getarg_pulum (1); phao *hình phạt = (float *) pg_getarg_pulum (2); data_type *orig = datumgetDatateType (origentry- key); data_type *new = datumgetDatateType (key- key); *hình phạt = my_penalty_implementation (orig, mới); Pg_return_pulum (hình phạt);
Thehình phạt
21334_21581
PickSplit
Khi cần phân chia trang chỉ mục, chức tỷ lệ kèo bóng đá trực tuyến hôm nay 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.
The21838_21843Tuyên bố chức tỷ lệ kèo bóng đá trực tuyến hôm nay phải trông như thế này:
Tạo hoặc thay thế hàm my_picksplit (nội bộ, nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo dõi bộ xương này:
22162_24292
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ỉ tỷ lệ kèo bóng đá trực tuyến hôm nay. Thiết kế phù hợphình phạt
vàPickSplit
triển khai là nơi thách thức thực hiện hoạt động tốtgistLIES LIES.
cùng
Trả về đúng nếu hai tỷ lệ kèo bóng đá trực tuyến hôm nay nhập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay giống hệt nhau, sai nếu không.
TheSQLTuyên bố chức tỷ lệ kèo bóng đá trực tuyến hôm nay phải trông như thế này:
Tạo hoặc thay thế hàm my_same (nội bộ, nội bộ, nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo dõi bộ xương này:
25161_25450
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 cờ tại vị trí được biểu thị bằng đối số thứ ba.
Khoảng cách
Đã cho tỷ lệ kèo bóng đá trực tuyến hôm nay nhập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nayPvà giá trị truy vấnq, chức tỷ lệ kèo bóng đá trực tuyến hôm nay này xác định mục nhập của mục nhập"Khoảng cách"Từ giá trị truy vấn. Hàm này phải được cung cấp nếu lớp toán tử chứa bất kỳ toán tử đặt hàng nào. Truy vấn sử dụng toán tử đặt hàng sẽ được triển khai bằng cách trả về các tỷ lệ kèo bóng đá trực tuyến hôm nay nhập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay với nhỏ nhất"Khoảng cách"Giá trị đầu tiên, vì vậy kết quả phải phù hợp với ngữ nghĩa của nhà điều hành. Đối với tỷ lệ kèo bóng đá trực tuyến hôm nay nhập chỉ số lá, kết quả chỉ thể hiện khoảng cách đến tỷ lệ kèo bóng đá trực tuyến hôm nay nhập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay; Đối với một nút cây bên trong, kết quả phải là khoảng cách nhỏ nhất mà bất kỳ tỷ lệ kèo bóng đá trực tuyến hôm nay nhập con nào cũng có thể có.
TheSQLTuyên bố chức tỷ lệ kèo bóng đá trực tuyến hôm nay 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) Trả lại float8 Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
và mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể theo dõi bộ xương này:
pg_function_info_v1 (my_distance); Mốc thời gian my_distance (pg_function_args) GistEntry *entry = (gistEntry *) pg_getarg_pulum (0); data_type *truy vấn = pg_getarg_data_type_p (1); Chiến lược chiến lược = (StrategyNumber) PG_GetArg_Uint16 (2); /* Oid phân nhóm = pg_getarg_oid (3); */ / *bool *RecHeck = (bool *) pg_getarg_pulum (4); */ data_type *key = datumGetDatatype (entry- key); gấp đôi retval; /* * Xác định giá trị trả về là một hàm của chiến lược, khóa và truy vấn. */ Pg_return_float8 (retval);
Các đối số choKhoảng cách
Hàm giống hệt với các đối số củanhất quán
chức tỷ lệ kèo bóng đá trực tuyến hôm nay.
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 tỷ lệ kèo bóng đá trực tuyến hôm nay. Do đó, ví dụ, khoảng cách đến một hộp giới hạn thường là đủ trong các ứng dụng hình học. Đối với một nút cây bên trong, khoảng cách được trả về không được lớn hơn khoảng cách đến bất kỳ nút con nào. Nếu khoảng cách trả về không chính xác, hàm phải đặt*RecheckĐúng. .
Nếu hàm khoảng cách trả về*Recheck = trueĐối với bất kỳ nút lá nào, loại trả về của toán tử đặt hàng ban đầu phải làfloat8hoặcfloat4và 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 tỷ lệ kèo bóng đá trực tuyến hôm nay 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ạnfloat8Giá trị, miễn là thứ tự tương đối của 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 tỷ lệ kèo bóng đá trực tuyến hôm nay để xử lý các trường hợp như nulls, do đóKhoảng cách
Hàm trả về các giá trị này.)
Fetch
Chuyển đổi biểu diễn chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay nén của tỷ lệ kèo bóng đá trực tuyến hôm nay dữ liệu thành loại dữ liệu gốc, để quét chỉ có chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay. Dữ liệu được trả về phải là một bản sao chính xác, không bị mất của giá trị được lập chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay ban đầu.
TheSQL29321_29372
Tạo hoặc thay thế hàm my_fetch (nội bộ) Trả lại nội bộ Như 'module_pathname' Ngôn ngữ C nghiêm ngặt;
Đối số là một con trỏ tớiGistEntryCấu trúc. Khi nhập, trường 'khóa' của nó chứa một mốc dữ tỷ lệ kèo bóng đá trực tuyến hôm nay lá không null ở dạng nén của nó. Giá trị trả về là một giá trị khácGistEntrystruct, có trường 'khóa' chứa cùng một mốc trong hình thức gốc, không nén. Nếu chức tỷ lệ kèo bóng đá trực tuyến hôm nay nén của opclass không làm gì cho các mục nhập lá, phương thức tìm nạp có thể trả về đối số như là.
Mã phù hợp tỷ lệ kèo bóng đá trực tuyến hôm nay mô -đun C sau đó có thể tuân theo bộ xương này:
pg_function_info_v1 (my_fetch); Mốc thời gian my_fetch (pg_function_args) GistEntry *entry = (gistEntry *) pg_getarg_pulum (0); input_data_type *in = datumGetPulum (entry- khóa); fetched_data_type *fetched_data; Gistentry *retval; retval = palloc (sizeof (gistentry)); fetched_data = palloC (sizeof (fetched_data_type)); /* * Chuyển đổi 'fetched_data' thành một mốc của kiểu dữ tỷ lệ kèo bóng đá trực tuyến hôm nay gốc. */ / * điền * retval từ fetched_data. */ gistentryinit (*retval, pulongetdatum (coltred_datum), Entry- rel, Entry- Page, Entry- Offset, False); Pg_return_pulum (retval);
Nếu phương pháp nén bị mất cho các tỷ lệ kèo bóng đá trực tuyến hôm nay nhập lá, lớp toán tử không thể hỗ trợ các lần quét chỉ có chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay và không được xác định hàm 'tìm nạp'.
Tất cả các phương thức hỗ trợ GIST thường được gọi tỷ lệ kèo bóng đá trực tuyến hôm nay bối cảnh bộ nhớ ngắn; đó là,currentMemoryContextSẽ được đặt lại sau mỗi lần xử lý. Do đó, không phải là rất quan trọng để lo lắng về việc mọi thứ bạn palloc. Tuy nhiên, trong một số trường hợp, nó hữu ích cho một phương thức hỗ trợ để lưu trữ dữ tỷ lệ kèo bóng đá trực tuyến hôm nay qua các cuộc gọi được lặp lại. Để làm điều đó, phân bổ dữ tỷ lệ kèo bóng đá trực tuyến hôm nay tồn tại lâu hơn trongfcinfo- flinfo- fn_mcxt, và giữ một con trỏ cho nó tỷ lệ kèo bóng đá trực tuyến hôm nayfcinfo- flinfo- fn_extra. Dữ liệu đó sẽ tồn tại cho tuổi thọ của hoạt động chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay (ví dụ: một lần quét chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay GIST duy nhất, xây dựng chỉ tỷ lệ kèo bóng đá trực tuyến hôm nay hoặc chèn tăng chỉ số). Hãy cẩn thận với giá trị trước đó khi thay thếfn_extraGiá trị hoặc rò rỉ sẽ tích lũy tỷ lệ kèo bóng đá trực tuyến hôm nay suốt thời gian hoạt động.