Thursday, May 3, 2018

Chọn loại cơ sở dữ liệu phù hợp cho dự án của bạn – tưởng dễ mà khó!

 

Mọi cơ sở dữ liệu (CSDL – database) đều được tạo ra theo cách không giống nhau, mỗi loại đều có ưu và nhược điểm riêng. thực tiễn cho thấy những loại database như MySQL, MongoDB thỉnh thoảng bị “lạm dụng” vì tính phổ thông của nó, bất chấp tính xứng với dự án / nhu cầu ngày nay. Việc chỉnh sửa một database không hợp để cải thiện tính tương thích sẽ tiêu tốn nhiều thời gian, công sức và dẫn đến các lỗ hổng về bảo mật và khả năng mở rộng của toàn hệ thống. Vậy, việc tuyển lựa một database hợp nhất cho dự án của bạn ngay từ đầu sẽ là sự lựa chọn tối ưu. Trước khi cân nhắc chọn database, mời các độc giả bài viết bên dưới, với nội dung gồm kê các dạng database thường thấy, điểm mạnh / kém của chúng và nhất là chúng thích hợp để sử dụng cho mục đích nào.

 

*Bài viết sử dụng nhiều từ chuyên ngành, định nghĩa nằm ở phần cuối

 

1. Hệ thống cơ sở quản lí dữ liệu quan hệ – viết tắt RDBMS (Oracle, MySQL, MS Server, PostgreSQL)  

 

Hệ thống quản ngại cơ sở dữ liệu quan hệ được phát triển vào năm 1970 với nền móng lí thuyết kiên cố và có ảnh hưởng lớn các hệ thống khác bữa nay. Tên tiếng Anh: *Relational database management system – RDBMS.

 

Các RDBMS lưu trữ dữ liệu với dạng “quan hệ”: các bảng với dòng và cột nơi mọi thông tin dữ liệu được lưu trữ như một giá trị của một ô cụ thể. Dữ liệu trong một RDBMS được quản lý chuẩn y giao thức nức tiếng SQL – tiếng nói truy cấu trúc. SQL là giao thức được chuẩn hoá, đem đến sự đa nhiệm và tính dễ đoán biết.

 

Sau một thời kì bị người dùng dùng sai quy cách vì tính phổ quát của nó, người sáng lập SQL là E.F Codd đã lập nên 12 luật lệ dùng vận dụng cho tất các hệ thống RDBMS, giúp các cơ chế này trả về đúng các dữ liệu được tầng, hạn chế việc đổi thay cấu trúc dữ liệu, đảm bảo tính hợp nhất và đáng tin cậy của các hệ thống này.

 

Điểm mạnh

 

Các hệ thống RDBMS hữu dụng trong việc xử lí các dữ liệu được cấu trúc kỹ càng và tương trợ ACID – 4 thuộc tính quan trọng của bất kì hệ thống cơ sở dữ liệu nào:

 

Tính nguyên tố ( Atomicity ). Một giao tế có nhiều thao tác khác biệt thì hoặc là ắt các thao tác hoặc là không một thao tác nào được hoàn tất. chả hạn việc chuyển tiền có thể thành công hay trục trặc vì nhiều lý do nhưng tính nguyên tố bảo đảm rằng một tài khoản sẽ không bị trừ tiền giả dụ tài khoản kia chưa được cộng số tiền ứng.

 

Tính nhất quán ( Consistency ). Một giao tế hoặc là sẽ tạo ra một thể mới và hợp lệ cho dữ liệu, hoặc trong trường hợp có lỗi sẽ chuyển tất dữ liệu về trạng thái trước khi thực thi giao du.

 

Tính độc lập ( Isolation ). Một giao thiệp đang thực thi và chưa được xác nhận phải đảm bảo tách biệt khỏi các giao du khác.

 

Tính vững bền ( Durability ). Dữ liệu được xác nhận sẽ được hệ thống lưu lại sao cho ngay cả trong trường hợp hư hoặc có lỗi hệ thống, dữ liệu vẫn đảm bảo trong trạng thái xác thực.

 

