Tôi đang xem xét việc thiết lập đăng nhập từ tất cả các máy chủ của tôi vào cơ sở dữ liệu postgresql tập trung. Thật ý nghĩa khi có thể thả nhật ký theo ngày hoặc theo máy chủ, vì vậy tôi muốn thiết lập nó với phân vùng , nhưng phân vùng nhiều lớp:host-service inherits service, host-service-yyyymm inherits host-service.
Tôi đã xây dựng một sơ đồ ví dụ cho một dịch vụ cụ thể (lỗi php trong trường hợp này) và đang tìm kiếm một số chuyên gia PostgreQuery để phê bình nó về các tắc nghẽn hiệu suất rõ ràng.
// SET UP MASTER PHP LOG TABLE //
CREATE TABLE php (
log_id int not null,
host char(5),
logdate date not null,
message text
);
// SET UP HOST-SPECIFIC 'PARTITIONS' //
CREATE TABLE host1_php (
CHECK ( host = 'host1' )
) INHERITS (php);
CREATE TABLE host2_php (
CHECK ( host = 'host2' )
) INHERITS (php);
// SET UP HOST-SPECIFIC TIME 'PARTITIONS' //
CREATE TABLE host1_php_2011m12 (
CHECK ( logdate >= DATE '2011-12-01' AND logdate < DATE '2012-01-01' )
) INHERITS (host1_php);
CREATE TABLE host1_php_2012m01 (
CHECK ( logdate >= DATE '2012-01-01' AND logdate < DATE '2012-02-01' )
) INHERITS (host1_php);
CREATE TABLE host2_php_2011m12 (
CHECK ( logdate >= DATE '2011-12-01' AND logdate < DATE '2012-01-01' )
) INHERITS (host2_php);
CREATE TABLE host2_php_2012m01 (
CHECK ( logdate >= DATE '2012-01-01' AND logdate < DATE '2012-02-01' )
) INHERITS (host2_php);
CREATE INDEX host1_php_2011m12_logdate ON host1_php_2011m12 (logdate);
CREATE INDEX host1_php_2012m01_logdate ON host1_php_2012m01 (logdate);
CREATE INDEX host2_php_2011m12_logdate ON host2_php_2011m12 (logdate);
CREATE INDEX host2_php_2012m01_logdate ON host2_php_2012m01 (logdate);
Tôi cũng sẽ thêm các dịch vụ như truy cập / lỗi apache.
Tôi nghĩ rằng tôi phải kích hoạt để chèn vào host_service (để sử dụng ràng buộc kiểm tra máy chủ) và sau đó mỗi host_service phải kích hoạt để chèn vào bảng host_service_yyyymm.
Tôi có thể mong đợi gì về hiệu năng của lược đồ kích hoạt / phân vùng như vậy?
Một số thông tin bổ sung được thảo luận trong trò chuyện:
- Phiên bản PostgreSQL 9.1.2
- Các truy vấn về dữ liệu sẽ không thường xuyên và chủ yếu vào tháng dữ liệu hiện tại cho nhiều máy chủ.
- PHP chỉ được chèn khoảng 1 mỗi phút, nhưng tổng số apache có thể sẽ vào khoảng 300-500 mỗi giây trên tất cả các máy chủ.
MERGE
chính xác là những gì tôi nghĩ khi đọc về phân vùng trong Postgre ... Không, không có chỉ mục nào trên bản gốc
CREATE INDEX
báo cáo của bạn . Không phải chúng nên là các bảng khác nhau, một bảng cho mỗi phân vùng?
php
Bảng có cần một chỉ mục trên(host,logdate)
và trẻ em có kế thừa chỉ mục không?