v0.5.0
New Features
Get()
operation with floor/ceiling comparison
It's now possible to do a Get()
request for a key that is floor (<=
), ceiling (>=
), lower (<
) or higher >
.
eg.:
key, value, version, err := client.Get(ctx, "my-key", ComparisonFloor())
Partition Key
A PartitionKey
can be specified in all the operations. When a partition key is set, the shard routing mechanism will be based on it instead of using the record key.
eg.:
key1, v1, err := client.Put(ctx, "key-1", []byte("1"), PartitionKey("x"))
key2, v2, err := client.Put(ctx, "key-2", []byte("1"), PartitionKey("x"))
key2, v2, err := client.Put(ctx, "key-3", []byte("1"), PartitionKey("x"))
All these record are going to be stored on the same shard, even though they have different keys.
Operations such as Get()
with floor/ceiling match, List()
and RangeScan()
become more efficient when a PartitionKey()
option is set, since they only need to operate on a single shard.
Sequential Keys
Oxia can help generating unique and monotonically increasing keys composed on an arbitrary number of sequences.
key1, v1, err := client.Put(ctx, "a", []byte("0"), SequenceKeysDeltas(1), PartitionKey("x"))
// key1 -> a-00000000000000000001
key2, v2, err := client.Put(ctx, "a", []byte("0"), SequenceKeysDeltas(5), PartitionKey("x"))
// key2 -> a-00000000000000000006
RangeScan
RangeScan()
is similar to List()
, though it allows to efficiently iterate over a large set of records
Reading Coordinator configuration from config map
When running in Kubernetes, the Oxia coordinator can read the configuration directly from a config map. This will allow to get instant notifications of changes to the configuration and to get them applied immediately.
What's Changed
- improve oxia coordinatior status configmap by @labuladong in #456
- Upgrade to OTel 1.26 by @merlimat in #457
- Switch CI to Go 1.22 by @merlimat in #458
- Upgrade K8S client API lib by @merlimat in #459
- Fixed Trivy scan severity config by @merlimat in #460
- Watch config changes by @labuladong in #462
- Upgrade to protovt 0.6 by @merlimat in #463
- Bump google.golang.org/grpc from 1.58.2 to 1.58.3 by @dependabot in #464
- Ensure notification channel is always closed before client.Close() returns by @merlimat in #466
- Added support for Get() with ComparisonType in Db abstraction by @merlimat in #465
- Server side handling of floor/ceiling get requests by @merlimat in #467
- doc: add file type to avoid confusing by @mattisonchao in #468
- Added client side implementation of ceiling/floor get queries by @merlimat in #469
- Added partition-key to override shard routing by @merlimat in #470
- Only watch config file when running coordinator by @merlimat in #471
- Support sequential write operation on server dbs by @merlimat in #472
- Support sequential keys in client SDK by @merlimat in #474
- Hide internal keys in CLI listing by @merlimat in #475
- Refactored CLI client by @merlimat in #476
- Added CLI options for partition-key, comparison type and sequence keys by @merlimat in #477
- Added delete-range CLI command by @merlimat in #478
- Added range-scan support in oxia db by @merlimat in #479
- Added range-scan support in public RPC by @merlimat in #480
- Implemented range-scan in client API by @merlimat in #481
- Update Busybox to fix CVE-2023-42366 by @merlimat in #482
- Support range-scan in CLI by @merlimat in #483
- Allower to read cluster config directly from the k8s config-map by @merlimat in #484
Full Changelog: v0.4.0...v0.5.0