In-place update in MongoDB
There is a great new feature in the release note of MongoDB 3.5.12.
Faster In-place Updates in WiredTiger
This work brings improvements to in-place update workloads for users running the WiredTiger engine, especially for updates to large documents. Some workloads may see a reduction of up to 7x in disk utilization (from 24 MB/s to 3 MB/s) as well as a 20% improvement in throughput.
I thought wiredtiger has impeletementd the delta page
feature introduced in the bw-tree paper, that is, writing pages that are deltas from previously written pages. But after I read the source code, I found it's a totally diffirent idea, in-place update
only impacted the in-meomry and journal format, the on disk layout of data is not changed.
I will explain the core of the in-place update
implementation.
MongoDB introduced mutable bson
to descirbe document update as incremental(delta) update
.
Mutable BSON provides classes to facilitate the manipulation of existing BSON objects or the construction of new BSON objects from scratch in an incremental fashion.
Suppose you have a very large document, see 1MB
{
_id: ObjectId("59097118be4a61d87415cd15"),
name: "ZhangYoudong",
birthday: "xxxx",
fightvalue: 100,
xxx: .... // many other fields
}
相关文章