3.4 KiB
3.4 KiB
Metabase versioning
This file describes changes between the metabase versions.
Warning: database schema below is outdated and incomplete, see source code.
Current
Primary buckets
- Graveyard bucket
- Name:
_Graveyard
- Key: object address
- Value: tombstone address
- Name:
- Garbage bucket
- Name:
_Garbage
- Key: object address
- Value: dummy value
- Name:
- Bucket containing IDs of objects that are candidates for moving
to another shard.
- Name:
_ToMoveIt
- Key: object address
- Value: dummy value
- Name:
- Container volume bucket
- Name:
_ContainerSize
- Key: container ID
- Value: container size in bytes as little-endian uint64
- Name:
- Bucket for storing locked objects information
- Name:
_Locked
- Key: container ID
- Value: bucket mapping objects locked to the list of corresponding LOCK objects
- Name:
- Bucket containing auxilliary information. All keys are custom and are not connected to the container
- Name:
_i
- Keys and values
id
-> shard id as bytesversion
-> metabase version as little-endian uint64phy_counter
-> shard's physical object counter as little-endian uint64logic_counter
-> shard's logical object counter as little-endian uint64
- Name:
Unique index buckets
- Buckets containing objects of REGULAR type
- Name: container ID
- Key: object ID
- Value: marshalled object
- Buckets containing objects of LOCK type
- Name: container ID +
_LOCKER
- Key: object ID
- Value: marshalled object
- Name: container ID +
- Buckets containing objects of STORAGEGROUP type
- Name: container ID +
_SG
- Key: object ID
- Value: marshaled object
- Name: container ID +
- Buckets containing objects of TOMBSTONE type
- Name: container ID +
_TS
- Key: object ID
- Value: marshaled object
- Name: container ID +
- Buckets mapping objects to the storage ID they are stored in
- Name: container ID +
_small
- Key: object ID
- Value: storage ID
- Name: container ID +
- Buckets for mapping parent object to the split info
- Name: container ID +
_root
- Key: object ID
- Value: split info
- Name: container ID +
FKBT index buckets
- Buckets mapping owner to object IDs
- Name: containerID +
_ownerid
- Key: owner ID as base58 string
- Value: bucket containing object IDs as keys
- Name: containerID +
- Buckets containing objects attributes indexes
- Name: containerID +
_attr_
+ attribute key - Key: attribute value
- Value: bucket containing object IDs as keys
- Name: containerID +
List index buckets
- Buckets mapping payload hash to a list of object IDs
- Name: container ID +
_payloadhash
- Key: payload hash
- Value: list of object IDs
- Name: container ID +
- Buckets mapping parent ID to a list of children IDs
- Name: container ID +
_parent
- Key: parent ID
- Value: list of children object IDs
- Name: container ID +
- Buckets mapping split ID to a list of object IDs
- Name: container ID +
_splitid
- Key: split ID
- Value: list of object IDs
- Name: container ID +
History
Version 3
- Payload hash, owner ID and FKBT buckets deleted
- Expiration epoch to object ID and object ID to expiration epoch added
Version 2
- Container ID is encoded as 32-byte slice
- Object ID is encoded as 32-byte slice
- Object ID is encoded as 64-byte slice, container ID + object ID
- Bucket naming scheme is changed:
- container ID + suffix -> 1-byte prefix + container ID
Version 1
- Metabase now stores generic storage id instead of blobovnicza ID.
Version 0
- Container ID is encoded as base58 string
- Object ID is encoded as base58 string
- Address is encoded as container ID + "/" + object ID