Уведомление: Ввод данных для следующего выпуска здесь не осуществляется. Следуйте инструкциям в
unreleased_history/README.txt
WriteBatchWithIndex
. Это включает API PutEntity
и поддержку широколончатых таблиц в существующих методах чтения (GetFromBatch
, GetFromBatchAndDB
, MultiGetFromBatchAndDB
, и BaseDeltaIterator
).TablePropertiesCollectorFactory
теперь могут вернуть nullptr
коллектор для отказа от обработки файла, что снижает вызовы обратного вызова в таких случаях.ReadOptions.auto_readahead_size
как true
, которое выполняет оптимизации предварительной загрузки для последовательных сканирований при указании iterate_upper_bound
и использования блочного кэша.HyperClockCacheOptions::eviction_effort_cap
контролирует соотношение пространства и времени ответа. По умолчанию он обычно хорошо балансирован, без заметного влияния на нормальную работу.auto_readahead_size
, где операция Prev возвращает ошибку NOT SUPPORTED при изменении направления сканирования с прямого на обратное.RocksDB.get([ColumnFamilyHandle columnFamilyHandle,] ReadOptions opt, ByteBuffer key, ByteBuffer value)
для принятия параметров косвенного буфера, а также прямого буфера.RocksDB.put([ColumnFamilyHandle columnFamilyHandle,] WriteOptions writeOpts, final ByteBuffer key, final ByteBuffer value)
для принятия параметров косвенного буфера, а также прямого буфера.RocksDB.merge([ColumnFamilyHandle columnFamilyHandle,] WriteOptions writeOptions, ByteBuffer key, ByteBuffer value)
с теми же параметрами, что и put(...)
, поддерживаются прямой и косвенный буфер.RocksIterator.key(byte[] key[, int offset, int len])
, которые получают ключ итератора в предоставленный буфер.RocksIterator.value(byte[] value[, int offset, int len])
, которые получают значение итератора в предоставленный буфер.get(final ColumnFamilyHandle columnFamilyHandle, final ReadOptions readOptions, byte[])
в пользу get(final ReadOptions readOptions, final ColumnFamilyHandle columnFamilyHandle, byte[])
, который имеет согласованное расположение параметров с другими методами в том же классе.Transaction.get(ReadOptions opt, [ColumnFamilyHandle columnFamilyHandle, ] byte[] key, byte[] value)
.Transaction.get(ReadOptions opt, [ColumnFamilyHandle columnFamilyHandle, ] ByteBuffer key, ByteBuffer value)
.Transaction.getForUpdate(ReadOptions readOptions, [ColumnFamilyHandle columnFamilyHandle, ] byte[] key, byte[] value, boolean exclusive[, boolean doValidate])
.Transaction.getForUpdate(ReadOptions readOptions, [ColumnFamilyHandle columnFamilyHandle, ] ByteBuffer key, ByteBuffer value, boolean exclusive[, boolean doValidate])
.Transaction.getIterator()
как удобство, который по умолчанию использует значение ReadOptions
передаваемое в существующие методы Transaction.iterator()
. Это зеркалит существующий метод RocksDB.iterator()
.Transaction.put([ColumnFamilyHandle columnFamilyHandle, ] ByteBuffer key, ByteBuffer value[, boolean assumeTracked])
, которые предоставляют ключ и значение для записи в параметре ByteBuffer
.Transaction.merge([ColumnFamilyHandle columnFamilyHandle, ] ByteBuffer key, ByteBuffer value[, boolean assumeTracked])
, которые предоставляют ключ и значение для записи/слияния в параметре ByteBuffer
.Transaction.mergeUntracked([ColumnFamilyHandle columnFamilyHandle, ] ByteBuffer key, ByteBuffer value)
, которые предоставляют ключ и значение для записи/слияния в параметре ByteBuffer
.GetEntity()
и PutEntity()
для поддержки группы атрибутов. Через использование колонок семейств, группа атрибутов позволяет пользователям логически группировать широколончатые объекты.rocksdb_ratelimiter_create_auto_tuned
для создания автоматически настроенного GenericRateLimiter.clipColumnFamily()
в Java API для ограничения записей в CF по диапазону [begin_key, end_key)
.EnableFileDeletion
больше не устанавливается по умолчанию для принудительного включения. Для пользователей, которые полагаются на это поведение по умолчанию и всё ещё хотят использовать принудительное включение, они должны явно передать true
в EnableFileDeletion
.GetSecondaryCacheCapacity()
и GetSecondaryCachePinnedUsage()
для возврата конфигурируемого объёма и зарезервированного кэша вторичного уровня.### Изменения поведенияdaily_offpeak_time_utc
, компактир выбирает больше файлов для периодического компактирования. Этот выбор будет включать файлы, которые прогнозируются для истечения с момента начала следующего часа мертвого сезона, обеспечивая, что эти файлы не будут выбраны для периодического компактирования вне часов мертвого сезона.DB::StartTrace()
, последующие записи трассировки будут пропущены, чтобы избежать записи в файл, который ранее видел ошибку. В этом случае DB::EndTrace()
также вернет статус не-OK с информацией об ошибке, которая произошла ранее, в его сообщении статуса.SstFileManager
, если доступно, таким образом, чтобы они могли быть ограничены скоростью.TablePropertiesCollector::Finish()
только один раз.WAL_ttl_seconds > 0
, мы теперь обрабатываем архивированные WAL для удаления хотя бы каждые WAL_ttl_seconds / 2
секунды. Ранее это могло быть реже при маленьких значениях WAL_ttl_seconds
, когда одновременно была активна размерная экспирация (WAL_size_limit_MB > 0
).create_missing_column_families=true
и множества колонок семейств.HyperClockCacheOptions::estimated_entry_charge = 0
и имеет примерно такие же преимущества параллелизма, как существующий HyperClockCache.COMPACTION_CPU_TOTAL_TIME
, которая отслеживает накопительное время выполнения компактации процессора. Эта метрика регулярно обновляется во время выполнения компактации.GetEntity()
для ReadOnly DB и Secondary DB.Iterator::Refresh(const Snapshot *)
, который позволяет обновлять итератор с использованием входящего снимка данных.merge_operand_count_threshold
. Когда количество операндов слияния, применённых во время успешного поиска точки превышает этот порог, запрос вернёт специальное состояние успеха с новым подкодом kMergeOperandThresholdExceeded
. Приложения могут использовать это сигнал для принятия действий по снижению количества операндов слияния для затронутых ключей, например запустив компактацию.NewRibbonFilterPolicy()
, сделана возможность изменения параметра bloom_before_level
через интерфейс Configurable и API SetOptions
, что позволяет динамически переключаться между конфигурациями всех-Bloom и всех-Ribbon, а также конфигурациями между ними. Смотрите комментарии к NewRibbonFilterPolicy()
.NewTieredCache()
в rocksdb/cache.h.FullMergeV3
к MergeOperator
. FullMergeV3
поддерживает широкие колонки как базовое значение и результат слияния, что позволяет приложению выполнять более общие преобразования во время слияний. Для обратной совместимости, по умолчанию реализация применяет логику слияния к основной колонке любого ширококолончатого объекта. Конкретно, если нет базового значения или базовое значение является простым ключом-значением, по умолчанию реализация падает назад к FullMergeV2
. Если базовое значение является ширококолончатым объектом, по умолчанию реализация вызывает FullMergeV2
для выполнения слияния на основной колонке, и оставляет любые другие колонки без изменений.sst_dump
скан.CompactionFilter::Context
. Смотрите CompactionFilter::Context::input_start_level
, CompactionFilter::Context::input_table_properties
для подробностей.Options::compaction_readahead_size
изменено с 0 до 2МБ.acceleration
можно настраивать, задав отрицательное значение в CompressionOptions::level
. Например, CompressionOptions::level=-10
установит acceleration=10
.NewTieredCache
изменён так, чтобы принимать общую емкость кэша (включая как основной, так и сжатый вторичный кэши) и соотношение общей емкости, выделенной для сжатого кэша. Эти параметры указаны в TieredCacheOptions
. Любая емкость, указанная в LRUCacheOptions
, HyperClockCacheOptions
и CompressedSecondaryCacheOptions
, игнорируется. Предоставлен новый API UpdateTieredCache
для динамической настройки общей емкости, соотношения сжатого кэша и политики приема.NewTieredVolatileCache()
в rocksdb/cache.h переименован в NewTieredCache()
.### Изменения поведенияOptions::compaction_readahead_size
явно установлено в 0.IO error: No such file or directory: While open a file for random read: /tmp/rocksdbtest-501/db_flush_test_87732_4230653031040984171/000013.sst
.MultiGet
для очистки SuperVersion, полученного с блокировкой db mutex.GenericRateLimiter
, которое могло бы сделать его прекратить выдавать запросы.rocksdb.file.read.verify.file.checksums.micros
не заполнялась.### Улучшения производительностиreadahead_size
во время сканов при включенном auto_readahead_size
. Однако это не поддерживается с операцией Iterator::Prev
и вернет ошибку NotSupported
.async_io
, поиск происходит в двух фазах. Первая фаза начинает асинхронное чтение на блочном пропуске кэша, а вторая ждет окончания чтения и завершает поиск. В обеих фазах сначала выполняется поиск блочного кэша для блока данных, прежде чем обращаться к буферу предварительного чтения. Оптимизация достигается за счет выполнения поиска блочного кэша только в первой фазе, что экономит некоторое время ЦП.format_version=6
. Влияние на производительность минимально или незначительно. Ранее, если данные SST были перемещены или переупакованы уровнем хранения, они могли пройти проверку контрольной суммы блока с вероятностью выше одного из четырёх миллиардов. При использовании format_version=6
контрольные суммы блоков зависят от того, какой это файл и местоположение внутри него. Таким образом, перемещённые данные SST теперь так же маловероятно пройдут проверку контрольной суммы, как случайно повреждённые данные. Также при format_version=6
контрольные суммы защищают концы файлов SST.readahead_size
) во время сканирования до верхней границы (upper_bound
), когда указана опция iterate_upper_bound
. Эта функциональность активируется через ReadOptions.auto_readahead_size
. Пользователи должны также указывать ReadOptions.iterate_upper_bound
.compaction_verify_record_count
введена для этой цели и включена по умолчанию.bottommost_file_compaction_delay
для указания задержки одиночных файловых компактаций уровня нижнего уровня.TieredVolatileCacheOptions
путём задания нового параметра adm_policy
.memtable_max_range_deletions
, ограничивающая число диапазонных удалений в Memtable. RocksDB попытается выполнить автоматическую флеш после достижения этого лимита. (#11358)PutEntity
в sst_file_writer
timeout
в микросекундах в опции WaitForCompactOptions
для своевременного прекращения длительного ожидания в ситуациях повторяемых восстановляемых ошибок, таких как ситуации отсутствия места и непрерывные потоки записи, поддерживающие постоянные флэши и компактации.rocksdb.file.read.{get|multiget|db.iterator|verify.checksum|verify.file.checksums}.micros
, измеряющие время чтения блочных таблиц SST или blob-файлов во время открытия базы данных, вызова Get()
, MultiGet()
, использования итератора базы данных, VerifyFileChecksums()
и VerifyChecksum()
. Эти статистики требуют уровня статистики больше чем StatsLevel::kExceptDetailedTimers
.close_db
в WaitForCompactOptions
для вызова Close()
после завершения ожидания.CompressionOptions::checksum
для включения функции контрольной суммы ZSTD для обнаружения повреждений при декомпрессии.Options::access_hint_on_compaction_start
. Смотрите #11631 для альтернативного поведения.rocksdb.sst.read.micros
теперь включает время затрат на многократное чтение и асинхронное чтение в файл.periodic_compaction_seconds
) по умолчанию будет установлена на 30 дней, если используется блочная таблица.FileTTLBooster
, которая может вызвать ошибки типа "runtime error: shift exponent .. is too large.." для пользователей с большим количеством уровней (более 65). (#11673).GeneralCache
и MakeSharedGeneralCache()
поскольку наш план изменился на то, чтобы перестать предоставлять общий интерфейс кэша. Старые формы этих API, Cache
и NewLRUCache()
, всё ещё доступны, хотя общая поддержка кэширования будет окончательно прекращена.periodic_compaction_seconds
больше не поддерживает FIFO-компактацию: её установка не влияет на FIFO-компактацию. Пользователям FIFO-компактации следует использовать опцию ttl
вместо.RandomAccessFileRead::Read
избежит реаллокации нового буфера, что снижает количество операций memcpy
и использует уже переданный выровненный буфер.HyperClockCache
за счет снижения шансов генерации кучевых аллоцирований компилятором.use_after_free
в асинхронных многократных чтениях при включенном экспериментальном режиме kFSBuffer
.## 8.4.0 (06/26/2023)FSReadRequest::fs_scratch
, представляющая собой буфер данных, выделенный и предоставленный подсистемой хранения RocksDB во время чтения, когда система хочет предоставить свой собственный буфер данных вместо использования буфера, предоставленного RocksDB. Это помогает в оптимизации процессора, избегая копирования данных из буфера системы хранения в буфер RocksDB. Подробнее о том, как использовать/включить эту опцию, см. в file_system.h
. На данный момент эта опция поддерживается только для многократных асинхронных и синхронных чтений без использования directIO."rocksdb.obsolete_sst_files_size_property"
, который сообщает о размере файлов SST, которые стали устаревшими, но ещё не были удалены или запланированы для удаления.AdvancedColumnFamilyOptions.persist_user_defined_timestamps
в манифест и свойства таблицы для файла SST при его создании. И использование записанного флага при создании читателя таблицы для файла SST. Этот флаг явно записывается только тогда, когда он равен false
.OptimisticTransactionDBOptions::shared_lock_buckets
, которая позволяет делиться мютексами для проверки транзакций между экземплярами баз данных для лучшего балансирования эффективности памяти и конкуренции проверки между экземплярами баз данных. Разные семейства столбцов и базы данных теперь используют различные семена хеширования в этом процессе проверки, чтобы те же наборы имен ключей не конкурировали между базами данных или семействами столбцов.rocksdb.files.marked_trash_deleted
для отслеживания количества файлов мусора, удаленных фоновым потоком из очереди мусора.NewTieredVolatileCache()
в include/rocksdb/cache.h
для создания экземпляра кэша блоков с первичным уровнем кэша блоков и сжатым вторичным уровнем кэша. Кэш такого типа распределяет зарезервированную память против кэша блоков, таких как WriteBufferManager
, память читателя таблицы и т.д., пропорционально между первичным и сжатым вторичным кэшем.WaitForCompact()
, который ждет завершения всех задач флэш и компактации. Ждутся задачи, которые ещё не были запланированы (добавлены в очередь, но ещё не были запланированы).WriteBatch::Release()
, который освобождает сериализованные данные пакета к вызывающему.rocksdb_options_add_compact_on_deletion_collector_factory_del_ratio
.FileSystem::use_async_io()
на API SupportedOps
, чтобы расширить его на различные операции, поддерживаемые системой хранения. Сейчас этот API содержит FSSupportedOps::kAsyncIO
и FSSupportedOps::kFSBuffer
. Подробнее о FSSupportedOps
в filesystem.h
.rocksdb.error.handler.bg.error.count
, rocksdb.error.handler.bg.io.error.count
, rocksdb.error.handler.bg.retryable.io.error.count
для замены испорченных: rocksdb.error.handler.bg.errro.count
, rocksdb.error.handler.bg.io.errro.count
, rocksdb.error.handler.bg.retryable.io.errro.count
('error' вместо 'errro'). Пользователи должны перейти на использование новых тикеров до выпуска 9.0, так как старые тикеры будут полностью удалены тогда.CreateColumnFamilyWithImport()
для поддержки создания семейства столбцов путём импорта нескольких семейств столбцов. Это требует, чтобы CF не пересекались в диапазоне ключей пользователя.### Изменения поведенияlevel_compaction_dynamic_level_bytes
на true
. Это влияет на пользователей, использующих уровневую компактацию и не устанавливающих эту опцию явно. Эти пользователи могут заметить дополнительные фоновые компактации после открытия базы данных. Эти компактации помогают сформировать LSM согласно level_compaction_dynamic_level_bytes
таким образом, чтобы размер каждого уровня Ln был примерно равен размеру Ln-1 * max_bytes_for_level_multiplier
. Активация этой опции имеет и другие преимущества: более подробно см. в вики: https://github.com/facebook/rocksdb/wiki/Leveled-Compaction#option-level_compaction_dynamic_level_bytes-and-levels-target-size и в комментарии к опции в advanced_options.h
(#11525).CompactRange()
всегда будет пытаться компактировать до последнего непустого уровня. (#11468)
Для пользователей уровневой компактации метод CompactRange()
с опцией bottommost_level_compaction = BottommostLevelCompaction::kIfHaveCompactionFilter
будет действовать аналогично kForceOptimized
: он будет пропускать файлы, созданные во время этой ручной компактации, при компактации файлов в нижнем уровне. (#11468)allow_ingest_behind=true
(в настоящее время поддерживаются только универсальные компактации), файлы в последнем уровне, то есть внесенные файлы, не будут включены в любую компактацию. (#11489)rocksdb.sst.read.micros
теперь охватывает все чтения SST, кроме чтения файлов и импорта семейств столбцов (некоторые чтения компактации ранее были исключены).block_protection_bytes_per_key
, которое можно использовать для включения защиты целостности ключей-значений для блоков в памяти в блок кэше (#11287).JemallocAllocatorOptions::num_arenas
. Установка num_arenas > 1
может снизить конфликты мьютексов в аллокаторе, особенно в ситуациях, где блочные выделения часто обходят кэш jemalloc.ShardedCacheOptions::hash_seed
, которая также подробно документирует решённую проблему.CompactionOptionsFIFO::file_temperature_age_thresholds
, которое позволяет FIFO компактации компактировать файлы до различных температур на основе возраста ключей (#11428).BLOCK_CHECKSUM_MISMATCH_COUNT
.rocksdb.file.read.db.open.micros
, который измеряет время чтения блочных SST таблиц или файлов blob во время открытия базы данных._LEVEL_SEEK_
*. (#11460)DB::ClipColumnFamily
для обрезки ключей в CF до определенного диапазона. Это физически удаляет все ключи вне этого диапазона, включая надгробия.MakeSharedCache()
для различных объектов опций кэша, и устарели функции NewWhateverCache()
с длинными списками параметров._LEVEL_SEEK_
*. показателях. (#11460)SstFileWriter::DeleteRange()
теперь возвращает Status::InvalidArgument
, если конечный ключ диапазона находится перед начальным ключом согласно пользовательскому сравнителю. Ранее поведение было неопределенным.multi_get_for_update
в C API.level_compaction_dynamic_level_bytes=true
, RocksDB теперь просто перемещает уровни вниз для заполнения LSM, начиная с нижнего уровня при открытии базы данных. Подробнее см. комментарии к опции level_compaction_dynamic_level_bytes
(#11321).ReadOptions
теперь применяются для большего количества чтений блоков, отличных от CacheEntryRole::kDataBlock
.level_compaction_dynamic_level_bytes=true
, RocksDB теперь автоматически устраняет ненужные уровни через фоновую компактацию (#11340). Это вместе с #11321 делает автоматическим переход других настроек компактации к уровневой компактации с level_compaction_dynamic_level_bytes=true
. Кроме того, живая база данных, которая становится меньше, теперь будет иметь ненужные уровни удалены, что поможет уменьшить коэффициенты чтения и пространства.CompactRange()
вызывается с CompactRangeOptions::bottommost_level_compaction=kForce*
для компактации из L0 в L1, RocksDB теперь попытается выполнить простое перемещение из L0 в L1, затем выполнить внутри-L1 компактацию вместо L0 в L1 компактации с отключенным простым перемещением (#11375).PerfContext
счетчики iter_{next|prev|seek}_count
для итератора базы данных, каждый из которых считает количество вызовов соответствующего API.WriteBufferManager
паузу или нет, вызывая SetAllowStall()
.rocksdb.file.read.{flush|compaction}.micros
, которые измеряют время чтения блочных SST таблиц или файлов blob во время флеша или компактации.internal_merge_count
.WriteOptions::disableWAL == true
(#11148).internal_merge_point_lookup_count
, который отслеживает количество применяемых операндов слияния при обслуживании запросов точечного поиска.HyperClockCacheOptions
наследует опцию secondary_cache из ShardedCacheOptions).ReadOptions::verify_checksums=false
отключает проверку контрольных сумм для большего количества чтений блоков, отличных от CacheEntryRole::kDataBlock
.ColumnFamilyData::flush_reason
, вызванное одновременными флешами.Get
и MultiGet
при активации пользовательских временных штампов в сочетании с BlobDB
.LockWAL()
, такие как позволяющее конкурентное/рекурсивное использование и не ожидающее UnlockWAL()
после некорректного результата. См. комментарии API.GetEntity
выводил ссылку на блок вместо значения блока.DisableManualCompaction()
и CompactRangeOptions::canceled
для отмены компактации даже если они ожидают завершения конфликтующих компактаций.GetMergeOperands()
мог временно вернуть Status::MergeInProgress()
.Status::NotSupported()
) для вызова MultiGet
при активации ReadOptions::async_io
и отсутствии поддержки IO uring. Ранее возвращалась ошибка Status::Corruption()
.block_cache_compressed
. Соответствующие ему статистики также удалены.Env::LoadEnv()
. Вместо него следует использовать Env::CreateFromString()
.FileSystem::Load()
. Вместо него следует использовать FileSystem::CreateFromString()
.LoadOptionsFromFile
, LoadLatestOptions
, CheckOptionsCompatibility
.FactoryFunc
из метода LoadObject
из вспомогательных методов Customizable
.Cache
, которое используется редко, перемещено в новый файл advanced_cache.h
, а также добавлен класс CacheWrapper
в этот же файл. Небольшие изменения в определении API класса SimCache
.BLOCK_CACHE_INDEX_BYTES_EVICT
, BLOCK_CACHE_FILTER_BYTES_EVICT
, BLOOM_FILTER_MICROS
, NO_FILE_CLOSES
, STALL_L0_SLOWDOWN_MICROS
, STALL_MEMTABLE_COMPACTION_MICROS
, STALL_L0_NUM_FILES_MICROS
, RATE_LIMIT_DELAY_MILLIS
, NO_ITERATORS
, NUMBER_FILTERED_DELETES
, WRITE_TIMEDOUT
, BLOB_DB_GC_NUM_KEYS_OVERWRITTEN
, BLOB_DB_GC_NUM_KEYS_EXPIRED
, BLOB_DB_GC_BYTES_OVERWRITTEN
, BLOB_DB_GC_BYTES_EXPIRED
, BLOCK_CACHE_COMPRESSION_DICT_BYTES_EVICT
а также гистограммы STALL_L0_SLOWDOWN_COUNT
, STALL_MEMTABLE_COMPACTION_COUNT
, STALL_L0_NUM_FILES_COUNT
, HARD_RATE_LIMIT_DELAY_COUNT
, SOFT_RATE_LIMIT_DELAY_COUNT
, BLOB_DB_GC_MICROS
, и NUM_DATA_BLOCKS_READ_PER_LEVEL
. Обратите внимание, что как результат, значения перечисляемых значений C++ для ещё поддерживаемых статистик изменились. Разработчикам рекомендуется не полагаться на фактические числовые значения.IngestExternalFileOptions::write_global_seqno
с изменением значения по умолчанию на false
. Этот параметр требуется установить в значение true
, чтобы создать базу данных совместимую с версиями RocksDB до 5.16.0.GetColumnFamilyOptionsFrom{Map|String}(const ColumnFamilyOptions&, ..)
, GetDBOptionsFrom{Map|String}(const DBOptions&, ..)
, GetBlockBasedTableOptionsFrom{Map|String}(const BlockBasedTableOptions& table_options, ..)
и GetPlainTableOptionsFrom{Map|String}(const PlainTableOptions& table_options,..)
.Status::Corruption
, Status::SubCode::kMergeOperatorFailed
, чтобы пользователи могли идентифицировать коррупционные ошибки, возникшие в операторе слияния, отличаясь от внутренне выявленных коррупций RocksDB.make
создаёт общую библиотеку вместо статической. Чтобы использовать статическую библиотеку, используйте LIB_MODE=static
.FilterV3
. Для получения более подробной информации обратитесь к комментариям API.do_not_compress_roles
к CompressedSecondaryCacheOptions
для отключения сжатия определённых типов блоков. Блоки фильтра теперь не сжимаются по умолчанию через CompressedSecondaryCache
.MultiGetEntity
, который позволяет выполнять групповые запросы к широколюбовым сущностям. Для получения более подробной информации обратитесь к комментариям API.### Исправление ошибокiterate_upper_bound
были некорректно обработаны.MultiGet
при использовании опции чтения async_io
, вызванная ошибками ввода-вывода при открытии таблицы.DB::SyncWAL()
, влияющая на track_and_verify_wals_in_manifest
. Без исправления приложение может столкнуться с ошибкой "open error: Corruption: Missing WAL with log number", когда пытается открыть базу данных. Коррупция является ложным тревожным сигналом, но препятствует открытию базы данных (#10892).BackupEngine
, где восстановление базы данных из последнего резервного копирования завершалось ошибкой, если последняя резервная копия была удалена, но существуют другие действительные резервные копии.force_consistency_checks=true
могло выявить коррупцию до того, как она стала доступна для читателей, в этом случае записи будут возвращать Status::Corruption
. Также заменён предыдущий неполный исправление (#5958) на ту же самую коррупцию новым и более полным исправлением.LockWAL()
, приводящая к повторному захвату мьютекса (#11020).CompactRange()
при активации уровня change_level=true
на перекрывающемся диапазоне со одновременным импортом файла для уровня компактации. Это либо приводит к коррупции перекрывающихся диапазонов файлов на определённом уровне, выявленной force_consistency_checks=true
, либо потенциально два одинаковых ключа с seqno 0 на двух разных уровнях (то есть новые данные окажутся на нижнем/более старом уровне). Последнее будет выявлено утверждением в режиме отладки, но пройдет незамеченным и приведет к неверному результату чтения в режиме выпуска. Это исправление универсально, поэтому оно заменяет предыдущие исправления аналогичной проблемы для CompactFiles()
(#4665), общего CompactRange()
и автоматического компактования (коммиты 5c64fb6 и 87dfc1d).SstPartitionerFactory
, метод CompactRange()
теперь автоматически выбирает для компактации любые файлы, перекрывающие границу разделения, находящуюся в области компактации, даже если нет реальных записей в запрошенной области компактации. Эта возможность позволяет использовать ручную компактацию для (пере-)установки точек разделения SST при изменении SstPartitioner
, без полной компактации.BackupEngine
для исключения файлов из резервного копирования, известных тем, что они уже резервируются в другом месте, используя CreateBackupOptions::exclude_files_callback
. Для восстановления базы данных, исключенные файлы должны быть предоставлены в альтернативных директориях резервного копирования с помощью RestoreOptions::alternate_dirs
.Cache
для поддержки внутренних целей развития. Прямое использование членов класса Cache
не рекомендовано, и дальнейшие изменения могут быть сделаны в будущем. Класс SecondaryCache
имеет некоторые связанные изменения, и реализации потребуют обновления. (В отличие от Cache
, SecondaryCache
всё ещё предназначен для поддержки пользовательских реализаций, и разрушительные изменения будут избегаться.) (#10975)MergeOperationOutput::op_failure_scope
для пользователей оператора слияния для контроля радиуса действия ошибок оператора слияния. Существующие пользователи оператора слияния не требуют никаких изменений для сохранения старого поведения.async_io
. Коррупция произошла из-за ошибки ввода-вывода при чтении данных, что привело к пустому буферу и другому буферу, уже находящемуся в процессе асинхронного чтения, снова выполняющему чтение.Status::Corruption
при force_consistency_checks=true
(по умолчанию). Это затрагивает случаи использования, которые позволяют параллельный флеш (max_background_flushes > 1
или max_background_jobs >= 8
) и нестандартное количество мемтаблиц (max_write_buffer_number > 2
).READ_NUM_MERGE_OPERANDS
не обновлялся при чтении основного ключа-значения или тумбы из файла SST.block_cache_compressed
. block_cache_compressed
больше не пытается использовать функции вторичного кэша.async_io
. Во время поиска, действительные буферы были очищены, что привело к регрессии.PutEntity
, а также извлекаться с использованием GetEntity
и нового API columns
итератора. Для совместимости классические API Get
и MultiGet
, а также API value
итератора возвращают значение анонимного по умолчанию столбца широко-столбцовых сущностей; также GetEntity
и API columns
итератора возвращают любые простые ключ-значения в виде сущности, которая имеет только анонимный столбец по умолчанию. В настоящее время Merge
(и GetMergeOperands
) применяются только к столбцу по умолчанию; любые другие столбцы сущностей остаются незатронутыми операциями Merge
. Обратите внимание, что некоторые функции, такие как фильтры компактации, транзакции, пользовательские метки времени и писатель файла SST, еще не поддерживают широко-столбцовые сущности; также в настоящее время нет аналогичной API MultiGet
для одновременного извлечения нескольких сущностей. Мы планируем постепенно закрыть вышеупомянутые пробелы и реализовать новые функции, такие как операции уровня столбцов (например, обновление или запрос только определённых столбцов сущности).estimated_entry_charge
.DeleteRange()
поддерживает пользовательские метки времени.DB::Properties::kFastBlockCacheEntryStats
, который похож на DB::Properties::kBlockCacheEntryStats
, но возвращает кэшированные (устаревшие) значения в большем количестве случаев для снижения затрат.ignore_max_compaction_bytes_for_input
, чтобы игнорировать максимальный размер байтов компакции при добавлении файлов для компактирования из входного уровня. Это должно помочь снизить увеличение записи. Параметр включен по умолчанию.preserve_internal_time_seconds
, чтобы сохранять информацию о времени для самых новых данных. Этот параметр можно использовать для определения возраста данных при активированном параметре preclude_last_level_data_seconds
. Информация о времени прикреплена к SST в свойстве таблицы rocksdb.seqno.time.map
, которое можно распарсить с помощью инструмента ldb или sst_dump.### Исправления ошибокflush_opts.wait=false
застревать, когда база данных прекращает все записи (#10001).allow_ingest_behind
и нижнем уровне не заполненном (#10767).ldb update_manifest
и ldb unsafe_remove_sst_file
были недоступны, поскольку они требовали, чтобы файлы базы данных соответствовали текущему состоянию манифеста (до его обновления до желаемого состояния).AdvancedColumnFamilyOptions.level_compaction_dynamic_file_size
в false. Как побочный эффект, она может создавать SST большие, чем целевой размер файла (ограниченные двумя разами целевого размера файла) или меньшие файлы.GetLiveFiles
или CreateNewBackup
, просит триггерить и ждать очистки memtable на только для чтения базе данных. Такие косвенные запросы очистки memtable теперь игнорируются на только для чтения базе данных.FlushWAL(true /* sync */)
(используется GetLiveFilesStorageInfo()
, который используется для точки и резерва) могла привести к тому, что параллельные записи в конце файла WAL никогда не будут синхронизированы.SetOptions()
обновить периодическую задачу время, такое как: stats_dump_period_sec
, stats_persist_period_sec
.rocksdb_column_family_handle_get_id
, rocksdb_column_family_handle_get_name
для получения имени и ID семейства колонок в C APICompactionPriority.RoundRobin
.DBOptions::verify_sst_unique_id_in_manifest
теперь включен по умолчанию и проверяет уникальность ID файла SST каждый раз при открытии файла базой данных, а не только при открытии базы данных методом DB::Open
.OptionChangeMigration()
) в режим FIFO компактация все данные компактируются в один единственный файл SST и перемещаются в уровень L0. Это может создать проблемы для некоторых пользователей: огромный файл может быть удален вскоре после создания, чтобы удовлетворить ограничение max_table_files_size
, что может привести к почти пустой базе данных. Мы изменили поведение так, чтобы файлы были разделены на меньшие части, но эти файлы могут не следовать порядку вставки данных. После изменения, мигрированные данные после миграции могут не быть удалены в порядке вставки FIFO компактации.CompressedSecondaryCache
, мы просто вставляем фиктивный блок в основной кэш и не удаляем блок из CompressedSecondaryCache
. Отдельный указатель возвращается вызывающему объекту. Только если блок снова найдется в CompressedSecondaryCache
до того как будет выведен фиктивный блок, мы удалим блок из CompressedSecondaryCache
и вставим его в основной кэш.CompressedSecondaryCache
, мы просто вставляем фиктивный блок в CompressedSecondaryCache
. Только если он снова будет выведен из кэша до того как будет выведен фиктивный блок, он будет считаться горячим блоком и будет вставлен в CompressedSecondaryCache
.malloc_usable_size
(см. #10583).ReadOptions optimize_multiget_for_io
на включение по умолчанию.num_file_reads_for_auto_readahead
добавлена в BlockBasedTableOptions
, которая указывает, после скольких последовательных запросов чтения должно начаться внутреннее автоматическое предварительное чтение (по умолчанию — 2).block_cache_standalone_handle_count
, block_cache_real_handle_count
, compressed_sec_cache_insert_real_count
, compressed_sec_cache_insert_dummy_count
, compressed_sec_cache_uncompressed_bytes
, и compressed_sec_cache_compressed_bytes
.LRUCache
в тестах db_bench
при высоких параллельных нагрузках.CompressedSecondaryCacheOptions::enable_custom_split_merge
для включения специальной функции разделения и слияния, которая разделяет сжатое значение на части, чтобы они лучше подходили под bin jemalloc.DeleteRange()
. Внутри, итератор пропускает конец диапазона tombstones, когда это возможно, вместо циклического прохождения каждого ключа и проверки, является ли ключ диапазонно удаленным.PinnableSlice
теперь указывает только на значение бинда и закрепляет поддерживающую ресурс (вход кэша или буфер) во всех случаях, вместо хранения копии значения бинда. См. #10625 и #10647.DeleteRange()
должны заметить улучшение производительности получения и итератора из изменяемого memtable (см. #10547).## 7.6.0 (08/19/2022)prepopulate_blob_cache
в ColumnFamilyOptions. Если включена, теплые/горячие бинды, уже находящиеся в памяти, будут предварительно заполняться в кэше биндов при каждом флеше. При флеше, бинды, находящиеся в памяти (в memtables), записываются на устройство. Если используется Direct IO, дополнительно возникают операции ввода-вывода для чтения этих биндов обратно в память, что можно избежать путем включения этой опции. Это также помогает при работе с временной локальностью, где большую часть запросов выполняют недавно записанные данные. Это также полезно при работе с удалённой файловой системой, поскольку она требует сетевой передачи и имеет более высокие задержки.secondary_cache
в LRUCacheOptions.LRUCacheOptions::strict_capacity_limit
= true), создание завершится ошибкой Status::MemoryLimit()
. Чтобы активировать эту возможность, следует включить учет CacheEntryRole::kBlobCache
в BlockBasedTableOptions::cache_usage_options
.memtable_protection_bytes_per_key
adlı yeni bir seçenek eklendi, bu seçenek her anahtar-değer çifti için memtablarda kontrol öbeklerini koruma sağlar. Her bir memtablo öğesi, yazıldığında hesaplanan ve okunduğunda veya kompaktlaştırıldığında kontrol edilen bir kontrol öbeği ile sonlandırılır. Algılanan çürütme durumu kullanıcıya bildirilir ve çürütme durumu statüsü kullanıcıya geri döndürülür.LRUCacheOptions
'ta yeni bir low_pri_pool_ratio
seçeneğini belirleyerek düşük öncelikli öğelerin (ve dolayısıyla düşük öncelikli seviyenin) alabileceği alanın oranını ayarlayabilir veya NewLRUCache()
'da yeni bir low_pri_pool_ratio
argümanını kullanarak aynı etkiyi elde edebilir.CreateFromString()
ve Type()
) kaldırılması.exclusive_manual_compaction
CompactRangeOptions'nin varsayılan değeri artık false
olarak ayarlanmıştır. Bu, RocksDB'nin varsayılan olarak yapboz paralellik kısıtlamalarını girdirmemesini garanti eder.bottommost_temperature
adlı eski bir seçenek last_level_temperature
olarak yeniden adlandırılmıştır. Eski seçenek adı yalnızca geçiş amacıyla korunmuştur; lütfen yeni adı kullanınız. Bu değişiklik, sadece last_level
seviyesindeki dosyaların sıcaklığına uygulanmasını sağlar.optimize_multiget_for_io
eklendi. Bu seçenek, MultiGet
işlevinin ağırlık yükünü azaltmaya çalışırken, birden çok düzeyde anahtarlara yönelik korelasyonları başlatır.### Исправление ошибокFSDirectory::Fsync
или FSDirectory::Close
после первого FSDirectory::Close
; Также, valgrind мог бы сообщить о вызове close()
с fd=-1
.)GenericRateLimiter
мог бы переопределить установленную динамически скорость передачи данных с помощью SetBytesPerSecond()
, когда пользователь настраивает структуру, окружающую его, например, используя GetOptionsFromString()
для настройки Options
, которое ссылается на существующий объект RateLimiter
.GenericRateLimiter
.FIFOCompactionPicker::PickTTLCompaction
, при которой расчет общего размера мог бы привести к переполнению.best_efforts_recovery
мог бы не открыть базу данных с mmap чтения.fill_cache
в false.AllocateData()
в CompressedSecondaryCache::SplitValueIntoChunks()
и MergeChunksIntoValueTest
.FaultInjectionSecondaryCache
.CompressedSecondaryCache
, исходный блок теперь делится согласно размеру бинов jemalloc в методе Insert()
и затем объединяется обратно в методе Lookup()
.PosixLogger
, а по умолчанию используется EnvLogger
для информационного логирования. Ведущиеся эти два логгера должны иметь очень похожее поведение при использовании стандартного окружения Posix.[min|max]_timestamp
из VersionEdit
, так как они не отслеживаются в MANIFEST, но всё равно потребляют пустые строки типа std::string
(до 64 байт) для каждого файла. Если они будут добавлены обратно в будущем, следует хранить их более компактно.preclude_last_level_data_seconds
, вычисление увеличения размера данных производится только среди данных, не относящихся к последнему уровню, что позволяет пропустить последний уровень и использовать предпоследний уровень как базовый.WriteBufferManager
с параметром allow_stall == false
больше не будет неявно запускать задержку записи до достижения лимита колич�数量超过限制,以下是剩余部分的翻译:数量超过限制,以下是剩余部分的翻译:
allow_stall == true
.CompressedSecondaryCache
в тесты стресса.FragmentedRangeTombstoneList
при каждом чтении он создаётся один раз и сохраняется в неизменяемых мемтаблицах. Это ускоряет запросы диапазонных отметок удаления из неизменяемых мемтаблиц.MultiGet
теперь может выполнять больше параллельных операций ввода-вывода, читая данные блоков из SST файлов нескольких уровней, если установлен флаг optimize_multiget_for_io
.## 7.5.0 (15/07/2022)experimental_mempurge_threshold
теперь является частью ColumnFamilyOptions
и может быть динамически конфигурирован через SetOptions()
.ReadOptions.iter_start_ts
.ReadOptions.async_io
для улучшения времени поиска путём параллельного выполнения поиска в потомках и асинхронного предварительного чтения при последовательном сканировании.column_family_options.blob_cache
для включения/выключения кэширования блобов.BlobSource
для логики чтения блобов даёт всем пользователям доступ к блобам, независимо от того, находятся ли они в кэше блобов, вторичном кэше или (удалённом) хранилище.AdvancedColumnFamilyOptions.preclude_last_level_data_seconds
, которая гарантирует, что новые данные, введённые в течение указанного периода времени, не будут помещены на холодный уровень (функциональность ещё не завершена).rocksdb_get_column_family_metadata()
и rocksdb_get_column_family_metadata_cf()
для получения rocksdb_column_family_metadata_t
.rocksdb_column_family_metadata_t
и его функции получения и уничтожения.rocksdb_level_metadata_t
и его функции получения и уничтожения.rocksdb_file_metadata_t
и его функции получения и уничтожения.suggest_compact_range()
и suggest_compact_range_cf()
в C API.LRUCache
с strict_capacity_limit = true
), операции DB теперь завершаются с кодом состояния kAborted
подкодом kMemoryLimit
(IsMemoryLimit()
) вместо kIncomplete
(IsIncomplete()
) при достижении лимита емкости, поскольку Incomplete
может указывать на другие конкретные вещи для некоторых операций.NewClockCache
временно возвращают LRUCache
(с аналогичными характеристиками желаемого ClockCache
). Это потому, что ClockCache
заменяется новой версией (старый имел неизвестные ошибки), но это всё ещё находится в разработке.ReserveThreads()
и ReleaseThreads()
в класс Env
. По умолчанию обе возвращают 0. Новый класс xxxEnv
, который наследует Env
, должен реализовать эти две функции для управления зарезервированными потоками.rocksdb_options_get_prepopulate_blob_cache
и rocksdb_options_set_prepopulate_blob_cache
в C API.prepopulateBlobCache
и setPrepopulateBlobCache
в Java API.dbname
и db_log_dir
на разных файловых системах приводило бы к ошибке и невозможности открытия БД.InternalKeyComparator
настраиваемым как побочный эффект.SortFileByOverlappingRatio()
теперь находит только верхние 50 файлов на основе оценки. Это может улучшить скорость записи для случаев, когда данные загружаются в порядке возрастания ключа и существует большое количество файлов в одном дереве LSM, где применение результатов сжатия является бутылочной горлышкой.protection_bytes_per_key > 0
на WriteBatch
или WriteOptions
, а также конфигурирует inplace_callback != nullptr
.avoid_flush_during_recovery = true
и TransactionDB, где после аварийного завершения работы минимальное число логов для хранения может не меняться при восстановлении и сохранении нового MANIFEST с продвинутыми номерами логов для некоторых колонок, что приводит к ошибке "несоответствие колонок" при втором восстановлении. В качестве решения RocksDB будет сохранять новый MANIFEST после успешной синхронизации нового WAL. Если будущее восстановление начинается с нового MANIFEST, это значит, что новый WAL успешно синхронизирован. Из-за пустого записывающего блока данных в начале гарантируется, что kPointInTimeRecovery WAL пройдет после этой точки. Если будущее восстановление начинается со старого MANIFEST, это значит, что запись нового MANIFEST провалилась. Мы не получим ошибку "SST перед WAL".WritableDatabase::filesize_
методом DB::SyncWAL()
и DB::Put()
в двух режимах записи.SyncWAL()
на единственном файле WAL базы данных не регистрировал событие в MANIFEST, позволяя последующему DB::Open
даже если файл WAL отсутствует или поврежден.index_type=kHashSearch
и использованием SetOptions
для изменения prefix_extractor
.manual_wal_flush
и/или FlushWAL(true /* sync */)
вместе с track_and_verify_wals_in_manifest == true
. Для этих пользователей потеря незаписанных данных (например, из-за потери питания) может сделать будущие открытия базы данных неудачными с сообщением об ошибке Status::Corruption
о недостающих данных WAL.WriteBatchInternal::Append()
, где точка окончания WAL в записи была не учтена, и функция добавляет неверное количество контрольных сумм.### Изменения публичного APIGetUnixTime
в классе Snapshot
, который возвращает Unix время создания снимка.get_pinned
и multi_get
в C API.rocksdb_transaction_get_writebatch_wi
и rocksdb_transaction_rebuild_from_writebatch
в C API.rocksdb_options_get_blob_file_starting_level
и rocksdb_options_set_blob_file_starting_level
в C API.blobFileStartingLevel
и setBlobFileStartingLevel
в Java API.SingleDelete
для DB
в C API.rocksdb_comparator_with_ts_create
для создания временного компаратора.Put
, Get
, Delete
, SingleDelete
, MultiGet
имеют соответствующие временные методы с суффиксом with_ts
.SstFileWriter
, Compaction
, как указано здесь.Comparator::IsSameLengthImmediateSuccessor
был обновлен для обхода дизайнерской ошибки в auto_prefix_mode
.auto_prefix_mode
теперь указывает некоторые случаи, когда она возвращает различные результаты чем total_order_seek
, из-за дизайнерских ошибок, которые сложно исправить. Пользователи использующие встроенные компараторы и ключи размером хотя бы одного фиксированного префикса не затронуты.NUM_DATA_BLOCKS_READ_PER_LEVEL
и введены новые статистики NUM_LEVEL_READ_PER_MULTIGET
и MULTIGET_COROUTINE_COUNT
.WriteOptions::protection_bytes_per_key
, которое можно использовать для включения защиты целостности ключ-значение для живых обновлений.FileSystem::ReadAsync
в io_tracing
.blob_garbage_collection_policy
и blob_garbage_collection_age_cutoff
для принудительного включения и отключения сборки мусора, а также выборочного переопределения порогового возраста при использовании CompactRange
.GetSortedWalFiles()
(также используется в GetLiveFilesStorageInfo()
, BackupEngine
, и Checkpoint
) для снижения риска успешного создания бэкапа или точки восстановления, которые не могут быть открыты из-за отсутствия WAL файла.blob_file_starting_level
для включения записи blob файлов во время флешей и компактов начиная с указанного уровня LSM дерева.AbortIO
в posix
для отмены отправленных асинхронных запросов с помощью io_uring
.MultiGet()
API."rocksdb.blob-cache-capacity"
, "rocksdb.blob-cache-usage"
, "rocksdb.blob-cache-pinned-usage"
для показа использования кэша blob.blob_cache_hit_count
, blob_read_count
, blob_read_byte
, blob_read_time
, blob_checksum_time
и blob_decompress_time
.BLOB_DB_CACHE_MISS
, BLOB_DB_CACHE_HIT
, BLOB_DB_CACHE_ADD
, BLOB_DB_CACHE_ADD_FAILURES
, BLOB_DB_CACHE_BYTES_READ
и BLOB_DB_CACHE_BYTES_WRITE
.DB::Open()
, DB::OpenAsSecondary()
будут неудачными, если не удается создать Logger
(#9984).DB::Write
не удерживает глобальный mutex_
если этот экземпляр базы данных не требует переключения WAL и mem-table (#7516).wait=false
.avoid_flush_during_recovery == true
, удаляя действительные WAL, что приводило к ошибке Status::Corruption
с сообщением типа "SST файл находится впереди WAL" при попытках повторного открытия.FilePrefetchBuffer
, если данные потребляются из двух заполненных буферов и запрос на больше данных отправляется.CompactionFilter
. Compaction filter
использовал Delete
для удаления ключей, даже если ключи должны были быть удалены с помощью SingleDelete
. Смешивание Delete
и SingleDelete
может привести к неопределенному поведению.WritableDatabase::WriteDirect
и WritableDatabase::WriteDirectWithChecksum
. Определенный приоритет RateLimiter
, указанный в ReadOptions
, не передавался RateLimiter
при запросе токена.MultiGet()
.### Новые возможностиverify_sst_unique_id_in_manifest
для включения/выключения проверки. Если включено, все файлы SST будут открываться при открытии базы данных для проверки уникального ID (по умолчанию false). Рекомендуется использовать его с max_open_files = -1
для предварительного открытия файлов.LRUCacheOptions::strict_capacity_limit
= true), создание будет неудачным с Status::MemoryLimit()
. Чтобы активировать эту функцию, необходимо включить зарядку CacheEntryRole::kFileMetadata
в BlockBasedTableOptions::cache_usage_options
.SingleDelete
для отметки ключа как удаленного.BlockBasedTableOptions::cache_usage_options
и используется для замены BlockBasedTableOptions::reserve_table_builder_memory
и BlockBasedTableOptions::reserve_table_reader_memory
.GetUniqueIdFromTableProperties
для возврата уникального идентификатора размером 128 бит, который теперь является стандартным размером. Старая функциональность (192 бит) доступна через GetExtendedUniqueIdFromTableProperties
. Обе функции больше не являются экспериментальными и готовы к использованию в производстве.prio
как устаревший для будущего удаления.file_system.h
помечен IOPriority
как устаревший для будущего удаления.CompressionOptions::use_zstd_dict_trainer
, чтобы указать, следует ли использовать zstd словарь тренер для генерации словарей сжатия zstd. По умолчанию это значение равно true для обратной совместимости. Когда этот параметр установлен в значение false, используется zstd API ZDICT_finalizeDictionary
для генерации словарей сжатия.--try_load_options
по умолчанию установлено значение true, если указан --db
и не создается новая база данных. Пользователь все еще может явно отключить это с помощью --try_load_options=false
(или явно включить это с помощью --try_load_options
).rocksdb.read.block.compaction.micros
не может отслеживать статистику компактирования (#9722).file_type
, relative_filename
и directory
, возвращаемые GetLiveFilesMetaData()
, которые были добавлены в наследование от FileStorageInfo
.track_and_verify_wals_in_manifest
приводит к корректному отображению ошибки "open error: Corruption: Missing WAL with log number". Коррупция является ложным сигналом, но препятствует открытию базы данных (#9766).db_bench
при --seed=0
или если --seed
не установлен, используется текущее время как значение семени. Ранее использовалось значение 1000.db_bench
при --benchmark
, который перечисляет несколько тестов и каждый тест использует семя для ГНЧ, семена между тестами больше не повторяются.BlockBasedTableOptions::reserve_table_reader_memory = true
.ASYNC_READ_BYTES
, который вычисляет количество прочитанных байтов во время асинхронного чтения и пользователи могут проверить, используют ли они асинхронный код пути, автоматически запрошенный RocksDB для последовательного чтения.ReadOptions.readahead_size
установлен вместе с ReadOptions.async_io
в FilePrefetchBuffer
.rocksdb.live-blob-file-garbage-size
, которое раскрывает общую сумму мусора в файлах blob в текущей версии.initial_auto_readahead_size
, который теперь можно настроить через BlockBasedTableOptions
.include/rocksdb/utilities/agg_merge.h
для реального использования. Эта функция экспериментальная и формат может измениться, и мы не предоставим инструмент миграции.std::unordered_map
с folly::F14FastMap
при сборке RocksDB вместе с Folly.CompressedSecondaryCache
, конкретная реализация rocksdb::SecondaryCache
, которая интегрируется с библиотеками сжатия (например, LZ4) для хранения сжатых блоков.commit-time-write-batch
для write-prepared/write-unprepared
транзакций, если TransactionOptions::use_only_the_last_commit_time_batch_for_recovery
установлено в значение false
, чтобы предотвратить наличие двух (или более) незакоммиченных версий одного и того же ключа в базе данных. В противном случае нижнестоящее компактирование может нарушить внутреннюю инвариантность ключей SST, если последовательные номера обоих внутренних ключей обнулены (#9794).DB::GetUpdatesSince()
возвращать NotSupported
рано для write-prepared/write-unprepared
транзакций, так как контракт API указывает.GetMapProperty()
с свойством kBlockCacheEntryStats
теперь могут использовать функции в BlockCacheEntryStatsMapKeys
для поиска статистики в карте.is_in_sec_cache
к SecondaryCache::Lookup()
. Это для указания, следует ли считать, что обработчик может быть удален из вторичного кэша после Lookup
.WriteBatchWithIndex
для индексации WriteBatch
, который включает ключи с пользовательскими временными метками. Сам индекс временным метками не имеет.write-committed
без изменения API. API уровня TransactionDB
не позволяют использовать временные метки, так как все операции, осознающие временные метки пользователя, должны проходить через API уровня Transaction
.BlobDB
в ldb
.BlockBasedTableOptions::detect_filter_construct_corruption
теперь может динамически конфигурироваться с помощью DB::SetOptions
.UpdateManifestForFilesState
или ldb update_manifest --update_temperatures
).ReadOptions
, используемого FilePrefetchBuffer
для асинхронной предварительной загрузки части данных, если чтение последовательное и автоматическая предварительная загрузка включена внутренне в RocksDB.### Исправления ошибокversions_
между DBImpl::ResumeImpl()
и потоками, ожидающими завершения восстановления (#9496).options.compression
даже если options.compression_per_level
установлен.DisableManualCompaction
. Также закрытие базы данных может отменить поток ручного сброса.alive_log_files_
в режиме без двух очередей записи. Раскол происходит между write_thread_ в WriteToWAL() и другим потоком, выполняющим FindObsoleteFiles()
. Раскол будет зафиксирован, если __glibcxx_requires_nonempty
активирован.Iterator::Refresh()
читает устаревшие ключи после выполнения DeleteRange().FilterPolicy::CompatibilityName()
, которое требуется для исправления серьёзной производительной проблемы, связанной с названием FilterPolicy в метаданных SST без затрагивания пользовательской настройки FilterPolicy. Это изменение затрагивает только тех, кто использует свои собственные пользовательские или обёртки классы FilterPolicy.options.compression_per_level
теперь может динамически изменяться с помощью SetOptions()
.WriteOptions::rate_limiter_priority
. Когда значение отличается от Env::IO_TOTAL
, внутренний ограничитель скорости (DBOptions::rate_limiter
) будет заряжаться по указанному приоритету для записей, связанных с API, которому предоставлены WriteOptions
. В настоящее время поддерживается автоматический сброс WAL, который происходит во время живых обновлений (Put()
, Write()
, Delete()
, и т.д.), когда WriteOptions::disableWAL == false
и DBOptions::manual_wal_flush == false
.DB::OpenAndTrimHistory
. Этот API открывает базу данных и обрезает данные до временной метки, указываемой trim_ts (Данные с временной меткой больше указанного значения будут удалены). Этот API следует использовать только при восстановлении колонок с включенными временнymi метками. Если колонка не имеет включённых временных меток, этот API не удалит никаких данных. Этот API не совместим с опцией avoid_flush_during_recovery
.BlockBasedTableOptions.hash_index_allow_collision
, которое уже не оказывало эффекта.DB::GetMergeOperands()
.std::vector
вместо std::map
для хранения объектов метаданных для файлов blob, что может повысить производительность для некоторых рабочих нагрузок, особенно когда количество файлов blob велико.DisableManualCompaction()
) не требует ожидания выполнения запланированного ручного сброса в пуле потоков для его отмены.ReadOptions::rate_limiter_priority
. Когда установлено значение отличное от Env::IO_TOTAL
, внутренний ограничитель скорости (DBOptions::rate_limiter
) будет взиматься за приоритет, указанный для чтения файлов, связанных с данным API.backupable_db.h
и тип алиаса BackupableDBOptions
. Используйте backup_engine.h
и BackupEngineOptions
. Аналогичные переименования присутствуют в C и Java API.utility_db.h
и метод UtilityDB::OpenTtlDB
. Используйте db_ttl.h
и DBWithTTL::Open
.DB::AddFile
из основного репозитория.ObjectLibrary::Register()
и устаревший публичный API Regex
. Используйте ObjectLibrary::AddFactory()
с PatternEntry
вместо этого.DBOption::table_cache_remove_scan_count_limit
.AdvancedColumnFamilyOptions::soft_rate_limit
.AdvancedColumnFamilyOptions::hard_rate_limit
.DBOption::base_background_compactions
.DBOptions::purge_redundant_kvs_while_flush
.DB::CompactRange
.DBOptions::skip_log_error_on_recovery
.ReadOptions::iter_start_seqnum
, которое было помечено как устаревшее.DBOptions::preserved_deletes
и метод DB::SetPreserveDeletesSequenceNumber()
.AdvancedColumnFamilyOptions::rate_limit_delay_max_milliseconds
.WriteOptions
. Соответственно, добавлены новые аргументы 'timestamp'
в методы Put
, Delete
, SingleDelete
и т.д. в API DB
. Также добавлены новые аргументы 'timestamp'
в методы WriteBatch
. Удалён метод WriteBatch::AssignTimestamps(vector<Slice>)
. Переименован метод WriteBatch::AssignTimestamp()
в WriteBatch::UpdateTimestamps()
с уточнёнными комментариями.Cache::CreateCallback
с void*
на const void*
.use_block_based_builder=true
).FilterPolicy::CreateFilter()
и FilterPolicy::KeyMayMatch()
.rocksdb_filterpolicy_create()
из C API, так как единственная поддержка пользовательских фильтров через этот API стала устаревшей.reserve_table_builder_memory=true
."filter_policy=experimental_ribbon"
. Используйте что-то вроде "filter_policy=ribbonfilter:10"
вместо этого."filter_policy=bloomfilter:10"
без логического значения, чтобы минимизировать признание устаревших блочных фильтров.FilterPolicy
можно настраивать. Конфигурация filter_policy
точно сохраняется в OPTIONS файле и может быть загружена с помощью LoadOptionsFromFile
. (Загрузка OPTIONS файла, созданного более ранней версией, позволяет только считывать существующие фильтры, но не создаёт новые.)nullptr
возвращаемое из GetBuilderWithContext()
с "использовать блочный фильтр" на "не генерировать фильтр".bits_per_key < 0.5
, мы теперь округляем это до "нет фильтра", поскольку ожидается, что фильтр с ≥ 80% FP-темпами маловероятно будет стоить затраты процессора на его доступ (особенно при cache_index_and_filter_blocks=1
или partition_filters=1
).bits_per_key >= 0.5
и < 1.0
всё ещё округляются до 1.0
(для 62% FP темпов).FilterBitsBuilder
и FilterBitsReader
из публичного API, чтобы они могли эволюционировать как детали реализации. Пользовательский FilterPolicy
всё ещё может решать, какой вид встроенного фильтра использовать в зависимости от условий.FilterPolicy::GetFilterBitsBuilder()
NewExperimentalRibbonFilterPolicy()
Name()
из FileSystemWrapper
.SizeApproximationOptions.include_memtabtles
в SizeApproximationOptions.include_memtables
.DBOptions::max_mem_compaction_level
.Status::InvalidArgument
из ObjectRegistry::NewObject
, если существует фабрика, но объект не может быть создан (возвращает NotFound
, если фабрики нет).DB::GetApproximateSizes
.DBOptions::new_table_reader_for_compaction_inputs
.Transaction::SetReadTimestampForValidation()
и Transaction::SetCommitTimestamp()
. Дефолтная реализация возвращает NotSupported()
.ObjectLibrary::PatternEntry
.CompactionService::Start()
и CompactionService::WaitForComplete()
. Пожалуйста, используйте CompactionService::StartV2()
и CompactionService::WaitForCompleteV2()
, которые предоставляют ту же информацию, плюс дополнительные данные, такие как приоритет, id базы данных и т.д.ColumnFamilyOptions::OldDefaults
и DBOptions::OldDefaults
помечены как устаревшие, так как больше не поддерживаются.OnSubcompactionBegin()
и OnSubcompactionCompleted()
.FileOperationInfo
в API слушателя событий.SizeApproximationFlags
с enum на enum class. Также обновлён сигнатура API DB::GetApproximateSizes
с uint8_t
на SizeApproximationFlags
.NewSequentialFile()
. операции резерва и точки восстановления должны открывать исходные файлы с помощью NewSequentialFile()
, который имеет подсказки температуры. Остальные операции не рассматриваются.### Изменения поведенияDBOptions.use_direct_io_for_flush_and_compaction == true
и DBOptions.writable_file_max_buffer_size == 0
. Это сочетание может привести к бесконечному циклу в WritableFileWriter::Append()
, и это мало имеет смысл при использовании прямого ввода-вывода.ReadOptions.total_order_seek
больше не влияет на DB.Get()
. Исходное мотивационное поведение стало устаревшим с момента, когда RocksDB начал распознавать, совместим ли текущий префикс-экстрактор с тем, который был использован для создания таблиц.BlockBasedTableOptions.detect_filter_construct_corruption
для обнаружения corruption во время построения фильтров Bloom (format_version >= 5) и Ribbon.rocksdb.blob-stats
.rocksdb_create_dir_if_missing
в c.h
, который вызывает API CreateDirIfMissing
системы файлов для создания директории.LAST_LEVEL_READ_*
, NON_LAST_LEVEL_READ_*
.ReadAsync
в FSRandomAccessFile
, которая читает данные асинхронно, и API Poll
в системе файлов, проверяющий завершение запрошенного запроса чтения. ReadAsync
принимает обратный вызов. API Poll
проверяет завершение запросов чтения и вызывает обратные вызовы для указания завершения запросов чтения.Примечание: следующая версия будет значительным выпуском 7.0. Подробнее см. https://github.com/facebook/rocksdb/issues/9390.
TraceFilterType
: kTraceFilterIteratorSeek
, kTraceFilterIteratorSeekForPrev
, и kTraceFilterMultiGet
. Они могут быть установлены в TraceOptions
для фильтрации типов операций, после которых они указаны.TraceOptions.preserve_write_order
. При включенном состоянии гарантирует, что записи будут трассированы в том же порядке, в котором они были записаны в журнал и применены к базе данных. По умолчанию выключено (ложь), чтобы соответствовать старому поведению и предотвратить регрессию.Env
теперь наследует от Customizable
. Реализации должны быть зарегистрированы в ObjectRegistry
и реализовать метод Name()
для создания через этот метод.Options.OldDefaults
помечен как устаревший, так как больше не поддерживается.ObjectLibrary.AddFactory
и ObjectLibrary.PatternEntry
. Этот метод и связанный класс являются предпочитаемым механизмом регистрации фабрик с ObjectLibrary
в будущем. Метод ObjectLibrary.Register
, использующий регулярные выражения и потенциально проблемный, помечен как устаревший и будет удален в будущем выпуске.BlockBasedTableOptions.block_size
с size_t
на uint64_t
.Iterator.Refresh()
вместе с DB.DeleteRange()
, которые несовместимы и всегда рискуют привести к неправильным результатам в обновленном итераторе.AdvancedColumnFamilyOptions.bottommost_temperature
стал динамически изменяемым с помощью SetOptions()
.DB.DestroyColumnFamilyHandle()
теперь возвращает Status.InvalidArgument()
, если вызван с DB.DefaultColumnFamily()
.Options::DisableExtraChecks()
, который может использоваться для повышения пиковой производительности записи путём отключения проверок, которые в отсутствие ошибок программной логики или аппаратных ошибок процессора и памяти должны быть лишними. (По умолчанию параметры настроены таким образом, чтобы медленно переходить к некоторым избыточным затратам времени для дополнительной проверки корректности.)fcntl(F_FULLFSYNC)
на ОС Mac OS X и iOS.-simulate_hybrid_fs_file
(учтите, что это не работает, если db_bench был прерван посередине). Параметр -simulate_hdd
также можно использовать для имитации всех файлов на жестком диске.### Исправления ошибокBlockBasedTableOptions::reserve_table_builder_memory = true
.CompactRange()
с CompactRangeOptions::change_level == true
) при параллельном выполнении другого ручного компактирования. Обратите внимание, что установка force_consistency_checks == true
(по умолчанию) приведёт к тому, что база данных войдет в режим только для чтения в этом случае и вернет Status::Corruption
, вместо того, чтобы подтвердить любую corruption.NUM_FILES_IN_SINGLE_COMPACTION
теперь учитывает все входные файлы, а не только файлы первого уровня входа.TransactionUtil::CheckKeyForConflicts
также выполняет проверку конфликтов на основе пользовательских временных меток, а не только на основе последовательностей.options.ttl
с уровневой компактацией и приоритетом компактации kMinOverlappingRatio
, файлы, превышающие половину значения TTL
, будут иметь более высокий приоритет, чтобы к моменту достижения значения TTL
было меньше лишних операций компактации. В то же время, при компактации файлов со старыми данными, превышающих половину значения TTL
, выходные файлы могут быть отрезаны в соответствии с границами этих файлов, чтобы обеспечить правильную работу ранней компактации TTL
.FileSystem
и RateLimiter
теперь расширяют класс Customizable
и имеют метод CreateFromString
. Реализации должны быть зарегистрированы в ObjectRegistry
и реализовать метод Name()
для создания через этот метод.WriteBufferManager
помечен как final
, так как он не предназначен для расширения.table_properties.h
.FSDirectory::FsyncWithDirOptions()
, который предоставляет дополнительную информацию, такую как причина синхронизации директории в DirFsyncOptions
. Файловые системы, такие как btrfs, используют это для пропуска синхронизации директории при создании нового файла или переименовании файла, а также для синхронизации целевого файла вместо директории, что увеличивает скорость выполнения DB::Open()
примерно на 20%.DB::Open()
больше не будет заблокирован очисткой устаревших файлов, если опция DBOptions::avoid_unnecessary_blocking_io
установлена в значение true
.gettid()
, строки журнала информации ("LOG") теперь выводят системный идентификатор потока из gettid()
вместо локального процессного идентификатора потока pthread_self()
. Для всех пользователей формат идентификатора потока изменён с шестнадцатеричного на десятичное число.pthread_setname_np()
, имена фоновых потоков больше не содержат суффикса ID. Например, "rocksdb:bottom7" (и все остальные потоки в пуле приоритета Env::Priority::BOTTOM
) теперь называются "rocksdb:bottom". Предыдущие большие пулы потоков могли нарушать ограничение размера имени (например, имя "rocksdb:bottom10" было бы недействительно).ReadOptions::iter_start_seqnum
и DBOptions::preserve_deletes
; рекомендуется использовать функциональность пользовательского временного метки вместо них. Эти опции будут удалены в будущих версиях, в настоящее время они генерируют предупреждение при использовании.BlockBasedTableBuilder
для случаев FullFilter
и PartitionedFilter
(#9070).NUM_FILES_IN_SINGLE_COMPACTION
теперь учитывает все входные файлы, а не только файлы первого уровня входа.MultiGet()
для бинарных объектов в одном и том же файле бинарных объектов. Ошибка вызвана тем, что запросы чтения бинарных объектов не были отсортированы по смещениям файлов.DisableManualCompaction()
, чтобы отменять компактацию даже когда она ждет завершения автоматической компактации из-за CompactRangeOptions::exclusive_manual_compactions == true
.Env::ReopenWritableFile()
и FileSystem::ReopenWritableFile()
для указания того, что существующий файл не должен быть удален или обрезан.IngestExternalFiles()
для файлов нескольких колонок семей. Эта ошибка могла привести к задержкам видимости ключей после возврата IngestExternalFiles()
. Кроме того, изменения ключей во время их невидимости могли быть потеряны (не обязательно сразу).WriteBufferManager
, которые создали его с allow_stall == true
. Конфликт приводил к непредсказуемому поведению (по нашему опыту, обычно к аварийному завершению процесса).WriteBufferManager::SetBufferSize()
с new_size == 0
для динамического отключения ограничения памяти.DB::close()
.BackupEngine
, где некоторые внутренние вызовы GenericRateLimiter::Request()
не учитывают условие bytes <= GetSingleBurstBytes()
.### Новые возможностиldb list_live_files_metadata
.DB::GetLiveFilesStorageInfo
, которая предлагает унифицированную версию других функций, таких как GetLiveFiles
, GetLiveFilesChecksumInfo
и GetSortedWalFiles
. Чекпоинты и резервы могут демонстрировать небольшие поведенческие изменения и/или улучшенную производительность, поскольку они теперь используют эту новую API.REMOTE_COMPACT_READ_BYTES
, REMOTE_COMPACT_WRITE_BYTES
.CacheDumper
и CacheDumpedLoader
в файле rocksdb/utilities/cache_dump_load.h
. Обратите внимание, что эта функция подвергается потенциальному изменению в будущем, она пока экспериментальная.blob_garbage_collection_force_threshold
для триггеринга компактации, ориентированной на SST файлы, которые ссылаются на самые старые файлы бинарных объектов, когда отношение мусора в этих файлах бинарных объектов достигает или превышает указанное пороговое значение. Это может снизить пространственную амплитуду при сквозных нагрузках, где затронутые SST файлы могут не получать компактации в противном случае.GetUniqueIdFromTableProperties
. Только SST файлы из RocksDB >= OnClickListener 6.24 поддерживают уникальные идентификаторы."rocksdb.dbstats"
(DB::Properties::kDBStats
). Как свойство карты, оно включает внутренние статистики уровня базы данных, накопленные за всю жизнь базы данных, такие как статистика, связанная с записями пользователей, и время работы.SystemClock
теперь расширяет класс Customizable
и имеет метод CreateFromString
. Реализации должны быть зарегистрированы в ObjectRegistry
и реализовать метод Name()
для создания через этот метод.SliceTransform
теперь расширяет класс Customizable
и имеет метод CreateFromString
. Реализации должны быть зарегистрированы в ObjectRegistry
и реализовать метод Name()
для создания через этот метод. Классы Capped
и Prefixed
возвращают короткое имя (без длины); используйте GetId
для полного квалифицированного имени.FileChecksumGenFactory
, SstPartitionerFactory
, TablePropertiesCollectorFactory
и WalFilter
теперь расширяют класс Customizable
и имеют метод CreateFromString
.SstFileMetaData
устарели для совместимости с новым базовым классом FileStorageInfo
.file_temperature
в IngestExternalFileArg
, чтобы при импорте SST файлов можно было указать температуру этого набора файлов.DB::Close()
завершился ошибкой с состоянием отличным от прерывания, повторный вызов DB::Close()
вернет первоначальное состояние вместо Status::OK
.cache_tier
в advanced_options.h
для описания используемого уровня кэша. Добавлено неизменяемое поле lowest_used_cache_tier
в DBOptions
и передано в BlockBasedTableReader
. По умолчанию это CacheTier::kNonVolatileBlockTier
, что означает использование обоих блочных кэшей (kVolatileTier) и вторичных кэшей (kNonVolatileBlockTier). Установка его в CacheTier::kVolatileTier
сделает базу данных не использующей вторичный кэш.options.max_compaction_bytes
достигнут, выходные файлы компактации будут отрезаться только тогда, когда они совпадают с границами файлов родителей. options.max_compaction_bytes
может слегка нарушаться с этим изменением, но нарушение не превышает размер одного целевого файла SST, который обычно намного меньше.keyMayExist()
теперь поддерживает ByteBuffer
.NullPointerException
для более чем 70К ключей (https://github.com/facebook/rocksdb/issues/8039)./proc/sys/kernel/random/uuid
.DumpStats()
при разрушении столбца семьи из-за отсутствия использования Ref для каждого элемента во время итерации ColumnFamilySet
.LRUCache
при продвижении элемента из SecondaryCache
.BackupEngine
при переконфигурировании RateLimiter
во время параллельных операций восстановления.backup_rate_limiter
и restore_rate_limiter
в BackupEngine
.prepopulate_block_cache = kFlushOnly
, теперь применима только к флешам, а не ко всем сгенерированным файлам.DBOptions.manual_wal_flush(true)
и WriteOptions.sync(true)
вместе. Синхронизация журнала должна работать с заблокированным log_write_mutex_
.BlockBasedTableReader
при наличии невалидной записи завершения.RocksDbIOUringEnable()
, который позволяет пользователям включать/отключать использование IO uring в RocksDB.MultiRead()
приводили к тому, что RandomAccessFileReader::MultiRead()
все еще возвращал полный буфер, даже если результат был короче.db_name
, db_id
, session_id
, что помогает уникально идентифицировать задачи компактирования между экземплярами базы данных и сессиями."rocksdb.verify_checksum.read.bytes"
, отражающий количество прочитанных байтов из файла для запросов VerifyChecksum()
и VerifyFileChecksums()
."rocksdb.backup.read.bytes"
и "rocksdb.backup.write.bytes"
, отражающие количество прочитанных и записанных байтов во время резервного копирования.rocksdb.num-blob-files
, rocksdb.blob-stats
, rocksdb.total-blob-file-size
, и rocksdb.live-blob-file-size
. Существующее свойство rocksdb.estimate_live-data-size
было расширено для включения живых байтов, находящихся в файлах Blob.Env::IO_USER
, Env::IO_MID
. Env::IO_USER
имеет более высокий приоритет над всеми другими RateLimiter IOPriorities без необходимости соблюдения условий справедливого планирования.SstFileWriter
теперь поддерживает Put
s и Delete
s с пользовательски определенными метками времени. Важно отметить, что сама логика загрузки пока не осведомлена о метках времени.OnBlobFileCreationStarted
, OnBlobFileCreated
и OnBlobFileDeleted
в классе EventListener
. Они уведомляют слушателей во время создания/удаления отдельных файлов Blob в интегрированном BlobDB. Также регистрируются события завершения создания и удаления файлов Blob в LOG файле.DB::MultiGet
с помощью MultiRead
.CompactionServiceJobStatus::kUseLocal
для инструкций RocksDB запустить компактирование локально вместо ожидания результата удаленного компактирования.RateLimiter::GetTotalPendingRequest(int64_t* total_pending_requests, const Env::IOPriority pri)
для общего числа ожидающих запросов в RateLimiter.strict_capacity_limit=true
.### Изменения в публичном APISstFileMetaData::size
с size_t
на uint64_t
.FlushJobInfo
и CompactionJobInfo
в listener.h для предоставления информации о файлах Blob, сгенерированных флешем/компактированием и очищенных во время компактирования в интегрированном BlobDB. Добавлены члены структур blob_file_addition_infos
и blob_file_garbage_infos
, содержащие эту информацию.output_file_names
API CompactFiles для включения путей файлов Blob, сгенерированных компактированием в интегрированном BlobDB.IOStatus
вместо Status
. Большинство существующих кодов должны быть совместимы с этим изменением, но некоторые вызовы могут потребовать обновления.level_at_creation
в TablePropertiesCollectorFactory::Context для захвата уровня при создании SST файла (таблицы), для которого собираются свойства.DB::NewDefaultReplayer()
для создания экземпляра Replayer по умолчанию. Добавлен метод TraceReader::Reset()
для повторного запуска чтения файла трассировки. Созданы файлы trace_record.h, trace_record_result.h и utilities/replayer.h для доступа к декодированным записям трассировки, их воспроизведению и запросу реальных результатов операций.SetDBOptions()
не меняет значение ни одного параметра.StringAppendOperator
дополнительно принимает строку в качестве разделителя.list_live_files_metadata
, которая показывает живые SST-файлы, а также уровень LSM-хранения и семейство колонок, к которым они принадлежат.int
на uint64_t
для поддержки ID под-компактации.DeleteFilesInRange()
может вызвать сообщение об ошибке corruption exception или ASSERT для отладочной сборки при активной компактации. На самом деле нет фактической потери данных или повреждения, которое мы нашли.NewRibbonFilterPolicy
вместо NewBloomFilterPolicy
для использования фильтров Ribbon вместо Bloom, или ribbonfilter
вместо bloomfilter
в строке конфигурации.DBWithTTL
с API DeleteRange
так же, как и другие DBs. Метод DeleteRangeCF()
, который выполняет WriteBatchInternal::DeleteRange()
, был добавлен в обработчик в DBWithTTLImpl::Write()
для его реализации.cancel
в CompactRangeOptions
, позволяющее отменить отдельные в процессе ручные диапазонные компактации.rocksdb.cur-size-active-mem-table
, rocksdb.cur-size-all-mem-tables
, и rocksdb.size-all-mem-tables
.GetLiveFiles()
включал несуществующий файл "OPTIONS-000000". Резервы и точки контроля, использующие GetLiveFiles()
, не работали на DB, затронутых этим багом. Читаемо-записываемые DB были затронуты, когда последний OPTIONS файл не смог записаться и fail_if_options_file_error == false
. Только-чтение DB были затронуты, когда не было OPTIONS файлов.io_uring_submit_and_wait()
и io_uring_wait_cqe()
.IngestExternalFile()
, попытка синхронизации заингестированного файла происходит только если файл связан и FileSystem/Env поддерживают перезапуск записи файла.AdvancedColumnFamilyOptions.max_compaction_bytes
недооценен для ручной компактации (CompactRange()
). Ручная компактация делится на несколько компактаций, если размер компактации превышает max_compaction_bytes
. Этот баг создаёт гораздо более крупную компактацию, размер которой превышает настройку пользователя. С другой стороны, больший размер ручной компактации может увеличить параллелизм под-компактации, которую можно настроить, установив max_compaction_bytes
.allow_stall
при создании экземпляра WriteBufferManager
. Когда allow_stall
установлена, WriteBufferManager
будет приостанавливать всех писателей, общих для нескольких баз данных и столбцов, если использование памяти превышает указанное значение WriteBufferManager::buffer_size
(мягкий лимит). Приостановка снимается после освобождения памяти после сброса и снижения использования памяти ниже значения buffer_size
.CompactionFilter
в более широких сценариях создания таблиц, таких как сброс и восстановление. Для совместимости CompactionFilter
по умолчанию применяются во время компактации. Пользователи могут настроить это поведение путём переопределения метода CompactionFilterFactory::ShouldFilterTableFileCreation()
.FilterBuildingContext
с деталями LSM для пользовательских политик фильтров, поведение которых зависит от положения в дереве LSM.DB::Properties::kBlockCacheEntryStats
для запроса статистики по процентному использованию различных типов блоков кэша блока с помощью методов DB::GetProperty
и DB::GetMapProperty
. Та же информация теперь периодически выводится в журнал info согласно значению stats_dump_period_sec
.RocksDB проверяет общее количество прочитанных записей при сбросе и сравнивает его с количеством вставленных записей. Если flush_verify_memtable_count = true
(по умолчанию), сброс завершится ошибкой. В противном случае, сообщение будет отправлено в журнал info.
TableProperties::num_filter_entries
, которое можно использовать вместе с TableProperties::filter_size
для вычисления эффективного количества бит на каждую запись фильтра (уникальный ключ пользователя или префикс) для файла таблицы.BlockPrefetcher
используется итераторами для предварительной загрузки данных, если они ожидают дальнейшего использования этих данных. Этот механизм активируется неявно RocksDB. Изменения были сделаны для учёта последовательных чтений. Это отключает предварительную загрузку для случайных чтений в MultiGet
и итераторах, когда размер предварительной загрузки увеличивается экспоненциально。### Изменения в публичном APICompactionFilterContext
.skip_filters
для SstFileWriter
теперь считается устаревшим. Используйте BlockBasedTableOptions::filter_policy
для управления генерацией фильтров.ClockCache
известен своими ошибками, которые могут привести к аварийному завершению работы или corruption. Его следует избегать до исправления. Используйте NewLRUCache
вместо него.ApplyToAllEntries
к Cache
, чтобы заменить ApplyToAllCacheEntries
. Кастомные реализации Cache
должны добавить свою реализацию этого метода. Поскольку этот метод используется для сбора статистики, пустая реализация может быть допустимой для некоторых приложений.ObjectRegistry
в класс ConfigOptions
. Этот регистр будет использоваться для поиска любых настраиваемых загружаемых объектов во время инициализации.ObjectRegistry
для поддержки вложенных ObjectRegistry
. Добавлены методы для регистрации набора функций с регистром/библиотекой как группы.backupable_db.h
и BackupableDBOptions
в пользу новых версий с подходящими названиями: backup_engine.h
и BackupEngineOptions
. Старое API остаётся совместимым.options.arena_block_size <= 0
(значение по умолчанию 0), всё равно использует writer_buffer_size / 8
, но ограничивает до 1МБ. Слишком большие размеры аллоцирования могут быть неудобны для аллокатора и могут вызвать проблемы производительности в крайних случаях.liburing
. Для make
, если ROCKSDB_USE_IO_URING
не установлен, он рассматривается как включен, что означает, что RocksDB попытается собраться с liburing
. Пользователи могут отключить это с помощью ROCKSDB_USE_IO_URING=0
. Для cmake
, добавьте WITH_LIBURING
для контроля этого, с дефолтом включенным.ColumnFamilyOptions::sample_for_compression
теперь влияет на создание всех блочных таблиц. Ранее это влияло только на блочные таблицы, созданные сбросом.CompactFiles()
больше не может компактировать файлы с нижнего уровня на верхний уровень, что представляет риск повреждения БД (подробнее: #8063). Проверка также добавлена ко всем операциям компактации.DB::OpenForReadOnly()
мог бы записывать в файловую систему. Если вам нужен Logger
с доступом только для чтения к БД, вы должны теперь самостоятельно указать DBOptions::info_log
, например, используя CreateLoggerFromOptions()
.get_iostats_context()
никогда не вернёт nullptr
. Если поддержка поточно-безопасной локальности недоступна, и пользователь не отключил контекст iostats
, то компиляция завершится ошибкой. То же самое относится к контексту производительности.WriteBatchWithIndex::NewIteratorWithBase
при overwrite_key=false
. Ранее эта комбинация была не поддерживаема и вызывала утверждение или возвращение nullptr
.WriteBatchWithIndex
для операций слияния. Теперь больше операций могут быть сохранены для правильного объединенного результата.strerror_r()
для получения сообщений об ошибках.Env
имеет отключенный высокоприоритетный пул потоков (Env::GetBackgroundThreads(Env::Priority::HIGH) == 0
).BackupEngine
и добавлены комментарии документации для ясности того, что безопасно для множества объектов BackupEngine
, обращающихся к одному каталогу резервного копирования.DBOptions::max_open_files
быть установленным с положительным целым числом при ColumnFamilyOptions::compaction_style = kCompactionStyleFIFO
.yield
вместо wfe
для расслабления CPU для лучшей производительности.TableProperties::slow_compression_estimated_data_size
и TableProperties::fast_compression_estimated_data_size
. Когда ColumnFamilyOptions::sample_for_compression > 0
, они оценивают, какой был бы размер TableProperties::data_size
, если бы было использовано "быстрое" или "медленное" (см. описание API ColumnFamilyOptions::sample_for_compression
) сжатие.DB::StartIOTrace
и удалён объект Env
из аргументов, поскольку он избыточен и DB
уже передаёт объект Env
в IOTracer::StartIOTrace
.FlushReason::kWalFull
и FlushReason::kWriteBufferManager
. Первое отображается при сбросе мемтаблицы из-за достижения размера WAL, второе — при сбросе, вызванном менеджером буферов записи.checksum_dump ldb
и API DB::GetLiveFilesChecksumInfo
для Интегрированной БД Blob и получения контрольной суммы файлов Blob вместе со свёрнутыми файлами SST.### Новые возможностиdelayed_write_rate
действительно превышен, с начальным разрешением всплеска в 1 миллисекунду данных. Также, за пределами начального разрешения всплеска, delayed_write_rate
теперь строго контролируется, особенно при работе с несколькими семействами колонок.BackupableDBOptions::share_files_with_checksum
в true
и отмечено использование значения false
как устаревшее из-за потенциального риска потери данных. Обратите внимание, что принятие этого изменения поведения может временно увеличить использование места для резервного копирования из-за того, что файлы не будут совместно использоваться между резервными копиями с использованием двух различных значений. Также удалена устаревшая опция kFlagMatchInterimNaming.BlockBasedTableOptions::max_auto_readahead_size
. RocksDB автоматически выполняет предварительную загрузку для итераторов при обнаружении более чем двух чтений для файла таблицы, если пользователь не предоставляет размер предварительной загрузки. Размер предварительной загрузки начинается с 8КБ и удваивается при каждом последующем чтении до достижения значения max_auto_readahead_size
. Теперь max_auto_readahead_size
можно настроить динамически. Было установлено, что размер предварительной загрузки 256 КБ обеспечивает лучшую производительность на основе экспериментов для автоматической предварительной загрузки. Экспериментальные данные находятся в запросе PR #3282. Если значение установлено в 0, то никакая автоматическая предварительная загрузка не будет выполнена RocksDB. Также изменение значения будет влиять только на файлы, открытые после изменения.DB::VerifyFileChecksums
для проверки контрольных сумм файлов-блобов.Write(GB)
указывает на объем данных, записанных в файлы таблиц, а Wblob(GB)
— на объем данных, записанных в файлы-блобы.BlockBasedTableOptions::format_version
=5 для активации новой реализации фильтра Bloom по умолчанию, совместимое с версиями RocksDB >= 6.6.0.SetBufferSize
API для WriteBufferManager
для динамического управления выделенной памятью для всех буферов записи. Это позволяет пользовательскому коду корректировать мониторинг памяти, предоставленное WriteBufferManager
, когда меняются требования к памяти процесса или наборы данных увеличиваются или уменьшаются.Read()
в API FileSystem
и Env
. Убедитесь, что любые пользовательские реализации соответствуют этим требованиям.EqualWithoutTimestamp()
в Comparator
.SSTFileManager
при создании или удалении файлов-блобов. Файлы-блобы будут планироваться для удаления через SSTFileManager
, и SSTFileManager
теперь будет учитывать файлы-блобы при расчетах размера и ограничений пространства вместе со файлами SST.Append
и PositionedAppend
с передачей контрольной суммы для устаревшей реализации Env
.### Новые возможностиFilterBlobByKey()
в CompactionFilter
. Подклассы могут переопределить этот метод, чтобы фильтры компактации могли определять, следует ли читать фактические значения блобов во время компактации. Используется новый kUndetermined
в CompactionFilter::Decision
для указания необходимости дальнейших действий для фильтров компактации.db_bench --benchmarks
: flush
, waitforcompaction
, compact0
, compact1
.BackupEngine::GetBackupInfo
для включения имени и размера каждого резервированного файла. Особенно полезно это в присутствии совместного использования файлов между резервными копиями, так как это предлагает детализированное представление использования пространства резервного копирования.bg_error
, bg_io_error
, bg_retryable_io_error
, auto_resume_count
, auto_resume_total_retry_number
, и auto_resume_success
; Гистограмма для количества попыток повторного запуска в каждой вызове восстановления. Обратите внимание, что каждая попытка автоматического возобновления имеет одну или несколько попыток повторного запуска.EventHelper
.iterator_upper_bound
и iterator_lower_bound
в функциях трассировки Seek
и SeekForPrev
. Они добавлены как новые поля данных для трассировки итератора.WriteBatch
через внутренний буфер обновления RocksDB (memtable). Это предназначено для обнаружения некоторых случаев повреждения данных в памяти, вызванного как программными, так и аппаратными ошибками. Пользователи могут активировать защиту, создавая свой WriteBatch
с protection_bytes_per_key == 8
.full_history_ts_low
в ручной компактации, предназначенной для сборки мусора старых меток времени.FileSystem
) с кодом, расположенным вне репозитория RocksDB. Смотрите "plugin/README.md" для подробностей для разработчиков, и "PLUGINS.md" для списка доступных плагинов.rocksdb::DB
, в отличие от отдельного интерфейса rocksdb::blob_db::BlobDB
используемого ранней версией, и может быть настроена на уровне семейства столбцов с помощью конфигурационных опций enable_blob_files
, min_blob_size
, blob_file_size
, blob_compression_type
, enable_blob_garbage_collection
, и blob_garbage_collection_age_cutoff
. Она расширяет гарантии согласованности RocksDB для блобов и предлагает больше возможностей и лучшую производительность. Обратите внимание, что некоторые возможности, особенно Merge
, фильтры компактации и резервное копирование/восстановление, еще не поддерживаются, и нет поддержки миграции базы данных, созданной старым исполнением.TransactionDB
возвращает ошибочные Status
ы из вызовов DeleteRange()
и вызовов Write()
, где WriteBatch
содержит операцию удаления диапазона. Ранее такие операции могли успешно завершиться, не предоставляя ожидаемых гарантий транзакций. Есть определенные случаи, когда удаление диапазона все еще может использоваться на таких базах данных; см. документацию API на TransactionDB::DeleteRange()
для подробностей.OptimisticTransactionDB
теперь возвращает ошибочные Status
ы из вызовов DeleteRange()
и вызовов Write()
, где WriteBatch
содержит операцию удаления диапазона. Ранее такие операции могли успешно завершиться, не предоставляя ожидаемых гарантий транзакций.WRITE_PREPARED
, WRITE_UNPREPARED
TransactionDB MultiGet()
, которое могло возвращать неподтвержденные данные с помощью снимка.DB::OpenForReadOnly
, если произошла ошибка при проверке пути файла MANIFEST, она была перекрыта Status::NotFound
. Это было исправлено, и теперь возвращается настоящая ошибка.### Изменение публичного APIonly_mutable_options
в ConfigOptions
. Когда эта опция установлена в "true"
, функции конфигурирования и удобные методы (например, GetDBOptionsFromString
) будут работать только с опциями, помеченными как изменяемые. Когда эта опция установлена в "true"
, только опции, помеченные как изменяемые, могут быть настроены (будет возвращен Status::InvalidArgument
), а опции, помеченные как неизменяемые, не будут возвращены или сравнены. По умолчанию значение этой опции равно "false"
, что означает сравнение всех опций.Append
и PositionedAppend
в FileSystem
для передачи информации о проверке данных (информация о контрольных суммах данных) от верхнего уровня (например, WritableFileWriter
) до уровня хранения. Таким образом, пользовательская реализация FileSystem
сможет в реальном времени проверять правильность данных, записываемых в хранилище. Добавлена опция checksum_handoff_file_types
в DBOptions
. Пользователи могут использовать эту опцию для контроля над типами файлов (текущие поддерживаемые типы файлов: kWALFile
, kTableFile
, kDescriptorFile.
), которые должны использовать новые методы Append
и PositionedAppend
для передачи информации о проверке. В настоящее время RocksDB использует CRC32C для вычисления контрольных сумм для передачи информации о проверке.CompressionOptions::max_dict_buffer_bytes
, чтобы ограничить внутреннее кэширование для выбора образцов для генерации/обучения словаря. Ограничение текущего времени является примерным.WalAddition
и WalDeletion
, исправлена путём изменения закодированного формата этих данных так, чтобы они были игнорируемыми старыми версиями.WriteBufferManager::dummy_entries_in_cache_usage()
, который отображает размер псевдоэлементов, хранящихся в кеше (переданных WriteBufferManager
). Псевдоэлементы используются для учета блоков данных.SystemClock
, содержащий методы, связанные со временем, из Env
. Оригинальные методы в Env
могут быть отключены в будущих выпусках. Этот класс позволит легче тестировать, развивать и расширять функциональность, связанную с временем.GetRocksBuildProperties
и GetRocksBuildInfoAsString
для получения свойств текущего сборки. Эти свойства могут включать настройки, связанные с параметрами GIT (ветка, время). Это изменение также устанавливает "дату сборки" на основе параметров GIT, а не фактического времени сборки, что позволяет создавать более воспроизводимые сборки.merge_operator
теперь немедленно проваливается, заставляя базу данных переходить в режим чтения только. Ранее, провал был отложен до того момента, как merge_operator
стал необходимым для пользователя или фоновой операции.WALRecoveryMode::kPointInTimeRecovery
. Пробелы всё ещё возможны при отрезке WALs точно на границах записей; для полной защиты пользователи должны активировать track_and_verify_wals_in_manifest
.MultiGet
, не вставляются в кеш сжатых блоков при use_direct_reads = true
.ConcurrentTaskLimiter
.read_amp_bytes_per_bit
при парсинге файла OPTIONS
на архитектуре с большим порядком байтов. Без этого исправления, оригинальный код, введённый в PR7659, при выполнении на машине с большим порядком байтов, мог случайно хранить read_amp_bytes_per_bit
(uint32) в маленьком порядке байтов. Будущие обращения к read_amp_bytes_per_bit
будут давать неверные значения. Архитектура с маленьким порядком байтов не затронута.ldb --try_load_options
с опцией --column_family
, ColumnFamilyOptions
для указанного семейства столбцов не загружались из файла OPTIONS
. Исправлено, теперь они загружаются из OPTIONS
и затем заменяются командными строковыми параметрами.CompactRange
и GetApproximateSizes
.kAggregatedTableProperties
и kAggregatedTablePropertiesAtLevel
) с помощью DB::GetMapProperty
, для удобного доступа к данным в структурированном формате.BlockBasedTableOptions::optimize_filters_for_memory
теперь работает с экспериментальным Ribbon фильтром (а также Bloom фильтром).### Изменения в публичном APIFilterBitsBuilder::CalculateNumEntry
, которая была заменена на ApproximateNumEntries
, принимающую параметр типа size_t
и возвращающую значение типа size_t
.Env::GetChildren
и Env::GetChildrenFileAttributes
больше не будут возвращать записи для специальных директорий .
или ..
.track_and_verify_wals_in_manifest
. Если true
, номера логов и их размеры отслеживаются в MANIFEST, а во время восстановления базы данных, если синхронизированный WAL отсутствует на диске, или размер WAL не соответствует записанному размеру в MANIFEST, будет выдана ошибка и восстановление будет прекращено. Обратите внимание, что эта опция не работает с вторичными экземплярами.rocksdb_approximate_sizes
и rocksdb_approximate_sizes_cf
теперь требуют указатель на ошибку (char** errptr
) для передачи любой ошибки.DB::GetApproximateSizes
теперь возвращают статус, чтобы любое неудачное получение размеров было показано вызывающему.format_version >= 3
), индексы разделены (index_type == kTwoLevelIndexSearch
), и некоторые части индексов закреплены в памяти (BlockBasedTableOptions::pin_l0_filter_and_index_blocks_in_cache
). Баг мог привести к обрезанию ключей при чтении из индекса, что приводило бы к неверным результатам чтения или другому непредвиденному поведению.index_type == kTwoLevelIndexSearch
), некоторых частей индексов закреплены в памяти (BlockBasedTableOptions::pin_l0_filter_and_index_blocks_in_cache
), и чтение частей могло смешиваться между кешем блока и прямым чтением из файла (например, при enable_index_compression == 1
и mmap_read == 1
, части, хранившиеся без сжатия из-за плохого отношения сжатия, читаются прямо из файла через mmap, в то время как части, хранившиеся сжатыми, читаются из кеша блока). Баг мог привести к тому, что части индексов считались пустыми при чтении, что приводило бы к неверным результатам чтения.value_type
) (#7121).Status::Corruption
при paranoid_file_checks == true
и записи диапазонных тумблеров в выходные файлы компакции.no_slowdown
и slowdown
(WriteOptions.no_slowdown=true
).ContinueBackgroundWork()
вызывалось в утверждении, которое является бесполезным действием. Это было введено в 6.14.Get()
при применении оператора слияния дважды. Это может произойти, если поток, выполняющий Get()
, работает параллельно с фоновым потоком флеша и другим потоком записи в файл MANIFEST (PR6069).ignore_unknown_options
(используемого в функциях анализа/загрузки опций) снова стали прежними.NotFound
вместо InvalidArgument
для несуществующих опций в текущей версии.MultiGet
, которые не возвращают корректные данные при определении временной метки пользователем.TableBuilder::NeedCompact()
до TableBuilder::Finish()
в задаче компакции. Например, метод NeedCompact()
объекта CompactOnDeletionCollector
, созданного встроенным CompactOnDeletionCollectorFactory
, требует завершения BlockBasedTable::Finish()
для правильного результата. Баг может привести к тому, что сгенерированный файл компакции не будет помечен для будущей компакции на основе соотношения удалений.BlockBasedTableOptions::read_amp_bytes_per_bit
как 64-битного целого числа.BlockBasedTableOptions::pin_l0_filter_and_index_blocks_in_cache
и BlockBasedTableOptions::pin_top_level_index_and_filter
. Эти опции продолжают работать до тех пор, пока пользователи не перейдут на новые API в BlockBasedTableOptions::metadata_cache_options
. Инструкции по миграции можно найти в комментариях к устаревшим опциям.DB::VerifyFileChecksums
для проверки контрольных сумм SST файлов с соответствующими записями в MANIFEST, если они существуют. Текущая реализация требует сканирования и повторного вычисления контрольных сумм файлов.ColumnFamilyOptions::compression_opts
, теперь дополнительно влияют на файлы, сгенерированные флешем и компакцией на уровень выше нижнего. Ранее эти настройки влияли максимум на файлы, сгенерированные компакцией на нижний уровень, в зависимости от того, переопределялись ли они ColumnFamilyOptions::bottommost_compression_opts
. Пользователи, рассчитывавшие на то, что настройки сжатия словаря в ColumnFamilyOptions::compression_opts
влияют только на нижний уровень, могут сохранить это поведение, переместив свои настройки словаря в ColumnFamilyOptions::bottommost_compression_opts
и установив его флаг enabled
.enabled
в ColumnFamilyOptions::bottommost_compression_opts
, эти настройки сжатия теперь применяются независимо от значения в ColumnFamilyOptions::bottommost_compression
. Ранее, эти настройки применялись только тогда, когда ColumnFamilyOptions::bottommost_compression != kDisableCompressionOption
. Теперь они также применяются, когда ColumnFamilyOptions::bottommost_compression == kDisableCompressionOption
(такое значение приводит к тому, что тип сжатия на нижнем уровне падает обратно к ColumnFamilyOptions::compression_per_level
, если он настроен, и в противном случае падает обратно к ColumnFamilyOptions::compression
).### Новые возможностиCompactRange()
с установленной опцией CompactRangeOptions::change_level
, которая приводила к конфликту при шаге изменения уровня, что вызывало последующие вызовы CompactRange()
с этой опцией завершаться с ошибкой Status::NotSupported("another thread is refitting")
.BottommostLevelCompaction.kForce
или kForceOptimized
.CompactRange()
для уровней рефитинга (CompactRangeOptions::change_level == true
) и другого ручного компактирования параллельно.recycle_log_file_num
до нуля при попытке пользователя включить её вместе с WALRecoveryMode::kTolerateCorruptedTailRecords
. Ранее две функции допускались вместе, что компрометировало гарантии восстановления после аварийного сброса, настроенные пользователем.FSRandomAccessFile.Prefetch()
был изменён с OK
на NotSupported
. Если пользовательское наследованное файловое устройство не реализует предварительную загрузку, RocksDB создаёт внутренний буфер предварительной загрузки для улучшения производительности чтения.EventListener
в listener.h содержит новые обратные вызовы: OnFileFlushFinish()
, OnFileSyncFinish()
, OnFileRangeSyncFinish()
, OnFileTruncateFinish()
и OnFileCloseFinish()
.FileOperationInfo
теперь отслеживает duration
, измеренный с помощью std::chrono::steady_clock
и start_ts
, измеренный с помощью std::chrono::system_clock
, вместо начальных и конечных меток времени, измеренных с помощью system_clock
. Учесть, что system_clock
вызывается перед steady_clock
в порядке выполнения операции.DB::GetDbSessionId(std::string& session_id)
. session_id
хранит уникальный идентификатор, который сбрасывается каждый раз при открытии БД. Этот идентификатор сессии БД должен быть уникальным среди всех открытых экземпляров БД на всех хостах и должен быть уникальным среди повторных открытий одной и той же или другой БД. Этот идентификатор записывается в файл LOG на строке, начинающейся со слова "DB Session ID:".DB::OpenForReadOnly()
теперь возвращает Status::NotFound
, если указанная директория БД не существует. Ранее тип ошибки зависел от базового окружения Env
. Это изменение доступно во всех выпусках 6.11.verify_with_checksum
в метод BackupEngine::VerifyBackup
, значение которого по умолчанию равно false
. Если он равен true
, BackupEngine::VerifyBackup
проверяет контрольные суммы и размеры файлов резервной копии. Чтобы сохранить прежнее поведение и производительность BackupEngine::VerifyBackup
, передайте false
для параметра verify_with_checksum
.### Изменения поведенияfile_checksum_gen_factory
установлен на GetFileChecksumGenCrc32cFactory()
, BackupEngine сравнивает контрольные суммы CRC32C таблицы файлов, рассчитанные при создании резервной копии, с ожидаемыми контрольными суммами, хранящимися в манифесте БД, и завершает CreateNewBackup()
при несоответствии (corruption). Если file_checksum_gen_factory
не установлен или установлен на любой другой пользовательский фабрикатор, нет проверки контрольных сумм для выявления corruption SST файлов в БД при чтении, копировании и независимом вычислении контрольных сумм BackupEngine.stats_dump_period_sec > 0
, как первоначальное значение при открытии БД или как динамическое изменение опции, первый вывод статистики откладывается на следующие X секунд, где X — это целое число в диапазоне [0, stats_dump_period_sec). Последующие выводы статистики всё ещё происходят через каждые stats_dump_period_sec
секунды.true
, генерируется хэш всех ключей и значений при записи SST файла, а затем значения читаются обратно для проверки файла. Corruption сигнализируется, если два хэша не совпадают.index_type == kTwoLevelIndexSearch
в PartitionedIndexBuilder для обновления FlushPolicy, чтобы указывать на внутреннего делителя ключей при переходе от режима ключей пользователя к режиму ключей внутренней системы в разделении индекса.db_id
) и идентификатор сессии базы данных (db_session_id
) в свойства таблицы и сохранены в SST файлах. SST файлы, сгенерированные из SstFileWriter и Repairer, имеют идентификатор базы данных «SST Writer» и «DB Repairer», соответственно. Их идентификаторы сессий генерируются тем же способом, что и DB::GetDbSessionId
. Идентификатор сессии для SstFileWriter (соответственно, Repairer) сбрасывается каждый раз при вызове SstFileWriter::Open
(соответственно, Repairer::Run
).BlockBasedTableOptions::optimize_filters_for_memory
для снижения размера выделенной памяти для фильтров Bloom (~10% экономии при использовании Jemalloc), сохранив ту же общую точность. Для применения этого параметра требуется версия формата 5 и malloc_usable_size
. Активация этого параметра совместима как вперед, так и назад с существующими версиями формата 5.BackupableDBOptions::share_files_with_checksum_naming
с новым поведением по умолчанию для имени файлов резервной копии с share_files_with_checksum
, чтобы решить проблемы производительности и целостности резервной копии. Подробности см. в комментариях к API.DB->ResumeImpl()
для попытки восстановления повторяемой ошибки ввода/вывода во время очистки и записи WAL. Компактирование будет пересохранено само собой, если возникает повторяемая ошибка ввода/вывода. Автовосстановление может также вызвать другие повторяемые ошибки ввода/вывода во время восстановления, поэтому восстановление может провалиться. Повтор автовосстановления может решить проблему, поэтому мы используем max_bgerror_resume_count
для определения общего числа циклов автовосстановления. Если это <=0, автовосстановление повторяемых ошибок ввода/вывода отключено. По умолчанию это INT_MAX
, что приведёт к бесконечному автовосстановлению. bgerror_resume_retry_interval
определяет временной интервал между двумя автовосстановлениями.max_subcompactions
можно динамически установить с помощью DB::SetDBOptions()
.ColumnFamilyOptions::sst_partitioner_factory
для определения разделения SST файлов. Это помогает компактированию разделять файлы на интересных границах (префиксы ключей), чтобы сделать распространение SST файлов менее пищеварительно усиленным (перекрывая весь пространственный ключ).shared_checksum
при использовании share_files_with_checksum_naming = kUseDbSessionId
(новое значение по умолчанию), за исключением SST файлов, сгенерированных до этой версии RocksDB, которые используются kLegacyCrc32cAndFileSize
.options.force_consistency_checks = true
.kHashSearch
.column_family_memtables_
должно указывать на действительный объект ColumnFamilySet
.GetApproximateSizes
) при начале диапазона близко к концу одного SST файла и близко к началу следующего. Теперь GetApproximateSizes
постоянно и справедливо включает размер метаданных SST, а также блоки данных, распределяя метаданные пропорционально среди блоков данных на основе их размера.IsDirectory()
и NewRandomAccessFile()
класса PosixEnv
.VerifyChecksum()
при несоответствии контрольных сумм в блоках индексного раздела в файле таблицы на основе блока (индексный тип kTwoLevelIndexSearch
).sst_dump
, если указанный файл не является признанным SST файлом или проверка запроса не проходит.Flush(..., column_family)
теперь может возвращать Status::ColumnFamilyDropped()
вместо Status::InvalidArgument()
, если column_family
был удален во время обработки запроса на флэш.BlobDB
теперь явно запрещает использование хранилищ по умолчанию как хранилища для блобов.DeleteRange
теперь возвращает Status::InvalidArgument
, если конечный ключ диапазона находится перед начальным ключом в соответствии с пользовательским компаратором. Ранее поведение было неопределенным.ldb
теперь использует options.force_consistency_checks = true
по умолчанию и добавляет опцию --disable_consistency_checks
для её отключения.DB::OpenForReadOnly
больше не создаёт файлы или директории, если указанная база данных не существует, за исключением случаев, когда установлен параметр create_if_missing
.force_consistency_checks
равен false
.num_levels = 2
, для предотвращения ошибки коррозии.pin_l0_filter_and_index_blocks_in_cache
больше не применяется к файлам L0 размером более 1.5 * write_buffer_size
для обеспечения более предсказуемого использования памяти. Такие файлы могут существовать из-за внутренней компактации L0, внешнего импорта файлов или динамического изменения write_buffer_size
пользователем (хотя уже закреплённые файлы продолжат оставаться закреплёнными даже после такого динамического изменения).Env::LowerThreadPoolCPUPriority(Priority, CpuPriority)
для возможности понижения приоритета до конкретного уровня, такого как CpuPriority::kIdle
.--readahead_size
для sst_dump
. Пользователи могут указать размер чтения при сканировании данных. sst_dump
также пытается предварительно загружать хвостовые части SST файлов, поэтому обычно некоторые операции ввода-вывода экономятся таким образом.SstFileWriter
, если установлена опция Options.file_checksum_gen_factory
. Контрольная сумма и имя генерирующей функции контрольной суммы сохраняются в ExternalSstFileInfo
после завершения записи SST файла.value_size_soft_limit
в опции чтения, которая ограничивает общую сумму значений ключей, считываемых в группах при выполнении MultiGet. Как только общая сумма значений найденных ключей превышает read_options.value_size_soft_limit
, все остальные ключи будут возвращены со статусом Abort
без дальнейшего поиска их значений. По умолчанию value_size_soft_limit
равно std::numeric_limits<uint64_t>::max()
.IngestExternalFiles(const std::vector<IngestExternalFileArg>& args)
. Добавлены поля files_checksums
и files_checksum_func_names
в IngestExternalFileArg
для возможности импорта SST файлов с их информацией о контрольных суммах. Добавлен параметр verify_file_checksum
в IngestExternalFileOptions
(по умолчанию True
). Для обратной совместимости, если база данных не активирует контрольные суммы или пользователь не предоставляет информацию о контрольных суммах (вектора files_checksums
и files_checksum_func_names
оба пусты), проверка контрольных сумм всегда успешна. Если база данных активирует контрольные суммы, она будет всегда генерировать контрольную сумму для каждого импортированного файла SST на этапе подготовки и сохранять её в манифесте, если verify_file_checksum
равно False
и информация о контрольных суммах предоставляется программой. В этом случае мы только проверяем имя генерирующей функции контрольной суммы и сразу сохраняем импортированную контрольную сумму в манифесте. Если verify_file_checksum
установлено в True
, база данных будет проверять импортированную контрольную сумму и имя генерирующей функции против сгенерированных. Любое несоответствие приведёт к провалу импорта. Обратите внимание, что если IngestExternalFileOptions::write_global_seqno
равно True
, последовательность будет изменена в импортированном файле. Поэтому контрольная сумма файла тоже изменится. В этом случае новая контрольная сумма будет сгенерирована после обновления последовательности и сохранена в манифесте.Исправлено чтение неверного результата из импортированного файла. Может произойти, если ключ в файле является префиксом другого ключа в том же файле. Эта проблема может привести к еще большей коррозии данных. Проблема существует с rocksdb >= OnClickListener 5.0.0 с момента введения метода DB::IngestExternalFile()
.
Завершено реализование BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey
. Теперь он готов к использованию. Значительно снижает увеличение чтения в некоторых конфигурациях, особенно для итерационных поисков.
Исправлено создание файла CURRENT таким образом, чтобы он указывал на правильный файл MANIFEST после попытки восстановления лучших усилий.
Исправлено удаление объектов ColumnFamilyHandle
в случае ошибки при открытии BlobDB
после открытия базовой базы данных.
Исправлено потенциально неопределенное поведение, вызванное попыткой обращения к null-указателю (аргумент timestamp) в методе DB::MultiGet
.
Исправлено чтение неверного результата из-за отсутствия учета пользователя timestamp при создании LookupKey в MultiGet
. Это может привести к неверному результату запроса, поскольку последние байты пользователя ключа, если они не короче timestamp, могут быть приняты за timestamp пользователя.
Исправлено использование неверной функции сравнения при сортировке входных ключей MultiGet
с временными отметками.
Обновлено использование библиотеки bzip (1.0.6 -> 1.0.8) для работы с RocksJava для решения потенциальных уязвимостей, если злоумышленник может манипулировать сжатыми данными, сохраненными и загруженными RocksDB (не нормально). Смотрите задачу #6703.
Добавлен аргумент ConfigOptions
в методы, связанные с конвертацией опций в и из строк и файлов. Этот аргумент заменяет некоторые опции (например, input_strings_escaped
и ignore_unknown_options
) и позволяет передавать больше параметров без изменения сигнатуры функции.
Добавлен метод NewFileChecksumGenCrc32cFactory
в публичный API контрольных сумм, чтобы встроенный генератор контрольных сумм на основе CRC32c мог использоваться приложениями.
Добавлен метод IsDirectory
в классы Env
и FS
для определения, является ли путь каталогом.
Поддержка пайплайнной и параллельной оптимизации сжатия для BlockBasedTableBuilder
. Эта оптимизация делает сбор блоков, сжатие блоков и добавление блоков в файл пайплайном процессом и использует несколько потоков для ускорения сжатия блоков. Пользователи могут установить CompressionOptions::parallel_threads
больше чем 1 для активации параллельного сжатия. Эта функция экспериментальная.
Предоставлен аллокатор для memkind для использования с блоками кэша. Это работает с технологиями памяти (Intel DCPMM — одна из таких технологий, доступных сегодня), требующими различных библиотек для выделения и управления памятью (например, PMDK и memkind). Высокие емкости позволяют использовать большие кэши (до нескольких терабайтов в размере) сверх того, что достижимо с помощью DRAM.
Опция max_background_flushes
может быть динамически установлена через метод DB::SetDBOptions()
.
Добавлена возможность в инструменте sst_dump
для проверки размера сжатого файла для разных уровней сжатия и вывода затраченного времени на сжатие файлов с каждым типом сжатия. Добавлены аргументы --compression_level_from
и --compression_level_to
для отчета о размерах всех уровней сжатия и одного типа сжатия, чтобы отчет содержал размеры сжатия одного типа сжатия с различными уровнями.
Добавлены статистики для избыточных вставок в блочный кэш: rocksdb.block.cache.*add.redundant.
(Существует текущее отсутствие координации для обеспечения того, что только один поток загружает блок таблицы, когда многие потоки пытаются получить доступ к этому блоку таблицы.)
Исправлена ошибка при динамическом изменении параметров options.bottommost_compression
, options.compression_opts
и options.bottommost_compression_opts
: изменённые значения не записываются в файлы с параметрами или не возвращаются обратно пользователям при запросах.
Исправлена ошибка, когда сравнение ключей индекса не учитывалось в PerfContext::user_key_comparison_count
для поисков в файлах, созданных с format_version >= 3
.
Исправлено множество проблем с обновлением статистики bloom.filter в режиме многофайлового MultiGet.
Улучшение производительности батчевого MultiGet с разделёнными фильтрами за счет совместного использования блочного кэша для применимых блоков фильтров.
Уменьшение копий памяти при получении и распаковке сжатых блоков из sst файлов.## Версия 6.9.0 (2020-03-29)
options.ttl
, хотя остальные ключи этого файла еще нет. Это исправление отменяет это поведение и делает TTL-основанную FIFO компакцию использующей время записи файла как критерий. Для корректной работы данного исправления требуется установка max_open_files = -1
и compaction_options_fifo.allow_compaction = false
.COMMITTED
, а старое неправильно написанное COMMITED
остается доступным как псевдоним.BlockBasedTableOptions.format_version
с 2 до 4. SST файлы, созданные с новым значением по умолчанию, могут быть прочитаны версиями RocksDB 5.16 и выше, и используют более эффективное кодирование ключей в блоках индекса.CreateBackupOptions
в методы BackupEngine::CreateNewBackup
и BackupEngine::CreateNewBackupWithMetadata
, позволяющий уменьшить приоритет процессора фоновых потоков BackupEngine
путем установки параметров decrease_background_thread_cpu_priority
и background_thread_cpu_priority
в CreateBackupOptions
.FileChecksumGenFactory
для создания объекта FileChecksumGenerator
для каждого SST файла, таким образом контрольная сумма генератора не будет общим и сможет быть более универсальной для реализации контрольных сумм. Интерфейс FileChecksumGenerator
изменен с Value
, Extend
и GetChecksum
на Update
, Finalize
и GetChecksum
. Метод Finalize
следует вызывать только один раз после завершения всех данных для получения окончательной контрольной суммы. Временные данные должны храниться внутри самого объекта FileChecksumGenerator
.DB::GetCreationTimeOfOldestFile()
с малой вероятностью. Ошибка была введена в выпуске 6.6.optimize_filters_for_hits
было установлено для максимального количества потоков при вызове load_table_handles
после сброса или компакции. Значение должно быть равно 1. Эта ошибка не должна привести к видимым пользователями проблемам.CompactRange
, начиная с уровня 0, если уровень не имеет ни одного файла с ключом, входящим в указанный диапазон, то этот уровень пропускается. Таким образом, вместо всегда начинающегося с уровня 0, компакция начинается с первого уровня, содержащего ключи в указанном диапазоне, и продолжается до последнего такого уровня.Seek
, SeekToFirst
, Next
и границы нижней/верхней. Обратная итерация не поддерживается. Объединение также не рассматривается.best_efforts_recovery
(по умолчанию: false
), чтобы позволить базе данных открываться в директории с отсутствующими таблицами. Во время попытки восстановления усилиями все отсутствующие таблицы игнорируются, и база данных восстанавливается до самой свежей точки без отсутствующих таблиц. Сохранение целостности между столбцами даже при активации журнала событий не гарантируется.options.bottommost_compression
, options.compression_opts
и options.bottommost_compression_opts
теперь динамически изменяемы.kHashSearch
, вместе с Prev()
и SeekForPrev()
.kPointInTimeRecovery
, но вторая не может.DBOptions::skip_checking_sst_file_sizes_on_db_open
, который отключает потенциально дорогостоящую проверку всех размеров sst файлов при открытии базы данных.WriteBatchWithIndex::DeleteRange
возвращает Status::NotSupported
. Ранее он возвращал успех, хотя чтения из партии не учитывали диапазон tombstones. Соответствующие языковые привязки больше не могут быть использованы. В C это включает rocksdb_writebatch_wi_delete_range
, rocksdb_writebatch_wi_delete_range_cf
, rocksdb_writebatch_wi_delete_rangev
, и rocksdb_writebatch_wi_delete_rangev_cf
. В Java это включает WriteBatchWithIndex::deleteRange
.LogAndApply(..., new_descriptor_log=true)
. Эта ошибка может привести к перезаписи MANIFEST во время восстановления, если options.write_dbid_to_manifest = true
и есть файлы журнала событий.options.log_readahead_size
используется как размер чтения вперед. В других случаях используется значение по умолчанию 512 КБ.BLOB_DB_GC_NUM_FILES
(количество blob файлов, сделанных устаревшими во время GC), BLOB_DB_GC_NUM_NEW_FILES
(количество новых blob файлов создано во время GC), BLOB_DB_GC_FAILURES
(количество неудачных проходов GC), BLOB_DB_GC_NUM_KEYS_RELOCATED
(количество blob, перемещенных во время GC), и BLOB_DB_GC_BYTES_RELOCATED
(общий размер blob, перемещенных во время GC). С другой стороны, следующие статистики, которые не относятся к новой реализации GC, теперь устарели: BLOB_DB_GC_NUM_KEYS_OVERWRITTEN
, BLOB_DB_GC_NUM_KEYS_EXPIRED
, BLOB_DB_GC_BYTES_OVERWRITTEN
, BLOB_DB_GC_BYTES_EXPIRED
, и BLOB_DB_GC_MICROS
.kPointInTimeRecovery
и kAbsoluteConsistency
.sst_file_checksum_func
в Options, чтобы пользователи могли использовать свою собственную функцию контрольной суммы SST файла через переопределение класса FileChecksumFunc
. Если пользователь не установил sst_file_checksum_func
, расчет контрольной суммы SST файла не будет активирован. Информация о контрольной сумме включает uint32_t
значение контрольной суммы и название функции контрольной суммы (string
). Информация о контрольной сумме хранится в FileMetadata
в хранилище версий и также регистрируется в MANIFEST. Добавлен новый инструмент в LDB, чтобы пользователи могли выгрузить список информации о контрольных суммах файлов из MANIFEST (хранящихся в unordered_map
).db_bench
теперь поддерживает параметры value_size_distribution_type
, value_size_min
, value_size_max
для генерации случайных значений переменного размера. Добавлен параметр blob_db_compression_type
для BlobDB для включения сжатия blob.rocksdb::FileSystem
в include/rocksdb/file_system.h
для упаковки операций создания, чтения и записи файлов, и параметр DBOptions::file_system
для передачи экземпляра rocksdb::FileSystem
пользователем. Если значение не null, это будет иметь приоритет над DBOptions::env
для операций с файлами. Новый API rocksdb::FileSystem::Default()
возвращает платформенный объект по умолчанию. Параметр DBOptions::env
и API Env::Default()
будут продолжать использоваться для многопоточности и других системных функций, и где DBOptions::file_system
не указан, для операций с файлами. Для разработчиков хранения, привыкших к rocksdb::Env
, интерфейс в rocksdb::FileSystem
является новым и, возможно, претерпит некоторые изменения, поскольку больше систем хранения портятся к нему от rocksdb::Env
. На данный момент, кроме POSIX, ни одна другая система не была портирована на новый интерфейс.rocksdb::NewSstFileManager()
, который позволяет вызывающему передать отдельные объекты Env
и FileSystem
.RocksDB.keyMayExist
на использование Holder<byte[]>
вместо StringBuilder
, чтобы извлеченные значения не требовались декодировать в строки.OptimisticTransactionDBOptions
, который позволяет пользователям настроить политику проверки OCC. По умолчанию политика изменена с kValidateSerial
на kValidateParallel
для снижения конкуренции мьютексов.cfd->log_number_
при смене манифеста и переключении памятной таблицы (PR 6249), когда количество семейств колонок больше одного.Get()
точно совпадающего ключа может пропустить некоторые операнды слияния.kHashSearch
несовместим с значением index_block_restart_interval
большим одного.max_background_jobs
динамически через интерфейс SetDBOptions
.WriteOptions::no_slowdown
.max_open_files != -1
и полного порядка поиска, а также при переключении обратно.enable_garbage_collection
в true
в BlobDBOptions
. Сборка мусора происходит во время компактации: любые действительные блоебы, расположенные в старейших N файлах (где N — это число файлов с ненулевой срокой жизни, умноженное на значение BlobDBOptions::garbage_collection_cutoff
), перемещаются в новые файлы блоебов, а старые файлы блоебов удаляются, если они больше не нужны. Примечание: рекомендуется включить периодическую компактацию для базового DB при использовании этой функции для решения проблемы, когда некоторые старые файлы блоебов остаются активными благодаря SST, которые иначе не выбираются для компактации.db_bench
теперь поддерживает опцию garbage_collection_cutoff
для BlobDB.ReadOptions.auto_prefix_mode
. При установке его в true
, итератор вернет тот же результат, как полный порядковый поиск, но может выбрать использовать префиксный поиск внутренне на основе ключа поиска и верхней границы итератора.MultiGet()
может использовать IO Uring для параллелизации чтения из одного и того же SST файла. Эта функциональность по умолчанию отключена. Она может быть включена с помощью переменной окружения ROCKSDB_USE_IO_URING
.WriteBatchWithIndex::MultiGetFromBatchAndDB
, вызываемая Transaction::MultiGet
, которая приводит к доступу к устаревшим указателям при количестве ключей > 32.SuperVersion
создается только тогда, когда какие-то памятные таблицы действительно были обрезаны. Во-вторых, обрезка запланирована только при наличии хотя бы одной закаченной памятной таблицы, которая остается в памяти для целей проверки конфликтов транзакций.ColumnFamilyHandle
вместо ID семейств колонок при проверке использования дефолтного семейства колонок.superversion
в BackgroundCallPurge
.BackgroundCallPurge()
.## 6.6.0 (2019-11-25)options.periodic_compaction_seconds
. Полная компактация будет запущена, если любой файл превышает порог.GetLiveFilesMetaData
и GetColumnFamilyMetaData
теперь предоставляют номер файла SST файлов, а также самый старый файл блоебов, которому ссылается каждый SST.DB::MultiGet()
), который поддерживает получение ключей из нескольких семейств колонок.format_version 5
(или выше), потому что предыдущие выпуски не могут прочитать этот фильтр. Это замена быстрее и более точна, особенно для высоких битов на ключ или миллионов ключей в одном (полном) фильтре. Например, новый Bloom фильтр имеет ту же скорость ложноположительных ответов при 9.55 битах на ключ, как старый при 10 битах на ключ, и меньшую скорость ложноположительных ответов при 16 битах на ключ, чем старый при 100 битах на ключ.BUILD_WITH_SSE
для ускорения нового Bloom фильтра и XXH3-основанной функции хеширования на совместимых платформах x86_64 (Haswell и выше, ~2014).ttl
или options.periodic_compaction_seconds
с options.max_open_files = -1
. Самый старый предок файла и время создания будут записаны в манифест. Если информация доступна, она будет использоваться вместо времени создания и времени создания файла в свойствах таблицы.ttl
для универсальной компактации теперь имеет то же значение, что и установка periodic_compaction_seconds
.sst_dump
recompress
теперь показывает, сколько блоков было сжато и сколько нет, в частности, сколько не было сжато из-за несоответствия соотношения сжатия (пороговое значение 12.5% для GoodCompressionRatio), как видно в счетчике статистики number.block.not_compressed
начиная с версии 6.0.0.kDontChargeCacheMetadata
в конструктор для восстановления старого поведения.db_bench
теперь поддерживает и по умолчанию использует ненулевые TTL Puts для BlobDB. TTL Puts могут быть включены явно, указав ненулевое значение для параметра командной строки blob_db_max_ttl_range
.sst_dump
теперь поддерживает печать индексов блоебов в читаемом человеком формате. Это можно включить, указав флаг decode_blob_index
в командной строке.creation_time
для выходных файлов компактации теперь устанавливается как минимальное значение времени создания всех входных файлов компактации.options.periodic_compaction_seconds
будет иметь то же значение, что и options.ttl
. Будет выбрано более строгое значение. По умолчанию, если значение options.periodic_compaction_seconds
равно значению по умолчанию, а значение options.ttl
равно нулю, RocksDB установит значение по умолчанию равным 30 дням.GetCreationTimeOfOldestFile(uint64_t* creation_time)
для получения времени создания самого старого файла SST в базе данных.FilterPolicy
теперь предоставляет дополнительные методы API для выбора конфигураций фильтров на основе контекста, такого как уровень таблицы и стиль компактации. См. LevelAndStyleCustomFilterPolicy
в файле db_bloom_filter_test.cc
. Большинство существующих пользовательских реализаций FilterPolicy
продолжат работать так же, как раньше, за исключением тех, которые оборачивают возврат NewBloomFilterPolicy
, которым потребуется переопределение нового метода GetBuilderWithContext()
.GetFilterBitsBuilder()
на политике фильтрации, возвращаемой методом NewBloomFilterPolicy
, вызовет нарушение утверждения в режиме отладки, поскольку RocksDB внутренне перешёл на более сложный интерфейс, который ожидается дальнейшего развития. Пользовательские реализации FilterPolicy
должны продолжать работать так же, кроме тех, которые оборачивают возврат NewBloomFilterPolicy
, которым потребуется новый перехват защищённого метода в FilterPolicy
.NewBloomFilterPolicy
теперь принимает bits_per_key
как число с плавающей точкой вместо целого числа. Это позволяет более тонкое управление соотношением памяти и точности в новой реализации фильтра Блума и не должно менять совместимость исходного кода.BackupableDBOptions::max_valid_backups_to_open
теперь используется только при открытии BackupEngineReadOnly
. При открытии читающего/записывающего BackupEngine
любое другое значение, кроме значения по умолчанию, выводит предупреждение и рассматривается как значение по умолчанию. Эта изменение гарантирует правильный учёт удаления резервных копий, чтобы гарантировать их удаление, когда они больше не используются.snap_refresh_nanos
.DisableManualCompaction
и EnableManualCompaction
для остановки и возобновления ручной компактации.TryCatchUpWithPrimary()
для StackableDB
в режиме, отличном от ЛИТЕ.Env::LoadEnv()
для возврата указателя shared_ptr
на объект Env
.### Изменения по умолчаниюperiodic_compaction_seconds
на UINT64_MAX - 1
, что позволяет RocksDB автоматически настраивать расписание периодической компактации. При использовании значения по умолчанию, периодическая компактация теперь автоматически активируется, если используется фильтр компактации. Значение 0
полностью отключает эту функцию.ttl
на UINT64_MAX - 1
, что позволяет RocksDB автоматически настраивать значение TTL. При использовании значения по умолчанию, TTL автоматически активируется до 30 дней, если эта функция поддерживается. Чтобы восстановить старое поведение, можно явно установить это значение равным нулю.fastrange64()
вместо оператора остатка, и некоторые тесты показывают небольшое улучшение производительности.MultiGet()
при условии, что BlockBasedTableOptions::no_block_cache
установлено в true
и нет сжатого кэша блока.BlockBasedTable::MultiGet()
при включенном сжатии и отсутствии сжатого кэша блока.BackupEngine::PurgeOldBackups
или BackupEngine::DeleteBackup
завершился аварийным завершением программы, отказом питания или ошибкой ввода-вывода, файлы могли остаться от старых резервных копий, которые можно было бы очистить только с помощью вызова GarbageCollect
. Теперь любой вызов PurgeOldBackups
, DeleteBackup
или GarbageCollect
достаточно для очистки таких файлов.BlockBasedTableIterator
при повторном поиске с другим верхним пределом итератора.::SeekForPrev
мог вернуть недействительное значение для существующего префикса. Метод ::SeekForPrev
может быть вызван пользователем, либо внутри ::Prev
, либо внутри ::Seek
, если возвращаемое значение включает операцию Delete
или Merge
.snap_refresh_nanos
в ноль.MultiGet
) при условии, что BlockBasedTableOptions::whole_key_filtering
установлено в false
, путём проверки того, что ключ находится в домене префиксного экстрактора и извлечение префикса перед поиском.DBOptions::max_write_batch_group_size_bytes
для настройки максимального ограничения на количество байтов, записываемых в одиночную группу записей WAL или мемтабл. Она применяется, если размер записи лидера больше одной восьмой этого лимита.VerifyChecksum()
для инициирования предварительного чтения. Разрешено передавать опции ReadOptions
для изменения размера предварительного чтения. Для проверки контрольных сумм перед внешней загрузкой SST-файла добавлена опция IngestExternalFileOptions.verify_checksums_readahead_size
для настройки предварительного чтения.options.force_consistency_check
в RocksDB теперь сообщение об ошибке отправляется обратно пользователю, а процесс не прекращается.memtable_insert_hint_per_batch
в WriteOptions
. Если она установлена в true
, каждый WriteBatch
будет поддерживать свои собственные подсказки вставки для каждого мемтабл в параллельной записи. Подробнее см. файл include/rocksdb/options.h
.max_write_buffer_size_to_maintain
для лучшего управления использованием памяти неизменяемыми мемтаблами.GetCurrentWalFile()
для получения имени и размера последнего действующего файла WAL. Предназначен для использования в качестве помощника для инструментов резервного копирования и восстановления в большем экосистеме, такой как MySQL с движком MyRocks.Options::bloom_locality
теперь влияет только на формат SST PlainTable.LRUCacheOptions.high_pri_pool_ratio
теперь установлена по умолчанию в 0.5 (ранее 0.0), что означает, что средняя вставка теперь включена по умолчанию. То же изменение сделано для значения по умолчанию аргумента high_pri_pool_ratio
в методе NewLRUCache()
. Когда кэш блока не создаётся явно, маленький кэш блока, созданный BlockBasedTable
, всё ещё имеет эту опцию равной 0.0.BlockBasedTableOptions.cache_index_and_filter_blocks_with_high_priority
с false
на true
.### Изменения в публичном APIblock_read_count
.stats_history
в db_bench
, который выводит полную историю статистики.GetAllKeyVersions()
для поддержки нестандартной семьи столбцов.ExportColumnFamily()
и CreateColumnFamilyWithImport()
для поддержки экспорта и импорта семейств столбцов. https://github.com/facebook/rocksdb/issues/3469
ldb
использует строковый объединитель слияния, если слиятельный оператор не указан. Это позволяет пользователям печатать ключи из базы данных с оператором слияния.Registra
на ObjectRegistry
для создания пользовательских объектов из строки, также добавлен метод LoadEnv()
для Env
.GetApproximateSizes
, который получает объект SizeApproximationOptions
и возвращает статус. Старые перегруженные методы перенаправляют вызовы к этому новому методу и больше не генерируют утверждения, если флаги include_flags
не содержат ни одного из INCLUDE_MEMTABLES
или INCLUDE_FILES
. Рекомендовано использовать только этот новый метод, так как он безопаснее по типам и возвращает значимый статус при ошибках.LDBCommandRunner::RunCommand()
теперь возвращает код состояния как целое число, вместо вызова exit()
с этим кодом.--secondary_path
в ldb
для открытия базы данных как вторичной экземпляры. Это позволит сохранить оригинальную базу данных нетронутой.DBOptions::log_readahead_size
, которая указывает количество байтов для предварительной загрузки при чтении журнала. Это полезно для удалённо расположенного журнала, поскольку может снизить число обращений. Если значение равно 0 (по умолчанию), то предварительная загрузка отключается.SizeApproximationOptions
добавлена новая опция для использования с DB::GetApproximateSizes
. При аппроксимации общего размера файлов, используемых для хранения диапазона ключей, допускается аппроксимация с погрешностью до total_files_size * files_size_error_margin
. Это позволяет использовать некоторые упрощения при аппроксимации размеров файлов, что приводит к лучшей производительности, гарантируя при этом, что погрешность будет находиться в разумных пределах.Env
на основе переменной окружения TEST_ENV_URI
. Пользователи должны убедиться, что типы пользовательских объектов правильно зарегистрированы. Например, статическая библиотека должна предоставлять функцию RegisterCustomObjects
. Связывая юнит-тестовый исполняемый файл со статической библиотекой, можно выполнить эту функцию.row_cache
: чтения с более новыми снимками, чем данные в файле SST, используют одинаковый ключ кэша, за исключением некоторых случаев транзакций.fsync'нуты
.TryAgain
вместо Corruption
, если новый конец невидим для TransactionLogIterator
.fill_cache
влияет на блоки индексов.cache_index_and_filter_blocks == false
также влияло на разделы разделённых индексов/фильтров.block_read_count
.fill_cache
влияет на блоки индексов.cache_index_and_filter_blocks == false
также влияло на разделы разделённых индексов.segmentation fault
при неудачном создании файла журнала.## 6.3.0 (2019-06-18)snap_refresh_nanos
(по умолчанию равна 0) для периодического обновления списка снимков в задачах компактирования. Установите её в 0, чтобы отключить функцию.unordered_write
, которая обменивает гарантии снимков на большую пропускную способность записи. При использовании с WRITE_PREPARED транзакциями с two_write_queues=true она предлагает большую пропускную способность без компромиссов по гарантиям.failed_move_fall_back_to_copy
(по умолчанию равна true) для внешней инъекции SST. Когда move_files
равна true и жёсткая ссылка не удается, инъекция переходит к копированию, если failed_move_fall_back_to_copy
равна true. В противном случае, инъекция сообщает об ошибке.list_file_range_deletes
в ldb, который выводит табулы в файлах SST.Put
'ам, покрытым диапазонами табул, снова появляться. Примечание: Put
'ам могут существовать даже если пользователь только вызывал Merge()
из-за внутренней конвертации во время компонирования на нижнем уровне.strict_bytes_per_sync
, которая заставляет поток записи файлов блокироваться, а не превышать ограничение на количество байтов, ожидающих записи, указанное в bytes_per_sync
или wal_bytes_per_sync
.statistics.stats_level_
стала атомарной. Рекомендовано использовать методы statistics.set_stats_level()
и statistics.get_stats_level()
для доступа к ней.PathNotFound
, который указывает на попытку открытия несуществующего файла или директории для чтения."using std::xxx"
из публичных заголовочных файлов.JEMALLOC_CXX_THROW
в старых версиях Jemalloc, что вызывало сбои сборки на некоторых платформах.write_global_seqno=true
.## Версия 6.0.0 (2019-02-19)options.max_open_files != -1
. Это может привести к более длительной инициализации базы данных.cache_index_and_filter_blocks == true
, данные словаря используются для декомпрессии и хранятся в блочном кэше для лучшего управления памятью. Для пользователей ZSTD v1.1.4+ компилируемых с -DZSTD_STATIC_LINKING_ONLY
, это также включает распознанный словарь, который увеличивает скорость декомпрессии.GetStatsHistory
для получения этих снимков.SstFileWriter
, будут использовать сжатие словарями, если это указано в опциях сжатия файла.CompactionFilter::IgnoreSnapshots() = false
, так как это мало полезно и поведение является запутанным. Фильтр будет фильтровать всё, если нет объявленного снимка времени начала компактирования. Однако пользователи могут определить снимок после начала и до завершения компактирования, и этот новый снимок не будет воспроизводимым, поскольку после завершения компактирования некоторые ключи могут быть удалены.CompactionPri = kMinOverlappingRatio
также использует скорректированный размер файла, что позволяет файлам с большим количеством отметок обнуления быть первыми в очереди на компактирование.Transaction::GetForUpdate
расширен параметром do_validate
со значением по умолчанию true
. Если значение false
, он пропускает проверку снимка перед чтением. Аналогично расширены методы ::Merge
, ::Put
, ::Delete
, и ::SingleDelete
параметром assume_tracked
со значением по умолчанию false
. Если значение true
, это указывает на то, что вызов предполагается после ::GetForUpdate
.TableProperties::num_entries
и TableProperties::num_deletions
теперь также учитывают количество диапазонных отметок обнуления.ldb ----try_load_options
, когда указан каталог wal_dir в файле опций, и этот каталог не существует, он игнорируется.FileOperationInfo
.number.block.not_compressed
теперь также считает блоки, которые не были сжаты из-за плохого коэффициента сжатия.CompactionOptionsFIFO
. Этот параметр был устаревшим, и вместо него используется ttl в ColumnFamilyOptions
.NotFound
при запросе конца файла, расширенного диапазонной отметкой обнуления.options.compaction_pri
на kMinOverlappingRatio
## Версия 5.18.0 (2018-11-30)JemallocNodumpAllocator
. Когда используется, блочный кэш будет исключен из дампа ядра.PerfContextByLevel
как часть PerfContext
, который позволяет хранить контекст производительности на каждом уровне. Также заменен __thread
на ключевое слово thread_local
для perf_context
. Добавлен контекст производительности на каждом уровне для bloom-фильтра и запроса Get
.level_compaction_dynamic_level_bytes = true
, множитель уровней может автоматически корректироваться при отстающем компактировании уровня 0 до 1.DBOptions::atomic_flush
. Если установлено значение true
, RocksDB поддерживает атомарное сбросивание нескольких семейств колонок и последующий атомарный сброс в MANIFEST. Полезно при отключённом журнале.num_deletions
и num_merge_operands
в TableProperties
.rocksdb.min-obsolete-sst-number-to-keep
для базы данных, который указывает нижнюю границу номеров SST-файлов, которые должны быть сохранены от удаления, даже если эти SST-файлы устарели.MemoryAllocator
, который позволяет пользователю указывать специальный аллокатор памяти для блочно-ориентированных таблиц.DeleteRange
для предотвращения снижения производительности чтения. Эта функциональность больше не помечена как экспериментальная.DBOptions::use_direct_reads
теперь влияет на чтение, выданное BackupEngine
на SST-файлах базы данных.NO_ITERATORS
разделено на два счетчика NO_ITERATOR_CREATED
и NO_ITERATOR_DELETE
. Оба счетчика теперь только увеличиваются, как и остальные счетчики.WriteOptions::no_slowdown
.CompactRange
.InternalKey
. Это позволяет экономить 8 байтов на каждом ключе индекса. Эта возможность обратно совместима, но не является прямым расширением старых версий. Деактивирована по умолчанию, если используется версия формата ниже 3.memcpy
при чтении mmap-файлов с помощью OpenReadOnly
и max_open_files == -1
.ColumnFamilyOptions::ttl
через SetOptions()
."rocksdb.num.range-deletions"
, которое подсчитывает количество диапазонных удалений в таблице.BlockBasedTableOptions
можно использовать опцию pin_top_level_index_and_filter
(по умолчанию true
) вместе с cache_index_and_filter_blocks
для предварительной загрузки и закрепления верхнего уровня индекса и блоков фильтрации в кеше. Это не влияет на работу, когда cache_index_and_filter_blocks
равно false
.enable_pipelined_write=true
и max_successive_merges > 0
.CompactFiles
.prefix_extractor
был установлен и фильтры разделов были активированы.bytes_max_delete_chunk
на 0
в NewSstFileManager()
поскольку это плохо работает с контрольными точками.enable_pipelined_write=true
. Проблема существует с момента введения прямой записи в версии 5.5.0.BlockBasedTableOption
, которая выравнивает несжатые данные на границе меньшей из размера блока или страницы, чтобы минимизировать чтения через 4К страницы.rocksdb.number.multiget.keys.found
, который подсчитывает количество успешно прочитанных ключей в вызовах MultiGet
.PerfContext
. Добавлены новые счетчики: write_scheduling_flushes_compactions_time
, write_thread_wait_nanos
. Изменены поведение некоторых счетчиков: write_memtable_time
, write_pre_and_post_process_time
, write_delay_time
.Posix Env's NewRandomRWFile()
теперь завершается ошибкой, если файл не существует.DBOptions::use_direct_io_for_flush_and_compaction
применяется только к фоновым записям, а опция DBOptions::use_direct_reads
применяется к обоим пользователям и фоновым чтениям. Это соответствует рекомендациям в руководстве по open(2)
, которое советует против одновременного чтения одного файла в режиме с буферизацией и без него из-за возможного неопределенного поведения и понижения производительности.Iterator::Valid()
всегда возвращает false
, если !status().ok()
. Поэтому после выполнения Seek()
и последующих Next()
, нет необходимости проверять status()
после каждого действия.Iterator::Seek()
, SeekForPrev()
, SeekToFirst()
, SeekToLast()
всегда сбрасывают состояние.TransactionDBOptions::write_policy
может быть настроена для активации двухэтапных транзакций WritePrepared
. Читайте подробнее о них в вики."rocksdb.block-cache-capacity"
, "rocksdb.block-cache-usage"
, "rocksdb.block-cache-pinned-usage"
, показывающие использование кеша блоков.Env::LowerThreadPoolCPUPriority(Priority)
, который снижает приоритет процессора фоновых (особенно компактационных) потоков для минимизации воздействия на основные задачи.Env::SetBackgroundThreads()
, компактация в нижнем уровне будет делегирована этому пулу потоков.prefix_extractor
перемещён из ImmutableCFOptions
в MutableCFOptions
, что позволяет динамически менять его без перезапуска базы данных.ExternalSstFileIngestionJob
.FlushWAL
, когда two_write_queue
не установлен.pin_l0_filter_and_index_blocks_in_cache
с разделёнными фильтрами.WritePrepared
для работы со специальными случаями в MyRocks. Это можно снова активировать, установив TransactionDBOptions::rollback_merge_operands
на true
.ReverseBytewiseComparator::FindShortSuccessor()
.BlockBasedTableConfig.setBlockCache
, позволяющий использовать одинаковый кеш блоков для нескольких экземпляров базы данных.SstFileManager
в Java API для управления SST-файлами между экземплярами базы данных.ignore_unknown_options
в методе RocksDBOptionsParser::Parse()
будет действовать только тогда, когда файл опций указывает, что он был сгенерирован с помощью более ранней версии RocksDB.CompactionEventListener
.SstFileManager
теперь может отменять компактацию, если она приведёт к ошибкам максимального размера. Пользователи SstFileManager
могут использовать SetCompactionBufferSize
, чтобы указать, какой минимальный размер свободного места должен остаться во время компактации для выполнения функций таких как логирование и флешивание.CompactRange()
, если указанный пользователем диапазон не пересекается с незаписанными мемтаблицами.ColumnFamilyOptions::max_subcompactions
установлен больше единицы, мы теперь параллелизуем крупные ручные уровневые компактации."rocksdb.live-sst-files-size"
, которое возвращает общее число байтов всех SST-файлов, принадлежащих текущему LSM-дереву.NewSstFileManager
добавлен аргумент bytes_max_delete_chunk
с значением по умолчанию 64МБ. Если файл больше 64МБ, он будет многократно урезаться до этого размера.prepared_section_completed_
, где нулевые записи не удалялись из карты.Iterator::SeekForPrev
теперь является чисто виртуальным методом. Это предотвращает ошибочное реализование этого метода пользователями, которые внедряют интерфейс Iterator
.include_end
для того чтобы сделать конец диапазона эксклюзивным при условии, что include_end == false
в методе DeleteFilesInRange()
.allow_write_stall
в CompactRangeOptions
, который позволяет начинать выполнение CompactRange
сразу же, даже если это вызывает замедление записей пользователей. По умолчанию значение этого параметра равно false
, что означает добавление задержки до тех пор, пока можно избежать замедления записей.Status::InvalidArgument
; ранее это возвращало Status::IOError
.BlockBasedTableOption
для отключения сжатия индексного блока.Close()
теперь возвращает статус при закрытии базы данных.DeleteFilesInRanges()
, позволяющий удалить файлы из нескольких диапазонов одновременно для повышения производительности.DisableFileDeletions()
последует за GetSortedWalFiles()
, в результате чего возвращаются устаревшие файлы WAL, которые PurgeObsoleteFiles()
намерено удаляет.WriteBuffer()
во время закрытия файла WAL и базы данных.autoTune
и getBytesPerSecond()
в RocksJava RateLimiter.rocksdb.db.flush.micros
для сброса мемтаблиц.--use_txn
для использования транзакционного API в db_stress
.ForwardIterator
.DB::Flush
продолжает ждать после завершения сброса при определённых условиях.make
с переменной окружения USE_SSE
установленной и PORTABLE
не установленной, будет использоваться все доступные локальные характеристики машины. Ранее эта комбинация компилировала только связанные с SSE функции.NUMBER_ITER_SKIP
, который показывает количество внутренних ключей, пропущенных во время итераций (например, из-за того, что они являются надгробиями или повторными версиями ключа).key_lock_wait_count
и key_lock_wait_time
, которые измеряют количество раз, когда транзакции ожидают блокировки ключей, и общее время ожидания.IngestExternalFile()
для баз данных с большим количеством файлов SST.DeleteRange()
.## 5.9.0 (2017-11-01)BackupableDBOptions::max_valid_backups_to_open == 0
теперь означает, что резервные копии не будут открываться при инициализации BackupEngine. Ранее это состояние отключало ограничение на количество открытых резервных копий.DBOptions::preserve_deletes
— новое определение, которое позволяет указывать, что база данных должна сохранять надгробия для обычных удалений, если они имеют номер последовательности больше, чем был установлен новым вызовом API DB::SetPreserveDeletesSequenceNumber(SequenceNumber seqnum)
. Отключено по умолчанию.DB::SetPreserveDeletesSequenceNumber(SequenceNumber seqnum)
был добавлен; пользователи, желающие сохранять удаления, должны периодически вызывать эту функцию для продвижения границы последовательности (все удаления, сделанные перед этой последовательностью, могут быть удалены базой данных). Это обязанность пользователя определить, как продвигать последовательность таким образом, чтобы надгробия были сохранены на желаемый период времени, но в то же время были обработаны своевременно и не занимали слишком много места.ReadOptions::iter_start_seqnum
был добавлен; если он установлен на число больше 0, пользователь увидит два изменения в поведении итераторов: 1) только ключи, записанные с последовательностью большей, чем этот параметр, будут возвращены, и 2) Slice
, возвращаемый iter->key(), теперь указывает на память, содержащую пользовательскую ориентированную представление внутреннего ключа, вместо пользовательского ключа. Был добавлен новый тип FullKey
для представления внутренних ключей, вместе с новой вспомогательной функцией ParseFullKey(const Slice& internal_key, FullKey* result);
.trash_dir
в NewSstFileManager
был устранён; сейчас мы переименуем удаленные файлы в <name>.trash
вместо перемещения их в директорию trash
.write_options.sync = true
и write_options.disableWAL = true
, чтобы предупредить пользователя о несовместимых опциях. Ранее мы игнорировали эти опции и не выполняли запись в WAL.crc32c_3way
на поддерживаемых платформах для улучшения производительности. Система автоматически выбирает использование этого алгоритма на всех поддерживаемых платформах, где это возможно. Если PCLMULQDQ не поддерживается, используется старый алгоритм Fast_CRC32.DBOptions::writable_file_max_buffer_size
может теперь изменяться динамически.DBOptions::bytes_per_sync
, DBOptions::compaction_readahead_size
, и DBOptions::wal_bytes_per_sync
также могут изменяться динамически, DBOptions::wal_bytes_per_sync
будет выполнять сброс всех мемтаблиц и переход к новому файлу WAL.true
параметру auto_tuned
в NewGenericRateLimiter()
. Значение, переданное как rate_bytes_per_sec
, всё ещё будет учитываться как верхний предел.ColumnFamilyOptions::compaction_options_fifo
.EventListener::OnStallConditionsChanged()
. Пользователи могут реализовать его для получения уведомлений о том, когда записи пользователей замедлены, прекращены или возобновлены."rocksdb.estimate-oldest-key-time"
, которое возвращает самую раннюю отметку времени данных. Это свойство доступно только для FIFO компактирования с compaction_options_fifo.allow_compaction = false
.ReadOptions::iterate_lower_bound
.DB:Open()
будет прерван, если найдено несоответствие семейства столбцов при восстановлении в момент времени.DeleteRange()
.Statistics::getHistogramString()
увидят меньше гистограммных ячеек и различные конечные точки ячеек.Slice::compare
и BytewiseComparator Compare
больше не принимают Slice
's, содержащие nullptr
.Transaction::Get
и Transaction::GetForUpdate
с PinnableSlice
.### Новые возможностиIterator::Refresh()
, который позволяет пользователям обновлять состояние итератора, чтобы избежать некоторых затрат на инициализацию при создании новых итераторов.dynamic_cast<>
(кроме юнит-тестов) так, чтобы люди могли выбирать сборку без RTTI. При использовании make
, режим выпуска по умолчанию собирается с -fno-rtti
, а режим отладки без него. Пользователи могут переопределить это, установив USE_RTTI=0
или 1
.Env::SetBackgroundThreads(N, Env::Priority::BOTTOM)
, где N > 0
.MergeOperator::AllowSingleOperand
.DB::VerifyChecksum()
, который проверяет контрольные суммы во всех файлах SST в работающей базе данных.BlockBasedTableOptions::checksum = kNoChecksum
.rocksdb.db.get.micros
, rocksdb.db.write.micros
, и rocksdb.sst.read.micros
.EventListener::OnBackgroundError()
. Пользователи могут реализовать его для получения уведомлений ошибках, приводящих к переходу базы данных в режим чтения только, и, по желанию, переопределить их.DeleteRange()
вместе с подкомпакциями.max_background_flushes=0
больше не поддерживается для планирования сбросов и компакций в одном пуле потоков. Вместо этого пользователи могут достичь этого, настроив высший приоритетный пуле потоков на ноль потоков.Options::max_background_flushes
, Options::max_background_compactions
, и Options::base_background_compactions
на Options::max_background_jobs
, который автоматически решает количество потоков для выделения на сбросы/компакции.options.delayed_write_rate
берётся из значения options.rate_limiter
.IOStatsContext iostats_context
на IOStatsContext* get_iostats_context();
, замена глобальной переменной PerfContext perf_context
на PerfContext* get_perf_context();
.WriteOptions.low_pri
. Если это значение истинно, записи низкого приоритета будут ограничиваться, если компакция отстаёт.DB::IngestExternalFile()
теперь поддерживает импорт файлов в базу данных, содержащую диапазонные удаления.max_open_files
через SetDBOptions().GetAllKeyVersions
для просмотра внутренних версий ключей.allow-ingest-behind
.random_access_max_buffer_size
больше не имеет эффекта.Env::EnableReadAhead()
и Env::ShouldForwardRawRequest()
.stats_dump_period_sec
через SetDBOptions()
.ReadOptions::max_skippable_internal_keys
для установки порога, при котором запрос считается незавершенным из-за пропущенных ключей при использовании итераторов.DB::Get
принимает PinnableSlice
вместо std::string
, что позволяет избежать лишнего копирования значения в std::string
.
PinnableSlice
освобождает закрепленные ресурсы, содержащие значение, при уничтожении или вызове ::Reset()
.std::string
, хотя и не рекомендован, всё ещё поддерживается.Options::use_direct_writes
на Options::use_direct_io_for_flush_and_compaction
. Подробнее см. Wiki по прямому вводу-выводу.CompactionEventListener
и EventListener::OnFlushBegin
.partition_filters
при использовании kFullFilter
. В настоящее время эта возможность также требует включения двухуровневого индексирования. Количество частей равно количеству частей для индексов, контролируется параметром metadata_block_size
.disableDataSync
.timeout_hint_us
из WriteOptions
. Эта опция была устарела и не влияла на работу с версии 3.13.0.min_partial_merge_operands
. Частичные операнды слияния всегда будут объединены в сбросе или компакции, если их больше одного.verify_checksums_in_compaction
. Компакция всегда проверяет контрольные суммы.NewLRUCache()
автоматически определяет количество битов шардов на основе емкости, если пользователь не передаёт это значение. Это также влияет на дефолтный блочный кэш, если пользователь не указывает его явно.Options::use_direct_writes
и Options::use_direct_reads
теперь готовы к использованию.kTwoLevelIndexSearch
как типа индекса и настройку index_per_partition
.GetApproximateSizes
, который позволяет указывать, следует ли рассчитывать статистику мемтаблицы без расчёта приближённых статистик SST файлов.GetApproximateMemTableStats
, который аппроксимирует количество записей и размер мемтаблиц.RangeSync()
должен работать, даже если ROCKSDB_FALLOCATE_PRESENT
не установлен.Get()
.delete_obsolete_files_period_micros
через SetDBOptions()
.EventListener::OnExternalFileIngested
, который вызывается, когда IngestExternalFile()
успешно добавляет файл.BackupEngine::Open
и BackupEngineReadOnly::Open
теперь всегда возвращают статусы ошибок, соответствующие ошибкам в окружении резервного копирования.fsync
после копирования файла.Options::max_bytes_for_level_multiplier
стала вещественным числом со всеми getter и setter.delayed_write_rate
и max_total_wal_size
через SetDBOptions()
.DB::DeleteRange
для оптимизированного удаления больших диапазонов последовательных ключей.delayed_write_rate
через SetDBOptions()
.allow_concurrent_memtable_write
и enable_write_thread_adaptive_yield
стали истинными по умолчанию.Tickers::SEQUENCE_NUMBER
для избежания путаницы, если объект статистики используется несколькими экземплярами RocksDB. В качестве альтернативы можно использовать DB::GetLatestSequenceNumber()
.Options::level0_stop_writes_trigger
изменено с 24 на 32.CompactionFilter::FilterV2()
. Позволяет удалять диапазоны ключей.flashcache
.DB::AddFile()
устарел и заменён методом DB::IngestExternalFile()
. Метод DB::IngestExternalFile()
устраняет все ограничения, существовавшие для DB::AddFile
.### Новые возможностиavoid_flush_during_shutdown
для ускорения завершения работы базы данных за счёт отказа от сброса неперманентных данных (то есть с disableWAL = true
). Неперманентные данные будут потеряны. Опция может быть динамически изменена через SetDBOptions()
.memtable_insert_with_hint_prefix_extractor
для снижения нагрузки на процессор при вставке ключей в мемтаблицу, если ключи можно группировать по префиксу и вставка для каждого префикса является последовательной или почти последовательной. Подробнее см. include/rocksdb/options.h
.LuaCompactionFilter
в utils
. Это позволяет разработчикам писать фильтры компакции на Lua. Для использования этой функциональности необходимо установить LUA_PATH
в корневой каталог Lua."LATEST_BACKUP"
в директории резервного копирования, который ранее содержал номер последней резервной копии. Последняя резервная копия может быть определена поисковым поиском самого большого номера файла в поддиректории "meta/"
.CancelAllBackgroundWork()
теперь очищает все memtables
для баз данных, содержащих записи, пропущенные WAL
(записи, созданные с WriteOptions::disableWAL=true
) перед завершением работы фоновых потоков.source_compaction_factor
, max_grandparent_overlap_bytes
и expanded_compaction_factor
в max_compaction_bytes
.ImmutableCFOptions
.ZSTD
, который может работать с ZSTD
версией 0.8.0 или выше. Временный тип сжатия ZSTDNotFinal
сохранён для обратной совместимости.ClockCache
, основанная на алгоритме CLOCK
с лучшей производительностью при параллельной работе в некоторых случаях. Она может использоваться для замены стандартного LRU-кэша
блоков и таблиц. Для использования её требуется связать RocksDB
с библиотекой TBB
.CreateDBStatistics
не требуют изменения для использования этой функциональности.LRU-кэш
блоков с более высоким приоритетом. Возможность включения данной функции обеспечивается установкой BlockBasedTableOptions::cache_index_and_filter_blocks_with_high_priority
в true
и high_pri_pool_ratio > 0
при создании NewLRUCache
.options.memtable_prefix_bloom_huge_page_tlb_size
переименовано в memtable_huge_page_size
. При его установке RocksDB
попытается выделить память из больших страниц для memtable
, а не только для bloom-фильтра
префиксов.include/rocksdb/utilities/option_change_migration.h
.ReadOptions.background_purge_on_iterator_cleanup
. Если установлено значение true
, мы избегаем удаления файлов при уничтожении итераторов.options.memtable_prefix_bloom_bits
изменено на options.memtable_prefix_bloom_bits_ratio
и отключено options.memtable_prefix_bloom_probes
.CompressionType
и PerfLevel
изменены с char
на unsigned char
. Все значения PerfLevel
смещены на один.options.filter_deletes
.avoid_flush_during_recovery
.read_options.background_purge_on_iterator_cleanup
для избежания удаления файлов в фоновом режиме при уничтожении итераторов. Вместо этого создаётся задача в очереди с высоким приоритетом и выполняется в отдельном фоновом потоке.RepairDB
для семейств колонок. RepairDB
теперь ассоциирует данные с нестандартными семействами колонок, используя информацию, встроенную в SST/WAL
файлы (версия 4.7 или выше). Для данных, записанных до версии 4.6, RepairDB
ассоциирует их с стандартным семейством колонок.options.write_buffer_manager
для контроля общего размера memtable
для нескольких экземпляров БД.bottommost_compression
для установки специального алгоритма сжатия для нижнего уровня (последний уровень, содержащий файлы в БД).CompactionJobInfo::compression
, указывающий алгоритм сжатия, использованный для генерации выходных файлов слияния.BlockBaseTableOptions.hash_index_allow_collision=false
.GetOptions()
).SimCache()
в rocksdb/utilities/sim_cache.h
. Этот метод создаёт кэш блоков, способный давать симуляционные результаты (в основном коэффициент хита) путём моделирования поведения блока с настраиваемым размером кэша.zlib
, zstd
и lz4
. Размер словаря сжатия настраивается через CompressionOptions::max_dict_bytes
.BackupableDB
) и восстановления из резервных копий (RestoreBackupableDB
). Теперь следует использовать BackupEngine
для создания резервных копий и BackupEngineReadOnly
для восстановления. Подробнее см. https://github.com/facebook/rocksdb/wiki/How-to-backup-RocksDB?
DB
: "rocksdb.compression-ratio-at-levelN"
.EventListener::OnTableFileCreationStarted
. EventListener::OnTableFileCreated
будет вызван в случае ошибки. Создание файла можно проверить через TableFileCreationInfo::status
.ReadOptions::readahead_size
. Если он отличен от нуля, NewIterator
создаст новый читатель таблицы, который выполнит чтение указанного размера.### Изменение публичного APIoptions.compaction_measure_io_stats
в report_bg_io_stats
и включено измерение флеш-накопителя.Options.OldDefaults()
для восстановления старых стандартных параметров. DEFAULT_OPTIONS_HISTORY.md будет следить за историей изменений стандартных параметров.BlockBasedTableOptions.format_version
на 2. Это значит, что базы данных, созданные с версии 4.6 или выше, не смогут открываться с RocksDB версии 3.9 или ниже.strict_capacity_limit
для NewLRUCache
. Если флаг установлен в true
, вставка в кэш провалится, если нет достаточно свободного места. Подпись метода Cache::Insert()
также была обновлена.[NUMBER_DB_NEXT, NUMBER_DB_PREV, NUMBER_DB_NEXT_FOUND, NUMBER_DB_PREV_FOUND, ITER_BYTES_READ]
больше не обновляются сразу. Они обновляются при удалении итератора."rocksdb.current-super-version-number"
), который увеличивается при любом изменении дерева LSM.CompactionPri::kMinOverlappingRatio
, режим выбора слияния, дружественный к амплитуде записи.Iterator::IsKeyPinned()
и заменён на Iterator::GetProperty()
с prop_name="rocksdb.iterator.is.key.pinned"
.kEnableCount
и kEnableTime
. Уровень 2 теперь не включает таймеры для мьютексов.Statistics::stats_level_
на kAll
.DBOptions::delete_scheduler
и NewDeleteScheduler()
. Пожалуйста, используйте DBOptions::sst_file_manager
и NewSstFileManager()
вместо них.ldb
теперь поддерживает операции над нестандартными семействами колонок.kPersistedTier
для ReadTier
. Этот параметр позволяет Get
и MultiGet
читать только сохранённые данные и пропускать mem-tables
, если записи были сделаны с disableWAL = true
.DBOptions::sst_file_manager
. Используйте NewSstFileManager()
из include/rocksdb/sst_file_manager.h
для создания SstFileManager
, который может использоваться для отслеживания общей величины SST файлов и управления скоростью удаления SST файлов.CompactionPri
и добавлен новый.soft_rate_limit
и добавлен параметр soft_pending_compaction_bytes_limit
.options.max_write_buffer_number > 3
, записи будут замедлены при записи в последний write-buffer
для задержки полного останова.CompactionJobInfo::compaction_reason
, этот параметр включает причину запуска слияния.delayed_write_rate
до 2МБ/с.--path
для инструмента ldb
. --path
принимает имя либо MANIFEST
, либо SST
, либо WAL
файла. Либо --db
, либо --path
могут быть использованы при вызове ldb
.CompactionFilter
имеет новый метод IgnoreSnapshots
, который позволяет CompactionFilter
вызываться даже если есть снимки позднее ключа.DB::Open
, CreateColumnFamily
, DropColumnFamily
и SetOptions
.LoadLatestOptions()
в rocksdb/utilities/options_util.h
. Этот метод может создать последние DBOptions
/ ColumnFamilyOptions
, используемые указанным экземпляром RocksDB.CheckOptionsCompatibility()
в rocksdb/utilities/options_util.h
. Этот метод проверяет, могут ли входные опции успешно открыть указанный DB
.options.db_write_buffer_size
запускается, только семейство колонок с наибольшим размером будет очищено, а не все семейства колонок.CreateLoggerFromOptions()
, этот метод создаёт Logger
для предоставленных DBOptions
.GetAggregatedIntProperty()
, который возвращает сумму GetIntProperty
всех семейств колонок.MemoryUtil
в rocksdb/utilities/memory.h
. Он предлагает способ получения использования памяти по типу из списка экземпляров RocksDB.CompactionFilter::Context
теперь включает информацию о ID семейства колонок.TablePropertiesCollector::NeedCompact()
, теперь является постоянной и восстанавливаемой после восстановления DB
. Это вводит разрыв в формате. Если вы используете это экспериментальное свойство, включая NewCompactOnDeletionCollectorFactory()
в новой версии, вы можете не иметь возможности понижения DB
до версии 4.0 или ниже.TablePropertiesCollectorFactory::CreateTablePropertiesCollector()
теперь принимает параметр Context
, содержащий информацию о ID семейства колонок для файла, который пишется.DefaultCompactionFilterFactory
.AddFile()
в интерфейсе базы данных, который позволяет пользователям добавлять файлы, созданные с помощью SstFileWriter
, в пустую базу данных, см. include/rocksdb/sst_file_writer.h
и DB::AddFile()
для получения дополнительной информации..ldb
, что позволяет открывать базы данных LevelDB.CompactionFilter
теперь поддерживает фильтрацию операндов слияния и результатов слияния.### Изменения в общественном APISingleDelete()
в интерфейс базы данных.AddFile()
в интерфейс базы данных.SstFileWriter
.CompactionFilter
добавлен новый метод FilterMergeOperand()
, который RocksDB применяет ко всем операндам слияния во время компактации для принятия решения о том, следует ли фильтровать этот операнд.CompactionFilterV2
из include/rocksdb/compaction_filter.h
. Эта функциональность была уже устарела начиная с версии 3.13.include/rocksdb/utilities/transaction.h
.DB::GetProperty()
теперь принимает "rocksdb.aggregated-table-properties"
и "rocksdb.aggregated-table-properties-at-levelN"
, при этом он возвращает агрегированные свойства таблицы целевой колонки или агрегированные свойства таблицы указанного уровня N, если используется версия "at-level".kZSTDNotFinalCompression
для людей, желающих экспериментировать с ZSTD, хотя его формат еще не окончательный.LATEST_BACKUP
в BackupEngine
. Мы всё ещё пишем его при создании новых резервных копий (из-за обратной совместимости), но больше не читаем его.Env::RandomRWFile
и Env::NewRandomRWFile()
.DBOptions.num_subcompactions
в DBOptions.max_subcompactions
для лучшей согласованности названия с фактическими возможностями этого параметра.Equal()
в интерфейс Comparator
, который может быть переопределен в случаях, когда сравнение равенства можно выполнить более эффективно, чем трехстороннее сравнение.OptimisticTransaction
заменён классом Transaction
.RollbackToSavePoint()
в WriteBatch/WriteBatchWithIndex
.NewCompactOnDeletionCollectorFactory()
в utilities/table_properties_collectors
, который позволяет RocksDB помечать SST-файл как требующий компактации, когда он наблюдает не менее D записей удаления среди любых N последовательных записей в этом SST-файле. Обратите внимание, что эта функциональность зависит от экспериментального API NeedCompact()
— результат этого API не будет сохраняться после перезапуска базы данных.DBOptions::delete_scheduler
. Используйте NewDeleteScheduler()
из include/rocksdb/delete_scheduler.h
для создания объекта DeleteScheduler
, который может использоваться несколькими экземплярами RocksDB для контроля скорости удаления файлов SST, существующих в первом пути db_path
.WriteOptions::timeout_hint_us
. Поддержка записи с таймаутом больше не поддерживается. Если вам действительно нужна эта опция, свяжитесь с нами, возможно, мы её восстановим.purge_redundant_kvs_while_flush
.BackupEngine::NewBackupEngine()
и NewReadOnlyBackupEngine()
, которые были устарелыми начиная с RocksDB 3.8. Теперь используйте BackupEngine::Open()
вместо них.Compaction Filter V2
. Мы не знаем ни одного существующего использования этих фильтров. Если вы используете этот фильтр, ваш сборка сломается с RocksDB 3.13. Пожалуйста, сообщите нам, если вы используете его, и мы вернем его в RocksDB 3.14.Env::FileExists
теперь возвращает объект Status
вместо логического значения.statistics::getHistogramString()
для печати детальной распределенной метрики гистограммы.DBOptions::skip_stats_update_on_db_open
. Когда он активирован, метод DB::Open()
работает быстрее, так как пропускает случайные чтения, необходимые для загрузки необходимых статистик из SST-файлов для оптимизации компактации.include/rocksdb/utilities/optimistic_transaction.h
.db_bench
(проверьте --report_file
и --report_interval_seconds
).DBOptions::row_cache
.EventListener
(см. include/rocksdb/listener.h
):
OnCompactionCompleted()
теперь возвращает статистику каждого задания компактации, определенную в include/rocksdb/compaction_job_stats.h
.OnTableFileCreated()
и OnTableFileDeleted()
.enable_trivial_move
в compaction_options_universal
, чтобы позволить простое перемещение при универсальном компактировании. Простое перемещение произойдет только тогда, когда все входные файлы не перекрываются друг с другом.### Изменения в общественном APIWriteEntry
.TablePropertiesCollector::AddUserKey()
для замены TablePropertiesCollector::Add()
. Метод AddUserKey()
предоставляет тип ключа, номер последовательности и размер файла пользователям.DBOptions::bytes_per_sync
использовался для обоих WAL и таблицных файлов. С версии 3.11 он применим только к таблицным файлам. Если вы хотите использовать этот параметр для синхронизации WAL в фоновом режиме, пожалуйста, используйте wal_bytes_per_sync
.GetThreadStatus()
теперь может отображать подробный статус потока, включая:include/rocksdb/thread_status.h
. Кроме того, при запуске db_bench
с параметром --thread_status_per_interval
, db_bench
также будет периодически отображать статус потока.removeScanCountLimit
устаревшим. Поскольку этого, NewLRUCache
больше не принимает три аргумента. Также удален параметр table_cache_remove_scan_limit
.-march=native
). Если вам требуется создание переносимого бинарника, используйте 'PORTABLE=1'
перед командой make
.db_paths
вместе с целевым размером.
Номера уровней с меньшими номерами будут помещены раньше в db_paths
, а номера уровней с большими номерами — позже.BlockBasedTableOptions.format_version
, который позволяет пользователю указывать версию блочной таблицы, которую он хочет использовать. Как общее руководство, новые версии имеют больше возможностей, но могут быть недоступны для старых версий RocksDB.BlockBasedTableOptions.format_version = 2
. Эта версия изменяет способ кодирования информации о размерах в сжатых блоках и должна помочь с распределением памяти, если вы используете сжатие Zlib или BZip2.MemEnv
(окружение, которое хранит данные в памяти) теперь доступен в базовой библиотеке. Его можно создать вызовом NewMemEnv()
.SliceTransform.SameResultWhenAppended()
для помощи пользователям в определении безопасности применения префикса bloom/hash.ReadOnlyBackupEngine
, который случайно удалял поврежденные резервные копии, даже когда окружение было ReadOnly
.options.level_compaction_dynamic_level_bytes
, позволяющий RocksDB автоматически регулировать максимальное количество байтов для каждого уровня. Цель этой функции — иметь нижнюю границу увеличения объема данных. Подробнее см. комментарии в options.h
.WriteBatchBase
для записей в партии.skip_log_error_on_recovery
и table_cache_remove_scan_count_limit
.logger.logv
с параметром уровня логгирования стал виртуальным.MemEnv
теперь доступен в RocksJava через класс RocksMemEnv
.rocksjava
при выполнении make rocksdbjavastatic
.size_t
при установке параметров rocksdb
теперь генерирует IllegalArgumentException
, что устраняет необходимость явной обработки этих исключений разработчиком.rocksdb::GetThreadList()
, который в будущем вернет текущий статус всех
связанных с rocksdb потоков. Мы будем добавлять больше инструментов мониторинга в следующих версиях RocksDB.rocksdb/utilities/convenience.h
для возврата объекта Status
вместо булева значения. Также добавлена поддержка вложенных опций в методе конвертации.LinkFile
в Env
. Если вы реализуете свой собственный класс Env
, вам придется предоставить реализацию метода LinkFile
.MemTableRep
теперь принимает MemTableAllocator
вместо Arena
.RocksDBLite
стала меньше и будет собрана с флагом -fno-exceptions
.BackupEngine::NewBackupEngine()
был устаревшим; пожалуйста, используйте BackupEngine::Open()
отныне.BackupableDB/RollbackBackupableDB
имеют новые методы GarbageCollect()
, которые очистят файлы от поврежденных и устаревших резервных копий.BackupableDB/RollbackBackupableDB
имеют новые методы GetCorruptedBackups()
, которые перечисляют поврежденные резервные копии.-Wshadow
, -Wshorten-64-to-32
, -Wnon-virtual-dtor
).CompactFiles
и EventListener
, хотя они все еще находятся в экспериментальном состоянии.SetOptions()
для изменения части опций динамически онлайн.GetColumnFamilyOptionsFromMap()
, GetColumnFamilyOptionsFromString()
, GetDBOptionsFromMap()
, GetDBOptionsFromString()
.Delete()
и WriteBatchWithIndex
с использованием SliceParts
.options.max_background_compactions
больше существующего низкого приоритетного пула options.env
, то он будет увеличен. Аналогично, если значение options.max_background_flushes
больше существующего высокого приоритетного пула options.env
, то он также будет увеличен.disable_data_sync=true
, мы больше не синхронизируем файл MANIFEST.identity_as_first_hash
для CuckooTable
. SST файл должен быть перестроен для корректного открытия читателем.target_file_size_base
изменен на uint64_t
с int
.allow_thread_local
. Эта функция была доказана стабильной, поэтому она всегда включена.include/utilities/write_batch_with_index.h
, предоставляющий утилиту для запроса данных из WriteBatch
при его построении.BlockBasedTable
, из Options
в BlockBasedTableOptions
. Изменен соответствующий интерфейс JNI. Влияющие опции включают:
no_block_cache
, block_cache
, block_cache_compressed
, block_size
, block_size_deviation
, block_restart_interval
, filter_policy
, whole_key_filtering
. filter_policy
изменен на shared_ptr
с обычного указателя.disable_seek_compaction
и db_stats_log_interval
.SliceTransform::Transform
вместо необработанного ключа RocksDB.CompactRange()
больше не будет выводить скомпактированные файлы на уровень 0. Это было так, когда все входящие файлы компактации были на уровне 0.iterate_upper_bound
для определения до какой степени будет возвращаться записей передний итератор. Это предотвратит прохождение через маркеры удаления и перезаписанные записи в случаях, когда вы хотите прервать итератор. Это может улучшить производительность, если есть большое количество маркеров удаления или перезаписанных записей.DBOptions.db_paths
теперь является вектором структур DBPath
, которая указывает как путь, так и целевой размер.NewPlainTableFactory
теперь принимает PlainTableOptions
, определенные в include/rocksdb/table.h
.include/utilities/*.h
в include/rocksdb/utilities/*.h
.uint32_t
вместо Tickers
. Также сделаны два доступных метода getTickerCount
и histogramData
константными.rocksdb.estimate-num-keys
, оценивающее число живых ключей в базе данных.DB::GetIntProperty()
, который возвращает свойства базы данных, которые являются целыми числами, как uint64_t
.SliceTransform::Transform
вместо необработанного ключа RocksDB.threshold_use_skiplist
в конструкторе NewHashLinkListRepFactory()
.WriteOptions
имеют переменную timeout_hint_us
. Установив timeout_hint_us
в ненулевое значение, любую запись, связанную с этим timeout_hint_us
, можно будет прервать, если она выполняется дольше указанного времени ожидания. Гарантировано, что любая запись, завершившаяся раньше указанного времени ожидания, не будет прервана из-за условия времени ожидания.NewTotalOrderPlainTableFactory
, так как он не используется и реализован некорректно семантически.threshold_use_skiplist
в конструкторе NewHashLinkListRepFactory()
.WriteOptions
имеют переменную timeout_hint_us
. Установив timeout_hint_us
в ненулевое значение, любую запись, связанную с этим timeout_hint_us
, можно будет прервать, если она выполняется дольше указанного времени ожидания. Гарантировано, что любая запись, завершившаяся раньше указанного времени ожидания, не будет прервана из-за условия времени ожидания.NewTotalOrderPlainTableFactory
, так как он не используется и реализован некорректно семантически.Options::disable_seek_compaction
стал устаревшим. Он всё ещё является параметром в Options
, поэтому сборка не ломается, но этот параметр уже не имеет эффекта. Мы планируем полностью удалить его в будущем, поэтому просим пользователей удалить этот параметр из своего кода.NewHashLinkListRepFactory()
для логирования слишком большого количества записей в хэш-корзине при очистке.BlockBasedTableOptions::hash_index_allow_collision
. Когда он активирован, префиксный хэш-индекс для блочной таблицы не будет хранить префиксы и позволит коллизиям хэша, что снижает потребление памяти.encoding_type
в NewPlainTableFactory()
TableFactory
, используемый для перехода от базы данных с PlainTable
к BlockBasedTable
, или наоборот. Он может быть создан с помощью NewAdaptiveTableFactory
Tailing Iterator
с использованием ForwardIterator
+ Cascading Search Hint
, что привело к увеличению пропускной способности примерно на 20%.ColumnFamilyOptions::table_properties_collectors
на ColumnFamilyOptions::table_properties_collector_factories
## 3.3.0 (2014-07-10)threshold_use_skiplist
в конструкторе NewHashLinkListRepFactory()
.WriteOptions
имеют переменную timeout_hint_us
. Установив timeout_hint_us
в ненулевое значение, любую запись, связанную с этим timeout_hint_us
, можно будет прервать, если она выполняется дольше указанного времени ожидания. Гарантировано, что любая запись, завершившаяся раньше указанного времени ожидания, не будет прервана из-за условия времени ожидания.NewTotalOrderPlainTableFactory
, так как он не используется и реализован некорректно семантически.Options::disable_seek_compaction
стал устаревшим. Он всё ещё является параметром в Options
, поэтому сборка не ломается, но этот параметр уже не имеет эффекта. Мы планируем полностью удалить его в будущем, поэтому просим пользователей удалить этот параметр из своего кода.NewHashLinkListRepFactory()
для логирования слишком большого количества записей в хэш-корзине при очистке.BlockBasedTableOptions::hash_index_allow_collision
. Когда он активирован, префиксный хэш-индекс для блочной таблицы не будет хранить префиксы и позволит коллизиям хэша, что снижает потребление памяти.encoding_type
в NewPlainTableFactory()
NewAdaptiveTableFactory()
ColumnFamilyOptions::table_properties_collectors
на ColumnFamilyOptions::table_properties_collector_factories
_LEVEL
ко всем перечислениям типа InfoLogLevel
ReadOptions.prefix
и ReadOptions.prefix_seek
. По умолчанию метод Seek()
теперь использует префиксное поиск, когда предоставляется Options.prefix_extractor
. Подробнее см. https://github.com/facebook/rocksdb/wiki/Prefix-Seek-API-Changes
MemTableRepFactory::CreateMemTableRep()
добавлен параметр информационного логгера.BlockBasedTableOptions
ApplyToAllCacheEntries()
для кэшаarena.h
из публичных заголовочных файлов.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
и allow_mmap_writes=false
.is_manual_compaction
в контекст CompactionFilter
.virtual void WaitForJoin()
в класс Env
. По умолчанию это просто пустая операция.BackupEngine::DeleteBackupsNewerThan()
.--verify_checksums_in_compaction
.Options.prefix_extractor
с указателя на shared_ptr
(владение объектом).
Изменены конструкторы HashSkipListRepFactory
и HashLinkListRepFactory
для того, чтобы они не принимали объект SliceTransform
(неявное использование Options.prefix_extractor
).Env::GetThreadPoolQueueLen()
, который возвращает длину очереди ожидающих потоков пула.checkconsistency
в инструменте ldb
, который проверяет соответствие состояния файловой системы состоянию базы данных (существование файлов и их размеры).BlockBasedTableOptions
.WriteBatch
получил новый метод Count()
, который возвращает общую величину в партии, и метод Data()
теперь возвращает ссылку вместо копии.compaction-pending
, background-errors
и cur-size-active-mem-table
.### Новые возможностиNewPlainTableFactory()
или NewTotalOrderPlainTableFactory()
.NewHashLinkListRepFactory()
.PartialMergeMulti()
, которая позволяет пользователям выполнять частичные объединения против нескольких операндов.CompactionFilterContext
для того же назначения, что и CompactionFilter::Context
в версии 1.StackableDB::GetRawDB()
в StackableDB::GetBaseDB()
.WriteBatch::Data()
в const std::string& Data() const
.TableStats
в TableProperties
.PrefixHashRepFactory
. Пожалуйста, используйте NewHashSkipListRepFactory()
вместо него.EnableFileDeletions()
и DisableFileDeletions()
.DB::GetOptions()
.DB::GetDbIdentity()
.BackupableDB
(https://github.com/facebook/rocksdb/wiki/How-to-backup-RocksDB?).TailingIterator
(https://github.com/facebook/rocksdb/wiki/Tailing-Iterator), который не создаёт снимок (может использоваться для чтения недавно вставленных данных) и оптимизирован для последовательного чтения.Put
с параметрами SliceParts
— вариант Put()
, который собирает выходные данные аналогично writev(2)
.Get()
— [1fdb3f] — увеличение QPS на 1.5 раза для некоторых нагрузок.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )