HISTORY.md 48.1 KB
Newer Older
K
kailiu 已提交
1
# Rocksdb Change Log
S
Siying Dong 已提交
2
## Unreleased
3
### Public API Change
4 5
* `BackupableDBOptions::max_valid_backups_to_open == 0` now means no backups will be opened during BackupEngine initialization. Previously this condition disabled limiting backups opened.

M
Maysam Yabandeh 已提交
6 7 8 9 10
### New Features
### Bug Fixes

## 5.8.0 (08/30/2017)
### Public API Change
11
* Users of `Statistics::getHistogramString()` will see fewer histogram buckets and different bucket endpoints.
12
* `Slice::compare` and BytewiseComparator `Compare` no longer accept `Slice`s containing nullptr.
M
Maysam Yabandeh 已提交
13
* `Transaction::Get` and `Transaction::GetForUpdate` variants with `PinnableSlice` added.
M
Maysam Yabandeh 已提交
14

S
Siying Dong 已提交
15 16
### New Features
* Add Iterator::Refresh(), which allows users to update the iterator state so that they can avoid some initialization costs of recreating iterators.
S
Siying Dong 已提交
17
* Replace dynamic_cast<> (except unit test) so people can choose to build with RTTI off. With make, release mode is by default built with -fno-rtti and debug mode is built without it. Users can override it by setting USE_RTTI=0 or 1.
18
* Universal compactions including the bottom level can be executed in a dedicated thread pool. This alleviates head-of-line blocking in the compaction queue, which cause write stalling, particularly in multi-instance use cases. Users can enable this feature via `Env::SetBackgroundThreads(N, Env::Priority::BOTTOM)`, where `N > 0`.
19
* Allow merge operator to be called even with a single merge operand during compactions, by appropriately overriding `MergeOperator::AllowSingleOperand`.
20
* Add `DB::VerifyChecksum()`, which verifies the checksums in all SST files in a running DB.
21
* Block-based table support for disabling checksums by setting `BlockBasedTableOptions::checksum = kNoChecksum`.
S
Siying Dong 已提交
22

A
Andrew Kryczka 已提交
23 24
### Bug Fixes
* Fix wrong latencies in `rocksdb.db.get.micros`, `rocksdb.db.write.micros`, and `rocksdb.sst.read.micros`.
25
* Fix incorrect dropping of deletions during intra-L0 compaction.
26
* Fix transient reappearance of keys covered by range deletions when memtable prefix bloom filter is enabled.
27
* Fix potentially wrong file smallest key when range deletions separated by snapshot are written together.
A
Andrew Kryczka 已提交
28

29
## 5.7.0 (07/13/2017)
30
### Public API Change
A
Andrew Kryczka 已提交
31 32 33 34
* DB property "rocksdb.sstables" now prints keys in hex form.

### New Features
* Measure estimated number of reads per file. The information can be accessed through DB::GetColumnFamilyMetaData or "rocksdb.sstables" DB property.
35
* RateLimiter support for throttling background reads, or throttling the sum of background reads and writes. This can give more predictable I/O usage when compaction reads more data than it writes, e.g., due to lots of deletions.
S
Sagar Vemuri 已提交
36
* [Experimental] FIFO compaction with TTL support. It can be enabled by setting CompactionOptionsFIFO.ttl > 0.
37
* Introduce `EventListener::OnBackgroundError()` callback. Users can implement it to be notified of errors causing the DB to enter read-only mode, and optionally override them.
38 39
* Partitioned Index/Filters exiting the experimental mode. To enable partitioned indexes set index_type to kTwoLevelIndexSearch and to further enable partitioned filters set partition_filters to true. To configure the partition size set metadata_block_size.

40 41 42

### Bug Fixes
* Fix discarding empty compaction output files when `DeleteRange()` is used together with subcompactions.
A
Andrew Kryczka 已提交
43 44 45

## 5.6.0 (06/06/2017)
### Public API Change
46
* Scheduling flushes and compactions in the same thread pool is no longer supported by setting `max_background_flushes=0`. Instead, users can achieve this by configuring their high-pri thread pool to have zero threads.
47
* Replace `Options::max_background_flushes`, `Options::max_background_compactions`, and `Options::base_background_compactions` all with `Options::max_background_jobs`, which automatically decides how many threads to allocate towards flush/compaction.
48
* options.delayed_write_rate by default take the value of options.rate_limiter rate.
49
* Replace global variable `IOStatsContext iostats_context` with `IOStatsContext* get_iostats_context()`; replace global variable `PerfContext perf_context` with `PerfContext* get_perf_context()`.
50

A
Andrew Kryczka 已提交
51 52
### New Features
* Change ticker/histogram statistics implementations to use core-local storage. This improves aggregation speed compared to our previous thread-local approach, particularly for applications with many threads.
53 54
* Users can pass a cache object to write buffer manager, so that they can cap memory usage for memtable and block cache using one single limit.
* Flush will be triggered when 7/8 of the limit introduced by write_buffer_manager or db_write_buffer_size is triggered, so that the hard threshold is hard to hit.
55
* Introduce WriteOptions.low_pri. If it is true, low priority writes will be throttled if the compaction is behind.
A
Andrew Kryczka 已提交
56
* `DB::IngestExternalFile()` now supports ingesting files into a database containing range deletions.
A
Aaron Gao 已提交
57

S
Siying Dong 已提交
58
### Bug Fixes
59 60
* Shouldn't ignore return value of fsync() in flush.

A
Aaron Gao 已提交
61
## 5.5.0 (05/17/2017)
S
Siying Dong 已提交
62
### New Features
63
* FIFO compaction to support Intra L0 compaction too with CompactionOptionsFIFO.allow_compaction=true.
S
Siying Dong 已提交
64
* DB::ResetStats() to reset internal stats.
A
Andrew Kryczka 已提交
65
* Statistics::Reset() to reset user stats.
66
* ldb add option --try_load_options, which will open DB with its own option file.
Y
Yi Wu 已提交
67
* Introduce WriteBatch::PopSavePoint to pop the most recent save point explicitly.
L
Leonidas Galanis 已提交
68
* Support dynamically change `max_open_files` option via SetDBOptions()
Y
Yi Wu 已提交
69
* Added DB::CreateColumnFamilie() and DB::DropColumnFamilies() to bulk create/drop column families.
A
Andrew Kryczka 已提交
70
* Add debugging function `GetAllKeyVersions` to see internal versions of a range of keys.
A
Aaron Gao 已提交
71 72
* Support file ingestion with universal compaction style
* Support file ingestion behind with option `allow_ingest_behind`
A
Aaron Gao 已提交
73 74 75 76
* New option enable_pipelined_write which may improve write throughput in case writing from multiple threads and WAL enabled.

