1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÀI TẬP LỚN MÔN CƠ SỞ DỮ LIỆU NÂNG CAO SO SÁNH CƠ SỞ DỮ LIỆU AMAZON DYNAMO VÀ APACHE CASSANDRA

52 1,9K 18
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 1,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Với các nút được sắpxếp theo thứ tự token, nút cuối cùng được coi như là tiền thân của nút đầu tiên; vì vậy đâychính là biểu diễn của một vòng.Phân vùng dữ liệu trong cassandra Xét ví dụ

Trang 1

CHƯƠNG 1: TÌM HIỂU HỆ CƠ SỞ DỮ LIỆU CASSANDRA VÀ AMAZON

DYNAMO 3

1 Giới thiệu về cassandra và Amazon Dynamo 3

1.1 Tổng quan về Cassandra 3

1.2 Tổng quan về Amazon Dynamo 4

CHƯƠNG 2: APACHE CASSANDRA 5

1 So sánh cassandra và cơ sở dữ liệu quan hệ 5

2 Cấu trúc của Cassandra 7

2.1 Sự giao tiếp giữa các nút 7

2.2 Phần vùng dữ liệu 8

2.2.1 Phân vùng trong cluster trung tâm Multi-Data 9

2.2.2 Các loại phân vùng (partitioner) 10

2.3 Bản sao trong cassandra (Cassandra Replication) 12

2.3.1 Chiến lược cho bản sao 12

2.3.2 Snitches 14

2.4 Các request của client trong Cassandra 16

2.4.1 Request ghi 16

2.4.2 Request đọc dữ liệu 18

3 Các kiểu dữ liệu 19

3.1 Keyspace 19

3.2 Column family 20

3.3 Cột (Column) 21

3.4 Các cột đặc biệt trong cassandra 22

3.4.1 Cột Expiring 22

3.4.2 Cột counter 22

3.4.3 Cột super 22

3.5 Kiểu dữ liệu trong cassandra 23

4 Quản lý và truy cập dữ liệu trong Cassandra 24

4.1 Ghi dữ liệu trong Cassandra 24

4.2 Nén dữ liệu 24

4.3 Kiểm soát các toàn tác và truy cập đồng thời 25

Trang 2

4.4 Chèn và cập nhật 25

4.5 Xoá dữ liệu 25

4.6 Phương thức ghi Hinted Handoff (trở về trạng thái trước đó) 26

4.7 Đọc dữ liệu 26

4.8 Tính nhất quán của dữ liệu 27

5 Cassandra API 27

5.1 Các API của một số ngôn ngữ bậc cao: 28

5.2 Cassandra CLI 28

6 Sử dụng ngôn ngữ truy vấn Cassandra (CQL – Cassandra Query Language) 33

7 Công cụ DataStax OpsCenter 36

CHƯƠNG 3: AMAZON DYNAMODB 40

1 Tổng quan về Amazon DynamoDB 40

2 Cấu trúc Amazon dynamo 41

3 Mô hình dữ liệu của Amazon DynamoDB 43

4 Tạo bảng và quản lý dữ liệu với công cụ Dynamo monitor 47

CHƯƠNG 4: SO SÁNH CASSANDRA VÀ AMAZON DYNAMO DB 49

1 Chi phí sử dụng: 49

2 Thông số kỹ thuật: 49

TÀI LIỆU THAM KHẢO 51

Trang 3

CHƯƠNG 1: TÌM HIỂU HỆ CƠ SỞ DỮ LIỆU CASSANDRA VÀ AMAZON DYNAMO

1 Giới thiệu về cassandra và Amazon Dynamo

Ngày nay, các dịch vụ trên Internet phải xử lí khối lượng dữ liệu rất lớn Hầu hết dữliệu sẽ được lưu trữ phân tán trên nhiều máy chủ khác nhau Vì vậy, các hệ quản trị cơ sở

dữ liệu quan hệ (RDBMS) tỏ ra không còn phù hợp với các dịch vụ này Người ta bắt đầunghĩ tới việc phát triển các DBMS mới phù hợp để quản lí các khối lượng dữ liệu phântán này Các DBMS này thường được gọi là NoSQL (Not Only SQL) Đại diện nổi bậtcủa các NoSQL là Cassandra và Amazon Dynamo

Cassandra là hệ cơ sở dữ liệu phân tán mã nguồn mở được bắt đầu bởi Facebook.Năm 2008, Facebook chuyển nó cho cộng đồng mã nguồn mỡ và được Apache tiếp tụcphát triển đến ngày hôm nay Cassandra được coi là sự kết hợp của Amazon’s Dynamo vàGoogle’s BigTable Đầu năm 2010, Cassandra đã trở thành một dự án lớn của Apache.Ngày nay có hàng trăm tổ chức triển khai hệ cơ sở dữ liệu này trong sản xuất, nhưNetflix, Twitter, Rackspace, Cisco Còn đối với Amazon Dynamo, tất nhiên được ra đờisớm hơn cassandra (chính thức từ năm 2000) và do Amazon phát triển, sử dụng trongnhiều sản phẩm của mình như hệ thống BookShop, Amazon Cloud

1.1 Tổng quan về Cassandra

Cassandra có thể quản lý được một số lượng lớn các dữ liệu có cấu trúc, bán cấutrúc và phi cấu trúc Cassandra cung cấp một lược đồ quan hệ dữ liệu động kèm theo sựlinh hoạt và hiệu suất cao nhất

Sức mạnh của Cassandra ở tính co giãn và khả năng mở rộng Đó là khả năngđọc/ghi tăng tuyến tính theo số lượng máy và không có thời gian chết (downtime) hay sự

Trang 4

gián đoạn ứng dụng đang chạy của bạn Cassandra chấp nhận sai sót (Fault Tolerant), dữliệu của bạn sẽ được sao chép thành nhiều bản trên các server Nếu chẳng may 1 servernào đó bị hỏng, bạn vẫn có thể truy xuất dữ liệu của trên các server khác.

Hệ cơ sở dữ liệu này hoạt động theo nguyên tắc hướng cột (Column-Oriented).Nghĩa là: đối với các RDBMS hướng dòng (row-oriented) phải định nghĩa trước các cột(column) trong các bảng (table) Nhưng với Cassandra các bạn không phải làm điều đó,đơn giản là thêm vào bao nhiêu cột cũng được tùy theo nhu cầu của bạn

Cassandra còn thể hiện ở tính sẵn sàng cao (Highly Availability) Khi thực hiện tác

vụ đọc/ghi, Cassandra có thể thực hiện trên bản sao gần nhất hoặc trên tất cả các bản sao.Điều này phụ thuộc vào thông số ConsitencyLevel do bạn thiết lập

Hệ cơ sở dữ liệu Cassandra chạy trên nền Java, vì vậy trước khi cài đặt, ta cần càiđặt phiên bản Java phù hợp với bản Cassandra định cài trên máy Hiện nay, Cassandra đãphát triển đến phiên bản mới nhất là Cassandra 1.2 Ở phiên bản mới Hệ cơ sở dữ liệunày đã cải tiến hơn nữa tính sẵn sàng, bằng việc có thể điều hướng, thống nhất các hoạtđộng Ngoài ra còn tích hợp bộ nhớ đệm cho phép điều chỉnh chính xác hiệu suất đọc/ghicho khối lượng và mô hình dữ liệu cụ thể

