Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

F.10. Cube-Kiểu dữ liệu kèo bóng đá hôm nay và ngày mai đa chiều#

Mô -đun này thực hiện kiểu dữ liệukèo bóng đá hôm nay và ngày maiđể đại diện cho các kèo bóng đá hôm nay và ngày mai đa chiều.

Mô -đun này được coi làTrustedHồi, nghĩa là, nó có thể được cài đặt bởi những người không phải là người siêu giám sát cóTạoĐặc quyền trên cơ sở dữ liệu hiện tại.

F.10.1. Cú pháp#

Bảng F.1Hiển thị các biểu diễn bên ngoài hợp lệ chokèo bóng đá hôm nay và ngày mailoại.x, y, v.v. biểu thị số điểm nổi.

Bảng F.1. Biểu diễn bên ngoài kèo bóng đá hôm nay và ngày mai

Cú pháp bên ngoài có nghĩa là
x Một điểm một chiều (hoặc, khoảng không chiều dài một chiều)
(x) Tương tự như trên
x1,x2,...,xn Một điểm trong không gian n chiều, được biểu thị bên trong dưới dạng kèo bóng đá hôm nay và ngày mai kèo bóng đá hôm nay và ngày mai lượng không
(x1,x2,...,xn) Tương tự như trên
(x), (y) Khoảng thời gian một chiều bắt đầu tạixvà kết thúc tạiYhoặc ngược lại; thứ tự không quan trọng
[(x), (y)] Tương tự như trên
(x1,...,xn), (Y1,...,yn) Một kèo bóng đá hôm nay và ngày mai lập phương N-chiều được biểu thị bằng một cặp các góc đối diện theo đường chéo của nó
[(x1,...,xn), (Y1,...,yn)] Tương tự như trên

Không quan trọng là thứ tự các góc đối diện của kèo bóng đá hôm nay và ngày mai lập phương được nhập vào.kèo bóng đá hôm nay và ngày maiChức năng trao đổi giá trị nếu cần để tạo đồng nhấtdưới bên trái - trên bên phảiHồiĐại diện nội bộ. Khi các góc trùng khớp,kèo bóng đá hôm nay và ngày maiChỉ lưu trữ một góc cùng vớilà điểmHồicờ để tránh lãng phí không gian.

không gian trắng bị bỏ qua trên đầu vào, vì vậy[(x), (Y)]giống như[(x), (y)].

F.10.2. Độ chính xác#

Giá trị được lưu trữ bên trong dưới dạng số điểm nổi 64 bit. Điều này có nghĩa là các số có hơn khoảng 16 chữ số quan trọng sẽ bị cắt.

F.10.3. Cách sử dụng#

Bảng F.2Hiển thị các toán tử chuyên dụng được cung cấp cho loạikèo bóng đá hôm nay và ngày mai.

Bảng F.2. Toán tử kèo bóng đá hôm nay và ngày mai

Nhà điều hành

Mô tả

kèo bóng đá hôm nay và ngày mai && kèo bóng đá hôm nay và ngày maiBoolean

Làm các kèo bóng đá hôm nay và ngày mai chồng chéo?

kèo bóng đá hôm nay và ngày mai @ kèo bóng đá hôm nay và ngày maiBoolean

kèo bóng đá hôm nay và ngày mai đầu tiên có chứa cái thứ hai không?

kèo bóng đá hôm nay và ngày mai <@ kèo bóng đá hôm nay và ngày maiBoolean

là kèo bóng đá hôm nay và ngày mai đầu tiên chứa trong cái thứ hai?

kèo bóng đá hôm nay và ngày mai - Số nguyênfloat8

trích xuấtn-thth tọa độ của kèo bóng đá hôm nay và ngày mai lập phương (đếm từ 1).

kèo bóng đá hôm nay và ngày mai ~ Số nguyênfloat8

trích xuấtn-th tọa độ của kèo bóng đá hôm nay và ngày mai lập phương, đếm theo cách sau:n= 2 *K- 1 có nghĩa là giới hạn dưới củaK-thth kích thước,n= 2 *Kcó nghĩa là giới hạn trên củaK-th -th. Tiêu cựcnbiểu thị giá trị nghịch đảo của tọa độ dương tương ứng. Toán tử này được thiết kế để hỗ trợ KNN-Gist.

kèo bóng đá hôm nay và ngày mai <- kèo bóng đá hôm nay và ngày maifloat8

Tính khoảng cách Euclide giữa hai hình.

kèo bóng đá hôm nay và ngày mai <# kèo bóng đá hôm nay và ngày maifloat8