Dữ liệu được lưu trữ và truy xuất dễ dàng bằng các lệnh truy nã SQL. Cấu trúc dữ liệu cũng có thể được mở rộng mau chóng, việc bổ sung thêm các dữ liệu mới cũng không ảnh hưởng tới các data có sẵn. Các RDBMS còn có khả năng cấp quyền truy xuất và chỉnh sửa thông báo cho các loại người dùng khác nhau (admin, user, khách vãng lai, etc.). Ví dụ, khách hàng có thể đăng nhập vào CSDL để rà soát thông báo trương mục, nhưng chỉ các nhân viên hoặc admin mới có thể xem và đổi thay thông tin đó.

 

Điểm yếu

 

Điểm yếu lớn nhất của RDBMS là không xử lí tốt các dữ liệu phi cấu trúc. Các dữ liệu khi bị chia cắt cần được viết lại dưới dạng khác dễ đọc hơn là ở dạng bảng tính (table), và tốc độ xử lí dữ liệu cũng khá chậm. Việc thay đổi cơ sở dữ liệu dạng RDBMS cũng khá khó vì tính quy củ chặt chịa của nó.

 

RDBMS tốn nhiều phí hơn các hệ thống cơ sở dữ liệu khác trong việc xây dựng và phát triển. Ngoài ra, cấu trúc của RDBMS làm phức tạp hoá việc nâng cấp và mở mang máy chủ theo chiều dọc hoặc ngang (*horizontal/ vertical scalability). Việc phân mảnh (*sharding)trong khi vẫn giữ vững các tiêu chí về ACID là một thử thách lớn.

 

Nên dùng cơ sở dữ liệu RDBMS trong các trường hợp nào?

Các trường hợp khi giữ vững tính chu toàn dữ liệu – dữ liệu không thể bị chỉnh sửa dễ dàng là tối cấp thiết. Ví dụ: các áp dụng của mảng tài chính, vận dụng trong quốc phòng, an ninh và trong lĩnh vực thông tin sức khoẻ cá nhân chủ nghĩa.

Các lĩnh vực tự động hoá

thông báo nội bộ

 

 

2. Document store (MongoDB, Couchbase) 

 

 

Document store được gọi là các cơ sở dữ liệu hướng tài liệu, một thiết kế biệt lập cho việc lưu trữ tài liệu dạng văn kiện JSON, BSON hoặc XML. Vì là cấu trúc dữ liệu không buộc ràng khác với SQL, các CSDL này không đòi hỏi người dùng tự tạo bảng nhập liệu trước khi nhập dữ liệu vào. Các tài liệu có thể chứa bất kì dữ liệu nào. CSDL dạng này có các cặp khoá – giá trị nhưng cũng có đính kèm các trị số siêu dữ liệu (*metadata) giúp việc truy hỏi (*query) dễ dàng hơn.

 

Điểm mạnh

 

CSDL hướng tài liệu rất linh hoạt, có thể xử lí dữ liệu nửa cấu trúc và không cấu trúc rất tốt. Người dùng không cần quan tâm tới dạng dữ liệu khi setup, điều này tốt trong trường hợp bạn không lường trước được dạng dữ liệu nào bạn sẽ cần lưu trữ.

 

Người dùng có thể thiết kế một cấu trúc cho một tài liệu cụ thể mà không ảnh hưởng tới các tài liệu khác. Schema cho CSDL cũng có thể được tuỳ chỉnh mà không gây ra thời kì downtime, giúp đem đến *high availability (tính sẵn sàng cao). thời kì ghi dữ liệu cũng rất nhanh.

 

Ngoài tính linh hoạt, các lập trình viên còn chuộng document store bởi tính dễ dàng mở mang theo chiều ngang của chúng. Qua trình sharding cũng dễ hiểu và dễ thao tác hơn so với CSDL quan hệ, nên document store có thể mở rộng nhanh và dễ dàng.

 

Điểm yếu

 

