1. Trang chủ >
  2. Kỹ thuật >
  3. Điện - Điện tử - Viễn thông >

6 Các kiểu dữ liệu (Comparators và Validators)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.52 MB, 50 trang )


3.6.1 Validators

Với tất cả các column family, cách thực hành tốt nhất là định nghĩa một kiểu dữ

liệu cho khóa dòng sử dụng thuộc tính key_validation_class.

Với các column family tĩnh, bạn nên định nghĩa một cột và kiểu dữ liệu tương ứng

khi bạn định nghĩa column family sử dụng thuộc tính column_metadata.

Với các column family động (các tên cột không được biết trước), bạn nên chỉ ra

một default_validation_class thay vì định nghĩa kiểu dữ liệu cho từng cột.

Các validator cho khóa và cột có thể được thêm vào hoặc thay đổi trong định nghĩa

column family bất cứ khi nào. Nếu bạn chỉ định một validator không hợp lệ trên column

family, yêu cầu tới dữ liệu đó có thể bị nhầm lẫn, và việc thêm hay cập nhật dữ liệu khong

tuân theo validator đã chỉ định sẽ bị từ chối.

3.6.2 Comparators

Trong một dòng, các cột luôn được lưu trữ theo thứ tự sắp xếp theo tên cột.

Comparator chỉ ra kiểu dữ liệu cho tên cột, cũng như thứ tự sắp xếp mà các cột được lưu

trong một dòng. Không giống validator, comparator có thể không được thay đổi sau khi

column family được định nghĩa, nên đây là một xem xét quan trọng khi định nghĩa một

column family trong Cassandra.

Thường thì tên của column family tĩnh thường là kiểu chuỗi, và thứ tự sắp xếp của

cột không quan trọng. Với các column family động, thứ tự sắp xếp lại quan trọng. Ví dụ,

trong một column family lưu trữ dữ liệu chuỗi thời gian (tên cột và nhãn thời gian), có dữ

liệu theo thứ tự sắp xếp được cần đến để trích ra tập kết quả từ một dòng các cột.



3.7 Nén column family

Việc nén dữ liệu có thể được cấu hình trên mỗi column family. Việc nén này sẽ tối

đa hóa dung lượng lưu trữ của các node Cassandra bằng cách giảm dung lượng dữ liệu

trên đĩa. Hơn nữa ngoài tiết kiệm không gian lưu trữ, việc nén cũng giảm vào ra đĩa, đặc

biệt là cho các công việc chỉ đọc.

Bên cạnh việc giảm kích thước dữ liệu, việc nén thường cải thiện cả hiệu năng đọc

và ghi. Cassandra có thể nhanh chóng tìm ra vị trí của các dòng trong chỉ mục SSTable,

và chỉ giải nén nhóm dữ liệu có liên quan. Điều này có nghĩa việc nén cải thiện hiệu năng

đọc không chỉ bằng cách cho phép lưu trữ được nhiều dữ liệu hơn trên bộ nhớ mà còn có

lợi với các công việc có tập dữ liệu không đặt vừa vào bộ nhớ.



43



Không giống như cơ sở dữ liệu truyền thống, hiệu năng ghi bị ảnh hưởng tiêu cục

bởi việc nén trong Cassandra. Ghi dữ liệu trên các bảng đã nén trong thực tế đã cho thấy

cải thiện được 10% hiệu năng. Trong cơ sở dữ liệu quan hệ truyền thống, việc ghi đòi hỏi

ghe đè lên các file dữ liệu đang tồn tại trên đĩa. Điều này nghĩa là các cơ sở dữ liệu phải

định vị các trang liên quan trên đĩa, giải nén chúng, ghi đè dữ liệu liên quan lên, và sau đó

lại nén lại (một thao tác đắt đỏ về cả sử dụng CPU và vào ra đĩa).

Vì các file dữ liệu Cassandra SSTable là bất biến (chúng không dược viết lại sau

khi đã được ghi vào đĩa), khong cần phải giản nén để xử lý thao tác ghi. SSTable chỉ được

nén một lần, khi chúng được ghi vào đĩa.

Việc nén có thể đưa lại các lợi ích sau, phụ thuộc vào đặc trưng dữ liệu của column

family:

• Giảm 2x-4xtrong kích thước dữ liệu

• Cải thiện 25-35% hiệu năng đọc

• Cải thiện 5-10% hiệu năng của thao tác ghi.

3.7.1 Khi nào sử dụng nén

Nén phù hợp nhất cho các column family có nhiều dòng, mỗi dòng có cùng số cột,

hoặc ít nhất có nhiều cột chung. Ví dụ, một column family chứa dữ liệu người dùng như

tên, email… có thể là ứng cử viên tốt cho việc nén. Càng có nhiều dữ liệu tương đồng trên

các dòng tỉ lệ nén càng lớn, và đạt được hiệu năng đọc tốt hơn.

Nén khong tốt đối với các column family mà mỗi dòng có tập các cột khác nhau, hoặc có

rất ít dòng rộng. Column family động như vậy sẽ không tốt trong tỉ lệ nén.

3.7.2 Cấu hình nén cho một Column Family

Khi bạn tạo hay cập nhật một column family, bạn có thể chọn làm nó thành một

column family nén bằng cách thiết lập thuộc tính compression_options. Bạn có thể cho

phép nén khi bạn tạo một column family mới, hoặc cập nhật một column family đã có để

thêm việc nén vào sau. Khi bạn thêm thao tác nén vào một column family mới, SSTable

dã có trên đĩa khong được nén ngay lập tức. Bất cứ SSTable mới nào được tạo ra cũng sẽ

được nén, và các SSTable đã có sẽ được nén trong quá trình nén Cassandra thông thường.

