1. Trang chủ
  2. » Giáo Dục - Đào Tạo

HỆ QUẢN TRỊ cơ sở dữ LIỆU (CO3021) assignment indexing and query processing in mySQLand MongoDB

19 14 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Indexing and query processing in MySQL and MongoDB
Tác giả Phùng Minh Khánh, Trần Tiến Lộc, Nguyễn Minh Bảo
Người hướng dẫn Lê Thị Bảo Thu
Trường học Đại học Quốc gia Thành phố Hồ Chí Minh - Trường Đại học Bách Khoa
Chuyên ngành Hệ quản trị cơ sở dữ liệu
Thể loại Assignment
Năm xuất bản 2022
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 19
Dung lượng 766,74 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hồ Chí Minh, 2022Tổng quan Cơ sở dữ liệu quan hệ đã là nền tảng của các ứng dụng doanh nghiệp trong nhiều thập kỷ, và kể từ khi phát hành của MySQL vào năm 1995, nó đã trở thành một lựa

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC – KỸ THUẬT MÁY TÍNH

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU (CO3021)

Assignment

Indexing and Query Processing in mySQLand MongoDB

Giáo viên hướng dẫn: Lê Thị Bảo Thu

Sinh viên: Phùng Minh Khánh – 1913756

Trần Tiến Lộc – 1914038

Trang 2

Tp Hồ Chí Minh, 2022

Tổng quan Cơ sở dữ liệu quan hệ đã là nền tảng của các ứng dụng doanh nghiệp trong nhiều thập kỷ, và kể từ khi phát hành của MySQL vào năm 1995, nó đã trở thành một lựa chọn phổ biến và không tốn kém, đặc biệt là một phần của nền tảng LAMP phổ biến để củng cố các ứng dụng web ban đầu Ngày nay, các doanh nghiệp hiện đại đang nghĩ đến những cách tốt hơn để lưu trữ và quản lý dữ liệu - cho dù đó là để có được cái nhìn sâu sắc hơn về khách hàng, thích nghi với những thay đổi của người dùng hoặc đánh bại các đối thủ cạnh tranh với các ứng dụng và mô hình kinh doanh mới Kết quả là nhiều giả định đã thúc đẩy sự phát triển của các cơ sở dữ liệu quan hệ trước đó đã thay đổi:

 Yêu cầu năng suất của developers cao hơn và thời gian nhanh hơn để tiếp thị, với các mô hình dữ liệu truyền thống cứng nhắc truyền thống và sự phát triển của các ứng dụng nguyên khối tạo ra các phương pháp nhanh, microservices

và DevOps, nén chu kỳ phát hành từ tháng, năm sang ngày và tuần

 Sự cần thiết phải quản lý các loại dữ liệu mới, nhanh chóng thay đổi dữ liệu -cấu trúc, bán -cấu trúc, và dữ liệu đa hình được tạo ra bởi các lớp học mới của ứng dụng web, di động, xã hội và IoT

 Sự chuyển đổi bán buôn sang các hệ thống phân tán và điện toán đám mây, cho phép các developers khai thác cơ sở hạ tầng tính toán và lưu trữ theo yêu cầu, có khả năng mở rộng cao với khả năng phục vụ khán giả bất cứ nơi nào

họ làm việc và chơi khắp thế giới trong khi đáp ứng được toàn bộ yêu cầu về quy định cho chủ quyền dữ liệu

Kết quả là các cơ sở dữ liệu không liên quan hoặc "NoSQL", như MongoDB,

đã xuất hiện để đáp ứng các yêu cầu của các ứng dụng mới và hiện đại hóa khối lượng công việc hiện tại Hỗ trợ cho các giao dịch ACID nhiều tài liệu, được lên kế hoạch cho MongoDB 4.0 vào mùa hè năm 2018, sẽ làm cho các developers dễ dàng hơn trong việc giải quyết các trường hợp sử dụng hiện tại hoặc trong tương lai sẽ gặp khó khăn với MySQL Bài viết này cung cấp tổng quan về MySQL và MongoDB, và các trường hợp sử dụng thích hợp cho mỗi trường hợp

Trang 3

1 Mongo database (MongoDB):

MongoDB là một database hướng tài liệu (document), một dạng NoSQL database Vì thế, MongoDB sẽ tránh cấu trúc table-based của relational database để thích ứng với các tài liệu như JSON có một schema rất linh hoạt gọi là BSON MongoDB sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một collection

sẽ các các kích cỡ và các document khác nhau Các dữ liệu được lưu trữ trong document kiểu JSON nên truy vấn sẽ rất nhanh

