Skip to content

Latest commit

 

History

History
270 lines (216 loc) · 5.94 KB

specific-description.md

File metadata and controls

270 lines (216 loc) · 5.94 KB

Specific description ZPD service

1. Giới thiệu

Đây là tài liệu đặc tả về API cung cấp của ZPD service. Cũng như mô tả các gói tin gửi nhận giữa client và ZPD service.

2. Sử dụng package

Sử dụng và tham khảo các opensource sau:

3. Protocol

  • ZPD sử dụng gRPC để xây dựng service.
  • Implement bằng ngôn ngữ Go.
  • Sử dụng Consul để lựa chọn leader giữa các node và healthy check.

4. Các chức năng cung cấp

4.1 Version 1.0.0

  • Tạo Connection tới ZPD.
  • Close Connection.
  • Create Database.
  • Use Database.
  • Drop Database.
  • Show Database.
  • Create Table.
  • Show Table.
  • Drop Table.
  • Insert row.
  • Select row (có index và không có index).
  • Delete row (có index và không có index).

5. Đặc tả

5.1 Public Service

5.1.1 Đặc tả Data

common.proto

message Status {
  //code = 1 means success
  int32 code = 1;
  string error = 2;
}

message MessageResponse {
  Status status = 1;
}

zpd.proto

enum SQLType {
    DEFAULT = 0;
    SHOWDATABASE = 1;
    SHOWTABLE = 2;
    SELECT = 3;
}

message Databases {
    repeated string databases = 1;
}

message NameTables {
    repeated string nametables = 1;
}

message Item{
    int32 type = 1;
    bytes val = 2;
    bool bool = 3;
}

message Row {
    repeated Item items = 1;
}

message Rows {
    repeated Row rows = 1;
}

message Ping {
    int64 timestamp = 1;
}

message Pong{
    int64 timestamp = 1;
    string serviceName = 2;
    zpd.common.proto.Status status = 3;
}

message ConnectionDBRequest {
    string dbname = 1;
}

message CloseConnectionDBRequest {        
}

message StatementRequest{
    SQLType type = 1;
    string sql = 2;
}

message StatementResponse{
    SQLType type = 1;
    bytes data = 2;
    zpd.common.proto.Status status = 3;
}

5.1.2 Đặc tả API

zpd_api

service ZPDService {
    // ping-pong
    rpc Ping (zpd.data.proto.Ping) returns (zpd.data.proto.Pong) {
    }
    //Connection db
    rpc ConnectDatabase(zpd.data.proto.ConnectionDBRequest) returns (zpd.common.proto.MessageResponse){
    }
    //Close connection db
    rpc CloseConnectionDatabase(zpd.data.proto.CloseConnectionDBRequest) returns (zpd.common.proto.MessageResponse){
    }
    //Statement api
    rpc ExecuteStatement(zpd.data.proto.StatementRequest) returns (zpd.data.proto.StatementResponse){
    }
}

5.2 Internal Service

5.2.1 Đặc tả Data

common_internal.proto

message Status {
  //code = 1 means success
  int32 code = 1;
  string error = 2;
}

message MessageResponse {
  Status status = 1;
}

zpd_internal.proto

message Table {
}

message Schema {
    uint64 ID = 1;
    string dbname = 2;
    repeated Table tables = 3;
}

message SchemaRequest {
    string dbname = 1;
}

message SchemaResponse {
    Schema schema = 1;
    zpd_internal.common.proto.Status status = 2;
}

message CreateDatabaseRequest {
    string dbname = 1;
}

message CreateDatabaseResponse{
    zpd_internal.common.proto.Status status = 1;
}

message DropDatabaseRequest {
    string dbname = 1;
}

message DropDatabaseResponse{
    zpd_internal.common.proto.Status status = 1;
}

message GetDatabasesRequest{

}

message GetDatabasesResponse{
    repeated string databases = 1;
    zpd_internal.common.proto.Status status = 2;
}

5.2.2 Đặc tả API

service ZPDInternalService {
    rpc GetSchema(zpd_internal.data.proto.SchemaRequest) returns (zpd_internal.data.proto.SchemaResponse){
    }

    rpc CreateDatabase(zpd_internal.data.proto.CreateDatabaseRequest) returns (zpd_internal.data.proto.CreateDatabaseResponse){
    }

    rpc DropDatabase(zpd_internal.data.proto.DropDatabaseRequest) returns (zpd_internal.data.proto.DropDatabaseResponse){
    }

    rpc GetDatabases(zpd_internal.data.proto.GetDatabasesRequest) returns (zpd_internal.data.proto.GetDatabasesResponse){
    }
}

Xem chi tiết các file đặc tả:

6. Thiết kế Key_Value

Tất cả key và value đều được chuyển thành bytes.

6.1 Database

key_value cho database

  • Key: DB:ID
  • Value: object schema

Note: 1 <= ID <= max(Int64)

key_value cho next ID Database

  • Key: nextDBID
  • Value: number
  • ID tăng dần, kiểu int64

6.2 Table

key_value cho Table

  • Key: TB:DBID:ID
  • Value: object table

Note: 1 <= ID <= max(Int64)

key_value cho next ID Table

  • Key: nextTBID:DBID
  • Value: number
  • ID tăng dần, kiểu int64

6.3 Row

  • Key: row:DBID:TBID:ID
  • Value: object row

Note: 1 <= ID <= max(Int64)

6.4 Index

  • Key: i:DBID:TBID:nameCol:value
  • Value: rowID