|
|
- File format
- ===========
-
- <beginning_of_file>
- [data block 1]
- [data block 2]
- ...
- [data block N]
- [meta block 1]
- ...
- [meta block K]
- [metaindex block]
- [index block]
- [Footer] (fixed size; starts at file_size - sizeof(Footer))
- <end_of_file>
-
- The file contains internal pointers. Each such pointer is called
- a BlockHandle and contains the following information:
- offset: varint64
- size: varint64
-
- (1) The sequence of key/value pairs in the file are stored in sorted
- order and partitioned into a sequence of data blocks. These blocks
- come one after another at the beginning of the file. Each data block
- is formatted according to the code in block_builder.cc, and then
- optionally compressed.
-
- (2) After the data blocks we store a bunch of meta blocks. The
- supported meta block types are described below. More meta block types
- may be added in the future. Each meta block is again formatted using
- block_builder.cc and then optionally compressed.
-
- (3) A "metaindex" block. It contains one entry for every other meta
- block where the key is the name of the meta block and the value is a
- BlockHandle pointing to that meta block.
-
- (4) An "index" block. This block contains one entry per data block,
- where the key is a string >= last key in that data block and before
- the first key in the successive data block. The value is the
- BlockHandle for the data block.
-
- (6) At the very end of the file is a fixed length footer that contains
- the BlockHandle of the metaindex and index blocks as well as a magic number.
- metaindex_handle: char[p]; // Block handle for metaindex
- index_handle: char[q]; // Block handle for index
- padding: char[40-p-q]; // 0 bytes to make fixed length
- // (40==2*BlockHandle::kMaxEncodedLength)
- magic: fixed64; // == 0xdb4775248b80fb57
-
- "stats" Meta Block
- ------------------
-
- This meta block contains a bunch of stats. The key is the name
- of the statistic. The value contains the statistic.
- TODO(postrelease): record following stats.
- data size
- index size
- key size (uncompressed)
- value size (uncompressed)
- number of entries
- number of data blocks
|