AVRO - Lược đồ
Avro, là một tiện ích tuần tự hóa dựa trên lược đồ, chấp nhận các lược đồ làm đầu vào. Mặc dù có sẵn nhiều lược đồ khác nhau, nhưng Avro vẫn tuân theo các tiêu chuẩn xác định lược đồ của riêng mình. Các lược đồ này mô tả các chi tiết sau:
- loại tệp (ghi theo mặc định)
- vị trí của bản ghi
- tên của bản ghi
- các trường trong bản ghi với kiểu dữ liệu tương ứng của chúng
Sử dụng các lược đồ này, bạn có thể lưu trữ các giá trị được tuần tự hóa ở định dạng nhị phân sử dụng ít dung lượng hơn. Các giá trị này được lưu trữ mà không có bất kỳ siêu dữ liệu nào.
Tạo lược đồ Avro
Lược đồ Avro được tạo ở định dạng tài liệu JavaScript Object Notation (JSON), là một định dạng trao đổi dữ liệu dựa trên văn bản nhẹ. Nó được tạo theo một trong những cách sau:
- Một chuỗi JSON
- Một đối tượng JSON
- Một mảng JSON
Example - Ví dụ sau đây cho thấy một lược đồ, xác định một tài liệu, dưới không gian tên Tutorialspoint, có tên Nhân viên, có tên trường và tuổi.
{
"type" : "record",
"namespace" : "Tutorialspoint",
"name" : "Employee",
"fields" : [
{ "name" : "Name" , "type" : "string" },
{ "name" : "Age" , "type" : "int" }
]
}
Trong ví dụ này, bạn có thể thấy rằng có bốn trường cho mỗi bản ghi -
type - Trường này nằm dưới tài liệu cũng như các trường dưới tên trường.
Trong trường hợp tài liệu, nó hiển thị loại tài liệu, nói chung là một bản ghi vì có nhiều trường.
Khi nó là trường, kiểu mô tả kiểu dữ liệu.
namespace - Trường này mô tả tên của không gian tên mà đối tượng cư trú.
name - Trường này nằm dưới tài liệu cũng như các trường dưới tên trường.
Trong trường hợp tài liệu, nó mô tả tên lược đồ. Tên lược đồ này cùng với không gian tên, xác định duy nhất lược đồ trong cửa hàng (Namespace.schema name). Trong ví dụ trên, tên đầy đủ của lược đồ sẽ là Tutorialspoint.Empleteee.
Trong trường hợp các trường, nó mô tả tên của trường.
Các kiểu dữ liệu ban đầu của Avro
Lược đồ Avro có các kiểu dữ liệu nguyên thủy cũng như các kiểu dữ liệu phức tạp. Bảng sau đây mô tảprimitive data types của Avro -
Loại dữ liệu | Sự miêu tả |
---|---|
vô giá trị | Null là một kiểu không có giá trị. |
int | Số nguyên có dấu 32 bit. |
Dài | Số nguyên có dấu 64 bit. |
Phao nổi | số dấu phẩy động IEEE 754 chính xác đơn (32-bit). |
gấp đôi | số dấu phẩy động IEEE 754 chính xác kép (64-bit). |
byte | chuỗi các byte không dấu 8 bit. |
chuỗi | Chuỗi ký tự Unicode. |
Các kiểu dữ liệu phức tạp của Avro
Cùng với các kiểu dữ liệu nguyên thủy, Avro cung cấp sáu kiểu dữ liệu phức tạp là Bản ghi, Vùng, Mảng, Bản đồ, Liên hợp và Cố định.
Ghi lại
Kiểu dữ liệu bản ghi trong Avro là một tập hợp nhiều thuộc tính. Nó hỗ trợ các thuộc tính sau:
name - Giá trị của trường này giữ tên của bản ghi.
namespace - Giá trị của trường này chứa tên của không gian tên nơi lưu trữ đối tượng.
type - Giá trị của thuộc tính này chứa kiểu tài liệu (bản ghi) hoặc kiểu dữ liệu của trường trong lược đồ.
fields - Trường này chứa một mảng JSON, có danh sách tất cả các trường trong lược đồ, mỗi trường có tên và thuộc tính kiểu.
Example
Dưới đây là ví dụ về một bản ghi.
{
" type " : "record",
" namespace " : "Tutorialspoint",
" name " : "Employee",
" fields " : [
{ "name" : " Name" , "type" : "string" },
{ "name" : "age" , "type" : "int" }
]
}
Enum
Liệt kê là một danh sách các mục trong một tập hợp, liệt kê Avro hỗ trợ các thuộc tính sau:
name - Giá trị của trường này chứa tên của kiểu liệt kê.
namespace - Giá trị của trường này chứa chuỗi đủ điều kiện tên của Bảng kê.
symbols - Giá trị của trường này chứa các ký hiệu của enum dưới dạng một mảng tên.
Example
Dưới đây là ví dụ về kiểu liệt kê.
{
"type" : "enum",
"name" : "Numbers",
"namespace": "data",
"symbols" : [ "ONE", "TWO", "THREE", "FOUR" ]
}
Mảng
Kiểu dữ liệu này xác định một trường mảng có một mục thuộc tính duy nhất. Thuộc tính items này chỉ định loại item trong mảng.
Example
{ " type " : " array ", " items " : " int " }
Bản đồ
Kiểu dữ liệu bản đồ là một mảng các cặp khóa-giá trị, nó tổ chức dữ liệu thành các cặp khóa-giá trị. Khóa cho một bản đồ Avro phải là một chuỗi. Các giá trị của bản đồ giữ kiểu dữ liệu của nội dung bản đồ.
Example
{"type" : "map", "values" : "int"}
Đoàn thể
Một kiểu dữ liệu liên hợp được sử dụng bất cứ khi nào trường có một hoặc nhiều kiểu dữ liệu. Chúng được biểu diễn dưới dạng mảng JSON. Ví dụ: nếu một trường có thể là int hoặc null, thì liên hợp được biểu diễn là ["int", "null"].
Example
Dưới đây là một tài liệu ví dụ sử dụng công đoàn -
{
"type" : "record",
"namespace" : "tutorialspoint",
"name" : "empdetails ",
"fields" :
[
{ "name" : "experience", "type": ["int", "null"] }, { "name" : "age", "type": "int" }
]
}
đã sửa
Kiểu dữ liệu này được sử dụng để khai báo một trường có kích thước cố định có thể được sử dụng để lưu trữ dữ liệu nhị phân. Nó có tên trường và dữ liệu là thuộc tính. Tên chứa tên của trường và kích thước chứa kích thước của trường.
Example
{ "type" : "fixed" , "name" : "bdata", "size" : 1048576}