MongoDB lần đầu ra đời bởi MongoDB Inc., tại thời điểm đó là thế hệ 10, vào tháng Mười năm 2007, nó là một phần của sản phẩm PaaS (Platform as a Service) tương tự như Windows Azure và Google App Engine Sau đó nó đã được chuyển thành nguồn mở từ năm 2009

MongoDB đã trở thành một trong những NoSQL database nổi trội nhất bấy giờ, được dùng làm backend cho rất nhiều website như eBay, SourceForge và The New

York Times Các tính năng của MongoDB gồm có: truy vấn ad hoc, indexing, nhân

bản (Replication) tổng hợp (Aggregation) lưu trữ file, cân bằng tải , ,

MongoDB mang đến cho người dùng khá nhiều lợi ích:

- Linh hoạt trong lưu trữ các kích cỡ dữ liệu khác nhau Nhờ chúng được lưu dưới dạng JSON nên thoải mái chèn bất kỳ thông tin nào tùy theo nhu cầu sử dụng

- Tiết kiệm thời gian trong việc kiểm tra sự tương thích về cấu trúc khi thêm, xóa hoặc cập nhật dữ liệu Nhờ MongoDB không có sự ràng buộc trong một khuôn khổ, quy tắc nhất định nào

- Bạn dễ dàng mở rộng hệ thống thông qua việc thêm node vào cluster Cụm các node này đóng vai trò như thư viện chứa các dữ liệu giao tiếp với nhau

- Tốc độ truy vấn của MongoDB nhanh hơn so với RDBMS do toàn bộ dữ liệu truy vấn đã được ghi đệm lên bộ nhớ RAM Nhờ thế, những lượt truy vấn sau sẽ được rút ngắn thời gian vì chúng không cần đọc từ ổ cứng

Trang 4

Bên cạnh những lợi ích đó, MongoDB cũng có những điểm bất lợi như là:

- Không ứng dụng được cho các mô hình giao dịch nào có yêu cầu độ chính xác cao do không có ràng buộc

- Chương trình MongoDB tiêu tốn khá nhiều dung lượng bộ nhớ do dữ liệu được lưu dưới dạng key - value Trong đó, một số collection chỉ có sự khác biệt về value nên việc lặp lại key là điều khó tránh khỏi Điều này dẫn đến thừa dữ liệu

- Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng

- Dữ liệu lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một

bộ nhớ RAM lớn

- Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao

2 MySQL:

MySQL là một hệ thống quản trị cơ sở dữ liệu mã nguồn mở hướng đối tượng (gọi tắt là RDBMS) hoạt động theo mô hình client-server Với RDBMS là viết tắt của Relational Database Management System MySQL được tích hợp apache, PHP MySQL quản lý dữ liệu thông qua các cơ sở dữ liệu Mỗi cơ sở dữ liệu có thể có nhiều bảng quan hệ chứa dữ liệu MySQL cũng có cùng một cách truy xuất và mã lệnh tương

tự với ngôn ngữ SQL

Mặc dù được phát hành từ những thập niên 90 nhưng MySQL vẫn luôn là sự lựa chọn được ưu ái trong mắt các quản trị viên Quá trình hình thành và phát triển của MySQL được tóm tắt như sau:

- Công ty Thụy Điển MySQL AB phát triển MySQL vào năm 1994

- Phiên bản đầu tiên của MySQL phát hành năm 1995

- Công ty Sun Microsystems mua lại MySQL AB trong năm 2008

- Năm 2010 tập đoàn Oracle thâu tóm Sun Microsystems Ngay lúc đó, đội ngũ phát triển của MySQL tách MySQL ra thành 1 nhánh riêng gọi là MariaDB Oracle tiếp tục phát triển MySQL lên phiên bản 5.5

- Năm 2013 MySQL phát hành phiên bản 5.6

Trang 5

- Năm 2015 MySQL phát hành phiên bản 5.7.

- MySQL đang được phát triển lên phiên bản 8.0 và cho đến hiện nay có 2 phiên bản: miễn phí (MySQL Community Server) và có phí (Enterprise Server)

Cũng như các hệ thống quản trị cơ sở dữ liệu khác, MySQL mang lại cho người dùng những ưu điểm riêng biệt như sau:

- Dễ sử dụng: ổn định, dễ sử dụng và hoạt động trên hơn 20 nền tảng như

Linux, Windows, OS/X, HP-US, AIX, Netware cùng nhiều hệ điều hành khác cung cấp một hệ thống lớn các hàm tiện ích rất mạnh

