Kể từ khi được phát triển vào năm 2007, Apache Cassandra đã tạo dựng được danh tiếng là một kho lưu trữ dữ liệu NoSQL vững chắc, có khả năng mở rộng cao và đáng tin cậy được sử dụng bởi một số doanh nghiệp lớn nhất trên thế giới. Nhưng cũng cần có một mức độ kinh nghiệm và chuyên môn nhất định để làm việc với Cassandra. Vì vậy, có rất nhiều câu hỏi đặt ra khi tìm hiểu về cơ sở dữ liệu mã nguồn mở này là điều dễ hiểu.
Bài viết này đề cập đến một số câu hỏi hàng đầu mà các nhà phát triển đặt ra trên nhiều diễn đàn cộng đồng.
Hiểu khóa chính trong cơ sở dữ liệu nhiều cột khác với khóa chính quan hệ như thế nào là một bước quan trọng trong việc học cách sử dụng sức mạnh của Cassandra.
Các cửa hàng có nhiều cột như Cassandra sử dụng khái niệm họ cột, một đối tượng cơ sở dữ liệu chứa nhiều cột dữ liệu có liên quan được sử dụng cùng nhau, tương tự như các bảng cơ sở dữ liệu quan hệ truyền thống. Trong một họ cột nhất định, tất cả dữ liệu được lưu trữ theo kiểu từng hàng, sao cho các cột của một hàng nhất định được lưu trữ cùng nhau, thay vì lưu trữ riêng từng cột.
Nói cách khác, họ cột là một cặp khóa-giá trị, trong đó khóa được ánh xạ tới một giá trị là một tập hợp các cột. Để rút ra một sự tương tự với cơ sở dữ liệu quan hệ, một họ cột giống như một “bảng”, với mỗi cặp khóa-giá trị là một “hàng”. Đối với nhà phát triển, bảng nhiều cột có thể tự hiển thị dưới dạng bảng hàng và cột quen thuộc và dễ làm việc, bằng mã hoặc thông qua API.
Hãy xem xét một số mã ví dụ để giúp đưa các khái niệm vào cuộc sống.
Trong đoạn mã trên, chúng ta có một không gian khóa, một số trường như “thành phố”, “họ” và “tên”. Khóa chính nằm ở dưới cùng. Nhân tiện, tất cả các bảng trong Cassandra phải bao gồm ít nhất một khóa phân vùng. Trong ví dụ được đánh dấu bằng hình ảnh trên, chúng tôi sẽ phân vùng theo “thành phố”.
Bất cứ điều gì khác theo sau là một cột cụm. Lưu ý các dấu ngoặc đơn xung quanh “thành phố” - điều này cho biết đây là khóa phân vùng. Chúng tôi sử dụng dấu ngoặc đơn để cho biết khóa phân vùng là gì, trong trường hợp khóa phân vùng của bạn là khóa tổng hợp và có nhiều hơn một cột. Sau đó, rõ ràng cột nào dành cho khóa chính và cột nào là cột nhóm.
Mục đích chính của khóa chính là để đảm bảo rằng một hàng là duy nhất. Nó cũng có thể chứa 0 hoặc nhiều cột phân cụm, có thể kiểm soát việc sắp xếp. Nhưng khóa chính cũng có thể là “tổng hợp” hoặc “phức hợp”, có nghĩa là khóa có hai hoặc nhiều cột.
Khóa phân vùng được sử dụng để phân vùng các hàng của chúng tôi và có một hoặc nhiều cột.
Một số người dường như nghĩ rằng trình điều khiển khách hàng chỉ gửi dữ liệu đến một nút ngẫu nhiên. Nhưng thực sự có một cách không ngẫu nhiên mà tài xế của bạn chọn một nút để nói chuyện. Nút này được gọi là nút điều phối viên. Nó thường được chọn vì nó gần nhất.
Các yêu cầu của máy khách có thể được gửi đến bất kỳ nút nào — và lúc đầu, chúng được gửi đến các nút mà trình điều khiển của bạn biết. Nhưng một khi phần mềm trình điều khiển kết nối và hiểu cấu trúc liên kết của cụm của bạn, nó có thể thay đổi thành một bộ điều phối gần hơn. Xem dự án hệ sinh thái mã nguồn mở Stargate để tìm hiểu cách tính toán và lưu trữ có thể được tách biệt để có khả năng mở rộng.
Các nút trong cụm Cassandra mã nguồn mở trao đổi thông tin cấu trúc liên kết với nhau bằng giao thức tin đồn. Người buôn chuyện chạy mỗi giây và đảm bảo rằng tất cả các nút được cập nhật với dữ liệu từ bất kỳ snitch nào bạn đã định cấu hình. Snitch theo dõi xem mỗi nút thuộc về trung tâm dữ liệu và giá đỡ nào. Bằng cách này, nút điều phối viên cũng có dữ liệu về những nút nào chịu trách nhiệm cho từng phạm vi mã thông báo.
Bạn có thể xem thông tin này bằng cách chạy công cụ nút “ring” từ dòng lệnh, mặc dù nếu bạn đang sử dụng các nút ảo hoặc “vnode”, thì sẽ khó hơn một chút để xác định dữ liệu trên tất cả 256 nút ảo (mặc định lượng) sẽ nhấp nháy khá nhanh trên màn hình.
Trên K8ssandra.io , hành vi này giống với Kubernetes hơn và Etcd được sử dụng thay cho giao thức Gossip để truyền bá siêu dữ liệu cụm cũng như các bản cập nhật lược đồ an toàn.
Lập chỉ mục là khá tinh tế. Nó giúp hiểu được nội bộ cơ sở dữ liệu. Làm thế nào để truy vấn này hoạt động nội bộ trong Cassandra? Hãy xem mã ví dụ này:
Làm thế nào để truy vấn này hoạt động nội bộ trong Cassandra?
Về cơ bản, tất cả dữ liệu cho phân vùng có ID phạm vi bằng 35 và ID biểu mẫu bằng 78005 sẽ được trả về, sau đó dữ liệu sẽ được lọc theo chỉ mục ID liên kết bản ghi. Nó sẽ xem hoặc mục nhập ID chỉ mục bản ghi cho 9897 và cố gắng so khớp các mục khớp với các hàng được trả về trong đó ID phạm vi bằng 35 và ID biểu mẫu bằng 78005. Giao điểm của các hàng dành cho khóa phân vùng và khóa chỉ mục sẽ được trả về .
Bạn có thể hỏi một cách hợp lý liệu một cột có số lượng thẻ cao như chỉ mục ID liên kết bản ghi có ảnh hưởng đến hiệu suất truy vấn cho điều đó hay không. Các chỉ số cardinality cao về cơ bản tạo một hàng cho hầu hết mỗi mục trong bảng chính. Hiệu suất có thể bị ảnh hưởng vì Cassandra được thiết kế để đọc tuần tự các kết quả truy vấn. Một truy vấn chỉ mục về cơ bản buộc Cassandra phải thực hiện các lần đọc ngẫu nhiên khi số lượng chỉ mục của bạn tăng lên, do đó, thời gian cần thiết để tìm giá trị được truy vấn cũng tăng theo.
Vì vậy, liệu Cassandra có chạm vào tất cả các nút cho truy vấn trên không? Không, nó chỉ nên chạm vào nút chịu trách nhiệm cho ID phạm vi đó bằng 35 và ID biểu mẫu đó bằng phân vùng 78005. Tương tự như vậy, các chỉ mục được lưu trữ cục bộ và chỉ chứa các mục nhập hợp lệ cho nút cục bộ.
Cassandra là một cơ sở dữ liệu NoSQL nguồn mở cung cấp năng lượng cho các ứng dụng phân tán mà bạn có thể đang sử dụng hàng ngày, ở quy mô lớn. Tuy nhiên, tùy thuộc vào bạn và nhóm của bạn để tự quản lý.
Mặt khác, Astra DB là một dịch vụ cơ sở dữ liệu không có máy chủ. Đó là dịch vụ đám mây tự động thay đổi quy mô, được quản lý hoàn toàn, được xây dựng trên Cassandra và chạy trên nhà cung cấp đám mây công cộng do bạn chọn.
Với việc bổ sung cổng API dữ liệu nguồn mở Stargate , cả Cassandra và Astra DB đều phục vụ khối lượng công việc NoSQL tài liệu, cột và khóa-giá trị. Và với Astra DB, Stargate được thiết lập tự động cho bạn.
Bạn muốn tìm hiểu thêm về Cassandra? Tham gia với chúng tôi tại Cassandra Forward , một sự kiện kỹ thuật số miễn phí vào ngày 14 tháng 3!
Cũng được xuất bản ở đây .