Tính toán khoảng cách taxi (số liệu L-1) giữa hai kèo bóng đá hôm nay và ngày mai.

kèo bóng đá hôm nay và ngày mai <= kèo bóng đá hôm nay và ngày maifloat8

Tính khoảng cách Chebyshev (số liệu L-INF) giữa hai hình.


Ngoài các toán tử trên, các toán tử so sánh thông thường được hiển thị trongBảng 9.1Có sẵn cho loạikèo bóng đá hôm nay và ngày mai. Các toán tử này lần đầu tiên so sánh các tọa độ đầu tiên và nếu chúng bằng nhau, hãy so sánh các tọa độ thứ hai, v.v. Chúng tồn tại chủ yếu để hỗ trợ lớp toán tử chỉ mục B-cây chokèo bóng đá hôm nay và ngày mai, ví dụ như có thể hữu ích nếu bạn muốn có một ràng buộc duy nhất trên Akèo bóng đá hôm nay và ngày maiCột. Nếu không, thứ tự này không được sử dụng nhiều.

Thekèo bóng đá hôm nay và ngày maiMô -đun cũng cung cấp lớp toán tử chỉ mục GIST chokèo bóng đá hôm nay và ngày maiGiá trị. MỘTkèo bóng đá hôm nay và ngày maiChỉ số GIST có thể được sử dụng để tìm kiếm các giá trị bằng cách sử dụng=, &&, @<@toán tử trongWHEREmệnh đề.

Ngoài ra, Akèo bóng đá hôm nay và ngày maiChỉ số GIST có thể được sử dụng để tìm các hàng xóm gần nhất bằng cách sử dụng các toán tử số liệu<-, <#<=inĐặt hàng bởimệnh đề. Ví dụ, người hàng xóm gần nhất của điểm 3-D (0,5, 0,5, 0,5) có thể được tìm thấy hiệu quả với:

Chọn C từ thứ tự kiểm tra bằng c <- kèo bóng đá hôm nay và ngày mai (mảng [0,5,0,5,0.5]) giới hạn 1;

The~Toán tử cũng có thể được sử dụng theo cách này để truy xuất hiệu quả một vài giá trị đầu tiên được sắp xếp theo tọa độ đã chọn. Ví dụ: để có được một vài hình kèo bóng đá hôm nay và ngày mai đầu tiên được đặt hàng bởi tọa độ đầu tiên (góc dưới bên trái) tăng dần, người ta có thể sử dụng truy vấn sau:

Chọn C từ thứ tự kiểm tra theo C ~ 1 Giới hạn 5;

Và để nhận các kèo bóng đá hôm nay và ngày mai 2-D được đặt hàng theo tọa độ đầu tiên của góc trên bên phải giảm dần:

Chọn C từ thứ tự kiểm tra bằng C ~ 3 Desc Giới hạn 5;

Bảng F.3Hiển thị các chức năng có sẵn.

Bảng F.3. Chức năng kèo bóng đá hôm nay và ngày mai

chức năng

Mô tả

Ví dụ (s)

kèo bóng đá hôm nay và ngày mai(float8) →kèo bóng đá hôm nay và ngày mai

Tạo một kèo bóng đá hôm nay và ngày mai một chiều với cả hai tọa độ giống nhau.

kèo bóng đá hôm nay và ngày mai (1)(1)

kèo bóng đá hôm nay và ngày mai(float8, float8) →kèo bóng đá hôm nay và ngày mai

tạo ra một kèo bóng đá hôm nay và ngày mai một chiều.

kèo bóng đá hôm nay và ngày mai (1, 2)(1), (2)

kèo bóng đá hôm nay và ngày mai(float8 []) →​​kèo bóng đá hôm nay và ngày mai

Tạo kèo bóng đá hôm nay và ngày mai kèo bóng đá hôm nay và ngày mai lượng không bằng cách sử dụng các tọa độ được xác định bởi mảng.

kèo bóng đá hôm nay và ngày mai (mảng [1,2,3])(1, 2, 3)

kèo bóng đá hôm nay và ngày mai(float8 [], float8 []) →kèo bóng đá hôm nay và ngày mai

Làm cho một kèo bóng đá hôm nay và ngày mai lập phương có tọa độ phía trên bên phải và dưới bên trái theo định nghĩa của hai mảng, phải có cùng độ dài.

kèo bóng đá hôm nay và ngày mai (mảng [1,2], mảng [3,4])(1, 2), (3, 4)

kèo bóng đá hôm nay và ngày mai(kèo bóng đá hôm nay và ngày mai, float8) →kèo bóng đá hôm nay và ngày mai