- Độ bảo mật cao: rất thích hợp cho các ứng dụng có truy cập cơ sở dữ liệu

trên Internet khi sở hữu nhiều nhiều tính năng bảo mật thậm chí là ở cấp cao

- Đa tính năng: hỗ trợ rất nhiều chức năng SQL được mong chờ từ một hệ

quản trị cơ sở dữ liệu quan hệ cả trực tiếp lẫn gián tiếp

- Khả năng mở rộng và mạnh mẽ: MySQL có thể xử lý rất nhiều dữ liệu và

hơn thế nữa nó có thể được mở rộng nếu cần thiết

- Nhanh chóng: Việc đưa ra một số tiêu chuẩn cho phép MySQL để làm việc

rất hiệu quả và tiết kiệm chi phí, do đó nó làm tăng tốc độ thực thi, xử lí query

Ngoài những lợi thế trên, MySQL cũng mang lại cho người dùng một số điểm bất lợi khi sử dụng chúng:

- Giới hạn: Theo thiết kế, MySQL không có ý định làm tất cả và nó đi kèm

với các hạn chế về chức năng mà một vào ứng dụng có thể cần

- Độ tin cậy: Cách các chức năng cụ thể được xử lý với MySQL (ví dụ tài liệu

tham khảo, các giao dịch, kiểm toán,…) làm cho nó giảm đi phần nào độ tin cậy hơn so với một số hệ quản trị cơ sở dữ liệu quan hệ khác

- Dung lượng hạn chế: Nếu số bản ghi của bạn lớn dần lên thì việc truy xuất

dữ liệu của bạn là khá khó khăn, khi đó chúng ta sẽ phải áp dụng nhiều biện pháp để tăng tốc độ truy xuất dữ liệu như là chia tải database này ra nhiều server, hoặc tạo cache MySQL

Trang 6

II Indexing

1 Tổng quan

Chỉ mục (Index) là bảng tra cứu đặc biệt mà công cụ tìm kiếm cơ sở dữ liệu có thể sử dụng để tăng nhanh thời gian và hiệu suất truy xuất dữ liệu Hiểu đơn giản, một chỉ mục là một con trỏ chỉ tới từng giá trị xuất hiện trong bảng/cột được đánh chỉ mục Chỉ mục trong Database có ý nghĩa tương tự như các mục trong xuất hiện trong Mục lục của một cuốn sách

Một chỉ mục giúp tăng tốc các truy vấn SELECT và các mệnh đề WHERE

Chúng chỉ được sử dụng để tăng tốc độ truy vấn và sẽ được sử dụng bởi cơ sở dữ liệu tìm kiếm để xác định vị trí bản ghi rất nhanh

Các lệnh INSERT và UPDATE tốn nhiều thời gian hơn trên các bảng có index trong khi các lệnh SELECT trở nên nhanh hơn trên các bảng này Lý do là vì, trong khi chèn và cập nhật, database cũng phải cần chèn hoặc cập nhật các giá trị index Các chỉ mục có thể được tạo ra hoặc bỏ đi mà không ảnh hưởng đến dữ liệu

Ta có thể tạo một index cho một tập hợp nhiều cột trong table Giá trị của một index key là phép concat các giá trị từ các record của các cột đó Chẳng hạn nếu ta tạo index cho chỉ một cột col_1 thì index key sẽ chỉ có giá trị tương ứng với giá trị record của cột đó Còn nếu tạo index với 3 cột gộp col_1, col_2, col_3 thì giá trị của index key sẽ là phép cộng concat của giá trị record 3 cột đó lại với nhau

Nó cần có không gian lưu trữ riêng trên thiết bị lưu trữ (đĩa cứng) và có một phần bản sao của dữ liệu của bảng được lập chỉ mục Điều này có nghĩa rằng việc tạo ra một chỉ mục là có sự dư thừa về dữ liệu

2 Cấu trúc chỉ mục trong MongoDB

2.1 Tổng quan về cấu trúc chỉ mục trong MongoDB

Các loại chỉ mục trong MongoDB: Single Field Index, Compound Index, Multikey Index, Geospatial Index

Trang 7

Trong lập chỉ mục MongoDB, tất cả các tập hợp có chỉ mục mặc định trên trường _id Nếu chúng ta không chỉ định bất kỳ giá trị nào cho _id thì MongoDB sẽ tạo trường _id với một giá trị đối tượng Chỉ mục này ngăn không cho khách hàng tạo hai tài liệu có cùng giá trị trường _id

