6
6
//! This crate lets you connect to a TiKV cluster and use either a transactional or raw (simple
7
7
//! get/put style without transactional consistency guarantees) API to access and update your data.
8
8
//!
9
+ //! The TiKV Rust client supports several levels of abstraction. The most convenient way to use the
10
+ //! client is via [`RawClient`] and [`TransactionClient`]. This gives a very high-level API which
11
+ //! mostly abstracts over the distributed nature of the store and has sensible defaults for all
12
+ //! protocols. This interface can be configured, primarily when creating the client or transaction
13
+ //! objects via the [`Config`] and [`TransactionOptions`] structs. Using some options, you can take
14
+ //! over parts of the protocols (such as retrying failed messages) yourself.
15
+ //!
16
+ //! The lowest level of abstraction is to create and send gRPC messages directly to TiKV (and PD)
17
+ //! nodes. The `tikv-client-store` and `tikv-client-pd` crates make this easier than using the
18
+ //! protobuf definitions and a gRPC library directly, but give you the same level of control.
19
+ //!
20
+ //! In between these levels of abstraction, you can send and receive individual messages to the TiKV
21
+ //! cluster, but take advantage of library code for common operations such as resolving data to
22
+ //! regions and thus nodes in the cluster, or retrying failed messages. This can be useful for
23
+ //! testing a TiKV cluster or for some advanced use cases. See the [`request`] module for
24
+ //! this API, and [`raw::lowering`] and [`transaction::lowering`] for
25
+ //! convenience methods for creating request objects.
26
+ //!
9
27
//! ## Choosing an API
10
28
//!
11
- //! This crate offers both [** raw**](raw/index.html ) and
12
- //! [** transactional**](transaction/index.html ) APIs. You should choose just one for your system.
29
+ //! This crate offers both [raw](RawClient ) and
30
+ //! [transactional](Transaction ) APIs. You should choose just one for your system.
13
31
//!
14
32
//! The consequence of supporting transactions is increased overhead of coordination with the
15
33
//! placement driver and TiKV, and additional code complexity.
18
36
//!
19
37
//! ### Transactional
20
38
//!
21
- //! The [transactional](transaction/index.html ) API supports **transactions** via multi-version
39
+ //! The [transactional](Transaction ) API supports **transactions** via multi-version
22
40
//! concurrency control (MVCC).
23
41
//!
24
42
//! Best when you mostly do complex sets of actions, actions which may require a rollback,
27
45
//!
28
46
//! ### Raw
29
47
//!
30
- //! The [raw](raw/index.html ) API has reduced coordination overhead, but lacks any
48
+ //! The [raw](RawClient ) API has reduced coordination overhead, but lacks any
31
49
//! transactional abilities.
32
50
//!
33
51
//! Best when you mostly do single value changes, and have very limited cross-value
34
52
//! requirements. You will not be able to use transactions with this API.
53
+ //!
54
+ //! ## Usage
55
+ //!
56
+ //! The general flow of using the client crate is to create either a raw or transaction client
57
+ //! object (which can be configured) then send commands using the client object, or use it to create
58
+ //! transactions objects. In the latter case, the transaction is built up using various commands and
59
+ //! then committed (or rolled back).
60
+ //!
61
+ //! ### Examples
62
+ //!
63
+ //! Raw mode:
64
+ //!
65
+ //! ```rust
66
+ //! use tikv_client::RawClient;
67
+ //!
68
+ //! let client = RawClient::new(vec!["127.0.0.1:2379"]).await?;
69
+ //! client.put("key".to_owned(), "value".to_owned()).await?;
70
+ //! let value = client.get("key".to_owned()).await?;
71
+ //! ```
72
+ //!
73
+ //! Transactional mode:
74
+ //!
75
+ //! ```rust
76
+ //! use tikv_client::TransactionClient;
77
+ //!
78
+ //! let txn_client = TransactionClient::new(vec!["127.0.0.1:2379"]).await?;
79
+ //! let mut txn = txn_client.begin_optimistic().await?;
80
+ //! txn.put("key".to_owned(), "value".to_owned()).await?;
81
+ //! let value = txn.get("key".to_owned()).await?;
82
+ //! txn.commit().await?;
83
+ //! ```
35
84
36
85
#[ macro_use]
37
- mod request;
38
-
86
+ pub mod request;
39
87
#[ macro_use]
40
- mod transaction;
88
+ #[ doc( hidden) ]
89
+ pub mod transaction;
41
90
42
91
mod backoff;
43
92
mod compat;
44
93
mod config;
45
94
mod kv;
46
95
mod pd;
47
- mod raw;
96
+ #[ doc( hidden) ]
97
+ pub mod raw;
48
98
mod region;
49
99
mod stats;
50
100
mod store;
@@ -64,14 +114,15 @@ pub use crate::backoff::Backoff;
64
114
#[ doc( inline) ]
65
115
pub use crate :: kv:: { BoundRange , IntoOwnedRange , Key , KvPair , Value } ;
66
116
#[ doc( inline) ]
67
- pub use crate :: raw:: { lowering:: * , Client as RawClient , ColumnFamily } ;
117
+ pub use crate :: raw:: { lowering as raw_lowering , Client as RawClient , ColumnFamily } ;
68
118
#[ doc( inline) ]
69
119
pub use crate :: request:: RetryOptions ;
70
120
#[ doc( inline) ]
71
121
pub use crate :: timestamp:: { Timestamp , TimestampExt } ;
72
122
#[ doc( inline) ]
73
123
pub use crate :: transaction:: {
74
- lowering:: * , CheckLevel , Client as TransactionClient , Snapshot , Transaction , TransactionOptions ,
124
+ lowering as transaction_lowering, CheckLevel , Client as TransactionClient , Snapshot ,
125
+ Transaction , TransactionOptions ,
75
126
} ;
76
127
#[ doc( inline) ]
77
128
pub use config:: Config ;
0 commit comments