CHƯƠNG 1. TỔNG QUAN VỀ HQTCSDL POSTGRESQL 1. Giới thiệu chung về HQTCSDL PostgreSQL PostgreSQL là hệ quản trị cơ sở dữ liệu được viết theo hướng mã nguồn mở và rất mạnh mẽ. Hệ quản trị cơ sở dữ liệu này đã có hơn 15 năm phát triển, đồng thời cấu trúc đã được kiểm chứng và tạo được lòng tin với người sử dụng về độ tin cậy, tính toàn vẹn dữ liệu, và tính đúng đắn.
PostgreSQL có thể chạy trên tất cả các hệ điều hành, bao gồm cả Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), và Windows. Có hỗ trợ đầy đủ các foreign keys, joins, views, triggers, và stored procedures (trên nhiều ngôn ngữ). Hệ quản trị này còn bao gồm các kiểu dữ liệu SQL: 2008 như INTEGER, NUMBER, BOOLEAN, CHAR, VARCHAR, DATE INTERVAL, và TIMESTAMPs. PostgreSQL cũng hỗ trợ lưu trữ các đối tượng có kiểu dữ liệu nhị phân lớn, bao gồm cả hình ảnh, âm thanh, hoặc video.
Hệ quản trị cơ sở dữ liệu này được sử dụng thông qua giao diện của các ngôn ngữ C / C + +, Java,. Net, Perl, Python, Ruby, Tcl, ODBC… Hình 1. PostgreSQL Là một hệ quản trị cơ sở dữ liệu mạnh, PostgreSQL có các tính năng phức tạp như kiểm soát truy cập đồng thời nhiều phiên bản (MVCC), khôi phục dữ liệu tại từng thời điểm (Recovery), quản lý dung lượng bảng (tablespaces), sao chép không đồng bộ, giao dịch lồng nhau (savepoints), sao lưu trực tuyến hoặc nội bộ, truy vấn phức tạp và tối ưu hóa, viết trước các khai báo để quản lý và gỡ lỗi. PostgreSQL hỗ trợ bộ ký tự quốc tế, hỗ trợ bảng mã nhiều byte, Unicode, và cho phép định dạng, sắp xếp và phân loại ký tự văn bản (chữ hoa, thường).
PostgreSQL 1 còn được biết đến với khả năng mở rộng để nâng cao cả về số lượng dữ liệu quản lý và số lượng người dùng truy cập đồng thời. Đã từng có những hệ thống PostgreSQL hoạt động trong môi trường thực tế thực hiện quản lý vượt quá 4 terabyte dữ liệu. Dưới đây là thông tin về giới hạn khả năng của PostgreSQL. Giới hạn khả năng của PostgreSQL Giới hạn Giá trị Dung lượng tối đa của cơ sở dữ Không giới hạn liệu Dung lượng bảng tối đa 32 TB Dung lượng tối đa của cột 1,6 TB Dung lượng tối đa của trường 1 GB Hàng tối đa mỗi Bảng Không giới hạn Số cột tối đa của mỗi bảng 250 - 1600 tùy thuộc vào loại cột Chỉ số tối đa của mỗi bảng Không giới hạn Vài nét về lịch sử của PostgreSQL Hệ thống quản lý cơ sở dữ liệu đối tượng-quan hệ bây giờ được gọi là PostgreSQL có nguồn gốc từ các gói Postgres viết tại Đại học California ở Berkeley.
Với hơn hai thập kỷ phát triển, PostgreSQL bây giờ là cơ sở dữ liệu mã nguồn mở tiên tiến nhất sẵn sàng ở bất cứ đâu. Dự án Postgres, do Giáo sư Michael Stonebraker dẫn dắt, được Cơ quan Dự án Tìm hiểuCao cấp Quốc phòng - DARPA (Defense Advanced Research Projects Agency), Văn phòng Tìm hiểuQuân đội - ARO (Army Research Office), Quỹ Khoa học Quốc gia – NSF (National Science Foundation), và ESL Inc. Dự án Postgres bắt đầu triển khai vào năm 1986. Các khái niệm ban đầu cho hệ thống đã được trình bày trong “Các thiết kế của Postgres- Stonebraker and Rowe, 1986”, và định nghĩa của mô hình dữ liệu ban đầu đã xuất hiện trong “ Các mô hình dữ liệu Postgres - Rowe and Stonebraker, 1987”.
Thiết kế của hệ thống các qui tắc khi đó đã được mô tả trong “Các thiết kế của hệ thống quy tắc Postgres - Stonebraker, Hanson, Hong, 1987”. Nhân tố căn bản và kiến trúc của người quản lý kho lưu trữ 2 đã được trình bày chi tiết trong “Các thiết kế của hệ thống lưu trữ Postgres - Stonebraker, 1987”. Postgres đã trải qua vài phiên bản chính kể từ đó. Hệ thống “phần mềm trình diễn” (demoware) đầu tiên đã hoạt động vào năm 1987 và đã được trình bày tại Hội nghị ACM-SIGMOD 1988.
Phiên bản 1, được mô tả trong “Việc triển khai Postgres - Stonebraker, Rowe, Hirohama, 1990”, được phát hành với một vài người dùng bên ngoài trong tháng 6 năm 1989. Để đáp ứng với một bài phê bình của hệ thống quy tắc đầu tiên, hệ thống quy tắc đã được thiết kế lại, và phiên bản 2 đã được phát hành vào tháng Sáu năm 1990 với hệ thống qui tắc mới. Phiên bản 3 xuất hiện vào năm 1991 và đã bổ sung hỗ trợ cho người quản lý nhiều kho lưu trữ, thi hành truy vấn được cải thiện, và hệ thống quy tắc được viết lại. Đối với hầu hết các phần, phiên bản tiếp theo cho đến Postgres 95 (xem bên dưới) tập trung vào tính di động và độ tin cậy.
POSTGRES đã dùng để thực hiện nhiều ứng dụng sản xuất và Tìm hiểukhác nhau. Chúng bao gồm: Một hệ thống phân tích cơ sở dữ liệu tài chính, một gói giám sát hiệu năng của động cơ phản lực, một cơ sở dữ liệu theo dõi các hành tinh nhỏ, một cơ sở dữ liệu thông tin y tế, và vài hệ thống thông tin địa lý, POSTGRES cũng đã được sử dụng như một công cụ giáo dục tại một số trường đại học. Cuối cùng, Illustra Information Technologies (sau này sát nhập vào Informix, mà bây giờ thuộc sở hữu của IBM) đã chọn mã và thương mại hóa nó. Vào cuối năm 1992, POSTGRES đã trở thành trình quản lý cơ sở dữ liệu chính cho dự án tính toán khoa học Sequoia 2000.
Quy mô của cộng đồng người dùng bên ngoài tăng gần gấp đôi trong năm 1993. Rõ ràng là việc bảo trì các mã mẫu và sự hỗ trợ đã chiếm rất nhiều thời gian mà lẽ ra phải được dành cho Tìm hiểucơ sở dữ liệu. Trong nỗ lực để giảm bớt gánh nặng hỗ trợ này, các dự án Postgres ở Berkeley chính thức kết thúc với phiên bản 4. Vào năm 1994, Andrew Yu và Jolly Chen đã bổ sung thêm một trình biên dịch ngôn ngữ SQL vào POSTGRES.
Dưới cái tên mới, Postgres95 sau đó đã được phát hành lên web để tìm ra cách đi của riêng mình trên thế giới như một hậu duệ nguồn mở của mã POSTGRES ở Berkeley. Mã của Postgres95 đã hoàn toàn là ANSI C và được giảm kích thước tới 25%. Nhiều thay đổi nội bộ đã tăng hiệu suất và khả năng bảo trì. Postgres95 phát hành bản 1.x chạy nhanh hơn khoảng 30- 50% so với chuẩn Wisconsin so với Postgres, phiên bản 4.
Ngoài việc sửa lỗi, sau đây là những cải tiến quan trọng: 3 - Ngôn ngữ truy vấn PostQUEL đã được thay thế bằng SQL (được triển khai trong máy chủ).Các truy vấn phụ (Subqueries) đã được hỗ trợ cho tới PostgreSQL, nhưng chúng có thể được mô phỏng trong Postgres95 với các hàm SQL do người sử dụng định nghĩa. Các hàm tổng hợp đã được tái triển khai. Hỗ trợ cho câu truy vấn GROUP BY cũng đã được bổ sung. - Một chương trình mới (psql) đã được đưa ra cho các truy vấn SQL tương tác, nó sử dụng GNU Readline.
Điều này đã thay thế phần lớn chương trình giám sát cũ. - Một thư viện (front-end) mới “libpgtcl”, được các máy trạm dựa vào Tcl hỗ trợ. Một trình biên dịch (shell) mẫu, pgtclsh, đã cung cấp các lệnh Tcl mới cho các chương trình giao tiếp Tcl với máy chủ Postgres95. - Giao diện đối tượng lớn đã được kiểm tra kỹ lưỡng.
Các đối tượng nghịch đảo lớn đã chỉ còn là cơ chế cho việc lưu trữ các đối tượng lớn. - Một sách chỉ dẫn ngắn gọn giới thiệu các tính năng SQL thông thường cũng như các tính năng của Postgres95 đã được phát hành cùng với mã nguồn. Tới năm 1996, rõ ràng cái tên “Postgres95” không phù hợp theo thời gian. PostgreSQL là tên mới được chọn, để phản ánh mối quan hệ giữa POSTGRES gốc ban đầu và các phiên bản gần đây với SQL.
Đồng thời, thiết lập việc đánh số phiên bản bắt đầu từ 6.0, đưa con số trở lại trình tự xuất phát ban đầu của dự án POSTGRES ở Berkeley. Nhiều người vẫn coi PostgreSQL như "Postgres" vì truyền thống hay bởi vì nó dễ phát âm. Việc sử dụng này được chấp nhận rộng rãi như một biệt danh hoặc bí danh. Điểm nhấn của Postgres95 trong quá trình phát triển là việc xác định và hiểu được các vấn đề đang tồn tại trong mã của máy chủ.
Với PostgreSQL, trọng tâm chuyển sang nâng cao tính năng, mặc dù vẫn tiếp tục làm việc trong tất cả các lĩnh vực. Kiến trúc, thành phần PostgreSQL Trong phần này sẽ trình bày về kiến trúc và thành phần của hệ quản trị cơ sở dữ liệu PostgreSQL. Kiến trúc của PostgreSQL được thể hiện trong hình sau: 4 Hình 1. Kiến trúc PostgreSQL Kiến trúc của PostgreSQL là một kiến trúc với rất nhiều thành phần liên kết với nhau, bao gồm các phần chính: Bộ nhớ chung (Shared Memory), các tiến trình nền (Utility Processes), các file dữ liệu (Physical Files).
Bộ nhớ chung Bộ nhớ chung (Shared Memory) là bộ nhớ dành riêng cho lưu trữ cơ sở dữ liệu và nhật ký giao dịch. Các thành phần quan trọng của bộ nhớ chung có thể kể đến là Shared Buffer,WAL Buffer, CLOG Buffer, Temp Buffer, Work Memory và Vacuum Buffer. - Shared Buffer: Thao tác đọc và ghi trong bộ nhớ luôn nhanh hơn bất kỳ thao tác nào khác. Do đó các cơ sở dữ liệu luôn cần bộ nhớ để truy cập nhanh dữ liệu, mỗi khi có truy cập READ và WRITE xuất hiện.
Trong PostgreSQL chính là Shared Buffer (được điều khiển bởi tham số shared_buffers). Dung lượng RAM được cấp phát cho Shared Buffer là cố định trong suốt thời gian chạy PostgreSQL. Shared Buffer có thể được truy cập bởi tất cả tiến trình server và người dùng kết nối đến cơ sở dữ liệu. Dữ liệu được ghi hay chỉnh sửa trong Shared Buffer được gọi là dirty data, và các đơn vị thao tác trong cơ sở dữ liệu block (hay page) thay đổi được gọi là 5 dirty block hay dirty page.
Dirty data sẽ được ghi vào file vật lý liên tục trên ở đĩa, các file này được gọi là file dữ liệu (data file). Mục đích của Shared Buffer là để giảm thiểu các tác vụ I/O lên đĩa (DISK IO). Để đạt được mục đích đó, nó phải đáp ứng được những yêu cầu sau: + Phải truy cập bộ nhớ đệm lớn (hàng chục, trăm gigabites) nhanh chóng. + Tối thiểu hoá xung đột khi nhiều người dùng truy cập cùng lúc.
+ Các blocks được sử dụng thường xuyên phải ở trong bộ đệm càng lâu càng tốt. - WAL Buffer: WAL Buffer còn gọi là transaction log buffers, là bộ nhớ đệm để lưu trữ dữ liệu WAL. Dữ liệu WAL là thông tin về những thay đổi đối với dữ liệu thực tế và dùng để tạo lại dữ liệu trong quá trình sao lưu và phục hồi cơ sở dữ liệu.