Về cơ bản, các chỉ mục trong MongoDB tương tự như các chỉ mục trong các hệ thống cơ sở dữ liệu khác MongoDB xác định các chỉ mục ở cấp bộ sưu tập và hỗ trợ các chỉ mục trên bất kỳ trường hoặc trường con nào của tài liệu trong bộ sưu tập MongoDB

2.2 Một số câu lệnh DDL phổ biến cho các loại chỉ mục trong MongoDB.

2.2.1 Single Field Indexes:

Tài liệu này mô tả các chỉ mục tăng dần / giảm dần trên một trường Thao tác sau tạo chỉ mục tăng dần trên trường soccre của bộ sưu tập bản ghi:

Ta có cấu trúc câu lệnh:

db.collection createIndex ( { <field1>: <type>} )

Ví dụ trong trường hợp trên:

db.records createIndex ( { score: 1 } )

db.records find ( { score: { $gt: 10 } } )

2.2.2 Single Field Indexes:

Trang 8

MongoDB hỗ trợ các chỉ mục phức hợp, trong đó một cấu trúc chỉ mục duy nhất chứa các tham chiếu đến nhiều trường trong collection document

Ta có cấu trúc câu lệnh:

db.collection createIndex ( { <field1>:<type>,<field2>:<type2>, } )

Ví dụ trong trường hợp trên:

db.products createIndex ( { "item": 1 , "stock": 1 } )

2.2.3 Multikey Indexes:

Để lập chỉ mục một trường chứa giá trị mảng, MongoDB tạo một khóa chỉ mục cho mỗi phần tử trong mảng Các chỉ mục multikey này hỗ trợ các truy vấn hiệu quả đối với các trường mảng Chỉ mục nhiều khóa có thể được xây dựng trên các mảng chứa cả giá trị vô hướng (ví dụ: chuỗi, số) và tài liệu lồng nhau

Ta có cấu trúc câu lệnh:

db.coll createIndex ( { <field>: < 1 or - 1 > } )

Trang 9

2.2.4 Geospatial Index:

Để truy vấn dữ liệu không gian địa lý, MongoDB hỗ trợ hai loại chỉ mục - chỉ mục 2d và chỉ mục hình cầu 2d Chỉ mục 2d sử dụng hình học phẳng khi trả về kết quả

và chỉ mục 2dsphere sử dụng hình học cầu để trả về kết quả

Ta có cấu trúc câu lệnh:

db.collection createIndex ( { <location field> : "2d" } )

2.2.5 Xóa index trong Mongo:

Lệnh dropIndexesloại bỏ một hoặc nhiều chỉ mục (ngoại trừ chỉ mục trên trường _id) khỏi collection được chỉ định

Ta có cấu trúc câu lệnh:

{dropIndexes : <string>, index : <string|document|arrayofstrings>, writeConcern: <document>, comment: <any>}

3 Cấu trúc chỉ mục trong MySQL

3.1 Tổng quan về cấu trúc chỉ mục trong MySQL

Các loại index trong MySQL: Clustered - PRIMARY, UNIQUE (NOT NULL) Nếu trong table không có cả 2 loại trên thì MySQL sẽ tự tạo một clustered index ẩn tên

là GEN_CLUST_INDEX trên một field ẩn tự động chứa id của các hàng (auto-increment, 6-byte) Loại thứ 2: Secondary bao gồm các loại index còn lại: INDEX

MySQL cung cấp 3 kiểu index khác nhau cho data đó là B-Tree, Hash và R-Tree index Hiểu rõ về các kiểu index này sẽ giúp chúng ta tạo ra các loại index trong bảng một cách hiệu quả hơn Do R-Tree được sử dụng cho các loại dữ liệu không gian spacial data và thường ít khi gặp phải nên bài viết này chúng ta sẽ tập chung so sánh 2 loại index là B-Tree và Hash

B-Tree index có các đặc điểm sau: Dữ liệu index trong B-Tree được tổ chức và lưu trữ theo dạng cây(tree), tức là có root, branch, leaf Giá trị của các node được tổ chức tăng dần từ trái qua phải Khi truy vấn dữ liệu thì việc tìm kiếm trong B-Tree là 1 quá trình đệ quy, bắt đầu từ root node và tìm kiếm tới branch và leaf, đến khi tìm được tất cả dữ liệu - thỏa mãn với điều kiện truy vấn thì mới dùng lại B-Tree index được sử

Trang 10

dụng cho những column trong bảng khi muốn tìm kiếm 1 giá trị nằm trong khoảng nào đó