1.2 Tổng quan về Amazon Dynamo

Amazon Dynamo DB là hệ quản trị cơ sở dữ liệu NoSQL có hiệu suất tốt và khảnăng mở rộng liên tục Amazon Dynamo có khả năng tự động phân phối dữ liệu và lưulượng truy cập trên các bảng dữ liệu một cách phù hợp nhất theo yêu cầu của người sửdụng Tất các dữ liệu được lưu trữ trên ổ đĩa Solid State Disks (SDDs), đảm bảo tốc độ xử

lý nhanh Ngoài ra, giống như các hệ cơ sở dữ liệu NoSQL khác Dynamo DB còn tự độngnhân rộng dữ liệu để đảm bảo tính sẵn sàng và tránh rủi ro

Tuy nhiên, Amazon không chỉ sử dụng CSDL DynamoDB cho các dịch vụ hãng

Mà kết hợp DynamoDB với các cơ sở dữ liệu và dịch vụ khác của hãng để tạo thành mộtMulti – Store DynamoDB cùng với các dịch vụ cơ sở dữ liệu khác như Amazon S3,Amazon RDS tạo thành một cơ sở dữ liệu khổng lồ phục vụ cho hoạt động kinh doanhcủa hãng (bookshop, shoping, movie store, appstore ) Tất nhiên, các cơ sở dữ liệu này

có mối quan hệ mật thiết để dễ dàng truy xuất và trao đổi thông tin với nhau

Trang 5

CHƯƠNG 2: APACHE CASSANDRA

1 So sánh cassandra và cơ sở dữ liệu quan hệ

Mô hình dữ liệu cassandra được thiết kế cho dữ liệu phân tán trên một quy mô rấtlớn và khá khác nhau so với cơ sở dữ liệu quan hệ Trong một cơ sở dữ liệu quan hệ, dữliệu được lưu trữ trong các bảng và các bảng là những dữ liệu có liên quan đến nhau Dữliệu thường được chuẩn hóa để giảm bớt các mục không cần thiết, và các bảng được nốivới nhau bằng các khóa chung để đáp ứng một truy vấn nhất định

Ví dụ: Ta xem xét một ứng dụng đơn giản cho phép người dùng tạo ra các mụcblog Trong ứng dụng này, các mục blog được phân loại theo khu vực, chủ đề (thể thao,thời trang ) Người dùng cũng có thể chọn để đăng ký vào các blog của user khác Trong

ví dụ này, ID của user là khóa chính trong bảng user và các khóa ngoài là trong các bảngblog và subscriber (thuê bao) Tương tự như vậy, ID là khóa chính của bảng danh mục(category) và khóa ngoài nằm trong bảng blog_entry Sử dụng mô hình quan hệ này, cáctruy vấn SQL có thể kết nối các giá trị của bảng để trả lởi câu hỏi “Những user nào đăngnhập vào blog của tôi?” hoặc “cho tôi xem tất cả các blog về thời trang”

Dữ liệu trong một csdl quan hệ

Trang 6

Trong cassandra, keyspace là tập hợp các dữ liệu của ứng dụng, tương tự như lược

đồ của cơ sở dữ liệu quan hệ Bên trong keyspace là các gia đình cột, tương tư như mộtbảng của cơ sở dữ liệu quan hệ Gia đình cột chứa tập hợp những cột liên quan được xácđịnh bởi row key Mỗi hàng trong gia đình cột không cần thiết phải có cùng một tập hợpcột

Cassandra không thực hiện việc liên kết giữa các gia đình cột theo cách mà cơ sở

dữ liệu quan hệ sử dụng giữa các bảng, không có dạng khóa ngoài và không hỗ trợ truyvấn vào gia đình cột Mỗi một gia đình cột là tập hợp các cột được tập hợp lại với nhau đểđáp ứng một truy vấn cụ thể

Ví dụ: Với ứng dụng Blog ở trên, chúng ta có thể tạo ra một gia đình cột Sau đó

có thể thêm vào các cột để hỗ trợ truy vấn như “Những user truy cập vào blog của tôi?”,

“cho tôi xem tất cả các blog về thời trang?”, “cho tôi xem những mục gần đây nhất màblog của tôi truy cập?”

Trang 7

2 Cấu trúc của Cassandra

Hệ cơ sở dữ liệu Cassandra là tập các nút độc lập được nhóm lại với nhau tạothành một Cluster Trong các Cluster này tất cả các nút có vai trò ngang nhau, nghĩa làkhông có nút chủ hay nút trung tâm Một nút tham gia vào một Cluster căn cứ vào nộidung và cấu hình của nút đó

2.1 Sự giao tiếp giữa các nút

Cassandra sử dụng một giao thức gọi là Gossip để tìm hiểu về vị trí, trạng thái củacác nút khác tham gia trong một Cluster Gossip là một giao thức truyền thống peer-to-peer; trong đó các nút định kỳ trao đổi thông tin trạng thái với nhau và về các nút khác màchúng biết Trong Cassandra, giao thức Gossip mỗi một lần xử lý sẽ chạy nút 2 và traođổi thông điệp với nút thứ 3 khác trong Cluster Các nút sẽ trao đổi thông tin về bản thân

nó và những nút khác mà nó biết vì vậy tất cả các nút trong Cluster nhanh chóng được xử

lý Mỗi một Gossip đều có một phiên bản liên quan đến nó, vì vậy quá trình trao đổi,thông tin được ghi đè bằng các trạng thái hiện tại cho mỗi nút cụ thể

- Về Cluster thành viên và nút hạt giống

Khi bắt đầu từ nút đầu tiên, nút này sẽ căn cứ vào cấu hình file của chính nó để xácđịnh tên của Cluster và nút hạt giống Node(s), sau đó nó tiếp tục liên hệ để lấy thông tincác nút khác trong Cluster Các điểm liên kết của các Cluster được cấu hình trong file cótên là Cassandra.yaml, file này tồn tại trong nút

Để trách cho các phân vùng trong Gossip giao tiếp, tất cả các nút trong cùng một Clusterđều có danh sách giống như trong nút hạt giống để lắng nghe các cấu trúc file của chúng.Đây là vấn đề then chốt đầu tiên của một nút khi bắt đầu Theo mặc định, một nút sẽ nhớmột nút khác và tiếp tục khởi động đến các nút tiếp theo

Để biết phạm vi dữ liệu mà nó chịu trách nhiệm, một nút cũng phải biết mã thông báo(token) riêng của mình và các nút khác trong Cluster Khi khởi tạo một Cluster mới, nêntạo ra một mã (token) để đảm bảo tính toàn vẹn cho Cluster và chỉ định một mã thông báoban đầu Mỗi nút sau đó sẽ Gossip mã cho những nút khác

- Về phát hiện lỗi và khôi phục

Phát hiện lỗi là một phương thức xác định mang tính nội bộ, từ trạng thái củaGossip, mà các một nút khác trong hệ thống có thể đi lên hoặc đi xuống Thông tin phát

Trang 8

