tìm hiểu hệ quản trị cơ sở dữ liệu phân tán cassandra

44 2.4K 30
tìm hiểu hệ quản trị cơ sở dữ liệu phân tán cassandra

Đ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

tìm hiểu hệ quản trị cơ sở dữ liệu phân tán cassandra

ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA HỆ THỐN THÔNG TIN LỜI CAM ĐOAN Tôi cam đoan rằng, ngoại trừ kết tham khảo từ công trình khác ghi rõ luận văn, công việc trình bày luận văn thực chưa có phần nội dung luận văn nộp để lấy cấp trường trường khác Ngày tháng năm 2008, Phan Nhật Hải – Nguyễn Hoàng Anh BÁO CÁO BÀI TẬP LÝ THUYẾT TÌM HIỂU HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU PHÂN TÁN CASSANDRA GVHD: Nguyễn Trường Sơn -oOo SVTH: TP HỒ CHÍ MINH, 05/ 2012 TÓM TẮT Mục đích báo cáo tìm hiểu hệ quản trị sở liệu (DBMS) phân tán Cassandra để từ thấy khác biệt so với hệ quản trị sở liệu quan hệ (RDBMS) Bài báo cáo tập trung chủ yếu vào việc tìm hiểu kiến trúc Cassandra (Cassandra Architecture), mô hình liệu (data model), quản cách quản lý truy suất liệu (managing and accessing data), ngôn ngữ truy vấn Cassandra (Cassandra Query Language) số khác niệm định nghĩa hệ quản trị sở liệu phân tán Từng phần trình bày theo chương từ tổng quát đến chi tiết để tiện theo dõi Hiện Cassandra tiếp tục phát triển nên tương lai xuất thêm nhiều vấn đề mà báo cáo chưa đề cập đến MỤC LỤC TÓM TẮT MỤC LỤC DANH MỤC HÌNH .5 DANH MỤC BẢNG Chương GIỚI THIỆU .6 1.1 Khái niệm 1.2 Các đặc trưng Cassandra 1.2.1 Tính phân tán 1.2.2 Tính co giãn (Elastic Scalability) 1.2.3 Tính hướng cột (Column-Oriented) 1.2.4 Tính sẵn sàng cao (Highly Availability) 1.2.5 Chấp nhận sai (Fault Tolerant) 1.3 Mục đích báo cáo 1.4 Cấu trúc báo cáo: Chương KIẾN TRÚC CASSANDRA 2.1 Giao tiếp node (Gossip) 2.1.1 Hiểu cluster membership seed nodes 2.1.2 Hiểu Failure Detection Recovery 10 2.2 Phân vùng liệu (data partition) Cassandra 11 2.2.1 Hiểu phân vùng liệu 11 2.2.2 Các loại phân vùng 12 Random Partitioner 12 Ordered Partitioners .12 2.3 Hiểu Snitches 13 2.4 Hiểu Replica Placement Strategy 13 2.4.1 SimpleStrategy 13 2.4.2 NetworkTopologyStrategy 14 2.5 Hiểu yêu cầu client Cassandra .14 2.5.1 Hiểu yêu cầu ghi .15 2.5.2 Hiểu yêu cầu đọc 15 Chương MÔ HÌNH DỮ LIỆU CASSANDRA .17 3.1 So sánh với RDBMS 17 3.2 Keyspace 19 3.3 Column family 20 3.3.1 Hiểu column .21 3.3.2 NHỮNG CỘT ĐẶC BIỆT 21 3.3.3 Kiểu liệu 22 3.4 Index Cassandra .23 3.4.1 Primary index 23 3.4.2 Secondary index 23 Chương QUẢN LÝ VÀ TRUY XUẤT DỮ LIỆU 25 4.1 Hiểu ghi Cassandra 25 4.1.1 Hiểu Compaction 26 4.1.2 Quản lý giao tác truy suất đồng thời 26 4.1.3 Hiểu Inserts Updates 27 4.1.4 About Deletes 27 4.1.5 Hiểu ghi vào Hinted Handoff 28 4.2 Hiểu đọc Cassandra 29 4.3 Hiểu quán liệu Cassandra 30 4.3.1 Tùy chỉnh tính quán cho request client 30 Nhất quán ghi 30 4.3.2 Những tính chỉnh sauaw tính quán xây dựng sẵn Cassandra 31 Cassandra có vài tính xây dựng sẵn để đảm bảo liệu thông qua nhiều 31 4.4 Client APIs cho Cassandra .32 4.4.1 Cassandra CLI (Command-line Interface) 32 4.4.2 CQL (Cassandra Query Language) .32 4.4.3 Những client cho Cassandra cấp độ cao khác 32 Chương NHỮNG HOẠT ĐỘNG TRONG CASSANDRA 33 5.1 Tùy chỉnh Cassandra .33 5.1.1 Tùy chỉnh cache 33 Cách cache hoạt động 33 Cấu hình key cache cho Column Family .33 Cấu hình row cache cho Column Family .34 5.2 Backup Restore liệu 34 5.2.1 Tạo Snapshot 34 5.2.2 Xóa file Snapshot 35 5.2.3 Cấu hình thông số Incremental Backups .35 5.2.4 Restore từ Snapshot .36 Chương CLI VÀ CQL .37 6.1 Command-Line Interface (CLI) 37 6.1.1 Tạo Keyspace 37 6.1.2 Tạo Column Family .38 6.1.3 Thêm Row Column 38 6.1.4 Đọc Rows Columns 39 6.1.5 Index Column 40 6.1.6 Xóa Rows Columns 40 6.1.7 Drop Column Families Keyspaces 40 6.2 Cassandra Query Language (CQL) 40 6.2.1 Khởi động chương trình CQL(cqlsh) 41 6.2.2 Chạy lệnh CQL bang cqlsh 41 Tạo Column Family 41 Insert Retrieve Columns 41 Thêm Column với ALTER COLUMNFAMILY 42 Thay đổi metadata column 42 Xóa metadata column 42 Tạo Index cho Column 42 Xóa Column Row 43 Xóa Column Family Keyspaces 43 Tham khảo 43 44 44 DANH MỤC HÌNH DANH MỤC BẢNG Chương GIỚI THIỆU Ngày nay, dịch vụ internet phải xử lý khối lượng liệu lớn Hầu hết liệu lưu trữ phân tán nhiều máy chủ khác Vì vậy, hệ quản trị sở liệu quan hệ (RDBMS) tỏ không phù hợp với dịch vụ Người ta bắt đầu nghĩ tới việc phát triển DBMS phù hợp để quản lí khối lượng liệu phân tán Các DBMS thường gọi NoSQL (Not only SQL) Một đại diện bật NoSQL Cassandra 1.1 Khái niệm Cassandra quản trị hệ sở liệu phân tán mã nguồn mở thiết kế để sử lý khối lượng lớn liệu giàn trải nhiều node mà đảm bảo tính sẵn sàng cao (Highly Availability), khả mở rộng hay thu giảm số node linh hoạt (Elastic Scalability) chấp nhận số sai sót (Fault Tolerant) Nó phát triển Facebook tiếp tục phát triển sử dụng cho mạng xã hội lớn thới giới Năm 2008, Facebook chuyển cho cộng đồng mã nguồn mỡ Apache tiếp tục phát triển đến ngày hôm Cassandra coi kết hợp Amazon’s Dynamo Google’s BigTable 1.2 Các đặc trưng Cassandra 1.2.1 Tính phân tán Khả phân chia liệu thành nhiều phần đặt nhiều node khác người dùng thấy liệu khối hợp 1.2.2 Tính co giãn (Elastic Scalability) Khả hệ thống mở rộng số node cluster để phục vụ số lượng request đến nhiều thu giảm số node số lượng request đến 1.2.3 Tính hướng cột (Column-Oriented) Các RDBMS hướng dòng (row-oriented) phải định nghĩa trước cột (column) bảng (table) Đối với Cassandra bạn làm điều đó, đơn giản thêm vào cột tùy theo nhu cầu bạn 1.2.4 Tính sẵn sàng cao (Highly Availability) Dữ liệu chia làm nhiều lưu nhiều node nên client thực tác vụ đọc/ghi Cassandra đáp ứng cách thực gần tất (phụ thuộc vào thông số ConsitencyLevel client thiết lập) 1.2.5 Chấp nhận sai (Fault Tolerant) Dữ liệu bạn đẽ chép thành nhiều node cluster Nếu chẳng may node bị hỏng, bạn truy xuất liệu bạn node khác 1.3 Mục đích báo cáo Mục đích báo cáo tìm hiểu hệ quản trị sở liệu phân tán Cassandra mặc: • Kiến trúc bên Cassandra • • • • • Mô hình liệu Cassandra Đọc/ghi Cassandra Index Cassandra Sử lý giao tác, quán liệu, truy suất đồng thời Cassandra Ngôn ngữ truy vấn Cassandra Đó vấn đề cần phải xem xét tìm hiểu hệ quản trị sở liệu Ngoài có số vấn đề đặc trưng riêng hệ phân tán bàn đến phương thức trao đổi thông điệp node, phương thức phân chia liệu node, … 1.4 Cấu trúc báo cáo: Chương giới thiệu khái niệm, đặc trưng Cassandra mục đính báo cáo Chương trình bày kiến trúc Cassandra Chương trình bày mô hình liệu cassandra Chương trình bày cách quản lý truy xuất liệu cassandra Chương trình bày hoạt động diễn cassandra Chương trình bày ngôn ngữ truy vấn Cassandra (CQL) giao diện lập trình dòng lệnh (CLI) Chương KIẾN TRÚC CASSANDRA Hệ thống Cassandra hệ thống tập hợp nhiều node độc lập kết hợp với tạo thành cluster Trong cluster Cassandra, tất node ngang hàng với nhau, nghĩa node đóng vai trò master điều phối request đến node lại 2.1 Giao tiếp node (Gossip) Cassandra sử dụng giao thức gọi gossip để tìm thông tin trạng thái vị trí node thành viên Cassandra cluster Gossip giao thức giao tiếp ngang hàng (peer to peer) Mỗi node định kì trao đổi thông tin cho node khác cluster ngược lại Trong Cassandra, gossip chạy giây trao đổi thông điệp trạng thái với node khác cluster Thông tin trao đổi bao gồm thông tin về node khác mà chúng gossip Nhờ đó, node biết nhanh chóng tất node lại Thông điệp gossip có thông số version kết hợp với để suốt trình trao đổi gossip, thông tin cũ thay cập nhật thông tin 2.1.1 Hiểu cluster membership seed nodes Khi node khởi động, xem file cấu hình để biết tên cluster node khác cluster, trình gọi seed nodes Những cấu hình đặt file cassandra.yaml Để ngăn chặn phân vùng truyền thông gossip, tất node cluster nên có list seed node list file cấu hình Đây điều quan trọng cho lần node khởi động Để biết dãy liệu mà node chịu trách nhiệm lưu trữ, phải biết token cửa token node khác cluster Khi khởi tạo cluster mới, bạn nên khởi tạo token cho toàn cluster gán token khởi tạo cho node trước start Mỗi node sau gossip token cho node khác 2.1.2 Hiểu Failure Detection Recovery Failure Detection phương pháp cho node để xác định node khác hệ thống hoạt động hay không Thông tin Failure Detection dùng Cassandra để tránh định tuyến yêu cầu người dùng đến node không hoạt động Nó dùng để tránh định tuyến đến node hoạt động có hiệu suất thấp Quá trình gossip theo dõi hoạt động node dạng trực tiếp (thông qua node gossip trực tiếp đến nó) gián tiếp Suốt trình gossip, node trì khoảng thời gian (interval) để sau khoảng thời gian lại theo dõi lần (quá trình gossip chạy) Sự hư hỏng node kết từ nhiều nguyên nhân hư phần cứng, mạng ngừng hoạt động Node ngừng hoạt động thường ngắn kéo dài nhiều interval.Một node ngừng hoạt động chưa phát node khác định kì gossip với Để thay đổi vĩnh viễn membership node cluster người quản trị phải chỉnh sửa tường minh từ casssnadra cluster sử dụng tiện ích nodetool Khi node hoạt động trở lại từ trạng thái ngừng, thiếu liệu mà lúc ngừng hoạt động node khác chuyển đến Khi Failure Detection đánh dấu node ngừng hoạt động việc bị thiếu ghi vào node khác hinted handoff enable Mặc dầu vậy, có số bị khoảng thời gian từ node ngừng hoạt động đến nhận dạng không hoạt động Hoặc node ngừng hoạt động lâu khoảng thời gian cấu hình max_hint_window_in_ms hints không ghi lại bị Vì lý nên cách tốt 10 4.3 Hiểu quán liệu Cassandra Trong Cassandra, consistency refer tới cách để update, đồng row liệu lên tất phiên Cassandra mở rộng khái niệm eventual consistency việc offer tunable consistency Cho tác vụ đọc ghi, client định loại consistency việc cấu hình code Thêm vào chế quán, Cassandra hỗ trợ số built-in chế sửa chửa để đảm bảo liệu consistent qua nhiều 4.3.1 Tùy chỉnh tính quán cho request client Cấp độ consistency Cassandra set câu truy vấn đọc ghi Cái cho phép nhà phát triển ứng dụng điều chỉnh consistency câu truy ván dựa vào yêu cầu họ nhận thời gian đáp ứng nhanh hay kết trả xác Cassandra offer số cấp độ quán cho đọc ghi • Nhất quán ghi Khi bạn ghi Cassandra, consistency level đặc tả có viết thành công trước trả kết cho client Theo consistency level cung cấp, ANY consistency thấp (nhưng độ sẵn sang cao nhất) QUORUM khoảng đảm bảo quán tốt chịu vài cấp độ lỗi Quorum tính toán (replication_factor / 2) + Ví dụ repilation_factor quorum (có thể cho phép bị hư) Nếu repilation_factor quorum (cho phép bane bị hư) ONE: Trả phản hồi từ gần (được định snitch) Mặc định, read repair chạy back ground để để quán liệu QUORUM: trả record với timestamp gần quorum phản hồi LOCAL_QUORUM: trả record với timestamp gần lần quorum data center phản hồi Bỏ qua độ trễ giao tiếp node data center 30 EACH_QUORUM: Trả record với timestamp gần lần quorum data center cluster trả ALL: Trả record với timestamp gần tất trả Fail không trả • Choosing Client Consistency Levels Chọn consistency level để đọc ghi bao gồm việc định yêu cầu bạn kết quán độ trễ đọc ghi Nếu độ trễ đọc ghi ưu tiên hàng đầu, xem xét consistency level ONE Nếu quán ưu tiên hàng đầu, bạn đảm bảo đọc ghi phản ánh tác vụ ghi gần cách dùng công thức (nodes_written + nodes_read) > replication_factor 4.3.2 Những tính chỉnh sauaw tính quán xây dựng sẵn Cassandra Cassandra có vài tính xây dựng sẵn để đảm bảo liệu thông qua nhiều • Read repair: Cho tác vụ read, có loại read request mà coordinator gửi cho a direct read request and a background read repair request Số tiếp xúc trực tiếp với read request phụ thuộc vào consistent level đặc tả client background read repair request gửi cho lại không nhận read request để đảm bảo liệu đọc thường xuyên quán Coordinator so sánh liệu từ tất lại có sở hữu row request Và chúng không quán có tác vụ ghi để cập nhật lại giá trị lỗi thời sử dụng giá trị cập nhật sau Read repair cấu hình cho column family enable mặc định • Anti-Entropy Node Repair: Cho liệu không đọc thường xuyên liệu update node down, nodetool repair (ám anti-entropy node repair) đảm bảo tất 31 liệu tạo quán Node tool repair phài chạy định kì node để trì quán liệu • Hinted handoff: giới thiệu 4.4 Client APIs cho Cassandra Khi Cassandra hỗ trợ thrift API API client giao tiếp với Cassandra Thrift client cấp thấp hỗ trợ nhiều ngôn ngữ để giao tiếp Cassandra Nhưng cấp thấp nên khó khăn việc coding 4.4.1 Cassandra CLI (Command-line Interface) Tiện ích dùng để định nghĩa, thao tác với Cassandra sử dụng dòng lệnh đời từ phiên 0.7 Nó cấp phapr bin/Cassandra-cli gói cài đặt Cassandra Để khởi động sử dụng Cassandra ta phải connect tới cách chạy dòng lệnh với tham số -host cà –port 4.4.2 CQL (Cassandra Query Language) Từ phiên 0.8 có có Cassandra Query Language Cũng SQL client thao tác CQL cần biết thông dịch câu truy vấn thành đối tượng resultset CQL syntax dựa vào SQL Mặc dầu có nhiều tương đồng với SQL không thay đổi mô hình liệu tảng bên Cassandra Nó không hỗ trợ JOIN 4.4.3 Những client cho Cassandra cấp độ cao khác Những client thực theo ngôn ngữ khác Wrap bên thrift giúp thuận tiện cho người lập trình Một số client phổ biến như: Hector Client API (java), Pycassa Client API (Python), Phpcassa Client API (PHP), … 32 Chương NHỮNG HOẠT ĐỘNG TRONG CASSANDRA 5.1 Tùy chỉnh Cassandra Tinh chỉnh hiệu không phụ thuộc loại tác vụ mà cluster bạn thực thường xuyên mà phụ thuộc vào hình dạng liệu Ví dụ memtable Cassandra có chi phí cho cấu trúc index lên top liệu thực chúng lưu trữ Nếu kích thước giá trị lưu trữ column nhỏ so với số cột số dòng chúng chi phí đáng kể Vì tinh chỉnh tối ưu cho loại liệu hoàn toàn khác biệt so với tinh chỉnh tối ưu cho số nhỏ cột với nhiều liệu 5.1.1 Tùy chỉnh cache • Cách cache hoạt động Nếu cache dòng khóa cấu hình, row cache trả kết Trong trường hợp row cache ko tìm thấy, key cache hit Giả sử nắm lượng lớn key row cache Nếu tác vụ đọc hit row cache toàn row request trả mà hok cần phải seek đĩa Nếu row không nằm row cache nằm key cache, key cache tìm xác vùng row đĩa SSTable Nếu row ko nằm key cache, tác vụ đọc populate key cache sau truy cập row đĩa Mỗi hit key cache tiết kiệm lần seek đĩa SSTable • Cấu hình key cache cho Column Family Key cache nắm vị trí row key nhớ Tuning level tối ưu tác vụ đọc có lượng lớn row truy cấp thường xuyên Cache 200000 row key enable mặc định Bạn setting bang keys_cached lên column family 33 [default@demo] UPDATE COLUMN FAMILY users WITH keys_cached=205000; • Cấu hình row cache cho Column Family Row cache nắm hoàn toàn nội dung row nhớ Trong trường hợp row có kích thước lớn thay đổi thường xuyên row cache ko hiệu Vì lý này, row cache bị disable mặc định Row cache disable cho column family với nhiều row tỉ lệ đọc ghi cao Trong ngữ cảnh này, row cache tiêu tốn lượng lớn nhớ Chú ý row cache thực hiệu quả,nó cho process compaction java gabarge chủ động Row cache tốt cho workload mà truy cập tập nhỏ tổng số row row hầu hết cột trả Để enable row cache Cassandra set rows_cached với số row mong muốn 5.2 Backup Restore liệu Cassandra back up liệu cách tạo snapshot tất file liệu đĩa (các SSTable) Lưu trữ thư mục data Snapshot tạo theo keyspace hệ thống online Mặc dầu vậy, hệ thống phải dạng offline để phục hồi sử dụng snapshot Sử dụng công cụ ssh pssh bạn tạo snapshot cho toàn cluster Cái hỗ trợ việc backup eventual consistency Mặc dầu node đảm bảo quán với node thời điểm snapshot tạo ra, phục hồi snapshot giúp quán liệu sử dụng chế quán xây dựng sẵn Cassandra Sau snapshot tạo, bạn enable tăng backup node (mặc định disable) để backup liệu mà thay đổi snapshot cuối tạo Mỗi lần SSTable flush, hard link copy vào thư mục /backup thư mục data 5.2.1 Tạo Snapshot Snapshot tạo cách sử dụng công cụ nodetool Nếu bạn muốn tạo snapshot cho tất liệu cluster bạn chạy lệnh nodetool snapshot với tùy 34 chọn ssh pssh Snapshot đẩy tất liệu nhớ xuoogns đĩa, sau tạo hard link file SSTable cho keyspace Bạn phải có đủ không gian trống đĩa để chừa chỗ cho việc tạo snapshot Một snapshot cần không gian trống Mặc dầu theo thời gian, lớn dần lên Sauk hi backup hoàn thành bạn lưu trữ file back up nơi khác Để tạo snapshot node $ nodetool -h localhost -p 7199 snapshot 12022011 Mỗi snapshot folder chứa đựng vài file db lưu trữ liệu thời điểm backup 5.2.2 Xóa file Snapshot Khi tạo snapshot, phiên trước tự động bị xóa Để trì thư mục snapshot, snapshot cũ ko cần dùng nên xóa Lệnh nodetool clearsnapshot remove tất snapshot hữu từ thư mục snapshot keyspace Bạn có xem mà phần trình packup liệu (xóa snapshot cũ trước tạo mới) Xóa tất snapshot cho node $ nodetool -h localhost -p 7199 clearsnapshot Nếu bạn muốn xóa cho cluster, dùng parallel ssh tool 5.2.3 Cấu hình thông số Incremental Backups Khi incremental backup enable, cho phép bạn lưu backup offsite mà không cần transfer hoàn toàn snapshot This allows you to store backups offsite without transferring entire snapshots Also, incremental backups combine with snapshots to provide a dependable, up-todate backup mechanism To enable incremental backups, edit the cassandra.yaml configuration file on each node in the cluster and change the value of incremental_backups to true 35 As with snapshots, Cassandra does not automatically clear incremental backup files DataStax recommends setting up a process to clear incremental backup hard-links each time a new snapshot is created 5.2.4 Restore từ Snapshot Để restore keyspace tử snapshot, bạn cần tất file keyspace, bạn sử dụng incremental backup, số file incremental backup tạo tạo sau snapshot tạo Nếu restore node đơn, bạn phải shutdown node, Nếu restore cho toàn cluster, bạn phải shutdown tất node, restore liệu snapshot sau start tất node • To restore a node from a snapshot and incremental backups: o Tắt tất node restore o Xóa tất cà file /var/lib/cassandra/commitlog o Xóa tất file có đuôi *.db thư mục data/, không xóa /snapshot /backup o Tìm đến snapshot gần /data//snapshots/ copy nội dung vào /data/ o Nếu sử dụng incremental copy tất nội data//backups vào data/ o Khởi động lại node 36 dung Chương CLI VÀ CQL 6.1 Command-Line Interface (CLI) Tiện ích dùng để định nghĩa, thao tác với Cassandra sử dụng dòng lệnh đời từ phiên 0.7 Nó cấp phapr bin/Cassandra-cli gói cài đặt Cassandra Để khởi động sử dụng Cassandra ta phải connect tới cách chạy dòng lệnh với tham số -host cà –port Ví dụ để connect tới localhost port 9160: $ cassandra-cli -host localhost -port 9160 Để xem trợ giúp [default@unknown] help; Để xem trợ giúp lệnh [default@unknown] help SET; 6.1.1 Tạo Keyspace Tạo keyspace gọi demo, với replication_factor sử dụng SimpleStrategy replica placement strategy [default@unknown] CREATE KEYSPACE demo with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy' and strategy_options = [{replication_factor:1}]; Show chi tiết cấu hình tất keyspace tạo 37 SHOW KEYSPACES 6.1.2 Tạo Column Family Đầu tiên kết nối đến keyspace nơi bạn muốn định nghĩa column family [default@unknown] USE demo; Tạo static column family users keyspace demo Trong column family tạo vài cột: full_name, state, gender, email, birth_year Chú ý setting comparator, key_validation_class, validation_class [default@demo] CREATE COLUMN FAMILY users WITH comparator = UTF8Type AND key_validation_class=UTF8Type AND column_metadata = [ {column_name: full_name, validation_class: UTF8Type} {column_name: email, validation_class: UTF8Type} {column_name: state, validation_class: UTF8Type} {column_name: gender, validation_class: UTF8Type} {column_name: birth_year, validation_class: LongType} ]; Tiếp theo tạo dynamic column family gọi blog_entry Chú ý ko đặc tả định nghĩa cột Vì tên cột đặc tả người dùng [default@demo] CREATE COLUMN FAMILY blog_entry WITH comparator = TimeUUIDType AND key_validation_class=UTF8Type AND default_validation_class = UTF8Type; 6.1.3 Thêm Row Column Những câu lệnh sau minh họa cách dùng câu lênh SET để insert cột với row key khác column family users Trong ví dụ row key bobbyjo cài đặt cột cho user Chú ý bạn set cột thời điểm lệnh SET [default@demo] SET users['bobbyjo']['full_name']='Robert Jones'; [default@demo] SET users['bobbyjo']['email']='bobjones@gmail.com'; 38 [default@demo] SET users['bobbyjo']['state']='TX'; [default@demo] SET users['bobbyjo']['gender']='M'; [default@demo] SET users['bobbyjo']['birth_year']='1975'; In this example, the row key is yomama and we are just setting some of the columns for this user [default@demo] SET users['yomama']['full_name']='Cathy Smith'; [default@demo] SET users['yomama']['state']='CA'; [default@demo] SET users['yomama']['gender']='F'; [default@demo] SET users['yomama']['birth_year']='1969'; In this example, we are creating an entry in the blog_entry column family for row key yomama: [default@demo] SET blog_entry['yomama'][timeuuid()] = 'I love my new shoes!'; Chú ý Cassandra CLI sử dụng consistency level mặc định cho tất tác vụ đọc ghi Đặc tả consistency level không hỗ trợ Cassandra CLI 6.1.4 Đọc Rows Columns Dùng lệnh GET để lấy row khác từ column family Dùng LIST để trả nhóm row cột kết hợp với chúng [default@demo] LIST users; Cassandra lưu trữ tất liệu bên mặc định hex byte Nếu bạn không đặc tả row key validation class, column comparotor column validation class bạn định nghĩa column family, Cassandra lưu trữ tất dạng hex byte Để truyền lấy giá trị mà dạng người đọc hiểu , bạn truyền giá trị thông qua hàm encode ascii, bytes, integer (a generic variable-length integer type), lexicalUUID, long, utf8 Ví dụ để trả dạng UTF-8 [default@demo] GET users[utf8('bobby')][utf8('full_name')]; 39 6.1.5 Index Column CLI tạo secondary index Bạn tạo secondary index cho cột bạn tạo column family thêm sau dùng lệnh UPDATE COLUMN FAMILY Ví dụ thêm secondary index cho cột birth_year users [default@demo] UPDATE COLUMN FAMILY users WITH comparator = UTF8Type AND column_metadata = [{column_name: birth_year, validation_class: LongType, index_type: KEYS}]; Bởi index birth_year, giá trị truy vấn trực tiếp dựa theo năm [default@demo] GET users WHERE birth_date = 1969; 6.1.6 Xóa Rows Columns Cassandra hỗ trợ lênh DEL để xóa dòng cột [default@demo] DEL users ['yomama']['coupon_code']; [default@demo] GET users ['yomama']; 6.1.7 Drop Column Families Keyspaces Bạn DROP column family keyspace giống cách mà RDBMS làm [default@demo] DROP COLUMN FAMILY users; [default@demo] DROP KEYSPACE demo; 6.2 Cassandra Query Language (CQL) Từ phiên 0.8 có có Cassandra Query Language Cũng SQL client thao tác CQL cần biết thông dịch câu truy vấn thành đối tượng resultset CQL syntax dựa vào SQL Mặc dầu có nhiều tương đồng với SQL không thay đổi mô hình liệu tảng bên Cassandra Nó không hỗ trợ JOIN 40 6.2.1 Khởi động chương trình CQL(cqlsh) Từ Cassandra 1.0 trở có cql client install với Cassandra package Khi bạn start cqlsh, bạn phải hỗ trợ IP node muốn connect tới (mặc định localhost) port muốn connect tới (mặc định 9160) $ cqlsh 103.263.89.126 9160 cqlsh> Để thoát gõ lệnh exit cqlsh> exit 6.2.2 Chạy lệnh CQL bang cqlsh Chi tiết lệnh tham khảo Hiện version 2.0 phát triển vài hạn chế • Tạo Keyspace Ví dụ cho việc tạo keyspace Twissandra với thông số replication factor cqlsh> CREATE KEYSPACE twissandra WITH Strategy_class = 'NetworkTopologyStrategy AND strategy_options:DC1 = 3; • Tạo Column Family Tạo column family users keyspace vừa tạo Trước phải dùng USE để connect tới keyspace vừa tạo cqlsh> USE twissandra; cqlsh> CREATE COLUMNFAMILY users KEY varchar PRIMARY KEY, password varchar, gender varchar, session_token varchar, state varchar, birth_year bigint); • Insert Retrieve Columns Sử dụng INSERT SELECT để insert retrieve liệu từ users 41 cqlsh> INSERT INTO users (KEY, password) VALUES ('jsmith', 'ch@ngem3a') USING TTL 86400; cqlsh> SELECT * FROM users WHERE KEY='jsmith'; u'jsmith' | u'password',u'ch@ngem3a' | u'ttl', 86400 • Thêm Column với ALTER COLUMNFAMILY Lênh ALTER COLUMNFAMILY cho bạn cột cho column family Ví dụ thêm cột coupon_code với value kiểu varchar vào users cqlsh> ALTER TABLE users ADD coupon_code varchar; Cái tạo cột metadata thêm vào colum family schema không update dòng tồn users • Thay đổi metadata column Với ALTER COLUMNFAMILY bạn thay đổi kiểu cột thời điểm sau column family định nghĩa Ví dụ thay đổi value cột từ varchar sang int Chú ý coupon code tạo không kiểm tra kiểu cho kiểu giá trị insert sau kiểm tra cqlsh> ALTER TABLE users ALTER coupon_code TYPE int; • Xóa metadata column Nếu mục đích bạn xóa hoàn toàn cột metadata bao gồm tên cột giá trị cột bạn dùng ALTER TABLE DROP Sau chạy lệnh client add cột tên coupon_code cho column family users Nhưng chúng kiểm tra bạn add tường minh • Tạo Index cho Column Cqlsh dùng để tạo secondary index index cho giá trị cột Trong ví dụ tạo index lên state birth_year cqlsh> CREATE INDEX state_key ON users (state); cqlsh> CREATE INDEX birth_year_key ON users (birth_year); Bởi secondary index tạo cho cột nên giá trị truy vấn trực tiếp sau cqlsh> SELECT * FROM users 42 WHERE gender='f' AND state='TX' AND birth_year='1968'; u'user1' | u'birth_year',1968 | u'gender',u'f' | u'password',u'ch@ngem3' | u'state',u'TX' • Xóa Column Row Cqlsh hỗ trợ lệnh DELETE để xóa cột hoặc row Trong ví dụ xóa cột smith sau xóa hoàn toàn row smith cqlsh> DELETE session_token FROM users where KEY = 'jsmith'; cqlsh> DELETE FROM users where KEY = 'jsmith'; Chú ý có tượng gọi “range ghost” key dòng bị delete retrieve lệnh SELECT Nó thực định kì lần tác vụ compaction đc chạy • Xóa Column Family Keyspaces Với lệnh cqlsh bạn drop column family key space giống bảng database DBMS cqlsh> DROP COLUMNFAMILY users; cqlsh> DROP KEYSPACE twissandra; Tham khảo [1] Website http://www.datastax.com/docs/1.0/index [2] Cassandra The Definitive Guide 43 44 [...]... node để đảm bảo dữ liệu nhất quán và cũng nên chạy repair sau khi phục hồi lại một node vừa bị ngừng hoạt động 2.2 Phân vùng dữ liệu (data partition) trong Cassandra 2.2.1 Hiểu về phân vùng dữ liệu Khi bạn khởi động một Cassandra cluster, bạn phải chọn cách để dữ liệu phân chia giữa các node trong cluster Đây được gọi là chọn cách phân vùng cho cluster Trong Cassandra, tổng dữ liệu được quản lý bởi cluster... kiểu dữ liệu sẽ rang buộc kiểu dữ liệu được insert vào đó Tên cột trong 22 RDBMS là một nhãn cố đinh Trong Cassandra kiểu dữ liệu của giá trị cột được gọi là validator Kiểu dữ liệu của tên cột được gọi là comparator Bạn có thể định nghĩa kiểu dữ liệu khi bạn tạo column family nhưng điều đó là hok bắt buộc Mặc định Cassandra lưu trữ tên cột và giá trị cột dưới dạng hex byte (BytesType) Một số kiểu dữ. .. cluster thì dữ liệu vẫn được phân bố đồng đều giữa các node Để phân tán dữ liệu thông qua tập node, giải thuật hashing tạo một giá trị hash MD5 của row key trong phạm vi giá trị từ 0 đến 2 127 Mỗi node trong cluster được gán một token đại diện cho nó Một node sau đó sẽ lưu trữ một khoảng những giá trị hash nhỏ hơn token Lợi ích chính của cách tiếp cận này là một khi token được khởi tạo thích hợp, dữ liệu. .. secondary index được tạo cho state nên giá trị của nó có thể được truy vấn trực tiếp cho người dùng những người sống ở một state cho trước [default@demo] get users where state = 'TX'; 24 Chương 4 4.1 QUẢN LÝ VÀ TRUY XUẤT DỮ LIỆU Hiểu về ghi trong Cassandra Cassandra được tối ưu để việc ghi dữ liệu luôn có sự sẵn sàng cao và nhanh chóng RDBMS có cấu trúc dữ sao cho dữ liệu dư thừa là ít nhất Nhiều mẩu thông... bởi vì khó bảo trì việc phân tán dữ liệu thông qua các node 3.4.2 Secondary index Secondary index trong Cassandra muốn nói đến index lên giá trị cột (để phân biệt chúng với primary index) Secondary index cho phép truy vấn hiệu quả bằng cách đặc tả những giá trị dùng vị từ đẳng thức Câu truy vấn lên giá trị index cũng có thế áp dụng các filter thêm vào để tập kết quả cho nhữn giá trị khác Secondary index... đầu tăng trong Cassandra do tăng khối lượng read request, nó dễ dàng được khắc phục bằng cách thêm nhiều node cho cluster Cho những row thường xuyên được truy cập Cassandra có cache key built-in Sẽ giới thiệu sau trong phần cache 29 4.3 Hiểu về nhất quán dữ liệu trong Cassandra Trong Cassandra, consistency refer tới cách để update, đồng bộ row dữ liệu lên tất cả các phiên bản của nó Cassandra mở rộng... đó hầu hết các cột được trả về Để enable row cache trong Cassandra set rows_cached với số row mong muốn 5.2 Backup và Restore dữ liệu Cassandra back up dữ liệu bằng cách tạo một snapshot của tất cả các file dữ liệu trên đĩa (các SSTable) Lưu trữ trong thư mục data Snapshot được tạo theo keyspace và trong khi hệ thống còn online Mặc dầu vậy, hệ thống phải ở dạng offline để phục hồi sử dụng một snapshot... trí cũng như dữ liệu được viết Nếu tất cả các bản sao của những row bị tác động đều down Nó vẫn có thể viết 28 thành công nếu cùng consistent level ANY Dưới ngữ cảnh này, dữ liệu được ghi và dữ liệu hint được lưu trữ trên node coordinator nhưng sẽ không sẵn sang để đọc cho đến khi hint ghi vào bản sao thật sự sở hữu row đó ANY hỗ trợ absolute write availability Cái này không đảm bảo dữ liệu được viết... để xem xét sự nhất quán dữ liệu của chúng Nếu chúng không nhất quán thì dữ liệu của dòng nào gần nhất sẽ được coordinator chuyển lại cho client sau Để đảm bảo rằng tất cả bản sao có phiên bản gần nhất của dữ liệu đọc thường xuyên Coordinatior cũng liên lạc và so sánh dữ liệu từ tất cả các bản sao còn lại và nếu chúng không nhất quán thì việc ghi để update dòng để phản ánh giá trị viết gần đây nhất Process... bảo rằng dữ liệu đọc thường xuyên vẫn còn nhất quán Coordinator sẽ so sánh dữ liệu từ tất cả các bản sao còn lại có sở hữu row request Và nếu chúng không nhất quán thì nó sẽ có một tác vụ ghi để cập nhật lại những giá trị đã lỗi thời sử dụng giá trị được cập nhật sau cùng Read repair có thể được cấu hình cho mỗi column family và được enable mặc định • Anti-Entropy Node Repair: Cho những dữ liệu không ... cáo tìm hiểu hệ quản trị sở liệu (DBMS) phân tán Cassandra để từ thấy khác biệt so với hệ quản trị sở liệu quan hệ (RDBMS) Bài báo cáo tập trung chủ yếu vào việc tìm hiểu kiến trúc Cassandra (Cassandra. .. hình liệu (data model), quản cách quản lý truy suất liệu (managing and accessing data), ngôn ngữ truy vấn Cassandra (Cassandra Query Language) số khác niệm định nghĩa hệ quản trị sở liệu phân tán. .. lượng liệu phân tán Các DBMS thường gọi NoSQL (Not only SQL) Một đại diện bật NoSQL Cassandra 1.1 Khái niệm Cassandra quản trị hệ sở liệu phân tán mã nguồn mở thiết kế để sử lý khối lượng lớn liệu

