Tổng quan về PostgreSQL

Một phần của tài liệu Nghiên cứu xây dựng bản đồ trực tuyến trên nền mã nguồn mở (Trang 32)

PostgreSQL là 1 CSDL quan hệ có lịch sử phát triển lâu dài. Vào cuối những năm 1970, trƣờng Đại học California ở Berkeley bắt đầu phát triển CSDL quan hệ sơ khai PostgreSQL’s có tên là Ingres. Những tiến bộ trong công nghệ quan hệ đã đƣa Ingres trở thành 1 sản phẩm mang tính thƣơng mại. Công nghệ quan hệ này đã trở thành tập đoàn Ingres và sau này nó đƣợc tiếp quản bởi Computer Associates. Vào khoảng năm 1986, Michael Stonebraker ở UC Berkeley đã cùng với các cộng sự của mình bổ sung thêm những đặc trƣng hƣớng đối tƣợng vào trung tâm Ingres; một phiên bản mới đƣợc gọi là Postgres. Postgres một lần nữa lại đƣợc công ty Illustra thƣơng mại hóa. Vào giữa những năm 90, Andrew Yu và Jolly Chen đã thêm SQL để hỗ trợ cho Postgres. Các phiên bản trƣớc đây sử dụng ngôn ngữ truy vấn Postgres riêng biệt đƣợc gọi là Postquel. Vào năm 1996, ngƣời ta bổ sung thêm vài đặc trƣng mới, bao gồm

việc thực hiện mô hình MVCC (Multi-Version Concurrency Control), sự tham gia chuẩn SQL92, và nhiều cải tiến đƣợc thực hiện. Một lần nữa Postgres lại có 1 tên mới là PostgreSQL.

Ngày nay, PostgreSQL đƣợc phát triển bởi 1 tổ chức quốc tế đề xuất phần mềm mã nguồn mở PostgreSQL Global Development. PostgreSQL là mã nguồn mở không độc quyền. Gần đây Red Hat đã thƣơng mại hóa PostgreSQL, tạo ra CSDL, nhƣng bản thân PostgreSQL là mã nguồn mở miễn phí.

Hệ thống quản lý CSDL quan hệ truyền thống (DBMSs) cung cấp một mô hình với tập hợp tên quan hệ, các thuộc tính của kiểu đặc trƣng. Mô hình quan hệ thay thế thành công mô hình cũ một phần bởi vì tính “Spartan simplicity”. Tuy nhiên, tính dễ dàng của nó lại tạo ra những khó khăn khi thực hiện cho một ứng dụng cụ thể. PostgreSQL bổ sung một điểm mạnh bằng việc kết hợp bốn khái niệm cơ bản dƣới đây theo một phƣơng pháp giúp ngƣời sử dụng có thể mở rộng hệ thống một cách đơn giản:

Classes : Lớp

Inheritance : Sự thừa kế

Types : Kiểu

Functions : Hàm

Các đặc trƣng khác cung cấp tính linh hoạt nhƣ: - Ràng buộc

- Hoạt động - Quy tắc

- Sự thực thi tính toàn vẹn

Với những đặc điểm nổi bật đó, PostgresSQL đƣợc coi nhƣ là một cơ sở dữ liệu quan hệ đối tƣợng. Nó hoàn toàn khác biệt với quan hệ hƣớng đối tƣợng, thƣờng không thực sự phù hợp với ngôn ngữ cơ sở dữ liệu quan hệ truyền thống. Mặc dù PostgresSQL có một số đặc tính hƣớng đối tƣợng nhƣng nó thực sự là cơ sở dữ liệu quan hệ.

2.3.2. Các đặc trƣng của PostgreSQL