### Bug Fixes
* Fix the bug that Direct I/O uses direct reads for non-SST file
77 78

## 5.4.0 (04/11/2017)
79
### Public API Change
80 81
* random_access_max_buffer_size no longer has any effect
* Removed Env::EnableReadAhead(), Env::ShouldForwardRawRequest()
82
* Support dynamically change `stats_dump_period_sec` option via SetDBOptions().
83
* Added ReadOptions::max_skippable_internal_keys to set a threshold to fail a request as incomplete when too many keys are being skipped when using iterators.
84 85 86
* DB::Get in place of std::string accepts PinnableSlice, which avoids the extra memcpy of value to std::string in most of cases.
    * PinnableSlice releases the pinned resources that contain the value when it is destructed or when ::Reset() is called on it.
    * The old API that accepts std::string, although discouraged, is still supported.
87
* Replace Options::use_direct_writes with Options::use_direct_io_for_flush_and_compaction. Read Direct IO wiki for details.
Y
Yi Wu 已提交
88
* Added CompactionEventListener and EventListener::OnFlushBegin interfaces.
A
Andrew Kryczka 已提交
89

90 91
### New Features
* Memtable flush can be avoided during checkpoint creation if total log file size is smaller than a threshold specified by the user.
A
Andrew Kryczka 已提交
92
* Introduce level-based L0->L0 compactions to reduce file count, so write delays are incurred less often.
93
* (Experimental) Partitioning filters which creates an index on the partitions. The feature can be enabled by setting partition_filters when using kFullFilter. Currently the feature also requires two-level indexing to be enabled. Number of partitions is the same as the number of partitions for indexes, which is controlled by metadata_block_size.
94

A
Andrew Kryczka 已提交
95
## 5.3.0 (03/08/2017)
S
Sagar Vemuri 已提交
96 97
### Public API Change
* Remove disableDataSync option.
Y
Yi Wu 已提交
98
* Remove timeout_hint_us option from WriteOptions. The option has been deprecated and has no effect since 3.13.0.
99 100
* Remove option min_partial_merge_operands. Partial merge operands will always be merged in flush or compaction if there are more than one.
* Remove option verify_checksums_in_compaction. Compaction will always verify checksum.
101

102 103 104
### Bug Fixes
* Fix the bug that iterator may skip keys

105
## 5.2.0 (02/08/2017)
S
Siying Dong 已提交
106
### Public API Change
107
* NewLRUCache() will determine number of shard bits automatically based on capacity, if the user doesn't pass one. This also impacts the default block cache when the user doesn't explict provide one.
108
* Change the default of delayed slowdown value to 16MB/s and further increase the L0 stop condition to 36 files.
109
* Options::use_direct_writes and Options::use_direct_reads are now ready to use.
110
* (Experimental) Two-level indexing that partition the index and creates a 2nd level index on the partitions. The feature can be enabled by setting kTwoLevelIndexSearch as IndexType and configuring index_per_partition.
S
Siying Dong 已提交
111

112 113 114
### New Features
* Added new overloaded function GetApproximateSizes that allows to specify if memtable stats should be computed only without computing SST files' stats approximations.
* Added new function GetApproximateMemTableStats that approximates both number of records and size of memtables.
115
* Add Direct I/O mode for SST file I/O
116 117 118 119 120

### Bug Fixes
* RangeSync() should work if ROCKSDB_FALLOCATE_PRESENT is not set
* Fix wrong results in a data race case in Get()
* Some fixes related to 2PC.
121
* Fix bugs of data corruption in direct I/O
122 123 124 125 126 127

## 5.1.0 (01/13/2017)
* Support dynamically change `delete_obsolete_files_period_micros` option via SetDBOptions().
* Added EventListener::OnExternalFileIngested which will be called when IngestExternalFile() add a file successfully.
* BackupEngine::Open and BackupEngineReadOnly::Open now always return error statuses matching those of the backup Env.

128 129
### Bug Fixes
* Fix the bug that if 2PC is enabled, checkpoints may loss some recent transactions.
130
* When file copying is needed when creating checkpoints or bulk loading files, fsync the file after the file copying.
131

I
Islam AbdelRahman 已提交
132
## 5.0.0 (11/17/2016)
133 134
### Public API Change
* Options::max_bytes_for_level_multiplier is now a double along with all getters and setters.
135
* Support dynamically change `delayed_write_rate` and `max_total_wal_size` options via SetDBOptions().
A
Andrew Kryczka 已提交
136
* Introduce DB::DeleteRange for optimized deletion of large ranges of contiguous keys.
137 138
* Support dynamically change `delayed_write_rate` option via SetDBOptions().
* Options::allow_concurrent_memtable_write and Options::enable_write_thread_adaptive_yield are now true by default.
Y
Yi Wu 已提交
139
* Remove Tickers::SEQUENCE_NUMBER to avoid confusion if statistics object is shared among RocksDB instance. Alternatively DB::GetLatestSequenceNumber() can be used to get the same value.
Y
Yi Wu 已提交
140 141 142
* Options.level0_stop_writes_trigger default value changes from 24 to 32.
* New compaction filter API: CompactionFilter::FilterV2(). Allows to drop ranges of keys.
* Removed flashcache support.
143
* DB::AddFile() is deprecated and is replaced with DB::IngestExternalFile(). DB::IngestExternalFile() remove all the restrictions that existed for DB::AddFile.
144

Y
Yi Wu 已提交
145
### New Features
146 147
* Add avoid_flush_during_shutdown option, which speeds up DB shutdown by not flushing unpersisted data (i.e. with disableWAL = true). Unpersisted data will be lost. The options is dynamically changeable via SetDBOptions().
* Add memtable_insert_with_hint_prefix_extractor option. The option is mean to reduce CPU usage for inserting keys into memtable, if keys can be group by prefix and insert for each prefix are sequential or almost sequential. See include/rocksdb/options.h for more details.
148
* Add LuaCompactionFilter in utilities.  This allows developers to write compaction filters in Lua.  To use this feature, LUA_PATH needs to be set to the root directory of Lua.
A
Andrew Kryczka 已提交
149
* No longer populate "LATEST_BACKUP" file in backup directory, which formerly contained the number of the latest backup. The latest backup can be determined by finding the highest numbered file in the "meta/" subdirectory.
Y
Yi Wu 已提交
150

151
## 4.13.0 (10/18/2016)
152 153
### Public API Change
* DB::GetOptions() reflect dynamic changed options (i.e. through DB::SetOptions()) and return copy of options instead of reference.
Y
Yi Wu 已提交
154
* Added Statistics::getAndResetTickerCount().
155