CSDL dạng lưu trữ tài liệu hy sinh các yếu tố ACID để đổi lấy sự linh hoạt. Ngoài ra, việc truỵ vấn chỉ có thể được thực hành trong từng tài liệu, chẳng thể truy tìm dữ liệu trên nhiều tài liệu khác nhau.

 

Nên sử dụng CSDL dạng lưu trữ tài liệu trong các trường hợp nào?

Dữ liệu phi cấu trúc hoặc không có cấu trúc

Quản lý nội dung

phân tách dữ liệu chuyên sâu

Tạo mẫu nhanh

3. CSDL dạng khoá – giá trị (Redis, Memcached) 

 

Key-value stores là kiểu lưu trữ đơn giản nhất trong các loại CSDL NoSQL đồng thời nó cũng là kiểu lưu trữ cho quờ các HQT CSDL NoSQL. Thông thường, các HQT CSDL Key-value lưu trữ dữ liệu dưới dạng key (là một chuỗi duy nhất) liên kết với value có thể ở dạngchuỗi văn bản đơn giản hoặc các tập, danh sách dữ liệu phức tạp hơn. Quá trình dạo dữ liệu thường sẽ được thực hành thông qua key, điều này dẫn đến sự hạn chế về độ chính xác.

 

CDSL chìa khoá – giá trị là một dạng CSDL phi quan hệ nơi mà mỗi giá trị được gán cho một key (chìa khoá) khăng khăng, còn được biết đến như associative array – mảng liên tưởng.

 

Một “key” là một định danh độc nhất được gán cho một giá trị. Keys có thể là bất cứ thứ gì cho phép bởi DBMS. Trong Redis, keys có thể là một hàm nhị phân lên tới 512MB

 

“Giá trị” có thể được lưu trữ dưới dạng blob (Là kiểu dữ liệu của một cột trong bảng RDBMS, có thể lưu ảnh lớn hoặc dữ liệu văn bảng như những tính chất.) và không cần schema định sẵn.. Các gía trị này có thể được gán bất cứ loại giá trị nào:

Số

Chuỗi giá trị

Bộ đếm

JSON, XML, HTML, PHP,

Nhị phân

Hình ảnh

Video ngắn

Danh sách

 

Điểm mạnh

 

Dạng CSDL này có rất nhiều lợi thế. Nó rất linh hoạt và có thể xử lí nhiều loại dữ liệu một cách nhanh chóng. Các chìa khoá được dùng để truy xuất thẳng tới các giá trị khoảng, mà không cần thông qua quá trình index (quá trình tầm dữ liệu và đánh giá độ xác thực của dữ liệu đó của hệ thống CSDL), giúp quá trình cỡ diễn ra nhanh chóng. Tính linh động cũng là một điểm mạnh của CSDL dạng này: lưu trữ key – value có thể được chuyển từ hệ thống này sang hệ thống khác mà không cần code lại. rút cuộc, CSDL key – value có thể mở rộng theo chiều ngang dễ dàng và uổng vận hành thấp.

 

Điểm yếu

 

Tính linh hoạt của CSDL dạng key – value bị đánh đổi bởi tính chuẩn xác. Hầu như rất khó để truy xuất giá trị chính xác từ CSDL dạng này vì dữ liệu được lưu trữ theo blob, nên kết quả trả về hầu như đều theo blob. Điều này gây ra khó khan khi báo cáo số liệu hoặc cần chỉnh sửa một phần của các giá trị. Cuối cùng, không phải objects nào cũng có thể được cấu hình thành cặp chìa khoá – giá trị được.

 

Nên dùng CSDL key – value cho các trường hợp nào?

Khuyến nghị các sản phẩm / thông tin rưa rứa

thông báo và thiết lập người dùng

Dữ liệu phi cấu trúc như review sản phẩm, bình luận của blog

Quản lý session trên diện rộng

Dữ liệu được truy xuất thẳng nhưng không thẳng được cập nhật

 

 

4. Mô hình wide – column (Cassandra, HBase) 

 

 

