pub struct Bucket { /* private fields */ }Expand description
A bucket is a named collection of key-value pairs.
Implementations§
Source§impl Bucket
impl Bucket
Sourcepub fn begin(&self) -> Result<TxnKV<'_>, OpCode>
pub fn begin(&self) -> Result<TxnKV<'_>, OpCode>
Begins a new read-write transaction.
Examples found in repository?
examples/observer.rs (line 19)
8fn main() -> Result<(), OpCode> {
9 let path = std::env::temp_dir().join(format!("mace_observer_{}", std::process::id()));
10 let _ = std::fs::remove_dir_all(&path);
11
12 let observer = Arc::new(InMemoryObserver::new(256));
13 let mut opt = Options::new(&path);
14 opt.observer = observer.clone();
15
16 let db = Mace::new(opt.validate()?)?;
17 let bucket = db.new_bucket("observe", BucketOptions::default())?;
18
19 let tx = bucket.begin()?;
20 tx.put("k1", "v1")?;
21
22 let r = tx.put("k1", "v2");
23 assert_eq!(r.err(), Some(OpCode::AbortTx));
24 drop(tx);
25
26 let tx = bucket.begin()?;
27 tx.put("k2", "v2")?;
28 tx.commit()?;
29
30 let snapshot = observer.snapshot();
31 print_snapshot(&snapshot);
32 Ok(())
33}More examples
examples/demo.rs (line 11)
3fn main() -> Result<(), OpCode> {
4 let path = std::env::temp_dir().join("mace");
5 let _ = std::fs::remove_dir_all(&path);
6 let opt = Options::new(path).validate()?;
7 let db = Mace::new(opt)?;
8 let bucket = db.new_bucket("test", BucketOptions::default())?;
9
10 // start a read-write transaction
11 let kv = bucket.begin()?;
12 kv.put("foo", "bar")?;
13 kv.put("fool", "+1s")?;
14 kv.put("foolish", "elder")?;
15
16 // can't create two identical keys
17 let r = kv.put("foolish", "114514").err();
18 assert_eq!(r.unwrap(), OpCode::AbortTx);
19
20 // use `update` for exist key or use `upsert` when unsure
21 let r = kv.update("foolish", "114514");
22 assert!(r.is_ok());
23
24 let r = kv.get("foo")?;
25 assert_eq!(r.slice(), "bar".as_bytes());
26 kv.del("foolish")?;
27 kv.commit()?;
28
29 // rollback
30 let kv = bucket.begin()?;
31 kv.put("mo", "ha")?;
32 drop(kv);
33
34 // start a read-only transaction
35 let view = bucket.view()?;
36 let r = view.get("foo")?;
37 assert_eq!(r.slice(), "bar".as_bytes());
38 let r = view.get("mo");
39 assert_eq!(r.err().unwrap(), OpCode::NotFound);
40
41 // prefix scan
42 let r = view.get("foolish");
43 assert!(r.is_err() && r.err().unwrap() == OpCode::NotFound);
44 let iter = view.seek("foo");
45 assert_eq!(iter.count(), 2);
46
47 Ok(())
48}Sourcepub fn view(&self) -> Result<TxnView<'_>, OpCode>
pub fn view(&self) -> Result<TxnView<'_>, OpCode>
Begins a new read-only transaction (view).
Examples found in repository?
examples/demo.rs (line 35)
3fn main() -> Result<(), OpCode> {
4 let path = std::env::temp_dir().join("mace");
5 let _ = std::fs::remove_dir_all(&path);
6 let opt = Options::new(path).validate()?;
7 let db = Mace::new(opt)?;
8 let bucket = db.new_bucket("test", BucketOptions::default())?;
9
10 // start a read-write transaction
11 let kv = bucket.begin()?;
12 kv.put("foo", "bar")?;
13 kv.put("fool", "+1s")?;
14 kv.put("foolish", "elder")?;
15
16 // can't create two identical keys
17 let r = kv.put("foolish", "114514").err();
18 assert_eq!(r.unwrap(), OpCode::AbortTx);
19
20 // use `update` for exist key or use `upsert` when unsure
21 let r = kv.update("foolish", "114514");
22 assert!(r.is_ok());
23
24 let r = kv.get("foo")?;
25 assert_eq!(r.slice(), "bar".as_bytes());
26 kv.del("foolish")?;
27 kv.commit()?;
28
29 // rollback
30 let kv = bucket.begin()?;
31 kv.put("mo", "ha")?;
32 drop(kv);
33
34 // start a read-only transaction
35 let view = bucket.view()?;
36 let r = view.get("foo")?;
37 assert_eq!(r.slice(), "bar".as_bytes());
38 let r = view.get("mo");
39 assert_eq!(r.err().unwrap(), OpCode::NotFound);
40
41 // prefix scan
42 let r = view.get("foolish");
43 assert!(r.is_err() && r.err().unwrap() == OpCode::NotFound);
44 let iter = view.seek("foo");
45 assert_eq!(iter.count(), 2);
46
47 Ok(())
48}Sourcepub fn checkpoint(&self)
pub fn checkpoint(&self)
Starts a manual checkpoint which will flush dirty pages to disk and may trigger WAL gc
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Bucket
impl !UnwindSafe for Bucket
impl Freeze for Bucket
impl Send for Bucket
impl Sync for Bucket
impl Unpin for Bucket
impl UnsafeUnpin for Bucket
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more