156 157
### New Features
* Add DB::SetDBOptions() to dynamic change base_background_compactions and max_background_compactions.
A
Aaron Gao 已提交
158 159
* Added Iterator::SeekForPrev(). This new API will seek to the last key that less than or equal to the target key.

I
Islam AbdelRahman 已提交
160
## 4.12.0 (9/12/2016)
161 162
### Public API Change
* CancelAllBackgroundWork() flushes all memtables for databases containing writes that have bypassed the WAL (writes issued with WriteOptions::disableWAL=true) before shutting down background threads.
163 164
* Merge options source_compaction_factor, max_grandparent_overlap_bytes and expanded_compaction_factor into max_compaction_bytes.
* Remove ImmutableCFOptions.
S
sdong 已提交
165
* Add a compression type ZSTD, which can work with ZSTD 0.8.0 or up. Still keep ZSTDNotFinal for compatibility reasons.
166

Y
Yi Wu 已提交
167 168
### New Features
* Introduce NewClockCache, which is based on CLOCK algorithm with better concurrent performance in some cases. It can be used to replace the default LRU-based block cache and table cache. To use it, RocksDB need to be linked with TBB lib.
169
* Change ticker/histogram statistics implementations to accumulate data in thread-local storage, which improves CPU performance by reducing cache coherency costs. Callers of CreateDBStatistics do not need to change anything to use this feature.
I
Islam AbdelRahman 已提交
170
* Block cache mid-point insertion, where index and filter block are inserted into LRU block cache with higher priority. The feature can be enabled by setting BlockBasedTableOptions::cache_index_and_filter_blocks_with_high_priority to true and high_pri_pool_ratio > 0 when creating NewLRUCache.
S
sdong 已提交
171 172 173 174 175 176 177 178 179 180

## 4.11.0 (8/1/2016)
### Public API Change
* options.memtable_prefix_bloom_huge_page_tlb_size => memtable_huge_page_size. When it is set, RocksDB will try to allocate memory from huge page for memtable too, rather than just memtable bloom filter.

### New Features
* A tool to migrate DB after options change. See include/rocksdb/utilities/option_change_migration.h.
* Add ReadOptions.background_purge_on_iterator_cleanup. If true, we avoid file deletion when destorying iterators.

## 4.10.0 (7/5/2016)
181 182
### Public API Change
* options.memtable_prefix_bloom_bits changes to options.memtable_prefix_bloom_bits_ratio and deprecate options.memtable_prefix_bloom_probes
183
* enum type CompressionType and PerfLevel changes from char to unsigned char. Value of all PerfLevel shift by one.
S
sdong 已提交
184
* Deprecate options.filter_deletes.
185

186 187
### New Features
* Add avoid_flush_during_recovery option.
188
* Add a read option background_purge_on_iterator_cleanup to avoid deleting files in foreground when destroying iterators. Instead, a job is scheduled in high priority queue and would be executed in a separate background thread.
189
* RepairDB support for column families. RepairDB now associates data with non-default column families using information embedded in the SST/WAL files (4.7 or later). For data written by 4.6 or earlier, RepairDB associates it with the default column family.
190
* Add options.write_buffer_manager which allows users to control total memtable sizes across multiple DB instances.
191

192
## 4.9.0 (6/9/2016)
193 194 195
### Public API changes
* Add bottommost_compression option, This option can be used to set a specific compression algorithm for the bottommost level (Last level containing files in the DB).
* Introduce CompactionJobInfo::compression, This field state the compression algorithm used to generate the output files of the compaction.
196 197 198 199 200
* Deprecate BlockBaseTableOptions.hash_index_allow_collision=false
* Deprecate options builder (GetOptions()).

### New Features
* Introduce NewSimCache() in rocksdb/utilities/sim_cache.h. This function creates a block cache that is able to give simulation results (mainly hit rate) of simulating block behavior with a configurable cache size.
201

Y
Yi Wu 已提交
202
## 4.8.0 (5/2/2016)
203
### Public API Change
204
* Allow preset compression dictionary for improved compression of block-based tables. This is supported for zlib, zstd, and lz4. The compression dictionary's size is configurable via CompressionOptions::max_dict_bytes.
205
* Delete deprecated classes for creating backups (BackupableDB) and restoring from backups (RestoreBackupableDB). Now, BackupEngine should be used for creating backups, and BackupEngineReadOnly should be used for restorations. For more details, see https://github.com/facebook/rocksdb/wiki/How-to-backup-RocksDB%3F
A
Andrew Kryczka 已提交
206
* Expose estimate of per-level compression ratio via DB property: "rocksdb.compression-ratio-at-levelN".
207
* Added EventListener::OnTableFileCreationStarted. EventListener::OnTableFileCreated will be called on failure case. User can check creation status via TableFileCreationInfo::status.
E
Evan Shaw 已提交
208

209 210
### New Features
* Add ReadOptions::readahead_size. If non-zero, NewIterator will create a new table reader which performs reads of the given size.
211

I
Islam AbdelRahman 已提交
212
## 4.7.0 (4/8/2016)
S
sdong 已提交
213
### Public API Change
214
* rename options compaction_measure_io_stats to report_bg_io_stats and include flush too.
S
sdong 已提交
215 216
* Change some default options. Now default options will optimize for server-workloads. Also enable slowdown and full stop triggers for pending compaction bytes. These changes may cause sub-optimal performance or significant increase of resource usage. To avoid these risks, users can open existing RocksDB with options extracted from RocksDB option files. See https://github.com/facebook/rocksdb/wiki/RocksDB-Options-File for how to use RocksDB option files. Or you can call Options.OldDefaults() to recover old defaults. DEFAULT_OPTIONS_HISTORY.md will track change history of default options.

217
## 4.6.0 (3/10/2016)
218 219
### Public API Changes
* Change default of BlockBasedTableOptions.format_version to 2. It means default DB created by 4.6 or up cannot be opened by RocksDB version 3.9 or earlier.
L
Lucas Qiu 已提交
220
* Added strict_capacity_limit option to NewLRUCache. If the flag is set to true, insert to cache will fail if no enough capacity can be free. Signature of Cache::Insert() is updated accordingly.
221
* Tickers [NUMBER_DB_NEXT, NUMBER_DB_PREV, NUMBER_DB_NEXT_FOUND, NUMBER_DB_PREV_FOUND, ITER_BYTES_READ] are not updated immediately. The are updated when the Iterator is deleted.
222
* Add monotonically increasing counter (DB property "rocksdb.current-super-version-number") that increments upon any change to the LSM tree.
E
Evan Shaw 已提交
223