PostgreSQL cung cấp tất cả các đặc trƣng thƣờng dùng của 1 CSDL quan hệ cùng với nhiều đặc trƣng riêng biệt. PostgreSQL cung cấp tính kế thừa cho độc giả hƣớng đối tƣợng. Có thể thêm vào PostgreSQL các kiểu dữ liệu của riêng bạn. PostgreSQL hỗ trợ cho kiểu dữ liệu hình học nhƣ point, line segment, box, polygon, và circle. PostgreSQL sử dụng cấu trúc chỉ mục, cấu trúc đó tạo nhanh các kiểu dữ liệu hình học. PostgreSQL có thể mở rộng, xây dựng các chức năng mới, các phép toán mới và kiểu dữ liệu mới trong ngôn ngữ mà bạn chọn lựa. PostgreSQL đƣợc xây dựng theo kiến trúc client/server. Ta có thể xây dựng các ứng dụng khách trong 1 số ngôn ngữ khác, bao gồm C, C++, Java, Python, Perl, TCL/Tk,.... Về phía máy chủ, PostgreSQL hỗ trợ nhiều ngôn ngữ thủ tục mạnh mẽ nhƣ PL/pgSQL, Perl, TCL/Tk, và thậm chí cả tiện ích bash. Dƣới đây là 1 vài đặc trƣng đƣợc tìm thấy trong phân bố PostgreSQL chuẩn.

- Kết nối đối tƣợng trong PostgreSQL, mỗi bảng xác định 1 lớp. PostgreSQL thừa kế các công cụ giữa các bảng (hoặc giữa các lớp). Các chức năng và các toán tử rất đa dạng.

- Các chuẩn PostgreSQL đều thực hiện theo cú pháp của chuẩn SQL92 và các đặc trƣng của SQL99.

- Xử lý giao tác PostgreSQL bảo vệ dữ liệu và kết hợp nhiều ngƣời sử dụng cùng 1 thời gian trong toàn bộ quá trình. Mô hình giao dịch đƣợc PostgreSQL sử dụng dựa trên nhiều phiên bản kiểm soát trùng hợp MVCC (multi-version concurrency control).

- Nhiều ngôn ngữ thủ tục Triggers và các thủ tục khác có thể đƣợc viết trong bất cứ ngôn ngữ thủ tục riêng nào. Mã Server-side phổ biến nhất đƣợc viết trong PL/pgSQL giống với Oracle’s PL/SQL. PostgreSQL cũng có thể phát triển mã server-side trong Tcl, Perl, thậm trí trong mã nguồn mở Linux/Unix.

- Nhiều máy khách hỗ trợ API PostgreSQL phát triển các ứng dụng khách trong nhiều ngôn ngữ.

- Duy nhất PostgreSQL cung cấp sự đa dạng về các kiểu dữ liệu. Ngoài kiểu dữ liệu số, chuỗi và các kiểu dữ liệu khác, ngƣời dùng cũng sẽ tìm thấy các kiểu dữ liệu hình học, kiểu Boolean, và các kiểu đƣợc thiết kế riêng cho các địa chỉ mạng.

- Một trong những đặc trƣng quan trọng nhất của PostgreSQL là nó có thể đƣợc mở rộng. Nếu không tìm thấy một vấn đề nào đó mà bạn cần, bạn có thể thêm vào nó tuỳ ý. Ví dụ, có thể thêm các kiểu dữ liệu, các chức năng và các toán tử mới, thậm chí cả thủ tục và ngôn ngữ máy khách mới. Ngoài ra, PostgreSQL còn có các đặc trƣng quy tắc vàng nhƣ:

- Tính phức tạp – Complex

- Định danh đối tƣợng – Object identity - Kiểu và lớp – Type and classes

- Lớp hoặc kế thừa kiểu - Class or Type Hierarchies - Chồng hàm và chồng toán tử.

- Tính đầy đủ của tính toán - Computational completeness - Khả năng mở rộng – Extensibility

2.3.3. Kiến trúc về hệ quản trị CSDL PostgreSQL

Cũng nhƣ các ứng dụng client/server khác, các ứng dụng client và server có thể nằm trên các máy khác nhau và đƣợc trao đổi thông qua mạng giao thức TCP/IP. PostgreSQL quản lý đồng thời nhiều kết nối, có thể tạo mới, hủy kết nối,.... Kiến trúc tổng thể của hệ thống đƣợc thể hiện trong hình 2.5.

Hệ quản trị CSDL nhận các yêu cầu đầu vào dƣới dạng các câu lệnh SQL từ ngƣời dùng thông qua các giao diện ngƣời dùng, phân tích, thực hiện trên CSDL và trả về kết quả.

- Quản lý truy nhập: Lớp này gồm nhiều mô đun hỗ trợ cho tệp (ở trong CSDL nó là một tập hợp các trang nhớ hoặc tập hợp các bản ghi).