Hash index có các đặc điểm sau: Hash index có một vài đặc điểm khác biệt so với Btree index Dữ liệu index được tổ chức theo dạng Key - Value được liên kết với nhau Khác với B-Tree, thì Hash index chỉ nên sử dụng trong các biểu thức toán tử là =

và <> Không sử dụng cho toán từ tìm kiếm 1 khoảng giá trị như > hay < Không thể tối ưu hóa toán tử ORDER BY bằng việc sử dụng Hash index bởi vì nó không thể tìm kiếm được phần từ tiếp theo trong Order Toàn bộ nội dung của Key được sử dụng để tìm kiếm giá trị records, khác với B-Tree một phần của node cũng có thể được sử dụng

để tìm kiếm Hash có tốc độ nhanh hơn kiểu Btree

MySQL thực hiện tải hàng loạt thay vì chèn từng bản ghi chỉ mục khi tạo hoặc xây dựng lại chỉ mục Phương pháp tạo chỉ mục này còn được gọi là Sorted index build

3.2 Các câu lệnh DDL liên quan đến index trong MySQL

Ta có thể tạo index theo 2 cách: Chỉ định index ngay khi tạo table hoặc tạo index cho 1 hay nhiều cột sau khi đã tạo table Ví dụ tạo bảng đồng thời gán index:

CREATE TABLE newtable(

c1 INT PRIMARY KEY ,

c2 INT NOT NULL ,

c3 INT NOT NULL ,

INDEX (c2,c3)

);

Thêm index cho bảng, với index mang tính duy nhất và không thể null:

ALTER TABLE tbl_name ADD PRIMARY KEY (olumn , column 1 2 , )

Thêm index cho bảng, với index mang tính duy nhất nhưng có thể null

ALTER TABLE tbl_name ADD UNIQUE index_name (column , column 1 2 , )

Thêm index cho bảng, có thể trùng lặp

ALTER TABLE tbl_name ADD INDEX index_name (column , column 1 2 , )

Thêm index đặc biệt thường cho tìm kiếm văn bản

ALTER TABLE tbl_name ADD FULLTEXT index_name (column , column 1 2 , )

Các lệnh xóa index

DROP INDEX index_name;

4 Query Processing

4.1 Giới thiệu xử lý truy vấn trong DBMS:

Trang 11

Xử lý truy vấn trong DBMS - Mục tiêu chính của việc tạo cơ sở dữ liệu là lưu trữ dữ liệu liên quan tại một nơi, truy cập và thao tác chúng khi người dùng yêu cầu Việc truy cập và thao tác dữ liệu cần được thực hiện một cách hiệu quả tức là; nó phải được truy cập dễ dàng và nhanh chóng

Nhưng cơ sở dữ liệu là một hệ thống và người dùng là một hệ thống hoặc ứng dụng khác hoặc một người Người dùng có thể yêu cầu dữ liệu bằng ngôn ngữ mà họ hiểu Nhưng DBMS có ngôn ngữ riêng (SQL) mà nó hiểu được Do đó, người dùng được yêu cầu truy vấn cơ sở dữ liệu bằng ngôn ngữ của nó - SQL SQL này là một ngôn ngữ cấp cao được tạo ra để xây dựng một cầu nối giữa người dùng và DBMS cho giao tiếp của họ Nhưng các hệ thống cơ bản trong DBMS sẽ không hiểu SQL Phải có một số ngôn ngữ cấp thấp mà các hệ thống này có thể hiểu được Thông thường, bất kỳ truy vấn nào được viết bằng SQL đều được chuyển đổi thành ngôn ngữ cấp thấp bằng cách sử dụng đại số quan hệ mà hệ thống có thể hiểu được Nhưng sẽ khó cho bất kỳ người dùng nào viết trực tiếp các loại truy vấn đại số quan hệ Nó đòi hỏi kiến thức kỹ lưỡng về nó

Do đó, những gì DBMS làm là nó yêu cầu người dùng viết các truy vấn trong SQL Nó xác minh mã do người dùng viết và sau đó chuyển đổi chúng thành các ngôn ngữ cấp thấp Sau đó, nó chọn đường dẫn thực thi tốt nhất và thực hiện truy vấn và lấy

dữ liệu từ bộ nhớ trong Tất cả các quá trình này được gọi chung là xử lý truy vấn trong DBMS

Đây là quá trình từng bước chuyển ngôn ngữ cấp cao thành ngôn ngữ cấp thấp

mà máy có thể hiểu và thực hiện hành động được yêu cầu cho người dùng Bộ xử lý truy vấn trong DBMS thực hiện tác vụ này

Ngày đăng: 18/12/2022, 10:54

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w