224 225
### New Features
* Add CompactionPri::kMinOverlappingRatio, a compaction picking mode friendly to write amplification.
226
* Deprecate Iterator::IsKeyPinned() and replace it with Iterator::GetProperty() with prop_name="rocksdb.iterator.is.key.pinned"
S
sdong 已提交
227 228

## 4.5.0 (2/5/2016)
229
### Public API Changes
230
* Add a new perf context level between kEnableCount and kEnableTime. Level 2 now does not include timers for mutexes.
231
* Statistics of mutex operation durations will not be measured by default. If you want to have them enabled, you need to set Statistics::stats_level_ to kAll.
232
* DBOptions::delete_scheduler and NewDeleteScheduler() are removed, please use DBOptions::sst_file_manager and NewSstFileManager() instead
233

S
sdong 已提交
234 235
### New Features
* ldb tool now supports operations to non-default column families.
236
* Add kPersistedTier to ReadTier.  This option allows Get and MultiGet to read only the persited data and skip mem-tables if writes were done with disableWAL = true.
237
* Add DBOptions::sst_file_manager. Use NewSstFileManager() in include/rocksdb/sst_file_manager.h to create a SstFileManager that can be used to track the total size of SST files and control the SST files deletion rate.
S
sdong 已提交
238

A
agiardullo 已提交
239
## 4.4.0 (1/14/2016)
240 241 242
### Public API Changes
* Change names in CompactionPri and add a new one.
* Deprecate options.soft_rate_limit and add options.soft_pending_compaction_bytes_limit.
243
* If options.max_write_buffer_number > 3, writes will be slowed down when writing to the last write buffer to delay a full stop.
244
* Introduce CompactionJobInfo::compaction_reason, this field include the reason to trigger the compaction.
245
* After slow down is triggered, if estimated pending compaction bytes keep increasing, slowdown more.
S
sdong 已提交
246
* Increase default options.delayed_write_rate to 2MB/s.
247
* Added a new parameter --path to ldb tool. --path accepts the name of either MANIFEST, SST or a WAL file. Either --db or --path can be used when calling ldb.
248

K
krad 已提交
249
## 4.3.0 (12/8/2015)
Y
Yueh-Hsuan Chiang 已提交
250
### New Features
251
* CompactionFilter has new member function called IgnoreSnapshots which allows CompactionFilter to be called even if there are snapshots later than the key.
252
* RocksDB will now persist options under the same directory as the RocksDB database on successful DB::Open, CreateColumnFamily, DropColumnFamily, and SetOptions.
253
* Introduce LoadLatestOptions() in rocksdb/utilities/options_util.h.  This function can construct the latest DBOptions / ColumnFamilyOptions used by the specified RocksDB intance.
254
* Introduce CheckOptionsCompatibility() in rocksdb/utilities/options_util.h.  This function checks whether the input set of options is able to open the specified DB successfully.
S
sdong 已提交
255 256

### Public API Changes
257 258
* When options.db_write_buffer_size triggers, only the column family with the largest column family size will be flushed, not all the column families.

S
sdong 已提交
259 260
## 4.2.0 (11/9/2015)
### New Features
261 262
* Introduce CreateLoggerFromOptions(), this function create a Logger for provided DBOptions.
* Add GetAggregatedIntProperty(), which returns the sum of the GetIntProperty of all the column families.
S
sdong 已提交
263 264
* Add MemoryUtil in rocksdb/utilities/memory.h.  It currently offers a way to get the memory usage by type from a list rocksdb instances.

265 266
### Public API Changes
* CompactionFilter::Context includes information of Column Family ID
267
* The need-compaction hint given by TablePropertiesCollector::NeedCompact() will be persistent and recoverable after DB recovery. This introduces a breaking format change. If you use this experimental feature, including NewCompactOnDeletionCollectorFactory() in the new version, you may not be able to directly downgrade the DB back to version 4.0 or lower.
268
* TablePropertiesCollectorFactory::CreateTablePropertiesCollector() now takes an option Context, containing the information of column family ID for the file being written.
S
sdong 已提交
269
* Remove DefaultCompactionFilterFactory.
270

S
sdong 已提交
271

Y
Yueh-Hsuan Chiang 已提交
272
## 4.1.0 (10/8/2015)
A
Andres Noetzli 已提交
273 274
### New Features
* Added single delete operation as a more efficient way to delete keys that have not been overwritten.
275
* Added experimental AddFile() to DB interface that allow users to add files created by SstFileWriter into an empty Database, see include/rocksdb/sst_file_writer.h and DB::AddFile() for more info.
D
dyniusz 已提交
276
* Added support for opening SST files with .ldb suffix which enables opening LevelDB databases.
I
Igor Canadi 已提交
277
* CompactionFilter now supports filtering of merge operands and merge results.
A
Andres Noetzli 已提交
278 279 280

### Public API Changes
* Added SingleDelete() to the DB interface.
281 282
* Added AddFile() to DB interface.
* Added SstFileWriter class.
I
Igor Canadi 已提交
283
* CompactionFilter has a new method FilterMergeOperand() that RocksDB applies to every merge operand during compaction to decide whether to filter the operand.
I
Igor Canadi 已提交
284
* We removed CompactionFilterV2 interfaces from include/rocksdb/compaction_filter.h. The functionality was deprecated already in version 3.13.
A
Andres Noetzli 已提交
285

I
Islam AbdelRahman 已提交
286
## 4.0.0 (9/9/2015)
287
### New Features
288
* Added support for transactions.  See include/rocksdb/utilities/transaction.h for more info.
I
Igor Canadi 已提交
289
* DB::GetProperty() now accepts "rocksdb.aggregated-table-properties" and "rocksdb.aggregated-table-properties-at-levelN", in which case it returns aggregated table properties of the target column family, or the aggregated table properties of the specified level N if the "at-level" version is used.
290
* Add compression option kZSTDNotFinalCompression for people to experiment ZSTD although its format is not finalized.
291
* We removed the need for LATEST_BACKUP file in BackupEngine. We still keep writing it when we create new backups (because of backward compatibility), but we don't read it anymore.
292

293 294
### Public API Changes
* Removed class Env::RandomRWFile and Env::NewRandomRWFile().
295
* Renamed DBOptions.num_subcompactions to DBOptions.max_subcompactions to make the name better match the actual functionality of the option.
296
* Added Equal() method to the Comparator interface that can optionally be overwritten in cases where equality comparisons can be done more efficiently than three-way comparisons.
297
* Previous 'experimental' OptimisticTransaction class has been replaced by Transaction class.
298