hiện lỗi cũng được Cassandra sử dụng để tránh các truy cập định tuyến không tới được bất

kỳ nút nào cố định (Cassandra cũng có thể tránh được truy cập đến những nút hoạt độngkém)

Gossip theo dõi heartbeats từ những nút khác bao gồm cả trực tiếp và gián tiếp.Thay vì tạo ra một ngưỡng cố định để đánh dấu các nút, Cassandra sử dụng cơ chế pháthiện riêng là để tính toán tiêu chuẩn cho mỗi nút, nó dựa vào các điều kiện như tài khoảnmạng, khối lượng công việc và những điều kiện khác ảnh hưởng đến heartbeats

Trong suốt quá trình trao đổi, mỗi nút sẽ duy trì một cửa sổ có thành trượt thời gianinter-arrival là thông báo từ những nút khác trong cùng một cluster Giá trị này dựa trên

sự phân phối của thời gian inter-arrival trên tất cả các nút trong một cluster Trongcassandra thành phần phi_convict_threshold là để điều chỉnh độ nhậy của việc phát hiệnlỗi này

Một nút có thể bị lỗi do nhiều nguyên nhân khác nhau như lỗi phần cứng, mấtmạng Những nút bị lỗi đó xẩy ra trong một thời gian ngắn nhưng cũng có thể dài Rấthiếm khi một nút bị lỗi lại biểu thị sự khởi đầu trong cluster, và do đó việc phải loại bỏhoàn toàn nút đó ra khỏi vòng Các nút khác vẫn sẽ định kỳ tiếp nhận thông tin từ nút lỗi

để xem nó có trở lại hoạt động không Để thay đổi vĩnh viễn một thành viên trong cluster,phải sử dụng một công cụ là nodetool utility

Khi một nút sau khi bị lỗi lại quay trở lại, nó có thể bị nhỡ một số các thông tintrong quá trình nó bị lỗi Tuy nhiên, nếu còn trong một khoảng thời gian cho phép nó cóthể lấy lại thông tin bị mất từ các bản sao Nếu khoảng thời gian bị lỗi của nó quá dài(max_hint_window_in_ms, mặc định là 1 giờ), bản sao sẽ không còn lưu lại Vì thế phảithường xuyên chạy nodetool để sửa chữa tất các nút đảm bảo sự tin cậy của dữ liệu, vàcũng để sửa chữa các nút khi hồi phục sau một khoảng thời gian dài

2.2 Phần vùng dữ liệu

Khi bắt đầu một cluster, ta phải chọn việc sẽ phân bố dữ liệu như thế nào trên cácnút trong cluster Trong cassadra, dữ liệu quản lý bằng cluster, được biễu diễn trong mộtkhông gian vòng Vòng được chia thành các khoảng bằng số của nút, mỗi một nút biểudiễn cho một hoặc nhiều khoảng của các dữ liệu tổng thể Trước khi một nút có thể thamgia vòng, nó phải được gắn một mã (token) Các mã này sẽ xác định vị trí của nút trênvòng và khoảng dữ liệu mà nó biểu diễn

Trang 9

Cột dữ liệu gia đình (column family) được phân vùng trên các nút dựa theo rowkey Để xác định nút, nơi có bản sao đầu tiên của hàng, thông điệp sẽ chạy theo chiềukim đồng hồ của vòng đến khi nó định vị được nút có giá trị token lơn hơn giá trị của rowkey Mỗi nút có trách nhiệm đối với vùng giữa nó và nút trước đó Với các nút được sắpxếp theo thứ tự token, nút cuối cùng được coi như là tiền thân của nút đầu tiên; vì vậy đâychính là biểu diễn của một vòng.

Phân vùng dữ liệu trong cassandra

Xét ví dụ, một cluster có 4 nút đơn giản, nơi mà tất cả các row key được quản lýbởi một cụm số từ 1 – 100 Mỗi nút được gán một token biểu diễn cho một điểm trongkhoảng đó Trong ví dụ này, token có giá trị là 0, 25, 50 và 75 Nút đầu tiên, với tokenbằng 0, chịu trách nhiệm về trong phạm vi gói (75-0) Nút với mã token thấp nhất cũngchấp nhận row key ít hơn token thấp nhất và nhiều hơn token cao nhất

2.2.1 Phân vùng trong cluster trung tâm Multi-Data

Trong phát triển trung tâm Multi-Data (đa dữ liệu), vị trí bản sao được tính chomỗi trung tâm dữ liệu khi sử dụng NetworkTopologyStrategy Trong mỗi trung tâm dữliệu (hoặc nhóm sao chép), bản sao đầu tiên cho một hàng cụ thể được xác định bởi mộtgiá trị token đã gán cho nút Việc bổ sung một bản sao trong cùng một trung tâm dữ liệuđược thực hiện bằng cách đi theo chiều kim đồng hồ đến khi nó đạt được nút đầu tiêntrong rack khác

Nếu không tính toán những token cho các phân vùng để dữ liệu được phân bổ đều,thì dữ liệu sẽ không được phân bố đồng đều trong trung tâm dữ liệu

Trang 10

Mục đích của việc phân vùng là đảm bảo các nút ở mỗi trung tâm dữ liệu được gángiá trị token để phân chia khoảng một cách đồng đều Mỗi một trung tâm dư liệu đượcphân chia như thể nó là một vòng riêng, tuy nhiên những token đã được gán trong toàn bộcác cluster phải không xung đột với nhau (mỗi nút phải có một token duy nhất) Hãy xemnhững tính toán token cho cluster chiến lược của trung tâm đa dữ liệu và làm thế nào đểtạo ra các token cho cluster của trung tâm này.

2.2.2 Các loại phân vùng (partitioner)

Trong cassandra phân vùng không thể thay đổi được nếu không tải lại toàn bộ dữliệu Vì vậy, điều quan trọng là chọn và cấu hình các phân vùng phải chính xác trước khikhởi tạo cluster

Cassandra cung cấp một số phân vùng bên ngoài danh mục, tuy nhiên cách lựachọn các phân vùng ngẫu nhiên là lựa chọn tốt nhất khi triển khai cassandra

Phân vùng ngẫu nhiên (random partitioner)

Phân vùng ngẫu nhiên là phân vùng mặc định trong cassandra, và trong hầu hết cáctrường hợp là sự lựa chọn đúng

Phân vùng này sử dụng một thuật toán băm phù hợp để xác định nút, nút này sẽlưu trữ một row cụ thể Thuật toán băm này sẽ đảm bảo rằng khi có một nút được thêmvào cluster, mức độ ảnh hưởng là ít nhất

Để phân phối dữ liệu một cách đồng đều qua số lượng các nút, thuật toán băm sẽtạo ra giá trị băm (MD5) của row key Giá trị băm là từ 0 đến 2**127 Mỗi nút trongcluster được gán một token đại diện cho một giá trị băm trong phạm vi này Một nút sau

Trang 11

đó sẽ sở hữu các row với một giá trị băm ít hơn số token của chính nó Đối với việc pháttriển một trung tâm dữ liệu đơn lập, các token được tính toán bằng cách chia phạm vi bămbởi số lượng các nút trong cluster Đối với trung tâm đa dữ liệu, token được tính toán chomỗi trung tâm dữ liệu (khoảng băm nên được chia đều cho các nút trong mỗi nhóm bảnsao).

