+24 votes
,post bởi

Ngoài việc tính toán kích thước của một phân vùng, bạn cũng nên ước tính dung lượng ổ đĩa cần thiết cho mỗi bảng mà bạn định lưu trữ trong cụm. Để xác định kích thước, sử dụng công thức sau để xác định kích thước S t của một phân vùng:

\[S_t = \displaystyle\sum_i sizeOf\big (c_{k_i}\big) + \displaystyle\sum_j sizeOf\big(c_{s_j}\big) + N_r\times \bigg(\displaystyle\sum_k sizeOf\big( c_{r_k}\big) + \displaystyle\sum_l sizeOf\big(c_{c_l}\big)\bigg) +\]
\[N_v\times sizeOf\big(t_{avg}\big)\]

Công thức này phức tạp hơn một chút so với công thức trước đó, nhưng chúng ta hãy chia nhỏ nó ra từng chút một. Trước tiên chúng ta hãy xem ký hiệu:

  • Trong công thức này, c k đề cập đến các cột khóa phân vùng, c s là cột tĩnh, c r là cột thông thường và c c là cột nhóm.

  • Thuật ngữ t avg đề cập đến số byte trung bình của siêu dữ liệu được lưu trữ trên mỗi ô, chẳng hạn như dấu thời gian. Thông thường sử dụng ước tính 8 byte cho giá trị này.

  • Bạn sẽ nhận ra số hàng N r và số giá trị N v từ các tính toán trước đó.

  • Hàm sizeOf() đề cập đến kích thước tính bằng byte của loại dữ liệu CQL của mỗi cột được tham chiếu.

Thuật ngữ đầu tiên yêu cầu bạn tính tổng kích thước của các cột khóa phân vùng. Đối với ví dụ này, available_rooms_by_hotel_datebảng có một cột khóa phân vùng duy nhất, hotel_idthuộc loại textGiả sử rằng số nhận dạng khách sạn là mã gồm 5 ký tự đơn giản, bạn có giá trị 5 byte, vì vậy tổng kích thước cột khóa phân vùng là 5 byte.

Thuật ngữ thứ hai yêu cầu bạn tính tổng kích thước của các cột tĩnh. Bảng này không có cột tĩnh, vì vậy kích thước là 0 byte.

Thuật ngữ thứ ba liên quan nhiều nhất và vì lý do chính đáng—nó đang tính toán kích thước của các ô trong phân vùng. Tính tổng kích thước của các cột nhóm và cột thông thường. Hai cột phân cụm là date, là 4 byte và room_number, là một số nguyên ngắn 2 byte, cho tổng 6 byte. Chỉ có một cột thông thường duy nhất, boolean is_available, có kích thước 1 byte. Tổng kích thước cột thông thường (1 byte) cộng với kích thước cột phân cụm (6 byte) cho tổng số 7 byte. Để kết thúc thuật ngữ, hãy nhân giá trị này với số hàng (73.000), cho kết quả là 511.000 byte (0,51 MB).

Thuật ngữ thứ tư chỉ đơn giản là đếm siêu dữ liệu mà Cassandra lưu trữ cho mỗi ô. Trong định dạng lưu trữ được sử dụng bởi Cassandra 3.0 trở lên, lượng siêu dữ liệu cho một ô nhất định thay đổi dựa trên loại dữ liệu được lưu trữ và liệu các giá trị TTL hoặc dấu thời gian tùy chỉnh có được chỉ định cho từng ô hay không. Đối với bảng này, hãy sử dụng lại số lượng giá trị từ phép tính trước đó (73.000) và nhân với 8, kết quả là 0,58 MB.

Cộng các số hạng này lại với nhau, bạn sẽ có ước tính cuối cùng:

\[Kích thước phân vùng = 16 byte + 0 byte + 0,51 MB + 0,58 MB = 1,1 MB\]

Công thức này gần đúng với kích thước thực của một phân vùng trên đĩa, nhưng đủ chính xác để khá hữu ích. Hãy nhớ rằng phân vùng phải có khả năng vừa với một nút duy nhất, có vẻ như thiết kế bảng sẽ không gây quá nhiều khó khăn cho việc lưu trữ trên đĩa.

Công cụ lưu trữ của Cassandra đã được triển khai lại cho bản phát hành 3.0, bao gồm một định dạng mới cho các tệp SSTable. Định dạng trước đó đã lưu trữ một bản sao riêng biệt của các cột nhóm như một phần của bản ghi cho mỗi ô. Định dạng mới hơn loại bỏ sự trùng lặp này, giúp giảm kích thước của dữ liệu được lưu trữ và đơn giản hóa công thức tính toán kích thước đó.

Cũng xin lưu ý rằng ước tính này chỉ tính một bản sao dữ liệu duy nhất. Bạn sẽ cần nhân giá trị thu được ở đây với số phân vùng và số bản sao được chỉ định bởi chiến lược sao chép của không gian khóa để xác định tổng dung lượng cần thiết cho mỗi bảng. Điều này sẽ có ích khi bạn lập kế hoạch cho cụm của mình

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
Anti-spam verification:
To avoid this verification in future, please log in or register.
...