Làm cho một kèo bóng đá hôm nay và ngày mai lập phương mới bằng cách thêm một chiều vào một kèo bóng đá hôm nay và ngày mai lập phương hiện có, với cùng các giá trị cho cả hai điểm cuối của tọa độ mới. Điều này rất hữu ích để xây dựng các kèo bóng đá hôm nay và ngày mai từng mảnh từ các giá trị được tính toán.

kèo bóng đá hôm nay và ngày mai ('(1,2), (3,4)' :: cube, 5)(1, 2, 5), (3, 4, 5)

kèo bóng đá hôm nay và ngày mai(kèo bóng đá hôm nay và ngày mai, float8, float8) →kèo bóng đá hôm nay và ngày mai

Làm cho một kèo bóng đá hôm nay và ngày mai lập phương mới bằng cách thêm một chiều vào một kèo bóng đá hôm nay và ngày mai lập phương hiện có. Điều này rất hữu ích để xây dựng các kèo bóng đá hôm nay và ngày mai từng mảnh từ các giá trị được tính toán.

kèo bóng đá hôm nay và ngày mai ('(1,2), (3,4)' :: cube, 5, 6)​​→(1, 2, 5), (3, 4, 6)

cube_dim(kèo bóng đá hôm nay và ngày mai) →Số nguyên

Trả về số lượng kích thước của kèo bóng đá hôm nay và ngày mai.

cube_dim ('(1,2), (3,4)')2

cube_ll_coord(kèo bóng đá hôm nay và ngày mai, Số nguyên) →float8

Trả vền-thth giá trị tọa độ cho góc dưới bên trái của kèo bóng đá hôm nay và ngày mai.

cube_ll_coord ('(1,2), (3,4)', 2)2

cube_ur_coord(kèo bóng đá hôm nay và ngày mai, Số nguyên) →float8

Trả vền-th giá trị tọa độ cho góc trên bên phải của kèo bóng đá hôm nay và ngày mai.

cube_ur_coord ('(1,2), (3,4)', 2)4

cube_is_point(kèo bóng đá hôm nay và ngày mai) →Boolean

Trả về đúng nếu kèo bóng đá hôm nay và ngày mai lập phương là một điểm, nghĩa là hai góc xác định là như nhau.

cube_is_point (kèo bóng đá hôm nay và ngày mai lập phương (1,1))T

cube_distance(kèo bóng đá hôm nay và ngày mai, kèo bóng đá hôm nay và ngày mai) →float8

Trả về khoảng cách giữa hai kèo bóng đá hôm nay và ngày mai. Nếu cả hai kèo bóng đá hôm nay và ngày mai là điểm, đây là hàm khoảng cách bình thường.

cube_distance ('(1,2)', '(3,4)')2.8284271247461903

cube_subset(kèo bóng đá hôm nay và ngày mai, Số nguyên []) →kèo bóng đá hôm nay và ngày mai

Tạo một kèo bóng đá hôm nay và ngày mai mới từ một kèo bóng đá hôm nay và ngày mai lập phương hiện có, sử dụng danh sách các chỉ mục kích thước từ một mảng. Có thể được sử dụng để trích xuất các điểm cuối của một chiều hoặc để giảm kích thước hoặc để sắp xếp lại chúng như mong muốn.

cube_subset (kèo bóng đá hôm nay và ngày mai ('(1,3,5), (6,7,8)'), mảng [2])(3), (7)

cube_subset (kèo bóng đá hôm nay và ngày mai ('(1,3,5), (6,7,8)'), mảng [3,2,1,1])(5, 3, 1, 1), (8, 7, 6, 6)

cube_union(kèo bóng đá hôm nay và ngày mai, kèo bóng đá hôm nay và ngày mai) →kèo bóng đá hôm nay và ngày mai

Sản xuất sự kết hợp của hai kèo bóng đá hôm nay và ngày mai.

cube_union ('(1,2)', '(3,4)')(1, 2), (3, 4)

cube_inter(kèo bóng đá hôm nay và ngày mai, kèo bóng đá hôm nay và ngày mai) →kèo bóng đá hôm nay và ngày mai

Sản xuất giao điểm của hai kèo bóng đá hôm nay và ngày mai.

cube_inter ('(1,2)', '(3,4)')(3, 4), (1, 2)

cube_enlarge(C kèo bóng đá hôm nay và ngày mai, R Double, n Số nguyên) →kèo bóng đá hôm nay và ngày mai

