Quản lí và truy cập dữ liệu trong Apache Cassandra: GHI :

Một phần của tài liệu TIỂU LUẬN MÔN CƠ SƠ DỮ LIỆU NÂNG CAO Tìm hiểu Hệ quản trị CSDL Phân Tán và hệ QTCSDLPT Apache Cassandra (Trang 26)

Apache Cassandra được tối ưu cho việc ghi nhanh và luôn sẵn sàng để ghi. Không giống như CSDL quan hệ với các bảng có cấu trúc để giữ trùng lặp dữ liệu là nhỏ nhất, và được định nghĩa từ trước hay tính đến tính toàn vẹn trong việc ghi dữ liệu, Apache Cassandra được tối ưu cho việc ghi với số lượng lớn. Dữ liệu ban đầu được ghi commit log và sau đó được ghi vào bảng bộ nhớ được gọi là memtable. Một thao tác ghi được gọi là thành công nếu việc ghi commit log và memtable thành công, vì vậy rất ít thao tác I/O của đĩa cứng trong thời gian ghi. Việc ghi được lưu theo lô vào bộ nhớ và được ghi đình kì vào đĩa cứng qua bảng SSTable (Sorted String). Memtable được tổ chức trong thứ tự sắp xếp bởi các khóa hàng và được đổ vào SSTable tuần tự.

SSTable là không biến đổi, có nghĩa là khi đổ để ghi rồi thì không được đổ lại). Điều này cũng có nghĩa một hàng được lưu trữ trên nhiều SSTable, trong quá trình đọc phải kết hợp dữ liệu ở các SSTable khác nhau có được dữ liệu yêu cầu. Để tối ưu hóa quá trình này Apache Cassandra dùng một bộ lọc có tên là bloom filter, mỗi SSTable có một bộ lọc này và dung fđể kiểm tra nếu một yêu cầu khóa hàng có tồn tại trong bảng SSTable của mình không trước khi tìm kiếm dữ liệu ở đĩa cứng.

Một tiến trình có tên compaction cũng được dùng để tối ưu việc ghi bằng cách nối các hàng bị phân mảng, xóa các dữ liệu không cần thiết hay xây dựng lại các chỉ mục … Với một hệ Cơ sở dữ liệu phân tán thỏa mãn 4 tính chất ACID (Atomic, Consistent, Isolated, Durable), Apache Cassandra chỉ thỏa mãn một vài tính chất với tiên chỉ tăng tính ghi nhanh và luôn sẵn sàng. Việc cập nhật hay chèn trong Apache Cassandra được coi như là việc ghi, không hỗ trợ việc cập nhật nhiều hàng trong một hoạt động. Apache Cassandra cũng không quay trở lại trạng thái ban đầu trong trường hợp lỗi ghi xảy ra

trong quá trình sao lưu, ví dụ nếu có 3 node sao lưu, dữ liệu được ghi vào đúng 2 node và sai 1 node thì vẫn ghi log nhưng không quay trở lại mà chấp nhận dữ liệu sai.

Apache Cassandra cũng sử dụng timestamp được cung cấp và cập nhật bằng ứng dụng máy khách để so sánh trong quá trình yêu cầu dữ liệu, và đồng bộ các node sau đó, vì thế dữ liệu mới nhất sẽ tồn tại.

Việc ghi trong Apache Cassandra thỏa mãn tính durable, việc ghi sao lưu vào các node được ghi nhận bởi bộ nhớ và commit log trước khi tính hiệu ghi thành công đượ trả về. Nếu lỗi trước khi memtable được đổ ra đĩa cứng, commit log sẽ khởi động lại để phục hồi việc ghi lỗi.

Việc xóa dữ liệu : dữ liệu được xóa trong Apache Cassandra được đưa vào tombstone

trước với một thời gian tồn tại, quá thời gian tiến trình compaction sẽ tự xóa trong tombstone.

Việc ghi Hinted handoff : là cơ chế giúp giảm thời gian phục hồi khi node lỗi, nếu như

việc ghi có lỗi xảy ra ở một trong các node sao lưu thì node sao lưu khác sẽ lưu hint (bao gồm vị trí ghi và dữ liệu được ghi) và sẽ ghi lại vào node sao lưu khi nó phục hồi. Trường hợp tất cả các node sao lưu lỗi thì node điều sẽ nhận hint nhưng dữ liệu sẽ không được đọc từ máy khách cho đến khi nó thực sự được ghi lên node cần ghi.

ĐỌC :

Trong Apache Cassandra, khi một yêu cầu đọc được đưa ra cho một hàng được tới node, hàng sẽ được kết hợp từ các SSTable khác nhau, mỗi SSTable sẽ chứa các cột ứng với hàng cần đọc. Apache Cassandra cũng sử dụng cơ chế bộ nhớ trong bloom filter để tìm nhanh xem dữ liệu cột của hàng được yêu cầu có nằm trong SSTable không.

Việc đọc là nhanh nhất khi dữ liệu cần đọc được ở trong bộ nhớ sẵn, việc dùng bộ nhớ đệm của Apache Cassandra hạn chế tối đa ảnh hưởng lên đĩa cứng khi dữ liệu nằm ngoài vùng nhớ đệm, và có thể giải quyết việc tăng hoạt đông truy xuất bằng cách thêm node vào cluster.

Với những hàng thường xuyên được truy nhập, Apache Cassandra cũng có một bộ đêm có tên là key-cache dành riêng.

Một phần của tài liệu TIỂU LUẬN MÔN CƠ SƠ DỮ LIỆU NÂNG CAO Tìm hiểu Hệ quản trị CSDL Phân Tán và hệ QTCSDLPT Apache Cassandra (Trang 26)