Lợi ích của phương pháp này là một khi token được gắn một cách phù hợp, dữ liệu

từ tất cả các column families được phân tán đều trên toàn cụm và không thể đều hơn đượcnữa Ví dụ, một column family có thể sử dụng trường tên như là row key và một columnfamily timestamps khác, nhưng các row key từ mỗi column family riêng lẻ vẫn đượctruyền bá một cách đồng đều Điều đó nghĩa là việc đọc/ghi tới một cluster vẫn được phântán một cách đồng đều

Một lợi ích nữa của việc sử dụng phân vùng ngẫu nhiên là đơn giản hóa trong việccân bằng tải của một cluster Bởi vì mỗi phần của phạm vi băm sẽ nhận được một lượngrow trung bình tương đương, điều này dễ dàng hơn để gắn một cách chính xác các tokencho nút mới

Phân vùng có sẵn (Ordered Partitioners)

Việc sử dụng phần vùng có sẵn, đảm bảo rằng row key được lưu trữ trong thứ tựsắp xếp Trừ khi đối với trường hợp cần thiết, nếu không ta nên chọn phân vùng ngẫunhiên

Sử dụng phần vùng sẵn có cho phép khoảng quét hàng cao, có nghĩa là quét nhưviệc di chuyển con trỏ thông qua một chỉ số truyền thống Ví dụ, nếu ứng dụng của bạn cótên người sử dụng như một row key, bạn có thể quét rows người sử dụng với tên rơi vàogiữa hai tên Jake – Joe Kiểu truy vấn này không thể phân vùng row key một cách ngẫunhiên, kể từ khi các key được lưu trữ trong thứ tự của bảng băm MD5 của chúng

Việc sử dụng phân vùng có sẵn được khuyến khích sử dụng trong các trường hợpsau:

- Việc ghi liên tục vào CSDL có thể là nguyên nhân gây ra lỗi Nếu ứng dụng có xuhướng chuyên ghi hoặc cập nhật liên tiếp một khối dữ liệu hàng trong một thời gian, sau

đó dữ liệu được ghi không được phân phối trên cluster, tất cả chúng sẽ đi đến một nút

- Trong trường hợp cần quản lý cao hơn việc load cluster cân bằng Một phần vùng có sẵnđòi hỏi người quản lý phải tính toán phạm vi token dưa trên sự ước lượng trong việc phần

Trang 12

phối row key Trong thực tế, điều này đòi hỏi các token của nút phải di chuyển một cáchtích cực xung quanh để thích ứng với phấn dữ liệu mà nó đã tải.

- Trong trường hợp cân bằng load dữ liệu không đồng đều cho nhiều column family Nếuứng dụng có nhiều column family, rất có thể những column family này có row key khácnhau và khác nhau về dữ liệu phân tán Một phân vùng có sẵn sẽ tốt hơn là cân bằng chomột column family có thể là nguyên nhân gây ra điểm lỗi và phân phối không đồng đềucho các cloumn family khác cùng cluster

2.3 Bản sao trong cassandra (Cassandra Replication)

Cassandra replication là quá trình lưu trữ các bản sao của dữ liệu trên nhiều nút để đảmbảo độ tin cậy và khả năng chịu lỗi Khi tạo một key space (không gian khóa) trongcasandra, phải xác định chiến lược cho các bản sao, nghĩa là số lượng các bản sao và cácbản sao sẽ được phân phối như thế nào trên các nút trong một cluster Chiến lược này dựatrên cấu hình của cluster để xác định vùng vật lý của nút và khu vực xung quanh Tổng sốcác bản sảo trên cluster thường được gọi giống như replication factor (hệ số sao chép).Một hệ số sao chép là 1 có nghĩa là mỗi một row chỉ có một bản sao Nếu hệ số sao chép

là 2 có nghĩa là mỗi một hàng có 2 bản sao Tất cả các bản sao đều quan trọng; khôngphân biệt bản sao chính primary hay master Như một quy tắc chung, hệ số nhân bảnkhông được vượt quá số lượng các nút trong cluster Tuy nhiên, nó cũng có thể tăng hệ sốnhân bản lên trước và sau đó thêm vào các nút tương ứng Khi hệ số nhân bản vượt quá sốnút, việc ghi vào sẽ bị từ chối, nhưng phần đọc vẫn thực hiện miễn là consistency level(mức độ nhất quán) có thể đáp ứng được Về chiến lược cho bản sao, vị trí bản sao đượcxác định dựa vào keyspace được phân phối trên các cluster Vị trí bản sao được thiết lậpkhi khởi tạo keyspace Có một số chiến lược cho bản sao, những chiến lược này dựa trênmục tiêu của người sử dụng và thông tin về khu vực nút được đặt

2.3.1 Chiến lược cho bản sao

- Chiến lược đơn giản (Simple Strategy)

Chiến lược này chính là chế độ mặc định trong cassandra, khi khởi tạo một keyspace ta sửdụng cassandra CLI Chiến lược đơn giản đặt các bản sao đầu tiên trên một nút được xácđịnh bằng cách phân vùng Bản sao bổ sung được đặt trên các nút tiếp theo, theo chiềukim đồng hồ mà không xét các rack hoặc dữ liệu của các nút trong khu vực đó

Trang 13

Chiến lược Network Topology

Đây là chiến lược nhân rộng các bản sao tại những vị trí mong muốn khi có các thông tin

về các nút thuộc một nhóm trong trung tâm dữ liệu, hoặc có người sử dụng có kế hoạchtriển khai trên nhiều trung tâm dữ liệu Chiến lược Network Topology cho phép xác định

số bản sao mong muốn tại mỗi trung tâm dữ liệu

Ví dụ khi quyết định có bao nhiêu bản sao để cấu hình trong mỗi trung tâm dữ liệu, taxem xét có thể đáp ứng để đọc dữ liệu của ta hay không, mà không phải đi qua một trungtâm dữ liệu khác có độ trễ và bị lỗi

Có hai cách phổ biến để cấu hình các cụm trung tâm dữ liệu là:

- Đặt 2 bản sao trong mỗi trung tâm dữ liệu Cách cấu hình này đảm bảo cho mỗi nhómtrong trường hợp có một nút lỗi, mà vẫn hoạt động được, mức nhất quán (consistencylevel) ở đây được gọi là ONE

- Đặt 3 bản sao trong mỗi trung tâm dữ liệu Cách cầu hình này đảm bảo cho sự truy cậpvẫn diễn ra bình thường khi nó có một hoặc hai nút lỗi Mức nhất quán ở đây là LOCAL-QUORUM

- Phương pháp bất đối xứng (Asymmetrical), cách này tùy thuộc vào từng trường hợp sửdụng cụ thể Ví dụ: có thể đặt ba bản sao cho mỗi trung tâm dữ liệu để phục vụ cho ứngdụng đòi hỏi thời gian thực, và sau đó có thể đặt một bản sao duy nhất trong một trungtâm dữ liệu được thiết kế để chạy các phân tích Trong cassandra, nhóm trung tâm dữ liệu

