3.2.3.1. Kiến trúc vật lý kho dữ liệu
Kiến trúc hệ thống kho dữ liệu viễn thông bao gồm máy chủ chuyển đổi dữ liệu, máy chủ cở sở dữ liệu để lưu kho dữ liệu, máy chủ báo cáo + web server + process server, máy chủ phân tích dữ liệu trực tuyến.
Oracle Database Phát triển thuê bao Quản lý khách hàng Oracle Database Tính cước Oracle Database Quản lý thu nợ ETL Server Warehouse Builder Oracle Database Kho dữ liệu
Crystal Report Server Process Server Web Server OLAP Server ` ` ` Client
Hình 53. Kiến trúc vật lý kho dữ liệu viễn thông
Máy chủ chuyển đổi dữ liệu có cài đặt công cụ oracle warehouse builder, đây là công cụ xây dựng và quản trị kho dữ liệu. Sử dụng công cụ này để xây dựng các tiến trình tải dữ liệu theo lô, quản lý vòng đời, chuyển dữ liệu và siêu dữ liệu cho các công cụ khác. Oracle Warehouse Builder 10gR2 sẽ bổ sung thêm giao diện đồ họa cho bắt các thay đổi dữ liệu, cả đồng bộ và không đồng bộ, và những tính năng bổ sung riêng có để phục vụ cho quá trình chuyển đổi dữ liệu tức thời. Oracle Warehouse Builder 10gR2 dùng phương pháp ánh xạ quen thuộc, cho phép người dùng ánh xạ một cách trực quan dữ liệu nguồn tới các bảng đích và bao gồm phép chuyển đổi mọi cột hay bảng riêng lẻ. Tất cả đều được ghi lại đầy đủ bằng metadata trong kho chứa thiết kế để có thể quản lý đầy đủ mọi thay đổi trong cả vòng đời dự án
Máy chủ cở sở dữ liệu lưu kho dữ liệu cài đặt oracle database. Dữ liệu từ các hệ thống nguồn như tính cước, phát triển thuê bao, quản lý nợ,…qua máy chủ chuyển đổi số liệu, dữ liệu sẽ được làm sạch, tích hợp, ánh xạ,…chuyển đổi vào máy chủ cở sở dữ liệu lưu kho dữ liệu viễn thông.
Máy chủ tiếp có chứa Crystal report server, đây là công cụ quản trị và thực thi báo cáo. Process server, web server quản lý tiền trình cho phép máy trạm có thể xem báo cáo, quản lý dữ liệu từ điển,….từ giao diện winform hoặc web form.
Máy chủ có chứa công cụ khai thác thông tin discoverer và công cụ phân tích trực tuyến Olap.
3.2.3.2. Ước lượng dung lượng
Xét tỉnh có số lượng thuê bao trung bình 250000 thuê bao, dữ liệu dự tính lưu trong 10 năm (khoảng 3650 ngày, 120 tháng).
Thông tinh khách hàng có 13 trường, thanh toán 6 trường, thuê bao 8 trường (tổng 27 trường). Tổng dung lượng để lưu thông tinh khách hàng là 250,000 * (6*200 + 3*50 + 2*30 + 3*20 + 2*10 + 3*9 + 4 *8 + 4*4) = 400MB.
Xét bảng sự kiện chi tiết cuộc gọi, trung bình một thuê bao trong tháng gọi 100 cuộc, nên tổng số bản ghi chi tiết là 250,000*100 = 25,000,000 mỗi bản ghi gồm 20 trường (10key+10fact). Tổng dung lượng để lưu chi tiết cuộc gọi trong 1 tháng là 25,000,000 * (2*8+2*9+5*12+2*30+1*2+8*4)= 4GB. Tổng dung lượng để lưu chi tiết cuộc gọi trong 10 năm 4GB*120 = 480GB
Xét bảng sự kiện tổng hợp cước khách hàng, trung bình một thuê bao trong tháng có 5 khoản mục, nên tổng số bản ghi chi tiết là 250,000*5 = 1,250,000 mỗi bản ghi gồm 15 trường (8key+7fact). Tổng dung lượng để lưu chi tiết cuộc gọi trong 1 tháng là 1,250,000 * (1*30+4*12+3*9+1*8+4*5)= 160M. Tổng dung lượng để lưu chi tiết cuộc gọi trong 10 năm 160M*120 = 19GB
Tương tự chi tiết nợ của khách hàng trong trong 10 năm sử dụng 30GB; chi tiết trả của khách hàng trong trong 10 năm sử dụng 20GB; lịch sử khách hàng 10 năm sử dụng 20GB. Tổng các phần còn lại khoảng 100GB.
Như vậy tổng dung lượng để lưu trữ khoảng 800GB. Sử dụng thêm 30% để dánh chỉ mục (index), 15% cho cơ cấu bên trong, 20% cho sự sai số. Tổng dung lượng bây giờ sẽ là 1320GB
3.2.3.3. Tạo cấu trúc database
Trong phần thiết kế vật lôgic chúng ta đã thiết kế 16 bảng sự kiện, 28 chiều. Chúng ta sẽ tạo các bảng trong cở sở dữ liệu dựa trên thiết kế logic trên. Đầu tiên tạo bảng sự kiện bán hàng và 8 chiều liên quan.
Hình 54. Mô hình quan hệ bán hàng
Có thể sử dụng công cụ Warehouse Builder để thực hiện tạo bảng hoặc thực hiện theo các lệnh script. Trước hết thực hiện tạo các chiều trước.
--Tạo bảng chiều khách hàng
CREATE TABLE khachhang(
khachhang_id NUMBER(9,0) NOT NULL, loaikh_id NUMBER(4,0), so_fax VARCHAR2(50), ma_kh VARCHAR2(20), ngaylap_hd DATE, stk VARCHAR2(30), so_dt VARCHAR2(50), ten_kh VARCHAR2(200), ma_hd VARCHAR2(20), ngay_sn DATE, diachi_kh VARCHAR2(200), email VARCHAR2(50), mst VARCHAR2(30) );
PRIMARY KEY (khachhang_id) USING INDEX;
--Tạo bảng chiều dịch vụ viễn thông
CREATE TABLE dichvu_vt(
dichvuvt_id NUMBER(4,0), ten_dvvt VARCHAR2(100), ma_dvvt VARCHAR2(20), ma_lhtb VARCHAR2(20), loaihinh_tb VARCHAR2(100), loaitb_id NUMBER(4,0) NOT NULL );
ALTER TABLE dichvu_vt ADD CONSTRAINT dichvu_vt_dimension_key_pk PRIMARY KEY (loaitb_id) USING INDEX;
--Tạo bảng chiều điểm giao dịch
CREATE TABLE diem_gd(
diem_gd_id NUMBER(6,0) NOT NULL, diachi VARCHAR2(100), diem_gd VARCHAR2(100), huyen_diachi VARCHAR2(100), ten_huyen VARCHAR2(100), huyen_id NUMBER(6,0), ten_tinh VARCHAR2(100), tinh_id NUMBER(6,0), tinh_diachi VARCHAR2(100) );
ALTER TABLE diem_gd ADD CONSTRAINT diem_gd_dimension_key_pk PRIMARY KEY (diem_gd_id) USING INDEX;
--Tạo bảng chiều địa chỉ
CREATE TABLE diachi(
ma_tinh VARCHAR2(20), tinh_id NUMBER(6,0), ten_tinh VARCHAR2(100), ten_huyen VARCHAR2(100), quan_id NUMBER(6,0), ma_quan VARCHAR2(20), ten_phuong VARCHAR2(100),
phuong_id NUMBER(6,0) NOT NULL, ma_phuong VARCHAR2(20)
);
ALTER TABLE diachi ADD CONSTRAINT diachi_dimension_key_pk PRIMARY KEY (phuong_id) USING INDEX;
--Tạo bảng chiều kiểu yêu cầu
CREATE TABLE kieu_yc(
kieu_yc VARCHAR2(100), ma_yc VARCHAR2(20),
kieuyc_id NUMBER(4,0) NOT NULL, loaihd_id NUMBER(4,0),
ten_loaihd VARCHAR2(100), ma_loaihd VARCHAR2(20) )
ALTER TABLE kieu_yc ADD CONSTRAINT kieu_yc_dimension_key_pk PRIMARY KEY (kieuyc_id) USING INDEX;
--Tạo bảng kênh giao tiếp
CREATE TABLE kenh_gt(
ghichu VARCHAR2(100), kenh_gt VARCHAR2(100),
kenhgt_id NUMBER(4,0) NOT NULL )
ALTER TABLE kenh_gt ADD CONSTRAINT kenh_gt_dimension_key_pk PRIMARY KEY (kenhgt_id) USING INDEX;
--Tạo bảng chiều chương trình khuyến mãi
CREATE TABLE chuongtrinh_km( ngay_kt DATE,
ctkm_id NUMBER(4,0) NOT NULL, thoigian_sd NUMBER(4,0),
ngay_bd DATE,
giatri_km NUMBER(12,0), ten_ct VARCHAR2(100) );
ALTER TABLE chuongtrinh_km ADD CONSTRAINT
chuongtrin_dimension_key_pk PRIMARY KEY (ctkm_id) USING INDEX;
--Tạo bảng chiều thời gian
CREATE TABLE thoigian(
dimension_key NUMBER NOT NULL, day_name VARCHAR2(25), day_day_code NUMBER, day_description VARCHAR2(2000), day_time_span NUMBER, day_of_cal_quarter NUMBER, day_end_date DATE, day_id NUMBER, day_of_cal_year NUMBER,
day_of_cal_month NUMBER, day_of_cal_week NUMBER, day DATE, julian_date NUMBER, day_start_date DATE, month_of_year NUMBER, calendar_month_end_date DATE, calendar_month_cal_month_code NUMBER, calendar_month_name VARCHAR2(25), calendar_month_time_span NUMBER, calendar_month_id NUMBER, month_of_quarter NUMBER, calendar_month_start_date DATE, cal_month_number NUMBER, calendar_month_description VARCHAR2(2000), calendar_quarter_name VARCHAR2(25), calendar_quart_cal_quarter_co NUMBER, calendar_quarter_start_date DATE, quarter_of_year NUMBER, cal_quarter_number NUMBER, calendar_quarter_time_span NUMBER, calendar_quarter_id NUMBER, calendar_quarter_end_date DATE, calendar_quarter_description VARCHAR2(2000), cal_year_number NUMBER, calendar_year_id NUMBER, calendar_year_name VARCHAR2(25), calendar_year_description VARCHAR2(2000), calendar_year_end_date DATE, calendar_year_cal_year_code NUMBER, calendar_year_start_date DATE, calendar_year_time_span NUMBER );
ALTER TABLE thoigian ADD CONSTRAINT thoigian_dimension_key_pk PRIMARY KEY (dimension_key) USING INDEX;
Sau khi tạo xong các chiều thực hiện tạo bảng sự kiện bán hàng
--Tạo bảng sự kiện bán hàng
CREATE TABLE dangky_dvvt(
tien_dk NUMBER(12,0), vat_dk NUMBER(12,0), tien_km NUMBER(12,0), vat_km NUMBER(12,0), tien_tt NUMBER(12,0), vat_tt NUMBER(12,0),
ngay_tt DATE, ngay_yc DATE, ma_tb VARCHAR2(30), chuongtrinh_km NUMBER, diachi NUMBER, dichvu_vt NUMBER, diem_gd NUMBER, kenh_gt NUMBER, khachhang NUMBER, kieu_yc NUMBER, thoigian NUMBER ); --Index
CREATE BITMAP INDEX kenh_gt_idx ON dangky_dvvt(kenh_gt ASC); CREATE BITMAP INDEX diachi_idx ON dangky_dvvt(diachi ASC); CREATE BITMAP INDEX kieu_yc_idx ON dangky_dvvt(kieu_yc ASC);
CREATE BITMAP INDEX dichvu_vt_idx_1_2 ON dangky_dvvt(dichvu_vt ASC); CREATE BITMAP INDEX thoigian_idx_1_2_3 ON dangky_dvvt(thoigian ASC); CREATE BITMAP INDEX khachhang_idx_1_2_3_4 ON dangky_dvvt(khachhang ASC);
CREATE BITMAP INDEX chuongtrinh_km_idx ON dangky_dvvt(chuongtrinh_km ASC);
CREATE BITMAP INDEX diem_gd_idx_1 ON dangky_dvvt(diem_gd ASC); -- Foreign Key
ALTER TABLE dangky_dvvt
ADD CONSTRAINT dangky_dv_diem_gd_fk FOREIGN KEY (diem_gd) REFERENCES diem_gd (diem_gd_id);
ALTER TABLE dangky_dvvt
ADD CONSTRAINT dangky_dv_chuongtrinh_km_fk FOREIGN KEY (chuongtrinh_km)
REFERENCES chuongtrinh_km (ctkm_id); ALTER TABLE dangky_dvvt
ADD CONSTRAINT dangky_dv_diachi_fk FOREIGN KEY (diachi) REFERENCES diachi (phuong_id);
ADD CONSTRAINT dangky_dv_thoigian_fk FOREIGN KEY (thoigian) REFERENCES thoigian (dimension_key);
ALTER TABLE dangky_dvvt
ADD CONSTRAINT dangky_dv_dichvu_vt_fk FOREIGN KEY (dichvu_vt) REFERENCES dichvu_vt (loaitb_id);
ALTER TABLE dangky_dvvt
ADD CONSTRAINT dangky_dv_kenh_gt_fk FOREIGN KEY (kenh_gt) REFERENCES kenh_gt (kenhgt_id);
ALTER TABLE dangky_dvvt
ADD CONSTRAINT dangky_dv_kieu_yc_fk FOREIGN KEY (kieu_yc) REFERENCES kieu_yc (kieuyc_id);
ALTER TABLE dangky_dvvt
ADD CONSTRAINT dangky_dv_khachhang_fk FOREIGN KEY (khachhang) REFERENCES khachhang (khachhang_id);
Các bảng sự kiện và chiều khác được mô tả trong phụ lục.
3.2.3.4. Sử dụng bảng tổng hợp, view và materialized view
Như đã biết mục đích của các bảng tổng hợp trả lời nhanh các câu hỏi cần thường gặp. Các materialized view chính là các bảng tổng hợp (summary table), nó giống như view nhưng mang một số tính chất khác cơ bản: có chiếm bộ nhớ và do đó cũng có tốc độ thực hiện khá nhanh, quan hệ được với các dimension table và là những summary table được sử dụng để tăng tốc độ khai thác. Sau đây sẽ thiết kế một số bảng tổng hợp cho mục đích tổng hợp dữ liệu nhanh.
Thống kê cuộc gọi theo giờ bắt đầu
Bảng tổng hợp này được sử dụng để phân tích cuộc gọi theo giờ bắt đầu.
Hình 55. Bảng thống kê cuộc gọi theo giờ bắt đầu.
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_thongke_cg_gio_goi AS
SELECT a.thang, a.gio_bd, a.donvi_ql, count(1) socuoc, sum(a.tg_goi) tg_goi, sum(a.tien) tien, sum(a.vat) vat, sum(tientru) tientru
FROM wh_ccbs.ct_cuoc_kh a
group by a.thang, a.gio_bd, a.donvi_ql;
Thống kê cuộc gọi theo dịch vụ
Hình 56. Bảng thống kê cuộc gọi theo dịch vụ.
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_thongke_cg_kieu_dv AS
SELECT a.thang, a.kieu_dv, a.donvi_ql, COUNT(1) socuoc,
SUM(a.tg_goi) tg_goi, SUM(a.tien) tien, SUM(a.vat) vat, SUM(tientru) tientru
FROM wh_ccbs.ct_cuoc_kh a
GROUP BY a.thang, a.kieu_dv, a.donvi_ql;
Thống kê cuộc gọi theo mã vùng
Bảng tổng hợp này được sử dụng để phân tích cuộc gọi theo mã vùng
Hình 57. Bảng thống kê cuộc gọi theo mã vùng.
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_thongke_cg_mavung AS
SELECT a.thang, a.ma_vung, a.donvi_ql, count(1) socuoc,
sum(a.tg_goi) tg_goi, sum(a.tien) tien, sum(a.vat) vat, sum(tientru) tientru
FROM wh_ccbs.ct_cuoc_kh a
group by a.thang, a.ma_vung, a.donvi_ql;
Thống kê doanh thu
Bảng tổng hợp này được sử dụng để phân tích doanh thu theo dịch vụ, đối tượng, đơn vị quản lý, tháng.
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_thongke_doanhthu AS
SELECT thang, dichvu_vt, donvi_ql, a.doituong, sum(a.socuoc) socuoc, sum(a.sophut) sophut, sum(a.sogiay) sogiay, sum(a.tien) tien,
sum(a.vat) vat, sum(tien+vat) tong FROM wh_ccbs.th_cuoc_kh a
group by thang, dichvu_vt, donvi_ql, a.doituong;
Thống kê tiền nợ cước
Bảng tổng hợp này được sử dụng để phân tích tình hình nợ cước theo khoản mục, đơn vị quản lý, tháng.
Hình 59. Bảng thống kê tiền nợ cước
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_thongke_tien_no AS
Select thang, khoanmuc_cuoc, donvi_ql, sum(tien) tien, sum(thue) vat, sum(hoahong) hoahong, sum(tien+thue-hoahong) tong
FROM wh_ccbs.ct_no_kh a
Group by thang, khoanmuc_cuoc, donvi_ql;
Thống kê tiền thanh toán
Bảng tổng hợp này được sử dụng để phân tích tiền thanh toán nợ cước theo khoản mục, đơn vị quản lý, tháng, hình thức thanh toán.
Hình 60. Bảng thống kê tiền thanh toán
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_thongke_tien_tt AS
Select thang, khoanmuc_cuoc, hinhthuc_tt, donvi_ql, sum(tien) tien, sum(vat) vat, sum(hoahong) hoahong, sum(tien+vat-hoahong) tong FROM wh_ccbs.ct_ttno_kh a
Tổng hợp cước sử dụng khách hàng
Bảng tổng hợp này được sử dụng để phân tích cước sử dụng của khách hàng.
Hình 61. Bảng tổng hợp cước sử dụng khách hàng
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_tonghop_cuoc_sd_kh AS
SELECT thang, khachhang, sum(a.socuoc) socuoc, sum(a.sophut) sophut, sum(a.sogiay) sogiay, sum(a.tien) tien, sum(a.vat) vat,
sum(tien+vat) tong
FROM wh_ccbs.th_cuoc_kh a group by thang, khachhang;
Tổng hợp tiền nợ khách hàng
Bảng tổng hợp này được sử dụng để phân tích tiền nợ của khách hàng.
Hình 62. Bảng tổng hợp tiền nợ khách hàng
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_tonghop_tien_no_kh AS
Select thang, khachhang, sum(tien) tien, sum(thue) vat, sum(hoahong) hoahong, sum(tien+thue-hoahong) tong
FROM wh_ccbs.ct_no_kh a Group by thang, khachhang;
Tổng hợp tiền thanh toán khách hàng
Bảng tổng hợp này được sử dụng để phân tích tiền thanh toán của khách hàng.
Hình 63. Bảng tổng hợp tiền thanh toán khách hàng
Lệnh tạo bảng tổng hợp
CREATE MATERIALIZED VIEW mv_tonghop_tien_tt_kh AS
Select thang, khachhang, sum(tien) tien, sum(vat) vat, sum(hoahong) hoahong, sum(tien+vat-hoahong) tong
FROM wh_ccbs.ct_ttno_kh a Group by thang, khachhang;
3.2.3.5. Phân vùng
cùng lớn. Nó cho phép phân chia dữ liệu theo một số tiêu thức nào đó. Trong kho dữ liệu viễn thông, chúng ta thiết kế các partition dựa trên các trường về thời gian. Dữ liệu chi tiết cuộc gọi, cước sử dụng, tiền thanh toán,…của khách hàng là rất lớn và thường được xử lý trong từng tháng, nên chúng ta sẽ phân vùng dữ liệu các dữ liệu này theo tháng. Danh sách các bảng được phân vùng dữ liệu
Tên bảng Mô tả Trƣờng phân vùng
CT_CUOC_KH Bảng sự kiện chi tiết cước khách hàng
Tháng CT_NO_KH Bảng sự kiện chi tiết
nợ khách hàng
Tháng CT_TTNO_KH Bảng sự kiện chi tiết
thanh toán nợ KH Tháng NHACNO Bảng sự kiện nhắc nợ Tháng TH_CUOC_KH Bảng sự kiện tổng hợp cước KH Tháng MV_TONGHOP_CUOC_SD_KH Bảng tổng hợp cước sử dụng khách hàng Tháng MV_TONGHOP_TIEN_NO_KH Bảng tổng hợp tiền nợ khách hàng Tháng MV_TONGHOP_TIEN_TT_KH Bảng tổng hợp tiền thanh toán khách hàng Tháng 3.2.3.6. Chỉ mục
Thiết kế các chỉ mục (Index) làm tăng hiệu suất truy vấn dữ liệu. Chỉ nên đánh chỉ mục đối với các trường có sự khác nhau về dữ liệu nhiều. Sau đây liệt kê các bảng có thiết kế index.
Tên bảng Mô tả Trƣờng index
KHACHHANG Khóa chính khachhang_id
THANHTOAN Khóa chính thanhtoan_id
THUEBAO Khóa chính thuebao_id
CT_CUOC_KH Chiều khách hàng khachhang
CT_CUOC_KH Chiều thuê bao thuebao
CT_NO_KH Chiều khách hàng khachhang
CT_NO_KH Chiều thanh toán thanhtoan
CT_TTNO_KH Chiều khách hàng khachhang
CT_TTNO_KH Chiều thanh toán thanhtoan
NHACNO Chiều khách hàng khachhang
NHACNO Chiều thuê bao thuebao
TH_CUOC_KH Chiều khách hàng khachhang
TH_CUOC_KH Chiều thanh toán thanhtoan MV_TONGHOP_CUOC_SD_KH Chiều khách hàng khachhang MV_TONGHOP_TIEN_NO_KH Chiều khách hàng khachhang MV_TONGHOP_TIEN_TT_KH Chiều khách hàng khachhang