Giới thiệu
Từ quan điểm phát triển ứng dụng, việc chọn dịch vụ dữ liệu hoặc cơ sở dữ liệu phù hợp sẽ là một quyết định quan trọng khi nói đến hiệu suất và khả năng mở rộng ứng dụng của bạn.
Về cơ bản, khi nhắc đến Database mọi người hay nghĩ đến SQL và NoSQL, thực tế còn rất nhiều loại CSDL khác. Chúng ta sẽ khám phá một số loại Database khác nhau và một số trường hợp sử dụng của từng loại CSDL đó.
Key-value database
Key-value database là một loại nonrelational database sử dụng phương pháp key-value đơn giản để lưu trữ dữ liệu. Key-value database lưu trữ dữ liệu dưới dạng tập hợp các cặp key-value trong đó key đóng vai trò là mã định danh duy nhất. Cả key và value đều có thể là bất kỳ thứ gì, từ các đối tượng đơn giản đến các đối tượng phức tạp. Key-value database có khả năng phân vùng cao và cho phép mở rộng quy mô theo chiều ngang ở các quy mô mà các loại CSDL khác không thể đạt được.
VD: Redis, etcd, Memcached, Oracle NoSQL
Redis is an in-memory data structure store, used as a distributed, in-memory key–value database, cache and message broker, with optional durability. Redis supports different kinds of abstract data structures, such as strings, lists, maps, sets, sorted sets, HyperLogLogs, bitmaps, streams, and spatial indices.
Như bạn có thể thấy trong mô tả của Redis, điều này có nghĩa là nó nhanh nhưng bị giới hạn về không gian như một sự đánh đổi. Ngoài ra, không có truy vấn hoặc kết nối nào, điều đó có nghĩa là các tùy chọn lập mô hình dữ liệu rất hạn chế.
Tốt nhất cho:
- Caching
- Pub/Sub
- Leaderboards
- Shopping carts
Thường được sử dụng làm cache phía trên persistent data layer khác.
Wide-column database
Wide-column database là NoSQL database tổ chức lưu trữ dữ liệu thành các cột linh hoạt có thể trải rộng trên nhiều máy chủ hoặc database node, sử dụng ánh xạ đa chiều để tham chiếu dữ liệu theo cột, hàng và dấu thời gian.
VD: Apache Cassandra, Google Bigtable, ScyllaDB
Cassandra is a free and open-source, distributed, wide-column store, NoSQL database management system designed to handle large amounts of data across many commodity servers, providing high availability with no single point of failure.
Không có schema nghĩa là có thể xử lý dữ liệu phi cấu trúc, tuy nhiên, điều này có thể lợi ích đối với một số khối lượng công việc.
Tốt nhất cho:
- Time-Series
- Historical Records
- High-Write, Low-Read
Document database
Document database (còn được gọi là document-oriented database) là CSDL lưu trữ thông tin trong tài liệu.
VD: MongoDB, Couchbase, Apache CouchDB
MongoDB is a source-available cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. MongoDB is developed by MongoDB Inc. and licensed under the Server Side Public License.
NoSQL document database cho phép doanh nghiệp lưu trữ dữ liệu đơn giản mà không cần sử dụng mã SQL phức tạp. Lưu trữ nhanh chóng mà không ảnh hưởng đến độ tin cậy.
Tốt nhất cho:
- Most Applications
- Games
- Internet of Things
Relational database
Nếu bạn chưa quen với CSDL nhưng bạn biết về chúng, tôi đoán rằng bạn đã gặp cơ sở dữ liệu quan hệ. Relational database là cơ sở dữ liệu số dựa trên mô hình dữ liệu quan hệ. Hệ thống được sử dụng để duy trì relational database là RDBMS. Nhiều RDBMS có tùy chọn sử dụng SQL để truy vấn và duy trì CSDL.
VD: MySQL, Oracle, MariaDB, SQL Server, PostgreSQL
MySQL is a high-speed, stable and easy-to-use, portable database management system that works on many operating systems and provides a large system of very powerful utility functions. With high speed and security, MySQL is very suitable for applications that access databases on the internet.
Trong khi nghiên cứu relational database, thuật ngữ ACID đã được đề cập rất nhiều (atomicity, consistency, isolation, durability) là một tập hợp các thuộc tính của các database transaction nhằm đảm bảo tính hợp lệ của dữ liệu mặc dù có lỗi, mất điện và các rủi ro khác.
Trong bối cảnh CSDL, một chuỗi các thao tác CSDL thỏa mãn các thuộc tính ACID (có thể được coi là một thao tác logic duy nhất trên dữ liệu) được gọi là transaction. Ví dụ: việc chuyển tiền từ tài khoản ngân hàng này sang tài khoản ngân hàng khác, thậm chí liên quan đến nhiều thay đổi như ghi nợ một tài khoản và ghi có vào tài khoản khác, là một transaction duy nhất.
Tốt nhất cho:
- Most Applications (Tuy nhiên, không có nghĩa là nó là tốt nhất)
Nó không lý tưởng cho dữ liệu phi cấu trúc hoặc khả năng mở rộng quy mô khi một số đề cập khác của NoSQL cung cấp khả năng mở rộng quy mô tốt hơn cho một số khối lượng công việc nhất định.
In-memory database
In-memory database là CSDL được xây dựng có mục đích chủ yếu dựa vào bộ nhớ trong để lưu trữ dữ liệu. Nó cho phép thời gian phản hồi tối thiểu bằng cách loại bỏ nhu cầu truy cập vào ổ đĩa tiêu chuẩn (SSD).
VD: Aerospike, Apache Ignite, Java H2, Memcached, Redis
Graph database
Graph database lưu trữ các nút và mối quan hệ thay vì bảng hoặc tài liệu. Dữ liệu được lưu trữ giống như bạn phác thảo ý tưởng trên bảng trắng. Dữ liệu của bạn được lưu trữ mà không giới hạn nó trong một mô hình được xác định trước, cho phép bạn suy nghĩ và sử dụng nó một cách rất linh hoạt.
VD: ArangoDB, Neo4j, Aerospike, JanusGraph
Neo4j is a graph database management system developed by Neo4j, Inc. Described by its developers as an ACID-compliant transactional database with native graph storage and processing
Tốt nhất cho:
- Graphs
- Knowledge Graphs
- Recommendation Engines
Search Engine database
Search Engine database là một loại non-relational database được dành riêng cho việc tìm kiếm nội dung dữ liệu. Search Engine database sử dụng các index để phân loại các đặc điểm tương tự giữa các dữ liệu và tạo điều kiện thuận lợi cho khả năng tìm kiếm.
VD: Apache Solr, Elasticsearch, MongoDB Atlas Search
Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.
Tốt nhất cho:
- Search Engines
- Typeahead
- Log search
Time-series database
Time-series database là CSDL được tối ưu hóa cho time series data hoặc được đánh dấu thời gian. Time series data chỉ đơn giản là các phép đo hoặc sự kiện được theo dõi, giám sát, lấy mẫu xuống và tổng hợp theo thời gian. Đây có thể là số liệu máy chủ, giám sát hiệu suất ứng dụng, dữ liệu mạng, dữ liệu cảm biến, sự kiện, lần nhấp, giao dịch trên thị trường và nhiều loại dữ liệu phân tích khác.
VD: Apache IoTDB, InfluxDB, Prometheus, TimescaleDB
Prometheus is a free software application used for event monitoring and alerting. It records metrics in a time series database built using an HTTP pull model, with flexible queries and real-time alerting.
Multi-model database
Multi-model database là một DBMS được thiết kế để hỗ trợ nhiều mô hình dữ liệu dựa trên một chương trình backend tích hợp duy nhất. Ngược lại, hầu hết các DBMS được tổ chức xung quanh một mô hình dữ liệu duy nhất xác định cách tổ chức, lưu trữ và thao tác dữ liệu. Các mô hình Document, graph, relational, và key-value là những ví dụ về mô hình dữ liệu có thể được multi-model database hỗ trợ.
VD: MarkLogic, OrientDB, Fauna
Fauna is a flexible, developer-friendly, transactional database delivered as a secure and scalable cloud API with native GraphQL.
Tốt nhất cho:
- Not stuck on choosing a data model
- ACID Compliant
- Fast
- No provisioning overhead
- Let the cloud do the heavy lifting