- Quản lý vùng đệm: Chuyển các trang nhớ đƣợc yêu cầu từ đĩa cứng lên bộ nhớ chính, phục vụ cho lớp quản lý truy nhập.

- Lớp quản lý lưu trữ vật lý: lớp thấp nhất, quản lý không gian đĩa cứng lƣu trữ dữ liệu. Cung cấp cho các lớp trên các dịch vụ: cấp phát, thu hồi, ghi, đọc các trang nhớ.

Hệ quản trị CSDL hỗ trợ điều khiển tƣơng tranh và phục hồi sự cố bằng cách lập kế hoạch các yêu cầu của ngƣời dùng, lƣu lại tất cả các thay đổi của CSDL. Các mô đun liên quan đến điều khiển tƣơng tranh và phục hồi sự cố:

- Quản lý giao tác: đảm bảo cho các giao tác yêu cầu khóa và mở khóa theo một giao thức thích hợp và lên kế hoạch thực hiện các giao tác.

- Quản lý khóa: giữ vết của các yêu cầu khóa và cấp khóa trên các đối tƣợng CSDL

- Quản lý phục hồi sự cố: duy trì nhật ký thay đổi CSDL, phục hồi hệ thống sau khi có sự cố.

Các lớp quản lý truy nhập và quản lý bộ đệm đều phải tƣơng tác với các mô đun này.

Hình 2.6. Kiến trúc của hệ quản trị CSDL PostgreSQL

Thƣ̣c hiê ̣n truy vấn Quản lý truy nhập Quản lý vùng đệm Quản lý lƣu trữ vật lý Quản lý phục hồi sự cố Quản lý giao tác Quản lý khóa Hệ quản trị CSDL Điều khiển tƣơng tranh

CSDL

Ứng dụng Giao diện SQL

Câu lệnh SQL

2.3.4. Truy vấn dữ liệu tham chiếu không gian từ PostgresSQL

Khi ngƣời dùng gửi truy vấn, nó đƣợc phân tích và chuyển tới bộ tối ƣu (optimizer), và tạo ra một cây truy vấn (thƣờng là cây của các toán tử quan hệ). Mô đun thực hiện các toán tử quan hệ nằm ở phía trên của lớp Quản lý truy nhập.

Mô đun thƣ̣c hiê ̣n truy vấn (Query Evaluation Engine)

Hình 2.7. Kiến trúc của mô đun thƣ̣c hiê ̣n truy vấn

Parser: Nhận các truy vấn ở dạng chuỗi ký tự từ các client, kiểm tra cú

pháp, nếu đúng cú pháp, truy vấn này sẽ đƣợc chuyển thành một cây truy vấn để có thể sử dụng đƣợc ở các mức thấp hơn.

Rewriter: chỉ sử dụng với trƣờng hợp truy vấn trên view. Khi tạo ra một

view thì rewriter sẽ áp dụng lại các khóa trên các trƣờng của bảng gốc đƣợc tạo ra trong view.

Optimizer: Lấy cấu trúc của truy vấn dựa trên cây cú pháp, sau đó bộ phận

con Path Generator sinh ra tất cả các phƣơng án thực hiện truy vấn, bộ phận

Planner sẽ tính toán trên các phƣơng án này, lựa chọn phƣơng án sử dụng ít tài nguyên nhất (thƣờng là các chu kỳ của CPU) để thực hiện.

Evualator: Lấy phƣơng án đã đƣợc lựa chọn, truy nhập tới các mô đun hỗ

trợ, thực hiện truy vấn, lấy kết quả trả về từ CSDL.

Command: Nếu truy vấn quá đơn giản (thƣờng là các câu lệnh cơ sở), hệ

thống sẽ sử dụng Command mà không cần phải gọi đến Optimizer. Parser

Command Rewriter

Evualator

Planner Path Generator

Hình 2.8. Mô đun phân tích truy vấn - Parse

Basic Parse: chia làm hai phần, phân tích từ vựng đƣợc thực hiện bởi Scan

và sau đó chuyển sang cho Gram thực hiện phân tích ngữ pháp và sinh ra cây cú pháp.

Analyzer: chuyển đổi cây cú pháp thành cây truy vấn.

2.4. Quy trình thành lập bản đồ sử dụng MapServer và PostgreSQL

- Xây dựng cơ sở dữ liệu không gian dạng shape file hoặc đƣa vào cơ sở dữ liệu PostgreSQL.

