Nói về cơ sở dữ liệu thì chắc ai cũng nghĩ ngay đến hệ quản trị cơ sở dữ liệu quan hệ như Mysql, PostgreSQL, hay NoSQL như MongoDB, DynamoDB, Cassandra…Và trong số đó, Apache Cassandra (Cassandra) đang thu hút sự chú ý đặc biệt gần đây. Vậy Cassandra là gì chúng ta cùng tìm hiểu nhé.
Cassandra là gì?
Apache Cassandra là một cơ sở dữ liệu NoSQL phân tán, ban đầu được phát triển bởi Facebook và trở thành công cụ nguồn mở năm 2008. Sau đó được chuyển giao cho Apache từ năm 2009. Cassandra lưu trữ dữ liệu bằng cách phân tán dữ liệu ra các nodes khác nhau trong một cluster để đảm bảo việc xử lý dữ liệu nhanh chóng và an toàn dù có một hoặc một số nodes xảy ra lỗi.
Cấu trúc dữ liệu
Dữ liệu được lưu trữ trong DB của Cassandra thuộc dạng Key value store (KVS).
Có thể tạo được nhiều table trong database nhưng mà giữa các table sẽ không có mỗi quan hệ nào. Nhiều table được tổng hợp lại thành keyspace.
Thông thường database trong NoSQL thì không cần thiết phải tạo schema ngay lúc đầu. Thế nhưng Cassandra thì lại khác. Trước khi insert dữ liệu thì cần phải tạo keyspace và schema của table.
Có thể thực hiện được 1 số câu query như select, update, insert, delete, drop.
Phân biệt giữa khái niệm NoSQL và Relational Database
– Relational Database (Cơ sở dữ liệu quan hệ) lưu trữ dữ liệu có cấu trúc dưới dạng các table với các row và column đồng thời sử dụng SQL(Structured Query Language) để thực hiện các thao tác trên cơ sở dữ liệu này. SQL cho phép người dùng có thể truy cập dữ liệu có cấu trúc một cách nhanh chóng, dễ dàng. Người dùng có thể trích xuất được nhiều thông tin có giá trị bằng việc kết hợp nhiều query khác nhau,… Tuy nhiên, Relational Database cũng có một số điểm hạn chế như chúng ta phải định nghĩa schema trước khi có thể xây dựng cơ sở dữ liệu, các dữ liệu phải có cấu trúc tương tư nhau,… Một số ví dụ về dạng cơ sở dữ liệu này là Oracle, MySQL, SQLite,..
– NoSQL Database là một dạng cơ sở dữ liệu được thiết kế để khắc phục một số điểm yếu của Relational Database bằng cách cho phép người dùng lưu trữ các dữ liệu có cấu trúc khác nhau (schema-free). Mỗi loại NoSQL Database lại có cách lưu trữ dữ liệu riêng, ví dụ như Casandra và HBase lưu trữ dữ liệu dưới dạng Column còn MongoDB, Apache CouchDB lại lưu trữ dưới dạng Document. Tuy nhiên NoSQL chỉ hỗ trợ các query đơn giản và người dùng không thể thực hiện được các query phức tạp như trong Relational Database.
Tổng quan về Apache Cassandra
Apache Cassandra là một NoSQL Database, lưu trữ dữ liệu dưới dạng wide-column bằng cách kết hợp cả dạng key-value và dạng table. Thành phần chính của Cassandra là Keyspace với 3 thuộc tính sau:
– Replication factor: quy định số lượng nodes trong cluster sẽ nhận bản copy của cùng một dữ liệu
– Replica placement strategy: quy định cách lưu trữ các replicas, ví dụ như simple strategy, old network topology strategy, network topology strategy,..
– Column families: dùng để mô tả cấu trúc của dữ liệu. Mỗi một Column family có nhiều rows và mỗi row lại có nhiều columns theo thứ tự nhất định (khác với Relational Database, người dùng có thể tự do thêm column vào bất kỳ lúc nào và các row không nhất thiết phải có cùng các columns). Thông thường mỗi Keyspace thường có ít nhất một hoặc nhiều column families.
Ngoài ra, các bạn có thể tham khảo điểm khác nhau giữa Cassandra và RDBMS(Relational Database Management System) trong bảng dưới đây:
NoSQL là gì?
Khi nghe đến thuật ngữ “No SQL” mọi người thường có khuynh hướng nghĩ rằng, nó là sự loại bỏ RDBMS (Relational Database Management System-Hệ thống quản lý cơ sở dữ liệu quan hệ) và thay thế bằng KVS, nhưng thực ra không phải vậy. Hàm ý của nó là RDBMS vẫn sử dụng trong các lĩnh vực mà RDBMS hoạt động tốt, còn với những lĩnh vực không phù hợp với RDBMS thì sử dụng các middleware thích hợp hơn. NoSQL chính xác mang ý nghĩa là Not Only SQL (Không chỉ SQL).
Nếu so sánh NoSQL middleware với RDBMS thì có sự khác biệt sau:
Một số đặc trưng chi tiết của NoSQL middleware
- Hoạt động nhanh
- Là data model (Mô hình dữ liệu) chứ không phải là relation model (Mô hình quan hệ)
- Kiến trúc tỷ lệ
- Được xây dựng bởi commodity server
- Giản đồ miễn phí
- Nó không có SPOF (điểm duy nhất của sự thất bại)
- Tự động sao chép sang nhiều đơn vị
- Cho phép lựa chọn tính nhất quán hoặc nhất quán cuối cùng
- Không có ngôn ngữ truy vấn mạnh như SQL và chỉ có thể thực hiện các truy vấn đơn giản
Các tính năng ưu việt của Cassandra
① Thích hợp để sử dụng thực tế
② Khả năng chịu lỗi cao
③ Kiến trúc không có SPOF (một điểm gây tổn hại)
④ Mức độ tự do kiểm soát nhất quán
⑤ Mô hình dữ liệu phong phú
⑥ Có thể tăng cường cải thiện thông lượng cho tuyến tính
⑦ Tính khả dụng cao
⑧ Hỗ trợ các ngôn ngữ khác nhau dưới dạng client code
⑨ Dễ dàng nắm bắt trạng thái bên trong của máy chủ bằng JMX/Dễ giám sát
Điểm đặc biệt hấp dẫn trong các mục này là 3 đặc trưng sau: ③ “Kiến trúc không có SPOF” , ⑤ “Mô hình dữ liệu phong phú” và ⑧ “Hỗ trợ các ngôn ngữ khác nhau dưới dạng client code”
Trước hết, không có SPOF vì kiến trúc của Cassandra không có nút chính. Kết quả là, toàn bộ hệ thống sẽ không dừng lại do một phần nào đó bị thất bại, service vẫn tiếp tục được vận hành, vì vậy có thể nói rằng khả năng chịu lỗi là rất cao.
Trong Cassandra, dữ liệu được sao chép và phân phối cho mỗi nút, và các biện pháp chống mất dữ liệu cũng được áp dụng mạnh mẽ. Ngoài ra, như đã đề cập trong ⑨, bạn có thể nắm bắt và giám sát trạng thái bên trong của máy chủ một cách chi tiết, chẳng hạn như bao nhiêu dữ liệu được ghi/đọc bởi JMX. Ngoài ra, việc thêm một máy (nút) có thể kỳ vọng cải thiện được hiệu suất tuyến tính tương đối.
Dựa vào đặc trưng này, các công ty như Twitter và Digg sử dụng Cassandra để giảm thiểu chi phí hoạt động hơn là sử dụng theo cách vận hành chia dọc + Memcached trong RDBMS.
Về mô hình dữ liệu, Cassandra có mô hình dữ liệu phong phú như mô hình dữ liệu của Bigtable. Khác biệt so với mô hình quan hệ của RDBMS, nó giúp dễ hình dung ra được hình ảnh mình đang tính toán trong đầu.
Về hỗ trợ các ngôn ngữ khác nhau được liệt kê ở điểm thứ ba là vì Cassandra thu thập dữ liệu bằng framework có tên là Thrift. Thrift có một cơ chế để giao tiếp với nhiều các ngôn ngữ khác nhau, vì vậy khách hàng Cassandra có thể đối ứng với nhiều ngôn ngữ khác nhau.
Nếu Thrift mô tả IDL (Ngôn ngữ định nghĩa giao diện), nó sẽ tự động tạo ra mã của phần giao tiếp. Vì Cassandra đã định nghĩa IDL của Thfift (.thrift), có thể chạy ứng dụng Cassandra bằng các ngôn ngữ sau, ví dụ:
- C ++
- Java
- Python
- PHP
- Ruby
- Erlang
- Perl
- Haskell
- C #
- Objective-C
- Smalltalk
- OCaml
Trên đây là những thông tin liên quan đến Cassandra do dean2020.edu.vn đã tổng hợp và chia sẻ đến các bạn. Hy vọng rằng với những chia sẻ trên đây sẽ giúp bạn có thêm những kiến thức bổ ích, và đừng quên theo dõi bài viết của chúng tôi để cập nhật những kiến thức mới bạn nhé!