Mặc dù ngôn ngữ truy vấn Cassandra giống với ngôn ngữ SQL, nhưng các phương pháp mô hình hóa dữ liệu của chúng hoàn toàn khác nhau.
Trong Cassandra, một mô hình dữ liệu xấu có thể làm giảm hiệu suất, đặc biệt là khi người dùng cố gắng triển khai các khái niệm RDBMS trên Cassandra. Tốt nhất là hãy ghi nhớ một số quy tắc chi tiết dưới đây.
Trong hướng dẫn này, bạn sẽ học-
- Quy tắc mô hình dữ liệu Cassandra
- Lập mô hình dữ liệu của bạn trong Cassandra
- Xử lý mối quan hệ 1-1
- Xử lý một đến nhiều mối quan hệ
- Xử lý nhiều mối quan hệ
Quy tắc mô hình dữ liệu Cassandra
Ở Cassandra, viết không đắt. Cassandra không hỗ trợ kết hợp, nhóm theo, mệnh đề OR, tổng hợp, v.v. Vì vậy, bạn phải lưu trữ dữ liệu của mình theo cách có thể truy xuất hoàn toàn. Vì vậy, các quy tắc này phải được ghi nhớ trong khi lập mô hình dữ liệu trong Cassandra.
- Tối đa hóa số lần ghi
Ở Cassandra, viết rất rẻ. Cassandra được tối ưu hóa cho hiệu suất ghi cao. Vì vậy, hãy cố gắng tối đa hóa số lần ghi của bạn để có hiệu suất đọc tốt hơn và tính khả dụng của dữ liệu. Có một sự cân bằng giữa ghi dữ liệu và đọc dữ liệu. Vì vậy, hãy tối ưu hóa hiệu suất đọc dữ liệu của bạn bằng cách tối đa hóa số lần ghi dữ liệu.
- Tối đa hóa dữ liệu trùng lặp
Không chuẩn hóa dữ liệu và sao chép dữ liệu là lỗi của Cassandra. Dung lượng đĩa không đắt hơn bộ nhớ, xử lý CPU và hoạt động của IO. Vì Cassandra là một cơ sở dữ liệu phân tán, do đó việc sao chép dữ liệu cung cấp dữ liệu sẵn có ngay lập tức và không có điểm lỗi nào.
Mục tiêu mô hình hóa dữ liệu
Bạn nên có các mục tiêu sau khi lập mô hình dữ liệu trong Cassandra.
- Trải đều dữ liệu xung quanh cụm
Bạn muốn một lượng dữ liệu bằng nhau trên mỗi nút của cụm Cassandra. Dữ liệu được lan truyền đến các nút khác nhau dựa trên các khóa phân vùng là phần đầu tiên của khóa chính. Vì vậy, hãy cố gắng chọn số nguyên làm khóa chính để trải đều dữ liệu xung quanh cụm.
- Giảm thiểu số lượng phân vùng được đọc trong khi truy vấn dữ liệu
Phân vùng là một nhóm các bản ghi có cùng một khóa phân vùng. Khi truy vấn đọc được đưa ra, nó sẽ thu thập dữ liệu từ các nút khác nhau từ các phân vùng khác nhau.
Nếu có nhiều phân vùng, thì tất cả các phân vùng này cần được truy cập để thu thập dữ liệu truy vấn.
Nó không có nghĩa là không nên tạo phân vùng. Nếu dữ liệu của bạn rất lớn, bạn không thể giữ lượng dữ liệu khổng lồ đó trên một phân vùng duy nhất. Phân vùng đơn sẽ bị chậm lại.
Vì vậy, hãy cố gắng chọn một số lượng phân vùng cân bằng.
Khóa chính tốt
Hãy lấy một ví dụ và tìm xem khóa chính nào tốt.
Đây là bảng MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key(SongId, SongName));
Trong ví dụ trên, bảng MusicPlaylist,
- Songid là chìa khóa phân vùng và
- SongName là cột phân nhóm
- Dữ liệu sẽ được nhóm lại trên cơ sở SongName. Chỉ một phân vùng sẽ được tạo với SongId. Sẽ không có bất kỳ phân vùng nào khác trong bảng MusicPlaylist.
Việc truy xuất dữ liệu sẽ bị chậm bởi mô hình dữ liệu này do khóa chính không hợp lệ.
Đây là một bảng MusicPlaylist.
Create table MusicPlaylist(SongId int,SongName text,Year int,Singer text,Primary key((SongId, Year), SongName));
Trong ví dụ trên, bảng MusicPlaylist,
- Songid và Year là chìa khóa phân vùng, và
- SongName là cột phân cụm.
- Dữ liệu sẽ được nhóm lại trên cơ sở SongName. Trong bảng này, mỗi năm, một phân vùng mới sẽ được tạo. Tất cả các bài hát của năm sẽ nằm trên cùng một nút. Khóa chính này sẽ rất hữu ích cho dữ liệu.
Việc truy xuất dữ liệu của chúng tôi sẽ nhanh chóng bằng mô hình dữ liệu này.
Lập mô hình dữ liệu của bạn trong Cassandra
Những điều sau đây cần được ghi nhớ trong khi lập mô hình các truy vấn của bạn.
- Xác định những truy vấn bạn muốn hỗ trợ
- Tham gia
- Nhóm theo
- Lọc trên cột nào, v.v.
- Tạo bảng theo truy vấn của bạn
Tạo bảng theo truy vấn của bạn. Tạo một bảng sẽ đáp ứng các truy vấn của bạn. Cố gắng tạo một bảng theo cách sao cho số lượng phân vùng tối thiểu cần được đọc.
Trước hết, hãy xác định những truy vấn bạn muốn.
Ví dụ, bạn có cần?
Xử lý mối quan hệ 1-1
Mối quan hệ 1-1 có nghĩa là hai bảng có sự tương ứng 1-1. Ví dụ: sinh viên chỉ có thể đăng ký một khóa học và tôi muốn tìm kiếm một sinh viên mà một sinh viên cụ thể đã đăng ký trong khóa học nào.
Vì vậy, trong trường hợp này, lược đồ bảng của bạn phải bao gồm tất cả các chi tiết của sinh viên tương ứng với khóa học cụ thể đó như tên của khóa học, số danh sách của sinh viên, tên sinh viên, v.v.
Create table Student_Course(Student rollno int primary key,Student_name text,Course_name text,);
Xử lý một đến nhiều mối quan hệ
Mối quan hệ từ một đến nhiều có nghĩa là có một đến nhiều thư từ giữa hai bảng.
Ví dụ, một khóa học có thể được học bởi nhiều sinh viên. Tôi muốn tìm kiếm tất cả các sinh viên đang theo học một khóa học cụ thể.
Vì vậy, bằng cách truy vấn tên khóa học, tôi sẽ có nhiều tên sinh viên sẽ học một khóa học cụ thể.
Create table Student_Course(Student_rollno int,Student_name text,Course_name text,);
Tôi có thể truy xuất tất cả sinh viên cho một khóa học cụ thể bằng truy vấn sau.
Select * from Student_Course where Course_name='Course Name';
Xử lý nhiều mối quan hệ
Mối quan hệ nhiều đến nhiều có nghĩa là có nhiều sự tương ứng giữa hai bảng.
Ví dụ, một khóa học có thể được học bởi nhiều sinh viên, và một sinh viên cũng có thể học nhiều khóa học.
Tôi muốn tìm kiếm tất cả các sinh viên đang theo học một khóa học cụ thể. Ngoài ra, tôi muốn tìm kiếm tất cả các khóa học mà một học sinh cụ thể đang học.
Vì vậy, trong trường hợp này, tôi sẽ có hai bảng tức là chia bài toán thành hai trường hợp.
Đầu tiên, tôi sẽ tạo một bảng để bạn có thể tìm thấy các khóa học của một sinh viên cụ thể.
Create table Student_Course(Student_rollno int primary key,Student_name text,Course_name text,);
Tôi có thể tìm thấy tất cả các khóa học của một sinh viên cụ thể bằng cách truy vấn sau. ->
Select * from Student_Course where student_rollno=rollno;
Thứ hai, tôi sẽ tạo một bảng để bạn có thể tìm thấy bao nhiêu sinh viên đang theo học một khóa học cụ thể.
Create table Course_Student(Course_name text primary key,Student_name text,student_rollno int);
Tôi có thể tìm thấy một sinh viên trong một khóa học cụ thể bằng cách truy vấn sau đây.
Select * from Course_Student where Course_name=CourseName;
Sự khác biệt giữa RDBMS và Mô hình hóa dữ liệu Cassandra
RDBMS |
Cassandra |
Lưu trữ dữ liệu ở dạng chuẩn hóa |
Lưu trữ dữ liệu ở dạng không chuẩn hóa |
Dbms kế thừa; Dữ liệu có cấu trúc |
Hàng rộng rãi, Năng động; dữ liệu có cấu trúc & phi cấu trúc |
Tóm lược
Mô hình dữ liệu trong Cassandra khác với các cơ sở dữ liệu RDBMS khác. Mô hình dữ liệu Cassandra có một số quy tắc. Các quy tắc này phải được tuân thủ để tạo mô hình dữ liệu tốt. Bên cạnh các quy tắc này, chúng tôi đã thấy ba trường hợp mô hình hóa dữ liệu khác nhau và cách giải quyết chúng.