┌─────────────────────┐
│ HoraeDBClient │
└─────────────────────┘
│
▼
┌─────────────────────┐
│ QueryClient │───┐
└─────────────────────┘ │
│ │Async to retry
│ │
┌────────────┘ │
│ │
│ ┌─────────────────────┐ │ ┌─────────────────────┐ ┌─────────────────────┐
└─▶│ RouterClient │◀─┴──▶│ RouterCache │◀─────▶│ RouterFor │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
▲ │
│ │
▼ │
┌─────────────────────┐ │
│ RpcClient │◀──────────────────────────────────────────────┘
└─────────────────────┘
▲
│
▼
┌─────────────────────┐
│ Default GRPC impl │
└─────────────────────┘
▲
│
┌───────────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐
│ │
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ HoraeDB Node1 │ │ HoraeDB Node2 │ │ ... │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
- HoraeDBClient
- The java client implementation of HoraeDB is oriented to users and provides APIs such as writing and querying
- QueryClient
- The default implementation of queries, purely asynchronous
- Including asynchronous acquisition of routing table, automatic retry when routing table fails
- RouterClient
- The router client will maintain the routing table information locally and refresh the routing table from the server
- RpcClient
- A pure asynchronous high-performance RPC client, the default transport layer is implemented based on gRPC
/**
* According to the conditions, query data from the database.
*
* @param req the query request
* @param ctx the invoke context
* @return query result
*/
CompletableFuture<Result<SqlQueryOk, Err>> sqlQuery(SqlQueryRequest req, Context ctx);
name | desc |
---|---|
SqlQueryRequest req |
Query request, including tables and sql fields, tables is a suggested field, if filled in, there will be more efficient routing, if not filled, the sql statement will be automatically parsed for routing (need to introduce the horaedb-sql module) |
Context ctx |
Call context, to achieve some special requirements, the content in ctx will be written into the headers metadata of gRPC |
CompletableFuture<Result<SqlQueryOk, Err>>
- Return a future, because query is a pure asynchronous API, and no part of the entire link is blocked.
Result<SqlQueryOk, Err>
- Result is inspired by Result in Rust, where QueryOk and Err can only have a value at the same time
SqlQueryOk
- The result of a successful query, contains
- sql in SqlQueryRequest
- affectedRows is the number of affected data rows returned when updating or deleting data
- rows is the statement returned by the query, a class of Sql will only return affectedRows Or List, will not return both values
Row
- When processing the results returned by the query, the user can directly obtain
List<Row>
, or process it through stream. - Row is a collection of Value, which is a very simple data structure
- Note: When Value gets the java primitive value, you need to pass in the type method that matches the table creation, otherwise an error will be reported
- Example to use
Row
:row.getColumn("cpu_util").value().getDouble()
Err
- The result of the query failure is displayed, including the error status code, error text information, and the address of the server where the error was thrown.