Đâ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.
Sử dụng và tham khảo các opensource sau:
- 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.
- 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).
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;
}
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){
}
}
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;
}
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ả:
Tất cả key và value đều được chuyển thành bytes.
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
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
- Key: row:DBID:TBID:ID
- Value: object row
Note:
1 <= ID <= max(Int64)
- Key: i:DBID:TBID:nameCol:value
- Value: rowID