Skip to content

Commit 6f743a5

Browse files
committed
Doc: use custom sharding key to calculate bucket id
Describe functionality and current limitations (#212, #213 and #219) with custom sharding key in CHANGELOG and README. Closes #166
1 parent 8343c8f commit 6f743a5

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
99

1010
### Added
1111

12+
* CRUD operations calculates bucket id automatically using sharding
13+
key specified with DDL schema or in `_ddl_sharding_key` space.
14+
NOTE: CRUD methods delete(), get() and update() requires that sharding key
15+
must be a part of primary key.
16+
1217
### Changed
1318

1419
### Fixed

README.md

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,58 @@ crud.unflatten_rows(res.rows, res.metadata)
5353
**Notes:**
5454

5555
* A space should have a format.
56-
* By default, `bucket_id` is computed as `vshard.router.bucket_id_strcrc32(key)`,
57-
where `key` is the primary key value.
58-
Custom bucket ID can be specified as `opts.bucket_id` for each operation.
59-
For operations that accepts tuple/object bucket ID can be specified as
60-
tuple/object field as well as `opts.bucket_id` value.
56+
57+
**Sharding key and bucket id calculation**
58+
59+
*Sharding key* is a set of tuple field values used for calculation *bucket ID*.
60+
*Sharding key definition* is a set of tuple field names that describe what
61+
tuple field should be a part of sharding key. *Bucket ID* determines which
62+
replicaset stores certain data. Function that used for calculation bucket ID is
63+
named *sharding function*.
64+
65+
By default CRUD calculates bucket ID using primary key and a function
66+
`vshard.router.bucket_id_strcrc32(key)`, it happen automatically and doesn't
67+
require any actions from user side. User can calculate bucket ID on outside and
68+
pass it as an option to CRUD methods that accepts tuple or object (see option
69+
`bucket_id` below).
70+
71+
Starting from 0.10.0 users who don't want to use primary key as a sharding key
72+
may set custom sharding key definition as a part of [DDL
73+
schema](https://github.com/tarantool/ddl#input-data-format) or insert manually
74+
to the space `_ddl_sharding_key` (for both cases consider a DDL module
75+
documentation). As soon as sharding key for a certain space is available in
76+
`_ddl_sharding_key` space CRUD will use it for bucket ID calculation
77+
automatically. Note that CRUD methods `delete()`, `get()` and `update()`
78+
requires that sharding key must be a part of primary key.
79+
80+
Table below describe what operations supports custom sharding key:
81+
82+
| CRUD method | Sharding key support |
83+
| -------------------------------- | -------------------------- |
84+
| `get()` | Yes |
85+
| `insert()` / `insert_object()` | Yes |
86+
| `delete()` | Yes |
87+
| `replace()` / `replace_object()` | Yes |
88+
| `upsert()` / `upsert_object()` | Yes |
89+
| `select()` / `pairs()` | Yes |
90+
| `update()` | Yes |
91+
| `upsert()` / `upsert_object()` | Yes |
92+
| `replace() / replace_object()` | Yes |
93+
| `min()` / `max()` | No (not required) |
94+
| `cut_rows()` / `cut_objects()` | No (not required) |
95+
| `truncate()` | No (not required) |
96+
| `len()` | No (not required) |
97+
98+
Current limitations for using custom sharding key:
99+
100+
- It's not possible to update sharding keys automatically when schema is
101+
updated on storages, see [#212](https://github.com/tarantool/crud/issues/212).
102+
However it is possible to do it manually with
103+
`require('crud.sharding_key').update_sharding_keys_cache()`.
104+
- CRUD select may lead map reduce in some cases, see
105+
[#213](https://github.com/tarantool/crud/issues/213).
106+
- No support of JSON path for sharding key, see
107+
[#219](https://github.com/tarantool/crud/issues/219).
61108

62109
### Insert
63110

0 commit comments

Comments
 (0)