Ngày đăng: 26/10/2015, 22:54

Từ khóa liên quan

Mục lục

  • Chương 1. GIỚI THIỆU

    • 1.1. Khái niệm

    • 1.2. Các đặc trưng của Cassandra

      • 1.2.1. Tính phân tán

      • 1.2.2. Tính co giãn (Elastic Scalability)

      • 1.2.3. Tính hướng cột (Column-Oriented)

      • 1.2.4. Tính sẵn sàng cao (Highly Availability)

      • 1.2.5. Chấp nhận sai (Fault Tolerant)

      • 1.3. Mục đích của báo cáo

      • 1.4. Cấu trúc bài báo cáo:

      • Chương 2. KIẾN TRÚC CASSANDRA

        • 2.1. Giao tiếp giữa các node (Gossip)

          • 2.1.1. Hiểu về cluster membership và seed nodes

          • 2.1.2. Hiểu về Failure Detection và Recovery

          • 2.2. Phân vùng dữ liệu (data partition) trong Cassandra

            • 2.2.1. Hiểu về phân vùng dữ liệu

            • 2.2.2. Các loại phân vùng

            • Random Partitioner

            • Ordered Partitioners

            • 2.3. Hiểu về Snitches

            • 2.4. Hiểu về Replica Placement Strategy

              • 2.4.1. SimpleStrategy

              • 2.4.2. NetworkTopologyStrategy

              • 2.5. Hiểu về yêu cầu của client trong Cassandra

                • 2.5.1. Hiểu về yêu cầu ghi

                • 2.5.2. Hiểu về yêu cầu đọc

                • Chương 3. MÔ HÌNH DỮ LIỆU CASSANDRA

                  • 3.1. So sánh với RDBMS

Tài liệu cùng người dùng

Tài liệu liên quan