Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Databases
Code

Làm quen với Cassandra: Kiểu dữ liệu CQL và sử dụng GoCQL

by
Difficulty:IntermediateLength:MediumLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Trong phần đầu tiên của loạt bài hướng dẫn này, tôi đã khái quát những điều rất cơ bản của Cassandra và sử dụng CQLSH để giao tiếp với hệ thống cơ sở dữ liệu thông qua shell. Trong phần thứ hai này, tôi sẽ khái quát ngắn gọn về các kiểu dữ liệu chính có sẵn trong CQL. Sau đó tôi sẽ khái quát các yếu tố cơ bản của gocql, một gói Golang client để cài đặt trình điều khiển Cassandra cho Golang. Tôi sẽ khái quát cách làm thế nào để tạo một kết nối phiên với Cassandra với một số tùy chọn cấu hình và sau đó cách để chạy các truy vấn sử dụng phiên.

Cassandra cung cấp hỗ trợ cho các kiểu dữ liệu cơ bản có sẵn trong hầu hết các hệ thống cơ sở dữ liệu. Ngoài ra, nó còn cung cấp các kiểu dữ liệu phức hợp mà có thể lưu trữ các dữ liệu kết hợp ở dạng danh sách, tập hợp, và map. Ngoài ra, CQL cũng hỗ trợ các kiểu dữ liệu tự định nghĩa, cho phép các nhà phát triển tạo kiểu dữ liệu dễ đọc và dễ hiểu của riêng họ.

Các kiểu Dữ liệu Cơ bản

  • ascii: Biểu diễn cho một chuỗi ký tự ASCII. Việc chèn bất kỳ ký tự không phải ASCII vào một cột của kiểu dữ liệu này sẽ cho ra một lỗi.
  • bigint: Đại diện cho số nguyên có dấu dài 64-bit. Được sử dụng để lưu trữ những con số dài. Nó nên được sử dụng chỉ khi chúng ta chắc chắn cần các số dài vì nó chiếm nhiều không gian bộ nhớ hơn so với int.
  • blob: dùng để lưu trữ các byte tuỳ ý. Nó ở hệ thập lục phân, và bất kỳ dữ liệu nào không cần xác nhận có thể được lưu trữ trong trường này.
  • boolean: Lưu trữ true hoặc false.
  • counter: Đại diện cho một số nguyên dài 64-bit, nhưng giá trị của cột này không thể thiết lập. Chỉ có hai hoạt động trên cột này, tăng và giảm. Trong một bảng với một cột counter, chỉ có các kiểu counter và khóa chính là được phép. Không có câu lệnh INSERT được phép trong một bảng với các column counter; chỉ UPDATE có thể được sử dụng. Ví dụ:
  • date: Đại diện cho một giá trị ngày mà không có một giá trị giờ. Cassandra mã hóa giống như một giá trị số nguyên kể từ epoch. Ngày có thể được biểu diễn như là chuỗi trong định dạng yyyy-mm-dd.
  • decimal: Đại diện cho một biến-giá trị thập phân chính xác. Dùng tốt nhất trong việc lưu trữ tiền tệ hoặc các giá trị tài chính.
  • double: Lưu trữ một giá trị dấu chấm động dài 64-bit.
  • float: Lưu trữ một giá trị dấu chấm động 32-bit.
  • inet: Biểu diễn cho một chuỗi địa chỉ IP trong định dạng của IPv4 hoặc IPv6.
  • int: Biểu diễn cho một số nguyên có dấu dài 32-bit. Sử dụng chủ yếu để lưu trữ các giá trị số nguyên.
  • smallint: Biểu diễn cho một số nguyên 2 byte (16-bit). Có thể được ưu tiên hơn so với kiểu int để lưu trữ các giá trị số nguyên nhỏ để tiết kiệm không gian lưu trữ.
  • text: Biểu diễn cho một chuỗi mã hoá UTF-8. Nên được sử dụng khi chúng ta muốn lưu trữ các ký tự không phải mã ASCII.
  • time: Biểu diễn cho một giá trị thời gian. Đại diện như một chuỗi ở dạng 01:02:03.123 và lưu trữ số nguyên có dấu dài 64-bit đại diện cho số nano giây trôi qua kể từ nửa đêm.
  • timestamp: Lưu trữ cả thành phần ngày và giờ với độ chính xác milli giây. Có thể được biểu diễn dưới dạng văn bản ở định dạng 2016-12-01 01:02:03.123.
  • tinyint: Biểu diễn cho một số nguyên 1 byte (8 bit). Có thể được ưu tiên hơn so với kiểu int hoặc smallint để lưu trữ các giá trị số nguyên nhỏ để tiết kiệm không gian lưu trữ.
  • timeuuid: Lưu trữ phiên bản 1 UUID.
  • uuid: UUID ở định dạng chuẩn. Đây là một giá trị lớn hơn so với timeuuid.
  • varchar: Tương tự như văn bản. Cả hai có thể được sử dụng để thay thế cho nhau.
  • variant: Một giá trị số nguyên với độ chính xác tùy ý. Nó được khuyên nên sử dụng một kiểu dữ liệu với độ chính xác cần thiết.