- Biên tập, hiệu chỉnh đồ họa cho bản đồ bằng cách biên tập File map. File map (mapfile - .map) là một đối tƣợng mà MapServer sử dụng để định nghĩa một ứng dụng vẽ bản đồ ở cả hai chế độ CGI lẫn API. Nó không những xác định bề ngoài của bản đồ, mà còn xác định cách thức hoạt động nhƣ thế nào của MapServer khi có lời gọi đến nó từ máy chủ Web. Để hoạt động đúng, MapServer phải hiểu đƣợc cách làm thế nào để điều khiển hàng loạt các từ khóa của mapfile, các biến form CGI, và các xâu thay thế.

- Thiết kế trang web hiển thị ảnh bản đồ và các công cụ để ngƣời dùng tƣơng tác với bản đồ. - Phát hành bản đồ lên mạng. Basic Parse Analyzer Scan Gram(parse) Cây truy vấn Truy vấn Parse_node Parse_expr Parser Supports Parse_clause Parse_agg Analyzer Supports Parse_func …

2.4.1. Xây dựng CSDL trên PostgreSQL cho bài toán dự báo

Cơ sở dữ liệu đƣợc thiết kế theo kiến trúc đối ngẫu: phần không gian đƣợc cài đặt trong các lớp dữ liệu ở định dạng Shapefile, phần thuộc tính đƣợc cài đặt trong cơ sở dữ liệu PostgreSQL. Các thực thể trong hai phần quan hệ với nhau thông qua mã nhận dạng (ID).

2.4.1.1. Xây dựng CSDL không gian

Cơ sở dữ liệu không gian sẽ đƣợc dùng để quản lý và truy xuất dữ liệu không gian đƣợc đặt trên data server. Cơ sở dữ liệu không gian bao gồm các file dữ liệu không gian dạng vectơ và rastơ. Từ chính hai mô hình đó lại có các cấu trúc khác nhau. Điều đó có nghĩa là sau khi nhập ta đƣợc các dữ liệu thô (các cặp tọa độ, các pixel). Các dữ liệu thô đó cần đƣợc cấu trúc lại để tạo thành các file dữ liệu trong cơ sở dữ liệu không gian trƣớc khi dùng.

Việc thu thập và tạo ra toàn bộ dữ liệu không gian của bản đồ Việt Nam đòi hỏi rất nhiều thời gian và công sức để đi đo đạc từng vị trí, từng khu vực, địa giới, v.v…. Vì vậy ở đây học viên lấy bộ dữ liệu không gian bản đồ Việt Nam sẵn có và sử dụng làm dữ liệu cho sản phẩm thử nghiệm.

Bộ dữ liệu này bao gồm các lớp sau: - Tỉnh, thành phố

- Vùng

2.4.1.2. Xây dựng CSDL thuộc tính

Việc thu thập dữ liệu thời tiết đòi hỏi rất nhiều thời gian và công sức để đi đo độ ẩm, nhiệt độ, sức gió, lƣợng mƣa, v.v… Vì vậy ở đây học viên lấy dữ liệu thời tiết giả định sử dụng cho sản phẩm thử nghiệm.

Dữ liệu dự báo đƣợc lƣu vào cơ sở dữ liệu quan hệ để tiện quản lý và truy vấn, là đầu ra của một mô hình dự báo thời tiết, đƣợc phân loại và đƣa vào cơ sở dữ liệu. Cơ sở dữ liệu ở đây là PostgreSQL.

2.4.1.3. Kết nối dữ liệu không gian và dữ liệu thuộc tính

Mô hình liên kết:

Hình 2.9. Sơ đồ kết nối dữ liệu

Mối liên kết biểu tƣợng và ý nghĩa đƣợc thực hiện bằng cách gán cho yếu tố bất kì ít nhất một nghĩa xác định, tên hay chỉ số gọi tắt là ID (xác định duy nhất). Dữ liệu phi không gian của yếu tố thƣờng lƣu trữ trong một hay nhiều file riêng biệt theo số ID này.

Bên cạnh đó cũng có hệ thống thông tin địa lý chọn cách lƣu trữ cả dữ liệu địa lý và dữ liệu thuộc tính vào trong cùng một file có cấu trúc.

ID# Tên tỉnh Diện tích (km2

) Dân số (ngƣời) Ghi chú

