Cassandra Ngôn ngữ truy vấn (CQL): Chèn, cập nhật và xóa
⚡ Tóm tắt thông minh
Cassandra Ngôn ngữ truy vấn (Query Language) xử lý các thao tác chèn, cập nhật, xóa và đọc với cú pháp gần giống SQL nhưng ngữ nghĩa bên dưới khác biệt. Trang này sẽ trình bày chi tiết từng câu lệnh, hành vi upsert (kết hợp chèn và cập nhật), và những giới hạn thực sự của mệnh đề WHERE.
Chèn dữ liệu
Cassandra câu lệnh chèn ghi dữ liệu vào Cassandra cột ở dạng hàng. Cassandra truy vấn chèn sẽ chỉ lưu trữ những cột do người dùng cung cấp. Bạn nhất thiết phải chỉ định cột khóa chính.
Nó sẽ không chiếm bất kỳ khoảng trống nào cho các giá trị không được đưa ra. Không có kết quả nào được trả về sau khi chèn.
cú pháp
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Ví dụ
Đây là ảnh chụp nhanh của việc thực hiện Cassandra Chèn vào truy vấn bảng sẽ chèn một bản ghi vào Cassandra bảng 'Sinh viên'.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Sau khi thực hiện thành công lệnh Insert vào Cassandra, một hàng sẽ được chèn vào Cassandra bảng Học sinh có RollNo 2, Tên Michael, khoa CS và Học kỳ 2.
Đây là ảnh chụp nhanh về trạng thái cơ sở dữ liệu hiện tại.
Cập nhật dữ liệu
Cassandra không ủng hộ. Upsert có nghĩa là Cassandra sẽ chèn một hàng nếu khóa chính chưa tồn tại, ngược lại nếu khóa chính đã tồn tại, nó sẽ cập nhật hàng đó.
Điều này dẫn đến một hệ quả thực tiễn cần được nêu rõ: lệnh INSERT không bao giờ báo lỗi khóa trùng lặp, vì vậy việc chèn lại dữ liệu một cách vô tình sẽ ghi đè lên hàng hiện có mà không có cảnh báo. Khi cần ngăn chặn điều đó, hãy thêm IF NOT EXISTS để biến câu lệnh thành một giao dịch nhẹ.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Các giao dịch nhẹ sử dụng vòng đồng thuận giữa các bản sao, do đó chúng chậm hơn đáng kể so với thao tác ghi thông thường và chỉ nên được dành cho các trường hợp thực sự cần kiểm tra.
Cập nhật dữ liệu
Cassandra Truy vấn cập nhật được sử dụng để cập nhật dữ liệu trong Cassandra bàn. Nếu không có kết quả nào được trả về sau khi cập nhật dữ liệu, điều đó có nghĩa là dữ liệu đã được cập nhật thành công, nếu không sẽ trả về lỗi. Giá trị cột được thay đổi trong mệnh đề 'Set' trong khi dữ liệu được lọc bằng mệnh đề 'Where'.
cú pháp
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Ví dụ
Đây là ảnh chụp màn hình hiển thị trạng thái cơ sở dữ liệu trước khi cập nhật dữ liệu.
Đây là ảnh chụp nhanh của việc thực hiện Cassandra Lệnh cập nhật cập nhật bản ghi trong bảng Sinh viên.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Sau khi thực hiện thành công truy vấn cập nhật trong Cassandra 'Cập nhật sinh viên', tên sinh viên sẽ được đổi từ 'Clark' thành 'Hayden' có số 1.
Đây là ảnh chụp màn hình hiển thị trạng thái cơ sở dữ liệu sau khi cập nhật dữ liệu.
Do cơ chế upsert, thao tác UPDATE đối với khóa chính không tồn tại sẽ tạo ra hàng đó thay vì báo lỗi.
Cassandra Xóa dữ liệu
Lệnh 'Xóa' xóa toàn bộ một hàng hoặc một số cột khỏi bảng Học sinh. Khi dữ liệu bị xóa, nó không bị xóa khỏi bảng ngay lập tức. Thay vào đó, dữ liệu đã xóa sẽ được đánh dấu bằng bia mộ và bị xóa sau khi nén.
cú pháp
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Trên đây Cassandra Cú pháp xóa hàng sẽ xóa một hoặc nhiều hàng tùy thuộc vào việc lọc dữ liệu trong mệnh đề Where.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Cú pháp trên sẽ xóa một số cột khỏi bảng.
Ví dụ
Đây là ảnh chụp nhanh hiển thị trạng thái cơ sở dữ liệu hiện tại trước khi xóa dữ liệu.
Đây là ảnh chụp nhanh của lệnh sẽ xóa một hàng khỏi bảng Sinh viên.
DELETE FROM University.Student WHERE rollno = 1;
Sau khi thực thi thành công lệnh CQL Delete, một hàng sẽ bị xóa khỏi bảng Student tại vị trí có giá trị rollno là 1.
Đây là ảnh chụp nhanh hiển thị trạng thái cơ sở dữ liệu sau khi xóa dữ liệu.
Các bản ghi đánh dấu xóa (tombstones) tồn tại trong gc_grace_seconds, mặc định là mười ngày, để một nút ngoại tuyến trong quá trình xóa không thể khôi phục hàng đó khi nó quay lại. Do đó, việc xóa các khối lượng lớn sẽ để lại các dấu hiệu mà mọi lần đọc tiếp theo phải quét qua.
Điều gì Cassandra không hỗ trợ
CQL mượn cú pháp của SQL nhưng không mượn mô hình thực thi quan hệ, vì vậy một số cấu trúc quen thuộc hoạt động khác nhau hoặc không tồn tại.
- CQL không hỗ trợ phép nối giữa các bảng. Dữ liệu liên quan phải được chuẩn hóa lại và đưa vào một bảng duy nhất tại thời điểm ghi.
- CQL không hỗ trợ điều kiện OR trong mệnh đề WHERE. Hãy sử dụng IN trên một cột duy nhất, hoặc chạy các truy vấn riêng biệt.
- CQL không hỗ trợ UNION hoặc INTERSECT.
- Các cột không phải khóa chính không thể được lọc cho đến khi có chỉ mục trên chúng.
- Các phép so sánh lớn hơn và nhỏ hơn chỉ áp dụng cho các cột nhóm, vì chỉ những cột đó mới được sắp xếp trên đĩa.
- Việc khớp mẫu với LIKE yêu cầu chỉ mục SASI và không khả dụng trên các cột thông thường.
Một tuyên bố đã tồn tại từ lâu cần được đính chính. Các hàm tổng hợp được hỗ trợ: ĐẾM, GIÁ TRỊ NHỎ NHẤT, GIÁ TRỊ LỚN NHẤT, T� AVG đến Cassandra 2.2, và NHÓM THEO Đã có mặt trong phiên bản 3.10. Lưu ý là phạm vi áp dụng chứ không phải tính khả dụng.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Khi chỉ giới hạn trong một phân vùng như trên, phép tổng hợp rất hiệu quả. Nhưng khi thực hiện trên toàn bộ bảng, nó trở thành một quá trình quét trên toàn cụm, đó là lý do tại sao... Cassandra vẫn không phù hợp cho phân tích ad hoc và đó là lý do tại sao việc lập báo cáo chi tiết thường được đẩy mạnh. Spark hoặc kho ngoại vi.
Cassandra Trường hợp khoản
In Cassandra, việc truy xuất dữ liệu là một vấn đề nhạy cảm. Cột được lọc trong Cassandra bằng cách tạo chỉ mục trên các cột khóa không chính.
cú pháp
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Ví dụ
- Dưới đây là ảnh chụp nhanh hiển thị quá trình truy xuất dữ liệu từ bảng Sinh viên mà không cần lọc dữ liệu.
SELECT * FROM University.Student;
Hai bản ghi được lấy từ bảng Sinh viên.
- Dưới đây là ảnh chụp nhanh hiển thị quá trình truy xuất dữ liệu từ Sinh viên bằng quá trình lọc dữ liệu. Một bản ghi được lấy ra.
Dữ liệu được lọc theo cột tên. Tất cả các bản ghi có tên bằng với đều được truy xuất. Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Các quy tắc chi phối việc mệnh đề WHERE có thể tham chiếu đến cột nào xuất phát trực tiếp từ khóa chính.
- khóa phân vùng Thông tin này phải được cung cấp đầy đủ để thực hiện bất kỳ truy vấn hiệu quả nào, vì nó xác định nút chứa dữ liệu.
- Clustercột ing Sau đó, chúng có thể bị hạn chế, nhưng chỉ theo thứ tự đã được công bố. Bỏ quaping Một người bị từ chối.
- Việc so sánh phạm vi chỉ được phép trên cột phân cụm cuối cùng được tham chiếu, chứ không phải trên các cột trước đó.
- Bất kì cột khác cần một chỉ mục phụ, được đề cập trong tạo và xóa chỉ mục hướng dẫn.
Khi một truy vấn bị từ chối, Cassandra Thường thì nó đề xuất thêm tùy chọn ALLOW FILTERING. Hãy xem đó như một cảnh báo hơn là một giải pháp: nó quét mọi phân vùng trên mọi nút, và thay đổi lược đồ hầu như luôn là phản hồi đúng đắn.