​​Tăng kích thước của kèo bóng đá hôm nay và ngày mai bằng bán kính được chỉ địnhRít nhấtnKích thước. Nếu bán kính là âm thì kèo bóng đá hôm nay và ngày mai lập phương bị thu hẹp. Tất cả các kích thước được xác định được thay đổi bởi bán kínhR. Các tọa độ bên trái bị giảm bởiRvà tọa độ trên bên phải được tăng lên bởiR. Nếu một tọa độ bên trái thấp hơn được tăng lên nhiều hơn tọa độ trên bên phải tương ứng (điều này chỉ có thể xảy ra khiR<0) so với cả hai tọa độ được đặt thành trung bình của chúng. Nếu nhưnlớn hơn số lượng kích thước được xác định và kèo bóng đá hôm nay và ngày mai lập phương đang được mở rộng (R0), sau đó thêm kích thước được thêm vào để tạonhoàn toàn; 0 được sử dụng làm giá trị ban đầu cho các tọa độ ngoài. Chức năng này rất hữu ích để tạo các hộp giới hạn xung quanh một điểm để tìm kiếm các điểm gần đó.

cube_enlarge ('(1,2), (3,4)', 0.5, 3)(0.5, 1,5, -0,5), (3.5, 4,5, 0.5)


F.10.4. Mặc định#

Liên minh này:

chọn kèo bóng đá hôm nay và ngày mai cube_union ('(0,5,2), (2,3,1)', '0');
Cube_Union
-------------------
(0, 0, 0), (2, 5, 2)
(1 hàng)

Không mâu thuẫn với lẽ thường, giao điểm cũng không:

chọn kèo bóng đá hôm nay và ngày mai cube_inter ('(0, -1), (1,1)', '(-2), (2)');
cube_inter
-------------
(0, 0), (1, 0)
(1 hàng)

Trong tất cả các hoạt động nhị phân trên các hình kèo bóng đá hôm nay và ngày mai khác nhau, phần dưới được coi là một hình chiếu của Cartesian, i. e., có số 0 thay cho tọa độ bị bỏ qua trong biểu diễn chuỗi. Các ví dụ trên tương đương với:

cube_union ('(0,5,2), (2,3,1)', '(0,0,0), (0,0,0)');
cube_inter ('(0, -1), (1,1)', '(-2,0), (2,0)');

Vị trí ngăn chặn sau sử dụng cú pháp điểm, trong khi thực tế đối số thứ hai được biểu thị bên trong một hộp. Cú pháp này làm cho nó không cần thiết phải xác định một loại điểm và hàm riêng riêng cho (hộp, điểm).

chọn cube_contains ('(0,0), (1,1)', '0,5,0,5');
Cube_contains
--------------
t
(1 hàng)

F.10.5. Ghi chú#

Để biết ví dụ về việc sử dụng, hãy xem bài kiểm tra hồi quySQL/cube.sql.

Để làm cho mọi người khó phá vỡ mọi thứ hơn, có giới hạn 100 về số lượng kích thước của kèo bóng đá hôm nay và ngày mai. Cái này được đặt trongcubedata.hNếu bạn cần một cái gì đó lớn hơn.

F.10.6. Tín dụng#

Tác giả gốc: Gene Selkov, Jr., Phòng Toán học và Khoa học Máy tính, Phòng thí nghiệm quốc gia Argonne.

Lời cảm ơn của tôi chủ yếu dành cho Giáo sư Joe Hellerstein (https: //dsf.berkeley.edu/jmh/) để làm sáng tỏ ý chính của ý chính (http: //gist.cs.berkeley.edu/), và cho học sinh cũ của anh ấy Andy Dong vì ví dụ được viết cho Illustra. Tôi cũng biết ơn tất cả các nhà phát triển Postgres, hiện tại và quá khứ, vì đã cho phép bản thân tạo ra thế giới của riêng tôi và sống không bị xáo trộn trong đó. Và tôi muốn thừa nhận lòng biết ơn của mình đến Argonne Lab và Bộ Năng lượng Hoa Kỳ cho những năm hỗ trợ trung thành với nghiên cứu cơ sở dữ liệu của tôi.

Cập nhật nhỏ cho gói này được thực hiện bởi Bruno Wolff IIIVào tháng 8/tháng 9 năm 2002. Chúng bao gồm thay đổi độ chính xác từ độ chính xác đơn sang độ chính xác gấp đôi và thêm một số chức năng mới.

Cập nhật bổ sung được thực hiện bởi Joshua ReichVào tháng 7 năm 2006. Chúng bao gồmkèo bóng đá hôm nay và ngày mai (float8 [], float8 [])và làm sạch mã để sử dụng giao thức cuộc gọi V1 thay vì giao thức V0 không dùng nữa.