2 Lai Châu 9.059,40 308.000

….. ………. …….. …… ……..

14 Lào Cai 6.357,00 565.700

….. ……….. ……… …… ………

Hình 2.10. Kết nối dữ liệu không gian và dữ liệu thuộc tính 2.4.2. Tổ chức dữ liệu bản đồ trong MapFile

File map (mapfile - .map) là một đối tƣợng mà MapServer sử dụng để định nghĩa một ứng dụng vẽ bản đồ ở môi trƣờng CGI. Nó không những xác định bề ngoài của bản đồ, mà còn xác định cách thức MapServer hoạt động nhƣ thế nào khi có lời gọi đến nó từ máy chủ Web. Để hoạt động đúng, MapServer phải hiểu đƣợc cách làm thế nào để điều khiển hàng tá từ khóa của mapfile, các biến form CGI, và các xâu thay thế.

Mapfile đƣợc xem nhƣ file cấu hình cho ứng dụng dùng MapServer. Trong Mapfile có nhiều đối tƣợng nhƣ MAP, PROJECTION, LAYER, CLASS,... mỗi đối tƣợng định nghĩa cách thức tạo nên ảnh bản đồ hoặc đối tƣợng để MapServer truy xuất dữ liệu cho các câu truy vấn.

Để thực hiện việc biên tập bản đồ với công nghệ MapServer, cần phải tạo ra và hiệu chỉnh file mapfile, là file cấu hình vẽ bản đồ cho MapServer. File này định nghĩa cách vẽ các lớp đối tƣợng từ cơ sở dữ liệu lên bản đồ, định nghĩa các ký hiệu đƣợc sử dụng để vẽ các đối tƣợng, định nghĩa thanh thƣớc tỉ lệ và bản đồ tham chiếu nhằm giúp ngƣời đọc dễ dàng xác định phạm vi bản đồ mình đang xem ứng với vùng nào trong bối cảnh bao quát toàn bộ bản đồ.

Mapfile đƣợc xem nhƣ là trái tim của MapServer. Nó định nghĩa các mối quan hệ giữa các đối tƣợng, mục tiêu của mapserver là chỉ định nơi dữ liệu đƣợc lƣu trữ, đồng thời xác định mọi thành phần đƣợc vẽ nhƣ thế nào trên bản đồ.

Hình 2.11. Mô hình đối tƣợng trong Mapfile

Trong hình vẽ minh hoạ 2.11, các thành phần của Mapfile bao gồm đối tƣợng MAP, các lớp dữ liệu LAYER, các nhãn LABEL và các thuộc tính Feature.

Đối tƣợng MAP:

Đối tƣợng chủ của mapfile. Nó định nghĩa những tham số của ứng dụng bản đồ.

 EXTENT[minx][miny][maxx][maxy]

Kích thƣớc không gian của bản đồ đƣợc tạo. Trong hầu hết các trƣờng hợp ta cần xác định giá trị này, mặc dù mapserver đôi lúc cũng có thể tính giá trị này nếu chƣa đƣợc xác định.

 FONTSET[filename]: Filename đƣờng dẫn đến file fontset đƣợc sử dụng. Có thể là đƣờng dẫn tƣơng đối đến mapfile, hay đƣờng dẫn tuyệt đối.

 IMAGECOLOR[r][g][b]: Màu khởi tạo bản đồ (màu nền).

 IMAGETYPE[gif|png|jpeg|wbmp|gtiff|swf|userddefined]: Định dạng hình ảnh xuất ra.

 SHAPEPATH[filename]: Chỉ đến đƣờng dẫn chứa những shapefile.

 STATUS [on|off]: Xác định bản đồ có đƣợc vẽ hay không. Đôi lúc bản đồ không đƣợc vẽ để chỉ hiện bản đồ tham khảo hay thanh tỉ lệ.

Đối tƣợng LAYER:

Đây là đối tƣợng đƣợc sử dụng nhiều nhất trong mapfile. Nó mô tả những lớp (layer) đƣợc sử dụng để sinh ra bản đồ. Các lớp đƣợc vẽ theo thứ tự xuất

Một phần của tài liệu Nghiên cứu xây dựng bản đồ trực tuyến trên nền mã nguồn mở (Trang 32)

Tải bản đầy đủ (PDF)

(70 trang)