là đồng nghĩa với nhóm bản sao, tức nó là một nhóm các nút có cùng cấu hình để thựchiện mục đích sao chép Nó không phải là một trung tâm dữ liệu vật lý

Với chiến lược Network Topology, vị trí bản sao được xác định độc lập trong mỗi trungtâm dữ liệu (hoặc nhóm sao chép) Bản sao đầu tiên trên một trung tâm dữ liệu được đặt

Trang 14

theo các phân vùng (giống như chiến lược đơn giản) Bản sao bổ sung trong cùng mộttrung tâm dữ liệu được xác định bằng cách đi theo chiều kim đồng hồ cho đến khi một núttrong một rack khác từ bản sao trước đó được tìm thấy Nếu không có nút như vậy, bảnsao bổ sung sẽ được đặt trong cùng một rack Chiến lược này ưu tiên đặt các bản sao trêncác rack riêng biệt Các nút trong cùng một rack (hoặc nhóm tương tự mang tính vật lý)

có thể dễ dàng cùng bị lỗi do các vấn đề mạng, nguồn điện

Dưới đây là một ví dụ về việc làm thế nào chiến lược Network Topology đặt các bản saotại 2 trung tâm dữ liệu với hệ số bản sao là 4 (hai bản sao trong trung tâm dữ liệu 1 và 2bản sao trong trung tâm dữ liệu 2)

2.3.2 Snitches

Snitches là một thành phần cấu hình trong cluster của cassandra được sử dụng để xác địnhcác nút nào được nhóm lại với nhau trong network topology (giống như rack và các nhómtrung tâm dữ liệu) Cassandra sử dụng thông tin này để định tuyến các nút một cách hiệuquả Sniches không làm ảnh hưởng đến các request giữa ứng dụng khách và cassandra (nókhông kiểm soát nút mà client kết nối)

Trang 15

Snitches được cấu hình cho một cluster được lưu trong file cassandra.yaml Tất cả các núttrong cluster được sử dụng cùng một cấu hình snitches Khi gắn mã token, thì xen kẽ giữacác rack Ví dụ: rack 1, rack2, rack 3, rack 1, rack 2, rack 3 và cứ như vậy.

Các snitches:

Snitches đơn giản (simple Snitches)