Mô hình wide – column là một dạng lưu CSDL phi quan hệ lưu trữ theo dạng cột. Mô hình này có vài điểm tương đồng với mô hình key – value nhưng cũng có vài thuộc tính của dạng CSDL quan hệ.

 

Mô hình wide – column dựa trên khái niệm keyspace thay vì schema. Một keyspace bao gồm nhiều cụm column (tương tự như table nhưng linh hoạt hơn về cấu trúc), mỗi cụm bao gồm nhiều hàng và nhiều cột biệt lập. Mỗi hàng không cần phải có số lượng hoặc loại cột. Một timestamp quyết định phiên bản gần nhất của data.

 

Điểm mạnh

 

Loại CSDL này có cả lợi ích của CSDL quan hệ và phi quan hệ, có thể xử lí dữ liệu cấu trúc và phi cấu trúc, song song cũng dễ dàng nâng cấp. So với CSDL quan hệ, khả năng mở mang theo chiều ngang cũng dễ dàng và nhanh chóng hơn.

 

CSDL dạng cột có khả năng nén tốt hơn CSDL dạng dòng. đồng thời, data set lớn có thể dễ dàng duyệt hơn. Mô hình wide – column có khả năng xử lí tốt các yêu cầu truy xuất giao hội.

 

Điểm yếu

 

CSDL dạng cột dễ dàng update theo cụm, bù lại việc upload và update số liệu cá nhân rất khó. Cộng thêm Thực tế là mô hình wide – column chậm hơn so với CSDL quan hệ khi xử lí các giao tiếp.

 

Nên dùng mô hình wide – column cho trong trường hợp nào?

Xử lí các dữ liệu lớn (big data) khi tốc độ cần thiết

Lưu trữ dữ liệu big data

Các project có quy mô lớn

 

CSDL dạng bộ máy trên dưới (Elasticsearch)

 

 

Elasticsearch về chủ chốt là một bộ máy tầm và không hoàn toàn tà tà CSDL chuyên biệt như các loại trên, nhưng càng ngày càng được giới developers tận dụng để giảm thiểu độ lag khi tầng thông báo. Elasticsearch được xem như một CSDL dạng phi quan hệ, dựa trên nền tảng lưu trữ dữ liệu dạng văn kiện, thiết kế chuyên biệt để tối ưa hoá lưu trữ và đàm đạo dữ liệu chóng vánh.

 

Điểm mạnh

 

Elasticsearch có khả năng mở mang cao, với schema linh hoạt và tốc độ trả về tham số lưu trữ nhanh, hỗ trợ khả năng khoảng nâng cao: kiêng kị full text, khuyến nghị các kết quả cỡ, và hỗ trợ các thông báo kiêng phức tạp.

 

Một trong số những tính năng thú của Elasticsearch đó là “stemming”. Stemming là từ để chỉ kỹ thuật dùng để biến đổi 1 từ về dạng gốc (được gọi là stem hoặc root form) bằng cách đơn giản là loại bỏ 1 số ký tự nằm ở cuối được xem như biến thể của từ. thí dụ: các từ như walked , walking , walks , bằng cách bỏ đi -ed , -ing hoặc -s , chúng ta sẽ được từ nguyên gốc là walk. Một Ví dụ khác trong ngày chừng việc làm, một user có thể search mức “paying jobs” cũng có thể sẽ tìm ra các kết quả có can dự tới từ “paid” và “pay”. Tính năng này hiện tại hữu ích với các tiếng nói phổ thông như tiếng Anh, nhưng có khả năng vận dụng cao với các tiếng nói khác như tiếng Việt tuy nhiên đòi hỏi độ tuỳ chỉnh cao.

 

Điểm yếu

 

Elasticsearch được dùng với hình thức thay thế hoặc bổ trợ cho CSDL có sẵn hơn là độc lập. Elasticsearch còn có nhược điểm là độ ổn định và bảo mật kém, không có giao thứcxác định và xác nhận tính danh của một khách truy cập hoặc điều khiển đăng nhập. Ngoài ra, Elasticsearch không tương trợ thanh toán.

 

