Cassandra là một cơ sở dữ liệu cột rộng phân tán, phi tập trung, có thể mở rộng và có tính sẵn sàng cao.
Theo định lý CAP, Cassandra là viết tắt của AP (tính khả dụng và dung sai phân vùng).
Điều đó có nghĩa là Cassandra ưu tiên tất cả các máy khách có thể tìm thấy dữ liệu ngay cả trong trường hợp không phải tất cả các nút đều có sẵn và sẽ hoạt động như mong đợi khi xảy ra lỗi một phần mạng. Tuy nhiên, điều đó cũng có nghĩa là tính nhất quán của dữ liệu có thể bị tổn hại vì tính khả dụng và dung sai phân vùng - người dùng sẽ thấy dữ liệu nhưng dữ liệu có thể cũ trong một thời gian.
Cassandra được thiết kế để đạt được thông lượng cao và thao tác ghi nhanh hơn.
Và chính việc hy sinh tính nhất quán đã cho phép Cassandra có tính sẵn sàng cao.
Theo mặc định, Cassandra được thiết kế để có tính nhất quán cuối cùng, nghĩa là nó có thể không mang lại tính nhất quán cao. Điều này làm cho Cassandra phù hợp với các ứng dụng mà tính nhất quán không phải là yêu cầu quan trọng. Tuy nhiên, có thể cấu hình Cassandra để mang lại sự nhất quán cao, mặc dù điều này có thể ảnh hưởng đến hiệu suất.
Cassandra, là cơ sở dữ liệu NoSQL, không hỗ trợ nối bảng, khóa ngoại hoặc khả năng thêm các cột không phải khóa chính trong mệnh đề WHERE trong khi truy vấn. Những hạn chế này cần được xem xét trước khi chọn sử dụng Cassandra.
Cassandra lưu trữ dữ liệu dưới dạng họ cột. Nó đóng vai trò là nơi chứa các cột được tham chiếu bằng khóa chính.
Một hàng của họ cột bao gồm một số cột có khóa và giá trị và khóa hàng đóng vai trò là khóa chính:
Một họ cột có thể lưu trữ một tập hợp các cột khác nhau cho mỗi khóa hàng:
Cassandra không lưu trữ các cột có giá trị null, giúp tiết kiệm không gian lưu trữ đáng kể
Khóa chính xác định duy nhất từng hàng của bảng. Trong Cassandra, khóa chính có hai phần:
Trong Cassandra, khóa phân vùng xác định nút nào lưu trữ dữ liệu, trong khi khóa phân cụm xác định cách dữ liệu được lưu trữ trong một nút. Ví dụ, hãy xem xét một bảng có
PRIMARY KEY (city_id, event_id)
. Khóa chính này bao gồm hai phần, được biểu thị bằng hai cột:
1. city_id
đóng vai trò là khóa phân vùng, nghĩa là dữ liệu sẽ được phân vùng dựa trên trường city_id
, dẫn đến tất cả các hàng có cùng city_id
sẽ được lưu trữ trên cùng một nút.
2. event_id
đóng vai trò là khóa phân cụm. Trong mỗi nút, dữ liệu được sắp xếp và lưu trữ theo thứ tự sắp xếp dựa trên cột event_id
.
Các khóa phân cụm xác định cách sắp xếp lưu trữ dữ liệu trong một nút. Có thể có nhiều khóa phân cụm và bất kỳ cột nào được liệt kê sau khóa phân vùng đều được gọi là cột phân cụm. Các cột phân cụm xác định thứ tự sắp xếp dữ liệu trên một nút.
Mỗi hàng có khóa phân vùng = "Paris" sẽ được lưu trữ trên cùng một nút, được sắp xếp theo giá trị của cột event_id.
Cassandra cung cấp phân vùng dữ liệu dựa trên Constant Hashing để giảm độ trễ trong hoạt động đọc/ghi và tăng thông lượng của hệ thống khi lượng dữ liệu được lưu trữ trong cơ sở dữ liệu trở nên lớn.
Trình phân vùng trong Cassandra chịu trách nhiệm quyết định cách phân phối dữ liệu trên vòng Hash nhất quán. Khi dữ liệu được chèn vào cụm Cassandra, trình phân vùng sẽ áp dụng thuật toán băm cho khóa phân vùng . Kết quả của thuật toán băm này xác định phạm vi dữ liệu rơi vào và xác định nút mà dữ liệu sẽ được lưu trữ trên đó.
Trong Cassandra, mỗi nút nhận thức được việc gán mã thông báo của các nút khác thông qua giao thức tin đồn , cho phép bất kỳ nút nào xử lý các yêu cầu cho bất kỳ phạm vi nào của nút khác. Do đó, máy khách có thể kết nối với bất kỳ nút nào để bắt đầu truy vấn đọc hoặc ghi.
Nút nhận được yêu cầu được gọi là nút điều phối và có thể là bất kỳ nút nào trong cụm. Nếu khóa không thuộc phạm vi của điều phối viên, yêu cầu sẽ được chuyển tiếp đến bản sao chịu trách nhiệm về phạm vi đó.
Cassandra sao chép dữ liệu trên nhiều nút để đảm bảo tính sẵn sàng cao. Mỗi nút trong Cassandra đóng vai trò là bản sao cho một phạm vi dữ liệu cụ thể. Bằng cách trải rộng nhiều bản sao dữ liệu trên các bản sao khác nhau, Cassandra cho phép các bản sao khác xử lý các truy vấn cho phạm vi dữ liệu đó trong trường hợp một nút không khả dụng. Hai cài đặt sẽ ảnh hưởng đến quá trình sao chép:
Hệ số sao chép xác định số lượng nút sẽ lưu trữ các bản sao của cùng một dữ liệu. Trong một cụm có hệ số sao chép là 3, mỗi hàng sẽ được lưu trữ trên ba nút khác nhau.
Mỗi keyspace trong Cassandra có thể có hệ số sao chép khác nhau.
Trong Cassandra, bản sao đầu tiên được gán cho nút sở hữu phạm vi dựa trên hàm băm của khóa phân vùng. Các bản sao còn lại sau đó được đặt trên các nút liên tiếp theo chiều kim đồng hồ. Cassandra sử dụng hai chiến lược sao chép để xác định nút nào sẽ chịu trách nhiệm cho các bản sao:
Trong chiến lược này, bản sao đầu tiên được đặt trên một nút được xác định bởi trình phân vùng và các bản sao tiếp theo được đặt trên các nút tiếp theo theo chiều kim đồng hồ.
Chiến lược nhân rộng này chỉ được áp dụng cho một cụm trung tâm dữ liệu duy nhất.
Để đảm bảo khả năng phục hồi chống mất dữ liệu hoàn toàn, các bản sao bổ sung trong cùng một trung tâm dữ liệu được đặt bằng cách di chuyển theo chiều kim đồng hồ dọc theo vòng cho đến khi đến nút đầu tiên ở một trung tâm dữ liệu khác. Sự sắp xếp này giúp giảm thiểu tác động của các lỗi đồng thời thường xảy ra trong cùng một trung tâm dữ liệu do sự cố về nguồn, làm mát hoặc mạng.
Khi nói đến cấu hình đa trung tâm dữ liệu, bạn nên xem xét chiến lược cấu trúc liên kết mạng. Cách tiếp cận này cho phép đặc tả các hệ số sao chép khác nhau cho mỗi trung tâm dữ liệu, cho phép kiểm soát số lượng bản sao được đặt ở từng vị trí cụ thể.
Cassandra vượt trội trong các ứng dụng yêu cầu xử lý khối lượng dữ liệu lớn và ưu tiên tính khả dụng của dữ liệu hơn tính nhất quán. Nó rất phù hợp cho :
1. Ứng dụng Internet of Things (IoT) : Cassandra là một lựa chọn lý tưởng cho môi trường IoT, vì nó có thể xử lý lượng dữ liệu khổng lồ được tạo ra bởi các thiết bị và cảm biến. Kiến trúc phân tán của nó cho phép quản lý dữ liệu quy mô lớn, phân tán về mặt địa lý.
2. Dữ liệu chuỗi thời gian : Các ứng dụng xử lý dữ liệu chuỗi thời gian, chẳng hạn như số liệu, hệ thống giám sát và dữ liệu đo từ xa, được hưởng lợi từ hoạt động ghi hiệu quả và khả năng mở rộng theo chiều ngang của Cassandra. Những khả năng này rất quan trọng để lưu trữ và quản lý khối lượng lớn dữ liệu được đánh dấu thời gian.
3. Ứng dụng web và di động : Cassandra cung cấp khả năng truy cập dữ liệu thông lượng cao và độ trễ thấp, khiến nó phù hợp với nền tảng web và di động có cơ sở người dùng lớn tạo ra lượng dữ liệu đáng kể. Điều này bao gồm các nền tảng truyền thông xã hội, ứng dụng trò chơi và trang web thương mại điện tử.
4. Phân tích dữ liệu lớn theo thời gian thực : Cassandra hỗ trợ xử lý dữ liệu lớn theo thời gian thực, khiến nó trở thành lựa chọn có giá trị cho các ứng dụng yêu cầu thông tin chi tiết ngay lập tức từ các bộ dữ liệu lớn. Ví dụ bao gồm các công cụ đề xuất và hệ thống phát hiện gian lận.
5. Kho dữ liệu phân tán : Các doanh nghiệp có bộ dữ liệu phân tán lớn có thể tận dụng Cassandra làm giải pháp kho dữ liệu. Khả năng sao chép dữ liệu trên nhiều trung tâm dữ liệu của nó đảm bảo tính sẵn sàng cao và khắc phục thảm họa.
6. Hệ thống nhắn tin : Thông lượng ghi và đọc cao của Cassandra khiến nó rất phù hợp với các hệ thống nhắn tin xử lý khối lượng dữ liệu lớn, chẳng hạn như ghi nhật ký sự kiện, đường kiểm tra hoặc hàng đợi tin nhắn.
7. Hệ thống quản lý nội dung và cá nhân hóa : Các ứng dụng yêu cầu phân phối nội dung được cá nhân hóa trên quy mô lớn, chẳng hạn như hệ thống quản lý nội dung, được hưởng lợi từ tốc độ và khả năng mở rộng của Cassandra trong việc cung cấp nội dung tùy chỉnh cho nhiều người dùng cùng một lúc.
8. Ứng dụng phân tán theo địa lý : Khả năng hỗ trợ của Cassandra dành cho nhiều trung tâm dữ liệu khiến nó trở thành lựa chọn tuyệt vời cho các ứng dụng yêu cầu dữ liệu phân bố theo địa lý. Nó đảm bảo truy cập dữ liệu có độ trễ thấp trên các khu vực khác nhau và mang lại khả năng phục hồi cao.
Mặc dù Apache Cassandra mạnh mẽ và có khả năng mở rộng nhưng nó có thể không phù hợp với mọi ứng dụng hoặc trường hợp sử dụng. Nó ít phù hợp hơn với các ứng dụng nặng về giao dịch, truy vấn phức tạp và các tình huống yêu cầu tính nhất quán cao hoặc thay đổi lược đồ nhanh chóng. Các hệ thống quản lý cơ sở dữ liệu quan hệ truyền thống (RDBMS) hoặc các giải pháp NoSQL khác có thể phù hợp hơn trong những trường hợp như vậy. Dưới đây là một số tình huống trong đó Cassandra có thể không phải là lựa chọn tối ưu :
Dự án quy mô nhỏ : Các yêu cầu về tài nguyên và độ phức tạp của Cassandra có thể quá mức đối với các dự án hoặc ứng dụng quy mô nhỏ có bộ dữ liệu hạn chế. Các giải pháp cơ sở dữ liệu đơn giản hơn có thể mang lại giải pháp thay thế hiệu quả hơn và dễ quản lý hơn.
Hệ thống giao dịch yêu cầu thuộc tính ACID : Cassandra không hỗ trợ đầy đủ các thuộc tính ACID (Tính nguyên tử, tính nhất quán, cách ly, độ bền). Nếu ứng dụng của bạn yêu cầu các giao dịch phức tạp thường thấy trong hệ thống tài chính hoặc ngân hàng thì RDBMS truyền thống có thể phù hợp hơn.
Tham gia các truy vấn và tập hợp nặng : Nếu ứng dụng của bạn phụ thuộc nhiều vào các phép nối, truy vấn phụ hoặc các tập hợp phức tạp, Cassandra có thể không phải là lựa chọn phù hợp nhất. Nó được thiết kế để ghi và đọc nhanh nhưng không dùng để xử lý truy vấn phức tạp.
Dữ liệu có yêu cầu nhất quán mạnh mẽ : Cassandra cung cấp tính nhất quán cuối cùng, có thể không phù hợp với các trường hợp sử dụng yêu cầu tính nhất quán cao cho mọi thao tác đọc và ghi.
Đọc và ghi có độ trễ thấp trong một cụm đơn : Mặc dù Cassandra hoạt động tốt trong môi trường phân tán nhiều nút, nhưng nó có thể không phải là lựa chọn tối ưu cho việc triển khai một nút hoặc cụm nhỏ yêu cầu đọc và ghi có độ trễ thấp.
Bộ nhớ Blob : Cassandra không được tối ưu hóa để lưu trữ các đối tượng nhị phân (blob) lớn như hình ảnh hoặc video. Các giải pháp lưu trữ khác phù hợp hơn để xử lý hiệu quả các đốm màu lớn.
Các ứng dụng yêu cầu truy vấn đặc biệt : Khả năng truy vấn của Cassandra bị hạn chế so với cơ sở dữ liệu SQL chính thức. Nó không phù hợp lắm cho các ứng dụng phụ thuộc nhiều vào truy vấn và báo cáo đặc biệt.
Trong Cassandra, thiết kế bảng được kết nối chặt chẽ với cách truy cập dữ liệu, nhấn mạnh vào các mẫu truy vấn thay vì chỉ tập trung vào mối quan hệ giữa các thực thể dữ liệu. Điều này khác với cách tiếp cận trong RDBMS, trong đó thiết kế lược đồ dựa trên các nguyên tắc chuẩn hóa.
Tiến hóa lược đồ nhanh : Nếu ứng dụng của bạn yêu cầu thay đổi thường xuyên đối với lược đồ cơ sở dữ liệu, việc quản lý lược đồ của Cassandra có thể kém linh hoạt hơn so với các hệ thống RDBMS truyền thống hoặc các giải pháp NoSQL khác.
Ứng dụng kho dữ liệu liên quan đến các truy vấn, kết nối và phân tích dữ liệu lịch sử phức tạp : Mặc dù Cassandra rất phù hợp với khối lượng công việc ghi nhiều và truy cập dữ liệu theo thời gian thực, nhưng nó có thể không phải là lựa chọn phù hợp nhất cho các tình huống lưu trữ dữ liệu yêu cầu các truy vấn phức tạp, tham gia và phân tích dữ liệu lịch sử.
Bài viết này cung cấp thông tin tổng quan về Cassandra, một cơ sở dữ liệu cột rộng phân tán và có khả năng mở rộng cao. Cassandra được thiết kế để ưu tiên tính khả dụng và dung sai phân vùng, giúp nó phù hợp với các ứng dụng mà tính nhất quán không phải là yêu cầu quan trọng. Nó hỗ trợ thông lượng cao và hoạt động ghi nhanh hơn.
Các khối xây dựng của Cassandra bao gồm các cột, hàng, không gian khóa, cụm và nút. Các cột biểu thị các cặp khóa-giá trị, các hàng đóng vai trò là vùng chứa cho các cột được tham chiếu bởi khóa chính, các không gian khóa đóng vai trò là vùng chứa cho các bảng trải rộng trên nhiều nút, các cụm chứa các không gian khóa và các nút đề cập đến các hệ thống máy tính chạy phiên bản Cassandra.
Cassandra lưu trữ dữ liệu trong các họ cột, là nơi chứa các cột được tham chiếu bằng khóa chính. Việc phân vùng dữ liệu đạt được thông qua việc băm nhất quán, cho phép giảm độ trễ và tăng thông lượng. Trình phân vùng phân phối dữ liệu trên vòng Hash nhất quán và nút điều phối xử lý các truy vấn đọc và ghi.
Cassandra cung cấp bản sao để có tính sẵn sàng cao. Bản sao của dữ liệu được lưu trữ trên nhiều nút, đảm bảo rằng các truy vấn có thể được xử lý bằng bản sao nếu nút không khả dụng. Các yếu tố và chiến lược sao chép xác định số lượng bản sao và các nút chịu trách nhiệm về chúng.
Mặc dù Cassandra mang lại những lợi ích như khả năng mở rộng và tính sẵn sàng cao nhưng nó cũng có những hạn chế. Nó không hỗ trợ nối bảng, khóa ngoại hoặc khả năng thêm các cột không phải khóa chính trong mệnh đề WHERE trong khi truy vấn.
Nhìn chung, Cassandra là một giải pháp cơ sở dữ liệu mạnh mẽ dành cho các ứng dụng có khả năng mở rộng cao, đặc biệt là những ứng dụng ưu tiên tính khả dụng và dung sai phân vùng hơn là tính nhất quán cao.
Có một số khía cạnh thú vị của Cassandra mà tôi sẽ đề cập trong bài viết tiếp theo của mình. Hãy subscribe cho tôi để không bỏ lỡ nhé!
Chúc mừng!