Đây là snitches mặc định, nó thích hợp khi không có rack hoặc thông tin dữ liệusẵn có Nếu ta chỉ phát triển trung tâm dữ liệu duy nhất thì thường dùng loại này (hoặcmột khu vực riêng trong khu vực công cộng) Nếu sử dụng snitches, ta cho hệ số bản sao(replication = <#>) khi xác định strategy_options keyspace Snitches này không nhận biếttrung tâm dữ liệu hoặc thông tin rack

Rack Inferring Snitches

Snitches này đưa ra cấu trúc mạng trên cơ sở phân tích địa chỉ IP của nút Nó giả

định rằng các octet thứ hai sẽ xác định trung tâm dữ liệu nơi một nút được đặt, và octetthứ ba sẽ xác định các rack

Trang 16

PropertyFileSnitch xác định vị trí của các nút bằng cách người dùng tự định nghĩachi tiết của mạng đặt trong file thuộc tính cassandra-topology.properties Snitch loại nàytốt nhất khi các nút IP là không thống nhất hoặc đòi hỏi nhóm bản sao phức tạp Nếu sửdụng snitch này, ta có thể xác định tên trung tâm dữ liệu mà có thể theo ý muốn người sửdụng Chỉ cần chắc chắn tên trung tâm dữ liệu được xác định trong file cassandra-topology.properties tương ứng với tên của trung tâm dữ liệu trong strategy_optionskeyspace

Dynamic Snitching

Theo mặc định, tất cả snitches đều sử dụng một lớp snitch động để giám sát độ trễtrong việc đọc dữ liệu và có khi nó được sử dụng để request từ các nút kém hoạt động.Các snitch được kích hoạt theo mặc định, và được khuyến khích sử dụng trong hầu hếtcác hoạt động Ngưỡng của Dynamic snitch có thể được cấu hình trong file cấu hìnhcassandra.yaml của nút

2.4 Các request của client trong Cassandra

Tất các nút trong cassandra là ngang nhau Một client có các request đọc hoặc ghi

có thể đí đến bất kể một nút nào trong cluster Khi client kết nối tới một nút và thực hiệncác request đọc hoặc ghi, thì nút đó sẽ đáp ứng như vai trò là một điều phối viên chonhững hoạt động cụ thể của client

Công việc điều phối này giống như một proxy giữa client và nút sở hữu những dữ liệuđang được request Nút điều phối sẽ xác định các nút trong vòng nhận request dựa vào cácphân vùng được cấu hình của cluster và chiến lược đặt bản sao

Ví dụ: Trong một trung tâm dữ liệu đơn lập có 10 nút với hệ số bản sao là 3, tức là mộtlệnh ghi sẽ đi tới 3 nút mà sở hữu request row Mức độ nhất quán của lệnh ghi được clientquy định là ONE, thì nút đầu tiên sẽ hoàn tất việc ghi và trả lời lại cho điều phối viên, sau

Trang 17

đó trả lại thông điệp thành công cho client Mức nhất quán là ONE có nghĩa vị trí của 2trên 3 bản sao có thể bị nhỡ lệnh ghi nếu chúng xẩy ra tại thời điểm request đã được tạo.Nếu một bản sao bỏ lỡ một lệnh ghi, thì một hàng sẽ được tạo ra, sau đó cassandra sẽ tạo

ra cơ chế sửa chữa

- Request ghi đối với trung tâm đa dữ liệu (Multi-Data Center)

Trong trung tâm đa dữ liệu, cassandra tối ưu hóa hiệu suất ghi bằng cách chọn một nútđiều phối trong mỗi trung tâm dữ liệu từ xa để xử lý các request tới các bản sao trongtrung tâm dữ liệu của nó Các nút điều phối liên lạc với client chỉ để chuyển tiếp cácrequest ghi vào một nút trong mỗi trung tâm dữ liệu từ xa

Trang 18

2.4.2 Request đọc dữ liệu

Đối với đọc dữ liệu, có 2 loại, đọc yêu cầu mà một nút điều phối có thể gửi tới một bảnsao là đọc trực tiếp yêu cầu và đọc yêu cầu sửa chữa Số lượng các bản sao liên đã liên lạcvới một yêu cầu đọc trực tiếp được xác định bởi mức nhất quán được client quy định Đọcyêu cầu sửa chữa được gửi đến bất kỳ bản sao bổ sung nào mà không nhận được yêu cầuđọc trực tiếp Đọc yêu cầu sửa chữa đảm bảo rằng hàng yêu cầu tạo ra trên tất cả các bảnsao

Vì vậy, địa chỉ bản sao của nút điều phối đầu tiên được quy định bởi mức độ nhất quán.Các điều phối viên sẽ gửi yêu cầu tới các bản sao mà hiện tại đang đáp ứng tốt nhất cácyêu cầu Các nút đã liên lạc sẽ đáp ứng các yêu cầu dữ liệu; nhưng nếu có nhiều nút đượcliên lạc, thì các hàng từ mỗi bản sao mà có dữ liệu gần đây nhất (dựa trên timestamp)được sử dụng để điều phối chuyển tiếp các kết quả lại cho client

Để đảm bảo tất cả các bản sao có phiên bản mới nhất, điều phối viên cũng liên lạc và sosánh dữ liệu từ tất cả các bản sao còn lại mà sở hữu hàng ở chế độ backgroud, và nếuchúng không phù hợp, lệnh ghi sẽ được thực hiện để cập nhật dữ liệu được ghi gần đâynhất Quá trình này chính là quá trình đọc sửa chữa Đọc sửa chữa có thể cấu hình chomỗi column family (sử dụng chức năng đọc, sửa, thay đổi) và được kích hoạt theo mặcđịnh

Ví dụ, trong một cluster với hệ số bản sao là 3, và lệnh đọc có mức độ nhất quán làQUORUM, 2 trong số 3 bản sao cho hàng được kết nối để thực hiện các yêu cầu đọc Giả

sử các bản sao đã kết nối có các phiên bản khác nhau của hàng, bản sao với phiên bản gầnđây nhất sẽ trả lại dữ liệu yêu cầu trong lệnh đọc Trong background, 3 bản sao đã đượckiểm tra tính nhất quán với 2 bản sao đầu tiên, và nếu cần thiết, bản sao có dữ liệu gầnnhất sẽ truyền dữ liệu để các bản sao khác cập nhật

Trang 19

3 Các kiểu dữ liệu

Cơ sở dữ liệu cassandra có cấu trúc dữ liệu hướng cột và lược đồ động Tức làkhông giống như cơ sở dữ liệu quan hệ, chúng ta không cần định dạng tất cả các cột dữliệu mà ứng dụng đòi hỏi lên trước, mỗi một hàng không cần phải có các cột giống nhau.Cột và dữ liệu của nó có thể được thêm vào bởi ứng dụng mà không bị gián đoạn

3.1 Keyspace

Trong cassandra, keyspace là không gian lưu trữ dữ liệu, giống như lược đồ trong

cơ sở dữ liệu quan hệ Keyspace được sử dụng với chức năng nhóm các gia đình cột lạivới nhau Thông thường một ứng dụng có một keyspace

Các bản sao được kiểm soát trên một keyspace, vì vậy dữ liệu có các bản sao khácnhau thì yêu cầu phải nằm trên keyspace khác nhau Keyspaces không được thiết kế để sửdụng như lớp bản đồ trong mô hình dữ liệu, nó chỉ như là một cách để kiểm soát việc saochép cho một tập các gia đình cột

Câu lệnh để tạo một keyspace trong cassandra

CREATE KEYSPACE keyspace_name WITH

placement_strategy = 'SimpleStrategy'

AND strategy_options = [{replication_factor:2}];

Trang 20

3.2 Column family

Khi so sánh Cassandra với cơ sở dữ liệu quan hệ, gia đình cột giống như một bảng trong

cơ sơ dữ liệu quan hệ, nó cũng bao gồm các hàng, các cột Tuy nhiên, một gia đình cột về

cơ bản khá khác so với cơ sở dữ liệu quan hệ

Trong một cơ sở dữ liệu quan hệ, ta phải xác định các bảng, trong đó định nghĩa các cột,

và dữ liệu của chúng, từ đó có một lược đồ quan hệ, mà đòi hỏi mỗi hàng chứa cùng mộttập hợp cột cố định

Gia đình cột trong Cassandra, có thể gọi là siêu dư liệu về các cột, tức là mỗi hàng có thểchứa các bộ phận khác nhau của cột Như vậy, có thể nói rằng gia đình cột rất linh hoạt,trong thực tế gia đình cột không hoàn toàn là một lược đồ yếu Mỗi gia đình cột được thiết

kế chứa một loại dữ liệu duy nhất Có hai mẫu cột gia đình điển hình trong Cassandra, đó

là cột gia đình tĩnh và cột gia đình động

Một gia đình cột tĩnh là sử dụng một tập hợp có tên cột tương đối tĩnh và tương tự nhưmột bảng dữ liệu quan hệ Ví dụ: Một cột gia đình lưu trữ dữ liệu người dùng có thể cócác cột cho tên người dùng, địa chỉ, email, số điện thoại Mặc dù nói chung các hàng sẽ cócùng một tập hợp các cột, nhưng chung không đòi hỏi phải định nghĩa tất cả các cột Cộtgia đình tĩnh thường mỗi cột được định nghĩa trước

Một gia đình cột động, là các cột được tùy ý theo yêu cầu của ứng dụng Một gia đình cộtđộng cho phép chúng ta trước khi tính toán kết quả và lưu dữ chúng trong một hàng duynhất để có thể truy vấn dữ liệu một cách hiệu quả Mỗi hàng là một bản sao của dữ liệu,được sắp xếp Ví dụ: Một gia đình cột theo dõi người đăng nhập vào blog cá nhân của họ

Trang 21

Thay vì xác định dữ liệu cho từng cột, gia đình cột động xác định loại thông tin cho têncột và giá trị (so sánh và xác nhận), nhưng tên cột và giá trị thực tế được tạo bởi ứng dụngkhi một cột được insert dữ liệu.

Trong tất cả các cột gia đình, mỗi một hàng được xác định bởi row key của nó, tương tựnhư các khóa chính trong bảng quan hệ Một cột gia đình luôn được phân vùng trên rowkey của nó và row key thường mặc nhiên là chỉ mục

3.3 Cột (Column)

Cột là đơn vị nhỏ nhất của Cassandra Nó là một bộ chứa tên, giá trị và timestamp

Một cột phải có tên và tên có thể là một nhãn tĩnh (như “tên” hoặc “tên emal”), hoặc nó

có thể tự động được thiết lập theo yêu cầu của ứng dụng

Cột có thể được lập chỉ mục theo tên của chúng Tuy nhiên, một hạn chế là chỉ số cột sẽkhông hỗ trợ các truy vấn yêu cầu truy cập dữ liệu, chẳng hạn như dữ liệu chuỗi thời gian.Trong trường hợp này, một chỉ số phụ dựa trên cột timestamp sẽ không đầy đủ , bởi vì takhông kiểm soát sự sắp xếp của các chỉ số phụ Đối với trường hợp việc sắp xếp là quantrọng, ta sẽ duy trì một gia đình cột như là một “chỉ số” mà có thể tạo ra cách khác để tracứu dữ liệu trong thứ tự sắp xếp

Cassandra không đòi hỏi một cột phải có giá trị Đôi khi tất cả các thông tin ứng dụng,cần để đáp ứng một truy vấn có thể được lưu trữ trong tên cột riêng của chính nó Ví dụ,nếu bạn đang sử dụng một gia đình cột như là một khung nhìn để tra cứu các hàng tronggia đình cột khác, ta cần phải lưu trữ các row key mà bạn đang tìm kiếm, giá trị có thể làrỗng

Cassandra sử dụng timestamp để xác định những cột được cập nhật gần đây nhất.Timestamp được tạo ra bởi các ứng dụng khách Các timestamp mới nhất luôn được ưu

Trang 22

tiên khi truy vấn dữ liệu, do đó nếu nhiều client đồng thời cập nhật các cột trong mộthàng, bản cập nhật gần nhất là một trong những bản sẽ tồn tại cuối cùng.

3.4 Các cột đặc biệt trong cassandra

Cassandra có ba cột đặc biệt là Counter, Expiring, Super

3.4.1 Cột Expiring

Một cột cũng có thể đến ngày hết hạn tùy thuộc vào giá trị TTL (time to live) Bất cứ mộtcột nào được tạo ra đều có thể chỉ định một TTL (thời gian sống) tùy chọn, có thể xácđịnh trong một vài giây Cột TTL được đánh dấu là bị xóa sau khi hết khoảng thời gian đãquy định cho nó Một khi đã được đánh dấu, chúng sẽ tự động bị loại

3.4.2 Cột counter

Cột này sử dụng để lưu trữ số lượt xuất hiện của một sự kiện hoặc một quá trình Ví dụ:

Có thể sử dụng một cột truy cập để đếm số lần một trang được xem

Cột column sẽ xác định số lần truy cập khác nhau, ứng dụng client cập nhật giá trị cộtbằng cách tăng hoặc giảm Các ứng dụng client có thể cập nhật một cột counter bằng têncái mà nó định đếm và đặt giá trị tăng hoặc giảm, không đòi hỏi timestamp

3.4.3 Cột super

Gia đình cột có thể bao gồm cột bình thường hoặc cột super, loại cột thêm vào mức lồngnhau trong cấu trục gia đình cột bình thường Cột super bao gồm tên cột và bản đồ lệnhcho các cột con Một super có thể xác định lệnh so sánh cho tên của nó và cho cả tên cộtcon

Ngoài ra, có thể hiểu một cột super là cách để nhóm nhiều cột dựa trên giá trị tìm kiếm

Ví dụ: Ta muốn tạo ra hai cái nhìn cụ thể về blog và bloger

Trang 23

Một hạn chế của việc sử dụng cột super là chỉ có thể đọc được một giá trị trong cột concủa nó và không thể tạo ra được một chỉ mục thứ hai trong cột con Vì vậy, sử dụng cộtsuper tốt nhất trong trường hợp số lượng cột con là tương đối nhỏ.

3.5 Kiểu dữ liệu trong cassandra

Trong cơ sở dũ liệu quan hệ, chung ta phải chỉ định một kiểu dữ liệu cho mỗi cột Và hạnchế các loại dữ liệu khác chèn vào cột đó Ví dụ: Nếu chúng ta định nghĩa một cột kiểu sốnguyên, ta sẽ không thể chèn được một dữ liệu là ký tự Tên cột trong cơ sở dữ liệu quan

hệ thường cố định và làm cơ sở để xác định lược đồ quan hệ

Trong cassandra, các kiểu dữ liệu cho cột được xác định từ trước Và không yêu cầungười dùng trước khi tạo cột phải định nghĩa kiểu dữ liệu Cassandra lưu trữ tên cột và giátrị dưới dạng mảng hex byte (kiểu byte) Đây là kiểu mặc định khi người sử dụng khôngđịnh kiểu cho dữ liệu

Các kiểu dữ liệu trong cassandra:

BytesType blob Arbitrary hexadecimal bytes (no validation)

AsciiType ascii US-ASCII character string

UTF8Type text, varchar UTF-8 encoded string

IntegerType varint Arbitrary-precision integer

LongType int, bigint 8-byte long

DateType timestamp Date plus time, encoded as 8 bytes since epoch

BooleanType boolean true or false

FloatType float 4-byte floating point

DoubleType double 8-byte floating point

Trang 24

Internal Type CQL Name Description

DecimalType decimal Variable-precision decimal

CounterColumnType counter Distributed count

4 Quản lý và truy cập dữ liệu trong Cassandra

Phần này cung cấp thông tin về truy cập và quản lý dữ liệu trong Cassandra thôngqua một ứng dụng của máy khách Cassandra cung cấp rất nhiều tiện ích cho ngườidùng và các giao diện lập trình ứng dụng (API) có thể được sử dụng để phát triển các ứngdụng tận dụng Cassandra cho việc lưu trữ và phục hồi dữ liệu

4.1 Ghi dữ liệu trong Cassandra

Cassandra được tối ưu hóa cho việc ghi các dữ liệu có sẵn một cách nhanh chóng và manglại hiêu quả cao Cơ sở dữ liệu quan hệ thường được cấu trúc dạng bảng để hạn chế tốithiểu việc sao chép dữ liệu Các phần của thông tin cần thiết để đáp ứng một truyvấn được lưu trữ trong các bảng liên quan tuân theo một cấu trúc được định sẵn Do

dữ liệu được cấu trúc trong một cơ sở dữ liệu quan hệ nên việc ghi dữ liệu sẽ phức tạphơn, như là việc máy chủ cơ sở dữ liệu phải kèm thêm việc đảm bảo toàn vẹn dữliệu trên các bảng có liên kết Kết quả là, cơ sở dữ liệu quan hệ thường không có hiệu suấttốt cho việc ghi dữ liệu

Cassandra được tối ưu hóa thông qua việc ghi dữ liệu Đầu tiên Cassandra ghi vào mộtnhật ký uỷ thác (để lưu trữ lâu dài), và sau đó ghi vào một cấu trúc bảng trong bộ nhớđược gọi là một Memtable Việc ghi thành công một khi nó được ghi vào nhật ký uỷthác và bộ nhớ, do đó rất tối thiểu đĩa I/O tại thời điểm ghi Ghi theo đoạn trong bộ nhớ vàđịnh kỳ ghi vào đĩa để được một cấu trúc bảng liên tục gọi là một SSTable (chuỗi bảngđược sắp xếp) Memtables và SSTables được duy trì cho mỗi Column family Memtablesđược tổ chức trong việc sắp xếp bởi khoá của hàng và chuyển vào SSTables tuần

tự (không tìm kiếm ngẫu nhiên như trong cơ sở dữ liệu quan hệ)

4.2 Nén dữ liệu

Bên dưới, Cassandra định kỳ kết hợp SSTables lại với nhau thành SSTables lớn hơn bằngcách sử dụng một quá trình được gọi là nén Nén kết hợp các mảng hàng với nhau, loại bỏcác tombstones hết hạn (cột đã bị xoá), và xây dựng lại các chỉ số sơ cấp và thứ cấp Hợpnhất này đạt hiệu quả cao nhất khi SSTables được sắp xếp theo khoá hàng Một khi một

Trang 25

SSTable mới sáp nhập hoàn tất, SSTables đầu vào được đánh dấu đã cũ vàcuối cùng được xoá bởi bộ thu dọn JVM (Java Virtual Machine)

Dữ liệu nén được đọc theo hai cách.Trong khi quá trình nén đang diễn ra, việc đọc dữ liệuvẫn có thể thực hiện với hiệu suất cao mà không cần thông quan bộ nhớ tạm (việc này tạmthời làm tăng dung lượng đĩa I/O cần dùng) Tuy nhiên, sau khi quá trình nén đã đượchoàn thành, bộ nhớ tạm được dùng để cải thiện hiệu suất đọc và khi đó cũng có ít các tậptin SSTable trên đĩa cần được kiểm tra để hoàn thành việc đọc hơn, khả năng đọc sẽ tốthơn

4.3 Kiểm soát các toàn tác và truy cập đồng thời

Không giống như các cơ sở dữ liệu quan hệ, Cassandra không cung cấp đầy đủ các giaodịch toàn tác ACID Không có khóa truy cập (có nghĩa là khoá khả năng truy cập của đốitượng đang thao tác) hoặc giao dịch toàn tác khi đồng thời cập nhật nhiều hàng hoặc cột(giao dịch toàn tác – transaction, khi một lệnh trong giao dịch thất bại, có thể quay lại tìnhtrạng dữ liệu khi bắt đầu giao dịch)

4.4 Chèn và cập nhật

Các cột với số lượng lớn có thể được chèn vào cùng một lúc Khi chèn hoặc cậpnhật các cột trong một Column family, ứng dụng cụ thể hoá các khoá dòng

để xác định cột nào được cập nhật Khoá dòng tương tự như một khóa chính ở chỗ

nó phải là duy nhất cho mỗi hàng trong một Column family Tuynhiên, không giống như một khóa chính, chèn một khoá hàng trùng lặp sẽ không bị cảntrở như khi thêm một khoá chính trùng lặp, mà nó sẽ được xử lý là UPSERT (kết hợp củaUpdate và Insert - cập nhật nếu cột đó đã tồn tại hoặc thêm mới nếu cột đó chưa tồn tại).Cột chỉ ghi đè nếu các timestamps trong bản ghi mới sớm hơn so với cột hiện có,timestamps chính xác là cần thiết nếu được thường xuyên cập nhật (ghi đè) Timestampsđược cung cấp bởi khách hàng Do đó, các đồng hồ của tất cả các máy kháchhàng nên được đồng bộ bằng cách sử dụng NTP – Network Time Protocol (giao thức thờigian mạng)

Trang 26

trong một khoảng thời gian được cấu hình sẵn (xác định bởi giá trị gc_grace_seconds càiđặt trong column family) và khi hết khoảng thời gian đó sẽ bị xoá vĩnh viễn bởi quá trìnhtái nén dữ liệu.

4.6 Phương thức ghi Hinted Handoff (trở về trạng thái trước đó)

Một phương thức mà Cassandra sử dụng để bảo đảm tính sẵn có, dung sai và suy biến đó

là Hinted Handoff (HH) Khi Cassandra nhận một thao tác ghi được chỉ định để lưu trong

1 node mà node đó hỏng, nó sẽ tự động định tuyến cho truy vấn ghi đó tới 1 node hoạtđộng bình thường khác Node nhận được truy vấn ghi sẽ lưu thao tác ghi đó cùng với 1hint Hint là 1 thông báo chứa truy vấn ghi và thông tin về node đáng lẽ được dùng để xử

lí truy vấn đó nhưng đã bị hỏng Khi đó, node chứa hint sẽ giám sát node ring trong việckhôi phục node bị hỏng Khi node hỏng đã hoạt động trở lại, hint sẽ được chuyển lại quanode này để truy vấn ghi được xử lí ở đúng vị trí Tính năng Gossip trong Cassandra đượcthiết kế để đảm bảo thông báo đầy đủ khi node bị hỏng hoạt động bình thường trở lại.Hiệu suất và tính nhất quán phụ thuộc vào mức độ cụ thể được xác định trong thao tácghi VD: ở mức nhất quán ANY, thao tác ghi sẽ hồi đáp lại bên yêu cầu ngay sau khi bảnghi đã được tạo ra tại node được chỉ định để xử lí nó Tất nhiên hiệu suất ở mức này sẽnhanh hơn nhưng tính nhất quán giảm đi do các bản ghi tiếp theo trong node ring có khảnăng không đồng bộ Tuy nhiên, nếu đặt mức nhất quán là ONE, QUORUM hoặc ALL,thì việc hoàn tất bản ghi sẽ lâu hơn bởi còn phải đảm bảo tính nhất quán của các bản ghitheo sau nữa

Một vấn đề nảy sinh được lưu ý như sau: khi 1 node bị hỏng trong khoảng thời gian dài

và rất nhiều thao tác ghi diễn ra trong lúc đó sẽ dẫn đến tự tích tụ ngày một nhiều của cáchint Khi node hỏng hoạt động trở lại bình thường , các node lưu giữ hint sẽ phát hiện ranode đó đã được khôi phục và đồng loạt gửi trả truy vấn lại cho node đó kèm với các truyvấn mới Node mới khôi phục sẽ bị quá tải và có khả năng không còn khả dụng nữa.Vìvậy, giải pháp cho vấn đề này, một là tắt tính năng HH, 2 là giảm độ ưu tiên của việc sửdụng HH

4.7 Đọc dữ liệu

Khi người sử dụng tạo 1 yêu cầu đọc ở 1 node bất kì, node này sẽ hoạt động như 1 proxyxác định các node chứa bản sao của dữ liệu và yêu cầu các node đó cung cấp dữ liệutương ứng, người dùng có thể tuỳ chọn mức độ thống nhất của việc đọc như sau: đọc đơn(yêu cầu được đáp ứng ngay khi tìm thấy phản hồi đầu tiên, nhưng dữ liệu có thể khôngmới), đọc định số tối thiểu (yêu cầu chỉ được đáp ứng khi đa số phản hồi có cùng giá trị).Node sẽ dựa trên Memtable (trong bộ nhớ) hoặc SStable (từ đĩa) để đọc dữ liệu Để quétSSTable, Cassandra sử dụng chỉ số row-column và bloom filter để tìm khối thông tin cầnthiết trên đĩa, bóc tách thứ tự và xác định xem nên phản hồi lại dữ liệu nào Việc có nhiều

Ngày đăng: 08/07/2015, 16:05

HÌNH ẢNH LIÊN QUAN

Bảng điều khiển - bảng điều khiển hiển thị đồ thị của các số liệu hiệu suấtCassandra theo dừi phổ biến nhất. - BÀI TẬP LỚN MÔN CƠ SỞ DỮ LIỆU NÂNG CAO SO SÁNH CƠ SỞ DỮ LIỆU AMAZON DYNAMO VÀ APACHE CASSANDRA
ng điều khiển - bảng điều khiển hiển thị đồ thị của các số liệu hiệu suấtCassandra theo dừi phổ biến nhất (Trang 37)
Bảng chứa các Item và tổ chức thông tin trong - BÀI TẬP LỚN MÔN CƠ SỞ DỮ LIỆU NÂNG CAO SO SÁNH CƠ SỞ DỮ LIỆU AMAZON DYNAMO VÀ APACHE CASSANDRA
Bảng ch ứa các Item và tổ chức thông tin trong (Trang 45)
Bảng so sánh tổng thể của hai cơ sở dữ liệu: - BÀI TẬP LỚN MÔN CƠ SỞ DỮ LIỆU NÂNG CAO SO SÁNH CƠ SỞ DỮ LIỆU AMAZON DYNAMO VÀ APACHE CASSANDRA
Bảng so sánh tổng thể của hai cơ sở dữ liệu: (Trang 50)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w