Nên dùng các bộ máy kiếm Elastisearch cho các trường hợp sau:

Cung cấp các thông báo phụ tương trợ việc ra quyết định khi ngần dữ liệu

Lưu file tạm

 

Bài viết có dùng các từ ngữ chuyên ngành quản lý cơ sở dữ liệu như:

Database là một hội tụ kết liên các dữ liệu, thường đủ lớn để lưu trên một thiết bị lưu trữ như đĩa hay băng. Dữ liệu này được duy trì dưới dạng một giao hội các tập tin trong hệ điều hành hay được lưu trữ trong các hệ quản trị cơ sở dữ liệu.

Schema là thuật ngữ để chỉ định nghĩa về cấu trúc dữ liệu. tự vị Websters định nghĩa schema là “phác thảo hoặc hình dung khái quát dễ hiểu về một khái niệm nào đó; tỉ dụ, 5 dấu chấm là schema của số 5”.

Stemming là kỹ thuật dùng để biến đổi 1 từ về dạng gốc (được gọi là stem hoặc root form) bằng cách cực kỳ đơn giản là loại bỏ 1 số ký tự nằm ở cuối từ mà nó nghĩ rằng là biến thể của từ.

Key – value chỉ các CSDL key-value lưu trữ dữ liệu dưới dạng key – chìa khoá (một chuỗi độc nhất vô nhị) liên kết với value – giá trị có thể ở dạng chuỗi văn bản đơn giản hoặc các tập, danh sách dữ liệu phức tạp hơn.

Relational database còn được biết đến như Relational Database Management System (Hệ thống quản lý cơ sở dữ liệu quan hệ) Trong RDBMS, dữ liệu được biểu diễn bởi các hàng. Relational Database là cơ sở dữ liệu được sử dụng phổ biến nhất. Nó chứa các bảng và mỗi bảng có Primary Key riêng. vị các bảng này được tổ chức chặt đẹp nên việc truy cập dữ liệu trở thành dễ dàng hơn trong RDBMS.

Nonrelational database chỉ những cơ sở dữ liệu không dùng mô hình dữ liệu quan hệ để quản lý dữ liệu trong lĩnh vực phần mềm, còn gọi là CSDL không buộc ràng.

High scalability tức là “Khả năng mở rộng cao“. Ở đây chỉ khả năng của hệ thống máy chủ, hạ tầng mạng, băng thông có thể nâng cấp, chịu tải lớn, mở mang nhanh chóng khi có nhu cầu.

Sharding là một tiến trình lưu giữ các bản ghi dữ liệu qua nhiều thiết bị để đáp ứng yêu cầu về sự gia tăng dữ liệu. Khi kích cỡ của dữ liệu tăng lên, một thiết bên bị (1 database hay 1 bảng) không thể đủ để lưu giữ dữ liệu. Sharding giải quyết vấn đề này với việc mở mang khuôn khổ theo bề ngang (horizontal scaling). Với Sharding, bạn bổ sung thêm nhiều thiết bị để tương trợ cho việc gia tăng dữ liệu và các yêu cầu của các hoạt động đọc và ghi.

Horizontal/ vertical scaling theo thứ tự là nâng cấp mở mang theo chiều ngang, nghĩa là nâng số máy chủ, trái lại vertical scaling là nâng cấp dọc, là bổ sung thêm tài nguyên như CPU, RAM vào máy chủ có sẵn.

Metadata là dạng định nghĩa dữ liệu như: bảng, cột, một vắng, các luật doanh nghiệp hay những quy tắc biến đổi. Metadata bao quát hết thảy các phương diện của kho dữ liệu.

Query có tức là truy. Đây bản chất là một câu lệnh SQL được xây dùng để tổng hợp dữ liệu từ các bảng nguồn. Có nhiều loại query khác nhau như crosstab, action, union và data – definition.

 

Hy vọng bài viết sẽ giúp các bạn có cái nhìn tổng thể về các loại CSDL và các trường hợp hiệp để sử dụng chúng!

No comments:

Post a Comment