299
## 3.13.0 (8/6/2015)
A
agiardullo 已提交
300 301
### New Features
* RollbackToSavePoint() in WriteBatch/WriteBatchWithIndex
Y
Yueh-Hsuan Chiang 已提交
302
* Add NewCompactOnDeletionCollectorFactory() in utilities/table_properties_collectors, which allows rocksdb to mark a SST file as need-compaction when it observes at least D deletion entries in any N consecutive entries in that SST file.  Note that this feature depends on an experimental NeedCompact() API --- the result of this API will not persist after DB restart.
I
Islam AbdelRahman 已提交
303
* Add DBOptions::delete_scheduler. Use NewDeleteScheduler() in include/rocksdb/delete_scheduler.h to create a DeleteScheduler that can be shared among multiple RocksDB instances to control the file deletion rate of SST files that exist in the first db_path.
A
agiardullo 已提交
304

305
### Public API Changes
306
* Deprecated WriteOptions::timeout_hint_us. We no longer support write timeout. If you really need this option, talk to us and we might consider returning it.
307
* Deprecated purge_redundant_kvs_while_flush option.
308
* Removed BackupEngine::NewBackupEngine() and NewReadOnlyBackupEngine() that were deprecated in RocksDB 3.8. Please use BackupEngine::Open() instead.
I
Igor Canadi 已提交
309
* Deprecated Compaction Filter V2. We are not aware of any existing use-cases. If you use this filter, your compile will break with RocksDB 3.13. Please let us know if you use it and we'll put it back in RocksDB 3.14.
A
agiardullo 已提交
310
* Env::FileExists now returns a Status instead of a boolean
311 312
* Add statistics::getHistogramString() to print detailed distribution of a histogram metric.
* Add DBOptions::skip_stats_update_on_db_open.  When it is on, DB::Open() will run faster as it skips the random reads required for loading necessary stats from SST files to optimize compaction.
313

A
agiardullo 已提交
314
## 3.12.0 (7/2/2015)
A
agiardullo 已提交
315 316
### New Features
* Added experimental support for optimistic transactions.  See include/rocksdb/utilities/optimistic_transaction.h for more info.
317
* Added a new way to report QPS from db_bench (check out --report_file and --report_interval_seconds)
318
* Added a cache for individual rows. See DBOptions::row_cache for more info.
319
* Several new features on EventListener (see include/rocksdb/listener.h):
Y
yizhu.sun 已提交
320
 - OnCompationCompleted() now returns per-compaction job statistics, defined in include/rocksdb/compaction_job_stats.h.
321
 - Added OnTableFileCreated() and OnTableFileDeleted().
322
* Add compaction_options_universal.enable_trivial_move to true, to allow trivial move while performing universal compaction. Trivial move will happen only when all the input files are non overlapping.
A
agiardullo 已提交
323 324

### Public API changes
325
* EventListener::OnFlushCompleted() now passes FlushJobInfo instead of a list of parameters.
326
* DB::GetDbIdentity() is now a const function.  If this function is overridden in your application, be sure to also make GetDbIdentity() const to avoid compile error.
327 328
* Move listeners from ColumnFamilyOptions to DBOptions.
* Add max_write_buffer_number_to_maintain option
329
* DB::CompactRange()'s parameter reduce_level is changed to change_level, to allow users to move levels to lower levels if allowed. It can be used to migrate a DB from options.level_compaction_dynamic_level_bytes=false to options.level_compaction_dynamic_level_bytes.true.
330
* Change default value for options.compaction_filter_factory and options.compaction_filter_factory_v2 to nullptr instead of DefaultCompactionFilterFactory and DefaultCompactionFilterFactoryV2.
331
* If CancelAllBackgroundWork is called without doing a flush after doing loads with WAL disabled, the changes which haven't been flushed before the call to CancelAllBackgroundWork will be lost.
332
* WBWIIterator::Entry() now returns WriteEntry instead of `const WriteEntry&`
S
sdong 已提交
333 334
* options.hard_rate_limit is deprecated.
* When options.soft_rate_limit or options.level0_slowdown_writes_trigger is triggered, the way to slow down writes is changed to: write rate to DB is limited to to options.delayed_write_rate.
335
* DB::GetApproximateSizes() adds a parameter to allow the estimation to include data in mem table, with default to be not to include. It is now only supported in skip list mem table.
L
Lucas Qiu 已提交
336 337
* DB::CompactRange() now accept CompactRangeOptions instead of multiple parameters. CompactRangeOptions is defined in include/rocksdb/options.h.
* CompactRange() will now skip bottommost level compaction for level based compaction if there is no compaction filter, bottommost_level_compaction is introduced in CompactRangeOptions to control when it's possible to skip bottommost level compaction. This mean that if you want the compaction to produce a single file you need to set bottommost_level_compaction to BottommostLevelCompaction::kForce.
A
Aaron Feldman 已提交
338
* Add Cache.GetPinnedUsage() to get the size of memory occupied by entries that are in use by the system.
339
* DB:Open() will fail if the compression specified in Options is not linked with the binary. If you see this failure, recompile RocksDB with compression libraries present on your system. Also, previously our default compression was snappy. This behavior is now changed. Now, the default compression is snappy only if it's available on the system. If it isn't we change the default to kNoCompression.
340
* We changed how we account for memory used in block cache. Previously, we only counted the sum of block sizes currently present in block cache. Now, we count the actual memory usage of the blocks. For example, a block of size 4.5KB will use 8KB memory with jemalloc. This might decrease your memory usage and possibly decrease performance. Increase block cache size if you see this happening after an upgrade.
341
* Add BackupEngineImpl.options_.max_background_operations to specify the maximum number of operations that may be performed in parallel. Add support for parallelized backup and restore.
342
* Add DB::SyncWAL() that does a WAL sync without blocking writers.
343