Các kiểu Dữ liệu Tập hợp

  • set: Kiểu này lưu trữ một bộ sưu tập các giá trị. Các giá trị được lưu trữ không có thứ tự, nhưng CQLSH sẽ trả về dữ liệu đã được sắp xếp. Ví dụ: chuỗi sẽ được sắp xếp theo thứ tự ABC. Hãy sửa đổi bảng mà chúng ta đã tạo ra ở trên:

Bạn có thể sử dụng các toán tử tập hợp thông thường như difference để loại bỏ các phần tử. Để xóa hoặc thay thế toàn bộ tập hợp, thực hiện SET tags = {<thứ gì đó>}.

  • list: Một danh sách cũng lưu trữ một bộ sưu tập các giá trị nhưng lưu trữ chúng theo kiểu đã được sắp xếp, mặc định sắp theo thứ tự chèn vào. Hãy thử làm điều tương tự như chúng ta đã làm ở trên với bộ sưu tập với một danh sách ngay bây giờ:

Trong một danh sách, các giá trị có thể được thêm vào đằng trước, trừ ra (như trong bộ sưu tập), chèn/thay thế /xóa bởi giá trị index (SET tags[1] = '<một số giá trị>'), vv.

  • map: Một bản đồ chứa một bộ sưu tập của các cặp khóa-giá trị. Đây có thể là bất cứ điều gì ngoại trừ kiểu counter. Hãy xem mô tả nhỏ cho mỗi thẻ.

Các kiểu Dữ liệu Tuỳ biến

Chúng ta có thể định nghĩa các kiểu dữ liệu của riêng mình trong Cassandra. Điều này tạo ra rất nhiều sự linh hoạt và dễ dàng bảo dưỡng tổng thể. Giả sử chúng ta muốn lưu trữ địa chỉ đăng ký của trang web.

Để sử dụng một kiểu dữ liệu tuỳ biến trong một bộ sưu tập lồng nhau, chúng ta cần phải xác định nó như là một bộ sưu tập frozen.

Sử dụng GoCQL

Tôi giả định rằng bạn có một số kiến thức về sử dụng Golang và cấu hình cùng với cài đặt các gói.

Cài đặt

Để cài đặt gói gocql, hãy chạy lệnh sau từ shell:

Bây giờ tôi sẽ tạo ra một script Go mà sẽ giải thích các khái niệm cần thiết để hiểu gocql.

Viết Script

main.go

Hầu hết các khái niệm được giải thích trong chính code ở trên. Một số điểm đáng chú ý là các hoạt động khác nhau được sử dụng cùng với session.Query(). Ngoài ba hoạt động ở dưới đây, có rất nhiều hoạt động được hỗ trợ có thể được tìm thấy trong tài liệu hướng dẫn.

  • Exec(): Hoạt động này chỉ thực thi truy vấn mà không trả về bất kỳ hàng nào. Trở về lỗi nếu có.
  • Scan(): Hoạt động này sẽ thực hiện truy vấn đồng thời sao chép các giá trị cột từ hàng đầu tiên xuất hiện trong truy vấn vào các biến được truyền vào. Nó sẽ loại bỏ bất kỳ hàng nào ngoài cái đầu tiên.
  • Iter(): Hoạt động này sẽ thực thi truy vấn và trả về một biến lặp mà sau đó làm việc giống như cách Scan() làm việc đối với mỗi hàng lấy được.

Chạy Script

Để chạy script, thực thi lệnh bên dưới trong shell.

Tóm tắt

Trong phần thứ hai của loạt bài hướng dẫn này, chúng ta đã khái quát các kiểu dữ liệu khác nhau sẵn có trong Cassandra. Chúng ta cũng đã thấy các kiểu bộ sưu tập hoạt động như thế nào và cách các kiểu dữ liệu tuỳ biến có thể được sử dụng để tạo ra một giản đồ tổng thể, linh hoạt. Chúng ta cũng đã thấy cách chúng ta có thể lập trình tương tác với Cassandra trong Golang bằng cách sử dụng gocql. Gói này cung cấp thêm nhiều tính năng mà bạn có thể tự mình khám phá.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.