Nếu cần, bạn có thể ép buộc các bảng SSTable đã có được ghi lại và nén bằng cách sử

dụng một số nodetool.

Ví dụ, để tạo ra một column family mới có thực hiện nén bằng Cassandra CLI, bạn

làm như sau:

44



[default@demo]

CREATE

COLUMN

FAMILY

key_validation_class=UTF8Type AND column_metadata = [

{column_name: name, validation_class:

validation_class: UTF8Type} {column_name:

state, validation_class: UTF8Type}

UTF8Type} {column_name: birth_year,



UTF8Type}



{column_name:



users



{column_name:



gender,



validation_class:

LongType}

]

compression_options={sstable_compression:SnappyCompressor,



WITH



email,



validation_class:



AND



chunk_length_kb:64};



3.8 Chỉ mục trong Cassandra

Một chỉ mục là một cấu trúc dữ liệu cho phép tìm kiếm dữ liệu nhanh, hiệu quả

phù hợp với một điều kiện đã cho.

3.8.1 Chỉ mục chính

Trong thiết kế cơ sở dữ liệu quan hệ, một khóa chính là khóa duy nhất được dùng

để xác định mỗi dòng trong bảng. Một chỉ mục khóa chính, giống như chỉ mục, tăng tốc

độ truy nhập ngẫu nhiên tới dữ liệu trong bảng. Khóa chính cũng đảm bảo tính duy nhất

của bản ghi, và có thể điều khiển thứ tự trong đó các bản ghi được phân cụm một cách vật

lý, hoặc được lưu trữ trong cơ sở dữ liệu.

Trong Cassandra, chỉ mục chính cho một column family là chỉ mục của các khóa

dòng. Mỗi node giữ chỉ mục này cho dữ liệu nó quản lý.

Các dòng được gán cho các node bởi phân vùng cluster được cấu hình, và chiến

lược đặt bản sao keyspace đã cấu hình. Chỉ mục chính trong Cassandra cho phép tìm kiếm

các dòng theo khóa dòng. Vì mỗi node biết khoảng các khóa mà nó quản lý, các dòng

được yêu cầu có thể được định vị một cách hiệu quả bằng việc quét các chỉ mục dòng chỉ

trên các bản sao liên quan.

Với các khóa dòng được phân vùng ngẫu nhiên (mặc định trong Cassandra), các

khóa dòng được phân vùng bởi mã băm MD5 và không được quét theo thứ tự như trong

các chỉ mục cây nhị phân truyền thống. Sử dụng các phân vùng có thứ tự cho phép giới

hạn các truy vấn tới các dòng, nhưng không được khuyến khích vì độ phức tạp trong việc

duy trì việc phân tán dữ liệu trên các node.



45



3.8.2 Chỉ mục thứ cấp

Các chỉ mục thứ cấp trong Cassandra chỉ các chỉ mục trên giá trị cột (để phân biệt

với chỉ mục khóa dòng chính cho một column family). Cassandra hỗ trợ các chỉ mục thứ

cấp của kiểu KEYS (tương tự như chỉ mục băm).

Các chỉ mục thứ cấp cho phép truy vấn hiệu quả bởi việc chỉ ra các giá trị bằng

phép bằng (where column x = value y). Và, các truy vấn trên các giá trị đã được đánh chỉ

mục có thể áp dụng các bộ lọc bổ sung vào tập kết quả cho các giá trị ở cột khác.

Chỉ mục thứ cấp của Cassandra tốt nhất cho các trường hợp nhiều dòng chứa giá trị

được đánh chỉ mục.

Ví dụ, giả sử bạn có mọt bảng user với hàng tỉ người dùng, và muốn tìm kiếm

người dùng theo bang mà họ sống. Rất nhiều người dùng sẽ có cùng giá trị cột cho bang

(như CA, NY, TX…). Đây là ứng cử viên tốt nhất cho chỉ mục thứ cấp. Mặc khác, nếu

bạn muốn tìm kiếm người dùng theo địa chỉ email của họ (một giá trị thường là duy nhất

cho mỗi người), thì có thể hiệu quả hơn khi duy trì một cách thủ công column family

động dưới dạng một “chỉ mục”.

Thậm chí với các cột chứa dữ liệu độc nhất, sử dụng các chỉ mục thứ cấp cũng là

một điều khôn ngoan, chừng nào khối lượng truy vấn tới các column family được đánh

chỉ mục là vừa phải và không dưới một tải liên tục.

Một ưu điểm khác của các chỉ mục thứ cấp là sự dễ dàng về mặt thao tác duy trì

chỉ mục. Khi bạn tạo một chỉ mục thứ cấp cho một cột, nó đánh chỉ mục dữ liệu ngầm bên

dưới.

Các column family được client duy trì như những chỉ mục phải được tạo một cách

thủ công; ví dụ, nếu cột bang được đánh chỉ mục bằng cách tạp ra một column family như

users_by_state , ứng dụng client phải xây dựng column family với dữ liệu từ column

family users.

3.8.3 Tạo và sử dụng chỉ mục thứ cấp

Bạn có thể chỉ ra kiểu KEYS khi tạo ra định nghĩa cột, hoặc bạn có thể thêm vào

sau để đánh chỉ mục một cột có sẵn. Các chỉ mục thứ cấp được tạo một cách tự động bởi

tiến trình nền mà không cần phải khóa các thao tác đọc, ghi.

Ví dụ, trong Cassandra CLI, bạn có thể tạo ra một chỉ mục thứ cấp trên một côt khi

định nghĩa column family (chú ý index_type: đặc tả KEYS cho các cột state và

birth_year):

46



Xem Thêm
Tải bản đầy đủ (.pdf) (50 trang)

×