344
## 3.11.0 (5/19/2015)
345 346
### New Features
* Added a new API Cache::SetCapacity(size_t capacity) to dynamically change the maximum configured capacity of the cache. If the new capacity is less than the existing cache usage, the implementation will try to lower the usage by evicting the necessary number of elements following a strict LRU policy.
347
* Added an experimental API for handling flashcache devices (blacklists background threads from caching their reads) -- NewFlashcacheAwareEnv
S
sdong 已提交
348
* If universal compaction is used and options.num_levels > 1, compact files are tried to be stored in none-L0 with smaller files based on options.target_file_size_base. The limitation of DB size when using universal compaction is greatly mitigated by using more levels. You can set num_levels = 1 to make universal compaction behave as before. If you set num_levels > 1 and want to roll back to a previous version, you need to compact all files to a big file in level 0 (by setting target_file_size_base to be large and CompactRange(<cf_handle>, nullptr, nullptr, true, 0) and reopen the DB with the same version to rewrite the manifest, and then you can open it using previous releases.
349
* More information about rocksdb background threads are available in Env::GetThreadList(), including the number of bytes read / written by a compaction job, mem-table size and current number of bytes written by a flush job and many more.  Check include/rocksdb/thread_status.h for more detail.
350

351 352
### Public API changes
* TablePropertiesCollector::AddUserKey() is added to replace TablePropertiesCollector::Add(). AddUserKey() exposes key type, sequence number and file size up to now to users.
353
* DBOptions::bytes_per_sync used to apply to both WAL and table files. As of 3.11 it applies only to table files. If you want to use this option to sync WAL in the background, please use wal_bytes_per_sync
354

Y
Yueh-Hsuan Chiang 已提交
355
## 3.10.0 (3/24/2015)
356
### New Features
Y
Yueh-Hsuan Chiang 已提交
357 358 359 360 361
* GetThreadStatus() is now able to report detailed thread status, including:
 - Thread Operation including flush and compaction.
 - The stage of the current thread operation.
 - The elapsed time in micros since the current thread operation started.
 More information can be found in include/rocksdb/thread_status.h.  In addition, when running db_bench with --thread_status_per_interval, db_bench will also report thread status periodically.
362
* Changed the LRU caching algorithm so that referenced blocks (by iterators) are never evicted. This change made parameter removeScanCountLimit obsolete. Because of that NewLRUCache doesn't take three arguments anymore. table_cache_remove_scan_limit option is also removed
363
* By default we now optimize the compilation for the compilation platform (using -march=native). If you want to build portable binary, use 'PORTABLE=1' before the make command.
364 365 366 367
* We now allow level-compaction to place files in different paths by
  specifying them in db_paths along with the target_size.
  Lower numbered levels will be placed earlier in the db_paths and higher
  numbered levels will be placed later in the db_paths vector.
I
Igor Canadi 已提交
368
* Potentially big performance improvements if you're using RocksDB with lots of column families (100-1000)
L
Lucas Qiu 已提交
369
* Added BlockBasedTableOptions.format_version option, which allows user to specify which version of block based table he wants. As a general guideline, newer versions have more features, but might not be readable by older versions of RocksDB.
370
* Added new block based table format (version 2), which you can enable by setting BlockBasedTableOptions.format_version = 2. This format changes how we encode size information in compressed blocks and should help with memory allocations if you're using Zlib or BZip2 compressions.
371
* MemEnv (env that stores data in memory) is now available in default library build. You can create it by calling NewMemEnv().
372
* Add SliceTransform.SameResultWhenAppended() to help users determine it is safe to apply prefix bloom/hash.
373
* Block based table now makes use of prefix bloom filter if it is a full fulter.
374
* Block based table remembers whether a whole key or prefix based bloom filter is supported in SST files. Do a sanity check when reading the file with users' configuration.
I
Igor Canadi 已提交
375
* Fixed a bug in ReadOnlyBackupEngine that deleted corrupted backups in some cases, even though the engine was ReadOnly
376
* options.level_compaction_dynamic_level_bytes, a feature to allow RocksDB to pick dynamic base of bytes for levels. With this feature turned on, we will automatically adjust max bytes for each level. The goal of this feature is to have lower bound on size amplification. For more details, see comments in options.h.
377
* Added an abstract base class WriteBatchBase for write batches
378
* Fixed a bug where we start deleting files of a dropped column families even if there are still live references to it
379

380
### Public API changes
Y
Yueh-Hsuan Chiang 已提交
381
* Deprecated skip_log_error_on_recovery and table_cache_remove_scan_count_limit options.
F
fyrz 已提交
382
* Logger method logv with log level parameter is now virtual
383

Y
Yueh-Hsuan Chiang 已提交
384 385 386 387 388 389 390
### RocksJava
* Added compression per level API.
* MemEnv is now available in RocksJava via RocksMemEnv class.
* lz4 compression is now included in rocksjava static library when running `make rocksdbjavastatic`.
* Overflowing a size_t when setting rocksdb options now throws an IllegalArgumentException, which removes the necessity for a developer to catch these Exceptions explicitly.

## 3.9.0 (12/8/2014)
391 392 393 394 395

### New Features
* Add rocksdb::GetThreadList(), which in the future will return the current status of all
  rocksdb-related threads.  We will have more code instruments in the following RocksDB
  releases.
396 397
* Change convert function in rocksdb/utilities/convenience.h to return Status instead of boolean.
  Also add support for nested options in convert function
Y
Yueh-Hsuan Chiang 已提交
398

399 400 401
### Public API changes
* New API to create a checkpoint added. Given a directory name, creates a new
  database which is an image of the existing database.
402 403
* New API LinkFile added to Env. If you implement your own Env class, an
  implementation of the API LinkFile will have to be provided.
404
* MemTableRep takes MemTableAllocator instead of Arena
405

406 407 408
### Improvements
* RocksDBLite library now becomes smaller and will be compiled with -fno-exceptions flag.

I
Igor Canadi 已提交
409
## 3.8.0 (11/14/2014)
L
Lei Jin 已提交
410

I
Igor Canadi 已提交
411
### Public API changes
H
Hasnain Lakhani 已提交
412 413 414
* BackupEngine::NewBackupEngine() was deprecated; please use BackupEngine::Open() from now on.
* BackupableDB/RestoreBackupableDB have new GarbageCollect() methods, which will clean up files from corrupt and obsolete backups.
* BackupableDB/RestoreBackupableDB have new GetCorruptedBackups() methods which list corrupt backups.
L
Lei Jin 已提交
415

I
Igor Canadi 已提交
416 417 418 419 420
### Cleanup
* Bunch of code cleanup, some extra warnings turned on (-Wshadow, -Wshorten-64-to-32, -Wnon-virtual-dtor)

### New features
* CompactFiles and EventListener, although they are still in experimental state
421
* Full ColumnFamily support in RocksJava.
I
Igor Canadi 已提交
422

L
Lei Jin 已提交
423
## 3.7.0 (11/6/2014)
L
Lei Jin 已提交
424
### Public API changes
L
Lei Jin 已提交
425
* Introduce SetOptions() API to allow adjusting a subset of options dynamically online
L
Lei Jin 已提交
426
* Introduce 4 new convenient functions for converting Options from string: GetColumnFamilyOptionsFromMap(), GetColumnFamilyOptionsFromString(), GetDBOptionsFromMap(), GetDBOptionsFromString()
427
* Remove WriteBatchWithIndex.Delete() overloads using SliceParts
428
* When opening a DB, if options.max_background_compactions is larger than the existing low pri pool of options.env, it will enlarge it. Similarly, options.max_background_flushes is larger than the existing high pri pool of options.env, it will enlarge it.
L
Lei Jin 已提交
429

I
Igor Canadi 已提交
430
## 3.6.0 (10/7/2014)
431
### Disk format changes
432
* If you're using RocksDB on ARM platforms and you're using default bloom filter, there is a disk format change you need to be aware of. There are three steps you need to do when you convert to new release: 1. turn off filter policy, 2. compact the whole database, 3. turn on filter policy
433 434 435

### Behavior changes
* We have refactored our system of stalling writes.  Any stall-related statistics' meanings are changed. Instead of per-write stall counts, we now count stalls per-epoch, where epochs are periods between flushes and compactions. You'll find more information in our Tuning Perf Guide once we release RocksDB 3.6.
436
* When disableDataSync=true, we no longer sync the MANIFEST file.
437
* Add identity_as_first_hash property to CuckooTable. SST file needs to be rebuilt to be opened by reader properly.
I
Igor Canadi 已提交
438 439

### Public API changes
440
* Change target_file_size_base type to uint64_t from int.
I
Igor Canadi 已提交
441
* Remove allow_thread_local. This feature was proved to be stable, so we are turning it always-on.
L
Lei Jin 已提交
442 443

## 3.5.0 (9/3/2014)
444
### New Features
L
Lucas Qiu 已提交
445
* Add include/utilities/write_batch_with_index.h, providing a utility class to query data out of WriteBatch when building it.
L
Lei Jin 已提交
446 447 448 449
* Move BlockBasedTable related options to BlockBasedTableOptions from Options. Change corresponding JNI interface. Options affected include:
  no_block_cache, block_cache, block_cache_compressed, block_size, block_size_deviation, block_restart_interval, filter_policy, whole_key_filtering. filter_policy is changed to shared_ptr from a raw pointer.
* Remove deprecated options: disable_seek_compaction and db_stats_log_interval
* OptimizeForPointLookup() takes one parameter for block cache size. It now builds hash index, bloom filter, and block cache.
S
sdong 已提交
450 451 452 453 454 455

### Public API changes
* The Prefix Extractor used with V2 compaction filters is now passed user key to SliceTransform::Transform instead of unparsed RocksDB key.

## 3.4.0 (8/18/2014)
### New Features
456
* Support Multiple DB paths in universal style compactions
S
Stanislau Hlebik 已提交
457
* Add feature of storing plain table index and bloom filter in SST file.
458
* CompactRange() will never output compacted files to level 0. This used to be the case when all the compaction input files were at level 0.
C
charsyam 已提交
459
* Added iterate_upper_bound to define the extent upto which the forward iterator will return entries. This will prevent iterating over delete markers and overwritten entries for edge cases where you want to break out the iterator anyways. This may improve performance in case there are a large number of delete markers or overwritten entries.
460 461 462

### Public API changes
* DBOptions.db_paths now is a vector of a DBPath structure which indicates both of path and target size
S
Stanislau Hlebik 已提交
463
* NewPlainTableFactory instead of bunch of parameters now accepts PlainTableOptions, which is defined in include/rocksdb/table.h
464
* Moved include/utilities/*.h to include/rocksdb/utilities/*.h
L
Lei Jin 已提交
465
* Statistics APIs now take uint32_t as type instead of Tickers. Also make two access functions getTickerCount and histogramData const
S
sdong 已提交
466
* Add DB property rocksdb.estimate-num-keys, estimated number of live keys in DB.
467
* Add DB::GetIntProperty(), which returns DB properties that are integer as uint64_t.
468
* The Prefix Extractor used with V2 compaction filters is now passed user key to SliceTransform::Transform instead of unparsed RocksDB key.
469

470
## 3.3.0 (7/10/2014)
471
### New Features
472
* Added JSON API prototype.
473
* HashLinklist reduces performance outlier caused by skewed bucket by switching data in the bucket from linked list to skip list. Add parameter threshold_use_skiplist in NewHashLinkListRepFactory().
L
Lucas Qiu 已提交
474
* RocksDB is now able to reclaim storage space more effectively during the compaction process.  This is done by compensating the size of each deletion entry by the 2X average value size, which makes compaction to be triggered by deletion entries more easily.
475
* Add TimeOut API to write.  Now WriteOptions have a variable called timeout_hint_us.  With timeout_hint_us set to non-zero, any write associated with this timeout_hint_us may be aborted when it runs longer than the specified timeout_hint_us, and it is guaranteed that any write completes earlier than the specified time-out will not be aborted due to the time-out condition.
L
Lei Jin 已提交
476
* Add a rate_limiter option, which controls total throughput of flush and compaction. The throughput is specified in bytes/sec. Flush always has precedence over compaction when available bandwidth is constrained.
S
sdong 已提交
477

478 479 480
### Public API changes
* Removed NewTotalOrderPlainTableFactory because it is not used and implemented semantically incorrect.

S
sdong 已提交
481
## 3.2.0 (06/20/2014)
I
Igor Canadi 已提交
482 483 484 485 486 487 488

### Public API changes
* We removed seek compaction as a concept from RocksDB because:
1) It makes more sense for spinning disk workloads, while RocksDB is primarily designed for flash and memory,
2) It added some complexity to the important code-paths,
3) None of our internal customers were really using it.
Because of that, Options::disable_seek_compaction is now obsolete. It is still a parameter in Options, so it does not break the build, but it does not have any effect. We plan to completely remove it at some point, so we ask users to please remove this option from your code base.
L
Lucas Qiu 已提交
489
* Add two parameters to NewHashLinkListRepFactory() for logging on too many entries in a hash bucket when flushing.
H
Haobo Xu 已提交
490
* Added new option BlockBasedTableOptions::hash_index_allow_collision. When enabled, prefix hash index for block-based table will not store prefix and allow hash collision, reducing memory consumption.
S
sdong 已提交
491 492

### New Features
L
Lucas Qiu 已提交
493
* PlainTable now supports a new key encoding: for keys of the same prefix, the prefix is only written once. It can be enabled through encoding_type parameter of NewPlainTableFactory()
S
sdong 已提交
494
* Add AdaptiveTableFactory, which is used to convert from a DB of PlainTable to BlockBasedTabe, or vise versa. It can be created using NewAdaptiveTableFactory()
I
Igor Canadi 已提交
495

H
Haobo Xu 已提交
496 497 498
### Performance Improvements
* Tailing Iterator re-implemeted with ForwardIterator + Cascading Search Hint , see ~20% throughput improvement.

I
Igor Canadi 已提交
499
## 3.1.0 (05/21/2014)
I
Igor Canadi 已提交
500 501 502 503

### Public API changes
* Replaced ColumnFamilyOptions::table_properties_collectors with ColumnFamilyOptions::table_properties_collector_factories

K
Kai Liu 已提交
504 505
### New Features
* Hash index for block-based table will be materialized and reconstructed more efficiently. Previously hash index is constructed by scanning the whole table during every table open.
I
Igor Canadi 已提交
506
* FIFO compaction style
K
Kai Liu 已提交
507

508
## 3.0.0 (05/05/2014)
509 510 511

### Public API changes
* Added _LEVEL to all InfoLogLevel enums
I
xxHash  
Igor Canadi 已提交
512
* Deprecated ReadOptions.prefix and ReadOptions.prefix_seek. Seek() defaults to prefix-based seek when Options.prefix_extractor is supplied. More detail is documented in https://github.com/facebook/rocksdb/wiki/Prefix-Seek-API-Changes
513
* MemTableRepFactory::CreateMemTableRep() takes info logger as an extra parameter.
514 515

### New Features
I
Igor Canadi 已提交
516
* Column family support
I
xxHash  
Igor Canadi 已提交
517
* Added an option to use different checksum functions in BlockBasedTableOptions
518
* Added ApplyToAllCacheEntries() function to Cache
519

S
sdong 已提交
520 521
## 2.8.0 (04/04/2014)

K
kailiu 已提交
522
* Removed arena.h from public header files.
523
* By default, checksums are verified on every read from database
S
sdong 已提交
524
* Change default value of several options, including: paranoid_checks=true, max_open_files=5000, level0_slowdown_writes_trigger=20, level0_stop_writes_trigger=24, disable_seek_compaction=true, max_background_flushes=1 and allow_mmap_writes=false
525
* Added is_manual_compaction to CompactionFilter::Context
526
* Added "virtual void WaitForJoin()" in class Env. Default operation is no-op.
I
Igor Canadi 已提交
527
* Removed BackupEngine::DeleteBackupsNewerThan() function
528
* Added new option -- verify_checksums_in_compaction
529
* Changed Options.prefix_extractor from raw pointer to shared_ptr (take ownership)
530
  Changed HashSkipListRepFactory and HashLinkListRepFactory constructor to not take SliceTransform object (use Options.prefix_extractor implicitly)
531
* Added Env::GetThreadPoolQueueLen(), which returns the waiting queue length of thread pools
I
Igor Canadi 已提交
532 533
* Added a command "checkconsistency" in ldb tool, which checks
  if file system state matches DB state (file existence and file sizes)
J
James Pearce 已提交
534
* Separate options related to block based table to a new struct BlockBasedTableOptions.
S
sdong 已提交
535 536 537
* WriteBatch has a new function Count() to return total size in the batch, and Data() now returns a reference instead of a copy
* Add more counters to perf context.
* Supports several more DB properties: compaction-pending, background-errors and cur-size-active-mem-table.
538

I
Igor Canadi 已提交
539 540 541 542
### New Features
* If we find one truncated record at the end of the MANIFEST or WAL files,
  we will ignore it. We assume that writers of these records were interrupted
  and that we can safely ignore it.
S
sdong 已提交
543 544 545
* A new SST format "PlainTable" is added, which is optimized for memory-only workloads. It can be created through NewPlainTableFactory() or NewTotalOrderPlainTableFactory().
* A new mem table implementation hash linked list optimizing for the case that there are only few keys for each prefix, which can be created through NewHashLinkListRepFactory().
* Merge operator supports a new function PartialMergeMulti() to allow users to do partial merges against multiple operands.
546
* Now compaction filter has a V2 interface. It buffers the kv-pairs sharing the same key prefix, process them in batches, and return the batched results back to DB. The new interface uses a new structure CompactionFilterContext for the same purpose as CompactionFilter::Context in V1.
D
Dhruba Borthakur 已提交
547
* Geo-spatial support for locations and radial-search.
I
Igor Canadi 已提交
548

K
kailiu 已提交
549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585
## 2.7.0 (01/28/2014)

### Public API changes

* Renamed `StackableDB::GetRawDB()` to `StackableDB::GetBaseDB()`.
* Renamed `WriteBatch::Data()` `const std::string& Data() const`.
* Renamed class `TableStats` to `TableProperties`.
* Deleted class `PrefixHashRepFactory`. Please use `NewHashSkipListRepFactory()` instead.
* Supported multi-threaded `EnableFileDeletions()` and `DisableFileDeletions()`.
* Added `DB::GetOptions()`.
* Added `DB::GetDbIdentity()`.

### New Features

* Added [BackupableDB](https://github.com/facebook/rocksdb/wiki/How-to-backup-RocksDB%3F)
* Implemented [TailingIterator](https://github.com/facebook/rocksdb/wiki/Tailing-Iterator), a special type of iterator that
  doesn't create a snapshot (can be used to read newly inserted data)
  and is optimized for doing sequential reads.
* Added property block for table, which allows (1) a table to store
  its metadata and (2) end user to collect and store properties they
  are interested in.
* Enabled caching index and filter block in block cache (turned off by default).
* Supported error report when doing manual compaction.
* Supported additional Linux platform flavors and Mac OS.
* Put with `SliceParts` - Variant of `Put()` that gathers output like `writev(2)`
* Bug fixes and code refactor for compatibility with upcoming Column
  Family feature.

### Performance Improvements

* Huge benchmark performance improvements by multiple efforts. For example, increase in readonly QPS from about 530k in 2.6 release to 1.1 million in 2.7 [1]
* Speeding up a way RocksDB deleted obsolete files - no longer listing the whole directory under a lock -- decrease in p99
* Use raw pointer instead of shared pointer for statistics: [5b825d](https://github.com/facebook/rocksdb/commit/5b825d6964e26ec3b4bb6faa708ebb1787f1d7bd) -- huge increase in performance -- shared pointers are slow
* Optimized locking for `Get()` -- [1fdb3f](https://github.com/facebook/rocksdb/commit/1fdb3f7dc60e96394e3e5b69a46ede5d67fb976c) -- 1.5x QPS increase for some workloads
* Cache speedup - [e8d40c3](https://github.com/facebook/rocksdb/commit/e8d40c31b3cca0c3e1ae9abe9b9003b1288026a9)
* Implemented autovector, which allocates first N elements on stack. Most of vectors in RocksDB are small. Also, we never want to allocate heap objects while holding a mutex. -- [c01676e4](https://github.com/facebook/rocksdb/commit/c01676e46d3be08c3c140361ef1f5884f47d3b3c)
* Lots of efforts to move malloc, memcpy and IO outside of locks