1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/victory_always-rocksdb

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
HISTORY.md 150 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 05:07 84d19a0

Change Log Rocksdb

Невыпущенные версии

Новые функции

  • Добавлена поддержка конвейерной и параллельной оптимизации сжатия для BlockBasedTableBuilder. Эта оптимизация делает сборку, сжатие и добавление блоков конвейером, а также использует несколько потоков для ускорения сжатия блоков. Пользователи могут установить CompressionOptions::parallel_threads больше 1, чтобы включить параллелизм сжатия.

6.9.0 (29.03.2020)

Изменения в поведении

  • Начиная с RocksDB 6.8, ttl-основанное FIFO уплотнение может удалять файл, самый старый ключ которого становится старше, чем options.ttl, в то время как другие ключи не стали старше. Это исправление отменяет это поведение и заставляет ttl-основанное FIFO уплотнение использовать время очистки файла в качестве критерия. Для корректной работы этого исправления также требуется, чтобы max_open_files = -1 и compaction_options_fifo.allow_compaction = false.

Изменение публичного API

  • Исправлено написание, так что API теперь имеет правильно написанное название состояния транзакции COMMITTED, в то время как старое неправильно написанное COMMITED всё ещё доступно в качестве псевдонима.
  • Обновлён формат по умолчанию в BlockBasedTableOptions с 2 до 4. Файлы SST, созданные с новым форматом по умолчанию, могут быть прочитаны версиями RocksDB 5.16 и новее, и используют более эффективное кодирование ключей в индексных блоках.
  • Новый параметр CreateBackupOptions добавлен в BackupEngine::CreateNewBackup и BackupEngine::CreateNewBackupWithMetadata, вы можете уменьшить приоритет CPU фоновых потоков BackupEngine, установив decrease_background_thread_cpu_priority и background_thread_cpu_priority в CreateBackupOptions.
  • Обновлён публичный API контрольной суммы SST файла. Введён FileChecksumGenFactory для создания FileChecksumGenerator для каждого SST файла, таким образом, FileChecksumGenerator не является общим и может быть более универсальным для реализаций контрольных сумм. Изменён интерфейс FileChecksumGenerator с Value, Extend и GetChecksum на Update, Finalize и GetChecksum. Finalize должен вызываться только один раз после обработки всех данных для генерации окончательной контрольной суммы. Временные данные должны поддерживаться самим объектом FileChecksumGenerator и, наконец, он может возвращать строку контрольной суммы.

Исправлены ошибки

  • Исправлена ошибка, при которой блоки диапазона надгробий в потребляемых файлах кэшировались неправильно во время потребления. Если блоки диапазона надгробий были считаны из этих неправильно кэшированных блоков, ключи, которые они покрывали, были бы раскрыты.
  • Исправлен риск сбоя при вызове DB::GetCreationTimeOfOldestFile() небольшим шансом. Ошибка была введена в выпуске 6.6.
  • Исправлена ошибка, когда логическое значение optimize_filters_for_hits было для максимального количества потоков при вызове загрузки дескрипторов таблицы после очистки или уплотнения. Значение корректно равно 1. Ошибка не должна вызывать видимых проблем у пользователей.
  • Исправлена ошибка, которая могла привести к сбою службы, когда диспетчеру буфера записи не удавалось вставить фиктивный дескриптор в кэш блоков.

Улучшения производительности

  • В CompactRange, для уровней, начиная с 0, если уровень не имеет ни одного файла с ключом, попадающим в указанный диапазон, уровень пропускается. Таким образом, вместо того чтобы всегда уплотнять с уровня 0, уплотнение начинается с первого уровня с ключами в указанном диапазоне до последнего такого уровня.

Новые функции

  • Базовая поддержка пользовательской временной метки в итераторе. Поддерживаются поиск/SeekToFirst/Next и нижняя/верхняя границы. Обратная итерация не поддерживается. Слияние не рассматривается.
  • Когда происходит сбой блокировки файла, когда блокировка удерживается текущим процессом, возвращайте время получения и идентификатор потока в сообщении об ошибке.
  • Добавлен новый параметр best_efforts_recovery (по умолчанию: false), чтобы разрешить базе данных открываться в каталоге db с отсутствующими файлами таблиц. Во время восстановления наилучших усилий отсутствующие файлы таблиц игнорируются, и база данных восстанавливается до самого последнего состояния без отсутствующего файла таблицы. Межколоночная согласованность не гарантируется, даже если включён WAL.
  • options.bottommost_compression, options.compression_opts и options.bottommost_compression_opts теперь динамически изменяемы.

6.8.0 (24.02.2020)

Java API изменения

  • Основные критические изменения в Java-компараторах, направленные на стандартизацию ByteBuffer для производительных и независимых от локали операций. В запросе скорее всего текст технической направленности из области разработки и тестирования программного обеспечения. Основной язык текста запроса — английский.

Перевод на русский язык:

Исправления ошибок

  • Исправлены результаты при использовании блочной таблицы с kHashSearch вместе с Prev()/SeekForPrev().
  • Устранена ошибка, которая не позволяла открыть БД после двух последовательных сбоев с TransactionDB, где первый сбой восстанавливался после повреждённого WAL с помощью kPointInTimeRecovery, а второй — нет.
  • Решена проблема №6316, которая могла привести к повреждению файла MANIFEST в середине процесса записи из-за нехватки места на диске.
  • Добавлена опция DBOptions::skip_checking_sst_file_sizes_on_db_open. Она отключает потенциально дорогостоящую проверку всех размеров файлов SST в DB::Open().
  • BlobDB теперь игнорирует тривиально перемещённые файлы при обновлении сопоставления между файлами BLOB и SST. Это должно устранить проблему №6338, когда уведомления о сбросе/уплотнении вне порядка могли вызвать утверждение с предыдущим кодом.
  • Batched MultiGet() игнорирует ошибки ввода-вывода при чтении блоков данных, что может привести к тому, что он продолжит искать ключ и возвращать устаревшие результаты.
  • WriteBatchWithIndex::DeleteRange возвращает Status::NotSupported. Ранее он возвращал успех, хотя чтения в пакете не учитывали надгробные камни диапазона. Соответствующие языковые привязки теперь нельзя использовать. В 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.
  • Присваивается новый номер файла MANIFEST, когда вызывающий объект пытается создать новый файл MANIFEST с помощью вызова LogAndApply(..., new_descriptor_log=true). Эта ошибка может привести к перезаписи MANIFEST во время восстановления, если options.write_dbid_to_manifest = true и есть файлы WAL.

Улучшения производительности

  • Выполняется упреждающее чтение при чтении из файлов параметров. Внутри БД будет использоваться options.log_readahead_size в качестве размера упреждающего чтения. В других случаях используется значение по умолчанию 512 КБ.

Изменение публичного API

  • Сборщик мусора BlobDB теперь выдаёт статистику 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.
  • Отключить recycle_log_file_num при запросе несогласованных режимов восстановления: kPointInTimeRecovery и kAbsoluteConsistency.

Новые функции

  • Добавлен контрольный код для каждого файла SST, созданного с помощью Flush или Compaction. Добавлен sst_file_checksum_func в Options, чтобы пользователь мог подключить свою собственную функцию контрольной суммы файла SST через переопределение класса FileChecksumFunc. Если пользователь не устанавливает sst_file_checksum_func, расчёт контрольной суммы файла SST не будет включён. Информация о контрольной сумме, включая значение контрольной суммы uint32_t и имя функции контрольной суммы (строка), хранится в 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 «rocksdb» флагом «ROCKSDB_NAMESPACE», который, если он не определён, определяется как «rocksdb» в заголовочном файле rocksdb_namespace.h. rocksdb::FileSystem

Если это не нулевое значение, оно будет иметь приоритет над DBOptions::env для файловых операций. Новый API rocksdb::FileSystem::Default() возвращает объект по умолчанию для платформы. Вариант DBOptions::env и API Env::Default() будут продолжать использоваться для потоков и других функций, связанных с ОС, а также там, где DBOptions::file_system не указан, для файловых операций. Для разработчиков хранилищ, привыкших к rocksdb::Env, интерфейс в rocksdb::FileSystem является новым и, вероятно, претерпит некоторые изменения по мере переноса на него большего количества систем хранения из rocksdb::Env. На данный момент ни один другой env, кроме Posix, не был перенесён на новый интерфейс.

  • Новый API rocksdb::NewSstFileManager(), который позволяет вызывающей стороне передавать отдельные объекты Env и FileSystem.
  • Изменён Java API для функции RocksDB.keyMayExist: теперь используется Holder<byte[]> вместо StringBuilder, так что полученные значения не нужно декодировать в строки.
  • Новый параметр OptimisticTransactionDBOptions, который позволяет пользователям настраивать политику проверки одновременных изменений. По умолчанию политика меняется с kValidateSerial на kValidateParallel, чтобы уменьшить конфликты мьютексов.

Исправления ошибок

  • Исправлена ошибка, которая может привести к планированию ненужного фонового потока (#6104).
  • Исправлен сбой, вызванный одновременными итерациями CF и удалениями (#6147).
  • Устранено состояние гонки для cfd->log_number_ между переключением манифеста и переключением memtable (PR 6249), когда количество семейств столбцов больше 1.
  • Исправлена ошибка при дробном каскадном индексировании, когда несколько файлов на одном уровне содержат один и тот же наименьший пользовательский ключ, и эти пользовательские ключи предназначены для операндов слияния. В этом случае Get() точного ключа может пропустить некоторые операнды слияния.
  • Объявлено, что функция типа индекса kHashSearch несовместима с index_block_restart_interval больше 1.
  • Решена проблема, из-за которой пулы потоков не изменялись при динамической установке max_background_jobs через интерфейс SetDBOptions.
  • Исправлена ошибка, которая могла привести к зависанию потоков записи, когда происходит замедление/остановка и есть смесь авторов с установленным/неустановленным WriteOptions::no_slowdown.
  • Исправлено несоответствие «количества входных записей», которое использовалось для вычисления статистики «отброшенных записей» для уплотнений.
  • Исправлена регрессионная ошибка, приводящая к сбою при использовании хэша, max_open_files != -1 и использовании общего порядка поиска и переключении обратно.

Новые функции

  • Теперь можно включить периодические уплотнения для базовой БД при использовании BlobDB.
  • BlobDB теперь собирает мусор не-TTL-большими двоичными объектами, когда для параметра enable_garbage_collection установлено значение true в BlobDBOptions. Сборка мусора выполняется во время уплотнения: любые допустимые большие двоичные объекты, расположенные в самых старых N файлах (где N — количество больших двоичных объектов без TTL, умноженное на значение BlobDBOptions::garbage_collection_cutoff), обнаруженные во время сжатия, перемещаются в новые файлы больших двоичных объектов, а старые файлы больших двоичных объектов удаляются, как только они больше не нужны. Примечание: мы рекомендуем включать периодические уплотнения для основной базы данных при использовании этой функции, чтобы справиться со случаем, когда некоторые старые файлы больших двоичных объектов сохраняются SST, которые иначе не выбираются для уплотнения.
  • db_bench теперь поддерживает опцию garbage_collection_cutoff для BlobDB.
  • Введён ReadOptions.auto_prefix_mode. Когда установлено значение true, итератор вернёт тот же результат, что и поиск по общему порядку, но может выбрать использование поиска по префиксу внутри себя на основе ключа поиска и верхней границы итератора.
  • MultiGet() может использовать IO Uring для распараллеливания чтения из одного и того же файла SST. Эта функция по умолчанию отключена. Её можно включить с помощью переменной среды ROCKSDB_USE_IO_URING.

Версия 6.6.2 (13.01.2020) Исправление ошибок

  • Исправлена ошибка, из-за которой входные файлы не L0-уплотнения не учитывались для расчёта времени создания новых выходных данных уплотнения.

Версия 6.6.1 (02.01.2020) Исправление ошибок

  • Исправлена ошибка в WriteBatchWithIndex::MultiGetFromBatchAndDB, которая вызывается Transaction::MultiGet, что приводит к устаревшему доступу к указателю, когда количество ключей > 32.
  • Решены две проблемы с производительностью, связанные с обрезкой истории мемтаблицы. Во-первых, новый SuperVersion теперь создаётся только в том случае, если некоторые мемтаблицы действительно были обрезаны. Во-вторых, обрезка выполняется только... 6.6.0 (11/25/2019)

Исправления ошибок

  • Исправлена ошибка, при которой повреждение данных было вызвано тем, что вывод внутриуровневого уплотнения на поглощённом файле не был размещён в правильном порядке на уровне L0.
  • Устранена проблема с состоянием гонки между Version::GetColumnFamilyMetaData() и Compaction::MarkFilesBeingCompacted() для доступа к being_compacted (#6056). Текущее исправление получает мьютекс базы данных во время Version::GetColumnFamilyMetaData(), что может вызвать регрессию.
  • Исправлена ошибка в DBIter, из-за которой состояние is_blob_ не обновлялось при обратном перемещении с помощью поиска.
  • Исправлено некорректное поведение Seek::(префикс), которое могло привести к тому, что функция возвращала NotFound для существующего префикса при использовании format_version=3, разделённых фильтров и поиска по префиксу.
  • Отменена функция «Слияние итератора, чтобы избежать повторного поиска дочернего итератора в некоторых случаях (#5286)», поскольку она могла привести к серьёзным результатам при повторном поиске с другой верхней границей итератора.
  • Исправлен сбой при приёме внешнего файла, когда фоновое уплотнение вызывало серьёзную ошибку (файл не найден).
  • Исправлена ошибка при использовании разделённых фильтров и поиска по префиксу, когда ::SeekForPrev мог возвращать недопустимое значение для существующего префикса. ::SeekForPrev может быть вызван пользователем или внутренне на ::Prev или в рамках ::Seek, если возвращаемое значение включает операцию Delete или Merge.
  • Исправлено срабатывание OnFlushCompleted до сохранения результата сброса в MANIFEST при наличии параллельной задачи сброса. Ошибка существует с момента введения OnFlushCompleted в rocksdb 3.8.
  • Исправлен сбой sst_dump в некоторых файлах SST простой таблицы.
  • Устранена утечка памяти в некоторых случаях ошибок при открытии файлов SST простой таблицы.
  • Исправлена ошибка, возникающая при сбое во время вызова WriteLevel0TableForRecovery для нескольких семейств столбцов, приводящая к тому, что номер журнала семейства столбцов становится больше первого повреждённого номера журнала при открытии БД в режиме восстановления PointInTime во время следующей попытки восстановления (#5856).

Новые функции

  • Универсальное уплотнение для поддержки options.periodic_compaction_seconds. Полное уплотнение будет инициировано, если какой-либо файл превысит порог.

  • GetLiveFilesMetaData и GetColumnFamilyMetaData теперь предоставляют номер файла SST-файлов, а также самый старый файл BLOB, на который ссылается каждый SST.

  • Пакетный API MultiGet (DB::MultiGet()), поддерживающий получение ключей из нескольких семейств столбцов.

  • Полные и разделённые фильтры в блочной таблице используют улучшенную реализацию фильтра Блума, которая включена с format_version 5 (или выше), поскольку предыдущие версии не могут прочитать этот фильтр. Эта замена быстрее и точнее, особенно для большого количества битов на ключ или миллионов ключей в одном (полном) фильтре. Например, новый фильтр Блума имеет такой же уровень ложных срабатываний при 9,55 битах на ключ, как и старый при 10 битах на ключ, и более низкий уровень ложных срабатываний при 16 битах на ключ по сравнению со старым при 100 битах на ключ.

  • Добавлены инструкции AVX2 в сборки USE_SSE для ускорения нового фильтра Блума и хэш-функции на основе XXH3 на совместимых платформах x86_64 (Haswell и новее, ~2014).

  • Поддержка options.ttl или options.periodic_compaction_seconds с options.max_open_files = -1. Самое старое время предка файла и время создания файла будут записаны в манифест. Если это доступно, эта информация будет использоваться вместо creation_time и file_creation_time в свойствах таблицы.

  • Установка options.ttl для универсального уплотнения теперь имеет то же значение, что и установка periodic_compaction_seconds.

  • SstFileMetaData также возвращает время создания файла и самое старое время предка. ### Изменения в технической документации

  • Инструмент командной строки sst_dump для команды recompress теперь отображает, сколько блоков было сжато, а сколько нет, в частности, сколько не было сжато из-за того, что коэффициент сжатия не был достигнут (порог 12,5% для GoodCompressionRatio), как видно по счётчику статистики number.block.not_compressed начиная с версии 6.0.0.

  • Теперь при использовании кэша блоков учитывается служебная нагрузка метаданных на каждую запись. Это приводит к более точному управлению памятью. Побочным эффектом этой функции является то, что меньше элементов помещается в кэш блоков одинакового размера, что приводит к увеличению частоты промахов кэша. Эту проблему можно решить, увеличив размер кэша блоков или передав kDontChargeCacheMetadata его конструктору, чтобы восстановить старое поведение.

  • При использовании BlobDB поддерживается и сохраняется в MANIFEST сопоставление между каждым SST-файлом и самым старым файлом без TTL, на который он ссылается.

  • db_bench теперь поддерживает и по умолчанию выполняет операции Puts без TTL в BlobDB. Операции TTL Puts можно включить, явно указав ненулевое значение для параметра командной строки blob_db_max_ttl_range.

  • sst_dump теперь поддерживает печать индексов BLOB-объектов BlobDB в удобочитаемом формате. Эту функцию можно включить, указав флаг decode_blob_index в командной строке.

  • Через интерфейс EventListener теперь предоставляется ряд новых информационных элементов. Для сбросов передаются номера файлов нового SST-файла и самого старого файла BLOB, на который ссылается SST. Для уплотнений уровень, номер файла и самый старый файл BLOB передаются клиенту для каждого входного и выходного файла уплотнения.

Изменения в публичном API

  • RocksDB версии 4.1 и старше не смогут открыть БД, созданную новой версией. Версия 4.2 была выпущена 23 февраля 2016 года.

  • Уплотнения TTL в стиле Level теперь инициируют последовательные каскадные уплотнения в диапазоне ключей, так что они быстро достигают нижнего уровня после истечения срока действия TTL. Свойство таблицы creation_time для выходных файлов уплотнения теперь устанавливается равным минимуму времени создания всех входных данных уплотнения.

  • В стиле FIFO параметр options.periodic_compaction_seconds будет иметь то же значение, что и options.ttl. Будет использоваться более строгий из них. С значением по умолчанию options.periodic_compaction_seconds и значением по умолчанию options.ttl, равным 0, RocksDB будет использовать значение по умолчанию 30 дней.

  • Добавлен API GetCreationTimeOfOldestFile(uint64_t* creation_time) для получения file_creation_time самого старого SST-файла в БД.

  • FilterPolicy теперь предоставляет дополнительный API, позволяющий выбирать конфигурации фильтров в зависимости от контекста, такого как уровень таблицы и стиль уплотнения. См. LevelAndStyleCustomFilterPolicy в db_bloom_filter_test.cc. Хотя большинство существующих пользовательских реализаций FilterPolicy должны продолжать работать, как и раньше, те, которые оборачивают возврат NewBloomFilterPolicy, потребуют переопределения новой функции GetBuilderWithContext(), поскольку вызов GetFilterBitsBuilder() для FilterPolicy, возвращаемого NewBloomFilterPolicy, больше не поддерживается.

  • Маловероятное использование FilterPolicy больше не поддерживается. Вызов GetFilterBitsBuilder() для FilterPolicy, возвращённого NewBloomFilterPolicy, теперь вызовет нарушение утверждения в сборках отладки, поскольку RocksDB внутренне перешёл на более сложный интерфейс, который, как ожидается, будет развиваться дальше. Пользовательские реализации FilterPolicy должны работать, как прежде, за исключением тех, которые оборачивают возвращение NewBloomFilterPolicy, для которых потребуется новое переопределение защищённой функции в FilterPolicy.

  • NewBloomFilterPolicy теперь принимает bits_per_key как double вместо int. Это позволяет более точно контролировать баланс между памятью и точностью в новой реализации фильтра Блума и не должно изменять совместимость исходного кода.

  • Параметр BackupableDBOptions::max_valid_backups_to_open теперь используется только при открытии BackupEngineReadOnly. При открытии BackupEngine для чтения/записи всё, кроме значения по умолчанию, регистрируется как предупреждение и рассматривается как значение по умолчанию. Это изменение гарантирует, что учёт удаления резервных копий обеспечивает правильное удаление общих файлов, когда они больше не нужны. ### Ссылки на резервную копию

  • Устарело snap_refresh_nanos.

  • Добавлены функции DisableManualCompaction/EnableManualCompaction для остановки и возобновления ручного уплотнения.

  • Добавить TryCatchUpWithPrimary() в StackableDB в режиме, отличном от LITE.

  • Добавьте новую функцию перегрузки Env::LoadEnv(), которая возвращает shared_ptr в Env.

  • Установите имя файла наборов в «(nil)» для OnTableFileCreationCompleted(), если сброс не создаёт L0. Это может произойти, если файл пуст и поэтому удаляется RocksDB.

Изменения по умолчанию

  • Изменено значение по умолчанию для periodic_compaction_seconds на UINT64_MAX - 1, что позволяет RocksDB автоматически настраивать расписание периодического уплотнения. При использовании значения по умолчанию периодические уплотнения теперь включаются автоматически, если используется фильтр уплотнения. Значение 0 полностью отключит эту функцию.
  • Изменённое значение по умолчанию ttl на UINT64_MAX - 1 позволяет RocksDB автоматически настроить значение ttl. При использовании этого значения TTL будет автоматически включён на 30 дней, когда эта функция поддерживается. Чтобы вернуться к старому поведению, вы можете явно установить его равным 0.

Улучшения производительности

  • Для 64-битного хеширования RocksDB стандартизирует слегка изменённую предварительную версию XXH3. Эта функция теперь используется для многих непостоянных хэшей вместе с fastrange64() вместо оператора модуля, и некоторые тесты показывают небольшое улучшение.
  • Итератор уровня чаще делает итератор недействительным при префиксном поиске, а уровень фильтруется префиксным bloom.

6.5.2 (11/15/2019)

Исправления ошибок

  • Исправлена ошибка утверждения в MultiGet(), когда BlockBasedTableOptions::no_block_cache имеет значение true и нет кэша сжатого блока.
  • Исправлена проблема переполнения буфера в BlockBasedTable::MultiGet() при включённом сжатии и отсутствии настроенного кэша сжатых блоков.
  • Если вызов BackupEngine::PurgeOldBackups или BackupEngine::DeleteBackup привёл к сбою, сбою питания или ошибке ввода-вывода, файлы могли остаться от старых резервных копий, которые можно было удалить только с помощью вызова GarbageCollect. Теперь любой вызов PurgeOldBackups, DeleteBackup или GarbageCollect должен быть достаточным для удаления таких файлов.

6.5.1 (10/16/2019)

Исправления ошибок

  • Отмените функцию «Объединение итератора, чтобы избежать повторного поиска дочернего итератора для некоторых случаев (#5286)», поскольку она может привести к странным результатам, когда повторный поиск происходит с другой верхней границей итератора.
  • Исправьте ошибку в BlockBasedTableIterator, которая может возвращать неверные результаты, когда повторный поиск происходит с разной верхней границей итератора.
  • Исправьте ошибку, когда используются разделённые фильтры и префиксный поиск, ::SeekForPrev может вернуть недопустимое значение для существующего префикса. ::SeekForPrev может быть вызван пользователем или внутренне на ::Prev, или внутри ::Seek, если возвращаемое значение включает Delete или операнд Merge.

6.5.0 (9/13/2019)

Исправления ошибок

  • Исправлено несколько гонок данных в BlobDB.
  • Исправлена ошибка, из-за которой функция обновления снимка уплотнения не отключалась, как было объявлено, когда snap_refresh_nanos установлено в 0..
  • Исправлены ошибки поиска в фильтре bloom с помощью пакетного API MultiGet, когда BlockBasedTableOptions::whole_key_filtering имеет значение false, путём проверки того, что ключ находится в области префиксного экстрактора, и извлечения префикса перед поиском.
  • Исправлена ошибка в файловой инжекции, вызванная неправильным распределением номеров файлов, когда количество семейств столбцов, участвующих в инжекции, превышает 2.

Новые функции

  • Представлено DBOptions::max_write_batch_group_size_bytes для настройки максимального ограничения на количество байтов, записываемых в одном пакете записи WAL или memtable. Он соблюдается, когда размер записи лидера больше 1/8 этого предела.
  • VerifyChecksum() по умолчанию будет выдавать упреждающее чтение. Разрешите передавать ReadOptions этим функциям, чтобы переопределить размер упреждающего чтения. Для проверки контрольной суммы перед внешней загрузкой SST-файла добавлена новая опция IngestExternalFileOptions.verify_checksums_readahead_size для этой настройки упреждающего чтения.
  • Когда пользователь использует options.force_consistency_check в RocksDb, мы теперь возвращаем ошибку пользователю, не убивая процесс.
  • Добавьте опцию memtable_insert_hint_per_batch в WriteOptions. Если это... Истинный, каждый WriteBatch будет поддерживать свои собственные подсказки вставки для каждой memtable при параллельной записи. Подробнее см. include/rocksdb/options.h.

Изменения в публичном API

  • Добавлена опция max_write_buffer_size_to_maintain для лучшего контроля использования памяти неизменяемыми memtables.
  • Добавлен облегчённый API GetCurrentWalFile() для получения последнего живого имени файла WAL и его размера. Предназначен для использования в качестве помощника для инструментов резервного копирования/восстановления в более крупной экосистеме, такой как MySQL с механизмом хранения MyRocks.
  • Фильтр Блума MemTable при включении теперь всегда использует локальность кэша. Options::bloom_locality теперь влияет только на формат SST PlainTable.

Улучшения производительности

  • Улучшена скорость работы фильтра Блума в MemTable, что снижает накладные расходы на запись при его включении на 1/3–1/2, с аналогичным улучшением производительности чтения.

6.4.0 (7/30/2019)

Изменение параметров по умолчанию

  • LRUCacheOptions.high_pri_pool_ratio установлен по умолчанию равным 0,5 (ранее — 0), что означает, что по умолчанию включена вставка средней точки. Такое же изменение внесено в значение по умолчанию аргумента high_pri_pool_ratio в NewLRUCache(). Когда блок-кэш явно не создан, небольшой блок-кэш, созданный BlockBasedTable, всё ещё имеет эту опцию равной 0.
  • Изменено значение BlockBasedTableOptions.cache_index_and_filter_blocks_with_high_priority по умолчанию с false на true.

Изменения в публичном API

  • Блоки фильтров и сжатия словаря теперь обрабатываются аналогично блокам данных в отношении кэш блоков: вместо хранения объектов в кэше кэшируются сами блоки. Кроме того, блоки фильтров и блоков сжатия словаря (а также разделы фильтров) больше не удаляются из кэша при закрытии таблицы.
  • В связи с вышеописанным рефакторингом статистика удаления блоков фильтров и блоков сжатия из кэша временно нарушена. Мы планируем восстановить её на более позднем этапе.
  • Семантика подсчёта количества операций чтения блоков каждого типа в контексте производительности теперь соответствует семантике generic block_read_count.
  • Ошибки, связанные с получением словаря сжатия, теперь передаются пользователю.
  • db_bench добавляет «benchmark» stats_history, который выводит всю историю статистики.
  • Перегружен GetAllKeyVersions() для поддержки семейства столбцов, отличного от стандартного.
  • Добавлены новые API ExportColumnFamily() и CreateColumnFamilyWithImport() для экспорта и импорта семейства столбцов. https://github.com/facebook/rocksdb/issues/3469
  • ldb иногда использует оператор слияния string-append, если оператор слияния не передан. Это позволяет пользователям печатать ключи из БД с оператором слияния.
  • Заменяет старый 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. Это позволяет использовать некоторые приёмы для определения размера файлов. Улучшения производительности
  • Уменьшение сравнения ключей итератора для проверки верхней/нижней границы.
  • Улучшение производительности row_cache: общие ключи кэша для операций чтения с более новыми снимками, чем данные в файле SST, за исключением некоторых случаев транзакций.
  • Словарь сжатия больше не копируется в новый объект при извлечении.

Исправления ошибок

  • Исправление проблемы, из-за которой файл и каталог не синхронизировались.
  • Возврат статуса TryAgain вместо Corruption, когда новый хвост не виден TransactionLogIterator.
  • Исправлена регрессия, при которой опция fill_cache read также влияла на индексные блоки.
  • Устранена проблема, при которой использование cache_index_and_filter_blocks==false также затрагивало разделы секционированных индексов/фильтров.

6.3.2 (8/15/2019)

Изменение публичного API

  • Семантика подсчёта блоков по типам в контексте производительности теперь соответствует семантике generic block_read_count.

Исправления ошибок

  • Исправлена регрессия, при которой опция fill_cache read также влияла на индексные блоки.
  • Устранена проблема, при которой использование cache_index_and_filter_blocks==false также затрагивало разделы секционированных фильтров.

6.3.1 (7/24/2019)

Исправления ошибок

  • Устранение ошибки автоматического переноса, которая вызывала ошибку сегментации при неудачном создании файла журнала.

6.3.0 (6/18/2019)

Изменения публичного API

  • Теперь DB::Close() будет возвращать ошибку Aborted(), если есть незакрытый снимок. Пользователи могут повторить попытку после освобождения всех снимков.
  • Индексные блоки теперь обрабатываются аналогично данным с точки зрения кэширования блоков: вместо хранения объектов в кэше, в нём хранятся только сами блоки. Кроме того, индексные блоки больше не удаляются из кэша при закрытии таблицы, теперь могут использовать сжатый кэш блоков (если он есть) и могут совместно использоваться несколькими считывателями таблиц.
  • Разделы секционированных индексов больше не влияют на статистику усиления чтения.
  • Из-за вышеуказанного рефакторинга статистика удаления блоков кэша для индексов временно нарушена. Мы планируем восстановить её на более позднем этапе.
  • options.keep_log_file_num будет строго соблюдаться всё время. Будут отслеживаться имена файлов всех файлов журналов, что может занять значительный объём памяти, если options.keep_log_file_num большой и установлен либо options.max_log_file_size, либо options.log_file_time_to_roll.
  • Добавлена первоначальная поддержка Get/Put с пользовательскими временными метками. Пользователи могут указывать временные метки через ReadOptions и WriteOptions при вызове DB::Get и DB::Put.
  • Доступ к разделу секционированного фильтра или индекса через закреплённую ссылку больше не считается попаданием в кэш.
  • Добавление привязок C для вторичного экземпляра, то есть DBImplSecondary.
  • Ограничение скорости удаления WAL включается только в том случае, если DBOptions::wal_dir не установлен, или явно установлен на db_name, переданное в DB::Open, а DBOptions::db_paths пуст или совпадает с db_paths[0].path.

Новые функции

  • Добавлен параметр snap_refresh_nanos (по умолчанию 0) для периодического обновления списка снимков в заданиях уплотнения. Установите значение 0, чтобы отключить эту функцию.
  • Добавлен параметр unordered_write, который меняет гарантии снимков на более высокую пропускную способность записи. При использовании с WRITE_PREPARED транзакциями с two_write_queues=true он обеспечивает более высокую пропускную способность без ущерба для гарантий.
  • Разрешить DBImplSecondary удалять мемтаблицы с устаревшими данными после воспроизведения MANIFEST и WAL.
  • Добавлен параметр failed_move_fall_back_to_copy (по умолчанию true) для внешнего приёма SST. Когда move_files имеет значение true и жёсткая ссылка не работает, приём данных откатывается к копированию, если failed_move_fall_back_to_copy имеет значение true. В противном случае приём данных завершается ошибкой.
  • Добавить команду. list_file_range_deletes в ldb, который печатает надгробные камни в файлах SST.

Улучшения производительности

  • Уменьшение бинарного поиска при повторном поиске итератора в том же блоке данных.
  • DBIter::Next() может пропускать проверку пользовательского ключа, если порядковый номер предыдущей записи равен 0.
  • Объединение итераторов для избежания повторного поиска дочернего итератора для некоторых случаев.
  • Log Writer будет сбрасывать данные после завершения всей записи, а не фрагмента.
  • Снижение задержки пакетного API MultiGet путём параллельного чтения блоков данных с диска.

Общие улучшения

  • Добавлен новый код состояния kColumnFamilyDropped для различения между удалением семейства столбцов и текущим процессом выключения БД.
  • Улучшена проверка ColumnFamilyOptions при создании нового семейства столбцов.

Исправления ошибок

  • Исправлена ошибка в воспроизведении WAL вторичного экземпляра путём пропуска пакетов записи со старыми порядковыми номерами, чем текущий последний порядковый номер.
  • Исправлена логика обработки слияния при сбросе и уплотнении, которая позволяла повторно появляться Put, покрытым надгробными камнями диапазона. Обратите внимание, что Put могут существовать, даже если пользователь только когда-либо вызывал Merge() из-за внутреннего преобразования во время уплотнения на самый нижний уровень.
  • Исправлено/улучшено назначение самой ранней последовательности memtable и воспроизведение WAL таким образом, чтобы записи WAL несквашенных семейств столбцов не пропускались после воспроизведения MANIFEST и увеличения последовательности БД из-за другой сброшенной/уплотнённой семьи столбцов.
  • Исправлена ошибка, вызванная тем, что вторичный экземпляр не пропускает начало нового MANIFEST.
  • При открытии БД удаляются файлы мусора WAL, оставленные в wal_dir.

6.2.0 (30.04.2019)

Новые функции

  • Добавление опции strict_bytes_per_sync, которая заставляет поток записи файлов блокироваться, вместо превышения ограничения на байты ожидаемой обратной записи, указанной в bytes_per_sync или wal_bytes_per_sync.
  • Повышение производительности сканирования диапазона путём избежания проверки верхней границы для каждого ключа в BlockBasedTableIterator.
  • Введение периодического уплотнения для стиля уплотнения уровня. Файлы периодически уплотняются и помещаются на тот же уровень.
  • Индекс таблицы на основе блоков теперь содержит точный наивысший ключ в файле, а не верхнюю границу. Это может улучшить производительность Get() и Seek() итератора в некоторых ситуациях, особенно когда прямой ввод-вывод включён, а блочный кэш отключён. Введена настройка BlockBasedTableOptions::index_shortening для управления этим поведением. Установите её в kShortenSeparatorsAndSuccessor, чтобы получить старое поведение.
  • Когда чтение из файла опций, настраиваемые среды могут быть заполнены в соответствии с реестром объектов.
  • Повышение производительности сканирования диапазона при использовании явной опережающей выборки пользователя путём создания новых читателей таблиц для каждого итератора.
  • Добавление типа индекса BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey. Он значительно снижает усиление чтения в некоторых установках, особенно для итерационных поисков. Он ещё не полностью реализован: ошибки ввода-вывода обрабатываются неправильно.

Изменение публичного API

  • Изменение поведения OptimizeForPointLookup(): переход от основанного на хэше индекса таблицы на основе блоков к использованию фильтрации всей ключевой memtable.
  • Изменение поведения OptimizeForSmallDb(): использование 16 МБ блочного кэша, помещение в него индексных и фильтрующих блоков и учёт размера memtable. DBOptions.OptimizeForSmallDb() и ColumnFamilyOptions.OptimizeForSmallDb() начинают принимать необязательный объект кэша.
  • Добавлено BottommostLevelCompaction::kForceOptimized, чтобы избежать двойного уплотнения недавно уплотнённых файлов в нижнем уровне уплотнения ручного уплотнения. Обратите внимание, что эта опция может запретить ручному уплотнению создать один файл на нижнем уровне.

Исправление ошибок

  • Настройка размера фиктивной записи WriteBufferManager для блокировки кэша с 1 МБ до 256 КБ.
  • Устранение состояния гонки между WritePrepared::Get и ::Put с дублирующимися ключами.
  • Устранён сбой при включённом префиксе bloom в memtable и чтении/записи ключа вне области действия экстрактора префикса.
  • Закрытие файла WAL перед его удалением другим потоком.
  • Устранена ошибка утверждения IsFlushPending() == true, вызванная освобождением мьютекса db одним bg-потоком в ~ColumnFamilyData и очисткой флага flush_requested_ другим потоком.

6.1.1 (09.04.2019)

Новые функции

  • При чтении из файла опций — настраиваемые компараторы. false. Если true, это указывает на то, что вызов предполагается после ::GetForUpdate.
  • TableProperties::num_entries и TableProperties::num_deletions теперь также учитывают количество надгробных камней диапазона.
  • Удалите geodb, spatial_db, document_db, json_document, date_tiered_db и redis_lists.
  • С «ldb ----try_load_options», если wal_dir, указанный в файле параметров, не существует, игнорируйте его.
  • Измените разрешение времени в FileOperationInfo.
  • Удаление файлов BLOB также проходит через SStFileManager.
  • Удалить CuckooHash memtable.
  • Статистический счетчик number.block.not_compressed теперь также учитывает блоки, которые не были сжаты из-за плохого коэффициента сжатия.
  • Удалите опцию ttl из CompactionOptionsFIFO. Опция устарела, вместо неё используется ttl в ColumnFamilyOptions.
  • Поддержка приёма файлов SST для нескольких семейств столбцов через DB::IngestExternalFiles. См. комментарий к функции об атомарности.
  • Удалите фильтр сжатия Lua.

Исправления ошибок

  • Исправьте взаимоблокировку, вызванную ожиданием уплотнения и загрузки файлов друг друга в случае остановки записи.
  • Исправлена утечка памяти при чтении файлов с надгробными камнями диапазона в режиме mmap и включенном кэше блоков.
  • Исправлено обращение с повреждёнными блоками надгробного камня диапазона, чтобы повреждения не могли привести к повторному появлению удалённых ключей.
  • Блокировка свободного MultiGet.
  • Исправлен неправильный результат поиска точки NotFound при запросе конечной точки файла, который был расширен надгробным камнем диапазона.
  • Исправлены проблемы с конвейерной записью, когда сбой обратного вызова ведущего устройства записи приводил к сбою всей группы записи.

Изменение параметров по умолчанию

  • Изменить параметры.compaction_pri по умолчанию на kMinOverlappingRatio.

5.18.0 (30.11.2018)

Новые функции

  • Представлен распределитель памяти JemallocNodumpAllocator. При использовании кэш блоков будет исключён из дампа ядра.
  • Введён PerfContextByLevel как часть PerfContext, который позволяет хранить контекст производительности на каждом уровне. Также заменили __thread ключевым словом thread_local для perf_context. Добавлен контекст производительности для каждого уровня для фильтра цветения и запроса Get.
  • При level_compaction_dynamic_level_bytes = true множитель уровня может автоматически корректироваться, когда уплотнение уровней от 0 до 1 отстаёт.
  • Представлена опция БД atomic_flush. Если верно, RocksDB поддерживает сброс нескольких семейств столбцов и атомарную фиксацию результата в MANIFEST. Полезно, когда WAL отключён.
  • Добавлены члены num_deletions и num_merge_operands в TableProperties.
  • Добавлено свойство rocksdb.min-obsolete-sst-number-to-keep БД, которое сообщает нижнюю границу номеров файлов SST, которые сохраняются от удаления, даже если SST устарели.
  • Добавить поддержку контрольной суммы xxhash64.
  • Представлен MemoryAllocator, который позволяет пользователю указывать собственный распределитель памяти для табличной таблицы на основе блоков.
  • Улучшено DeleteRange, чтобы предотвратить ухудшение производительности чтения. Функция больше не помечена как экспериментальная.

Изменения в публичном API

  • DBOptions::use_direct_reads теперь влияет на чтение, выполняемое BackupEngine в SST базы данных.
  • NO_ITERATORS разделено на два счётчика: NO_ITERATOR_CREATED и NO_ITERATOR_DELETE. Оба они теперь только увеличиваются, как и другие счётчики.

Исправление ошибок

  • Исправлен крайний случай, когда лидер группы записи, заблокированный из-за остановки записи, блокирует других писателей в очереди с установленным WriteOptions::no_slowdown.

  • Исправлено внутреннее усечение надгробной плиты диапазона, чтобы избежать ошибочного покрытия более новых ключей на нижнем уровне и включения надгробных плит диапазона в сжатые файлы, самый большой ключ которых является начальным ключом надгробной плиты диапазона.

  • Правильно установите конечный ключ для усечённого ручного CompactRange.

  • Исправлена медленная очистка/уплотнение при наличии большого количества моментальных снимков в БД. Проблема стала заметна нам в базах данных с более чем 100 000 моментальными снимками, хотя она затронет и других при разных порогах.

  • Исправлена ошибка, из-за которой SeekForPrev() WriteBatchWithIndex не видит записи с тем же ключом.

  • Исправлена ошибка, при которой пользовательский компаратор иногда получал InternalKey вместо пользовательского ключа. Ошибка проявляется во время GenerateBottommostFiles.

  • Исправлена ошибка в подготовленных транзакциях записи, когда количество старых моментальных снимков превышает размер кэша моментальных снимков (128 По умолчанию остальные данные не будут проверяться при удалении записи фиксации из кэша фиксации.

  • Исправлена ошибка корректности Get при наличии надгробных камней диапазона, когда операнды слияния, покрываемые надгробным камнем диапазона, всегда приводят к NotFound.

  • Начато заполнение статистической информации тикера NO_FILE_CLOSES, которая ранее всегда была равна нулю.

  • Значение по умолчанию аргумента use_block_based_builder функции NewBloomFilterPolicy() изменено на false. Обратите внимание, что это новое значение по умолчанию может привести к большому использованию временной памяти при построении очень больших файлов SST.

5.17.0 (10/05/2018)

Изменение публичного API

  • OnTableFileCreated теперь будет вызываться для пустых файлов, созданных во время уплотнения. В этом случае TableFileCreationInfo::file_path будет "(nil)", а TableFileCreationInfo::file_size будет равен нулю.
  • Добавлен параметр FlushOptions::allow_write_stall, который контролирует, будут ли вызовы Flush работать немедленно, даже если это приводит к остановке пользовательских записей, или будут ждать, пока сброс не будет выполнен без остановки записи (аналогично CompactRangeOptions::allow_write_stall). Обратите внимание, что значение по умолчанию равно false, то есть мы добавляем задержку к вызовам Flush, чтобы избежать остановки, если это возможно. Это изменение поведения по сравнению с предыдущими версиями RocksDB, где вызовы Flush не проверяли, могут ли они вызвать остановку или нет.
  • Ожидается, что приложение, использующее PessimisticTransactionDB, откатит/зафиксирует восстановленные транзакции перед началом новых. Это предположение используется для пропуска контроля параллелизма во время восстановления.
  • Экспонирование идентификатора семейства столбцов в OnCompactionCompleted.

Новые функции

  • TransactionOptions::skip_concurrency_control позволяет пессимистическим транзакциям пропускать накладные расходы на контроль параллелизма. Может использоваться для оптимизации определённых транзакций или во время восстановления.

Исправления ошибок

  • Избегание создания пустых SST и последующего их удаления в некоторых случаях во время уплотнения.
  • Синхронизация содержимого файла CURRENT во время контрольной точки.

5.16.3 (10/1/2018)

Исправление ошибок

  • Устранение сбоя, вызванного тем, что CompactFiles выполнялся с CompactionOptions::compression == CompressionType::kDisableCompressionOption. Теперь эта настройка приводит к выбору типа сжатия в соответствии с параметрами сжатия семейства столбцов.

5.16.2 (9/21/2018)

Исправление ошибок

  • Исправление ошибки в фильтрах разделов с format_version=4.

5.16.1 (9/17/2018)

Исправление ошибок

  • Удаление trace_analyzer_tool из цели rocksdb_lib в файле TARGETS.
  • Исправление сборки и тестов RocksDB Java.
  • Удаление точки синхронизации в деструкторе блока.

5.16.0 (8/21/2018)

Изменение публичного API

  • Операнды слияния передаются в MergeOperator::ShouldMerge в обратном порядке относительно того, как они были объединены (передаются в FullMerge или FullMergeV2) по соображениям производительности.
  • GetAllKeyVersions() принимает дополнительный аргумент max_num_ikeys.
  • Использование тренера словаря ZSTD (т. е. установка CompressionOptions::zstd_max_train_bytes на ненулевое значение) теперь требует ZSTD версии 1.1.3 или более поздней.

Новые функции

  • Изменения формата блоков индекса путём дельта-кодирования значений индекса, которые являются дескрипторами блоков. Это сохраняет кодирование BlockHandle::offset неголовных записей индекса в каждом интервале перезапуска. Функция обратно совместима, но не совместима вперёд. Она отключена по умолчанию, если не используется формат_версия 4 или выше.
  • Добавление нового инструмента: trace_analyzer. Trace_analyzer анализирует файл трассировки, созданный с помощью API trace_replay. Он может преобразовать двоичный файл трассировки в читаемый человеком текстовый файл, вывести статистику проанализированных типов запросов, таких как статистика доступа и статистика размера, объединить сброшенный файл всего ключевого пространства для анализа, поддерживать анализ корреляции запросов и т. д. Текущие поддерживаемые типы запросов: Get, Put, Delete, SingleDelete, DeleteRange, Merge, Iterator (Seek, SeekForPrev только).
  • Добавление поддержки хэш-индекса для блоков данных, что помогает снизить загрузку процессора операций точечного поиска. Эта функция обратно совместима с блоком данных, созданным без хэш-индекса. Она отключена по умолчанию, если для BlockBasedTableOptions::data_block_index_type не установлено значение data_block_index_type = kDataBlockBinaryAndHash. Перевод текста:

Пользователь читает, фоновый читает. Это соответствует странице руководства Linux open(2), которая не рекомендует одновременно читать файл в буферизованном и прямом режимах из-за возможного неопределённого поведения и ухудшения производительности.

  • Iterator::Valid() всегда возвращает false, если !status().ok(). Поэтому теперь при выполнении Seek(), за которым следуют несколько Next(), нет необходимости проверять status() после каждой операции.
  • Iterator::Seek()/SeekForPrev()/SeekToFirst()/SeekToLast() всегда сбрасывает status().
  • Введён CompressionOptions::kDefaultCompressionLevel, который является общим способом сообщить RocksDB использовать уровень сжатия по умолчанию библиотеки сжатия. Теперь это значение по умолчанию для CompressionOptions::level. Ранее уровень по умолчанию был равен -1, что давало плохие коэффициенты сжатия в ZSTD.

Новые функции

  • Введение TTL для уплотнения уровня, чтобы все файлы старше ttl проходили процесс уплотнения для удаления старых данных.
  • TransactionDBOptions::write_policy можно настроить для включения транзакций WritePrepared 2PC. Подробнее о них читайте в вики.
  • Добавить свойства БД «rocksdb.block-cache-capacity», «rocksdb.block-cache-usage», «rocksdb.block-cache-pinned-usage» для отображения использования блочного кэша.
  • Добавить метод Env::LowerThreadPoolCPUPriority(Priority), который снижает приоритет ЦП фоновых (особенно уплотняющих) потоков, чтобы минимизировать вмешательство в задачи переднего плана.
  • Fsync родительского каталога после удаления файла в планировщике удаления.
  • При уплотнении на основе уровней, если нижний пул потоков был настроен через Env::SetBackgroundThreads(), уплотнения до нижнего уровня будут делегированы этому пулу потоков.
  • prefix_extractor был перемещён из ImmutableCFOptions в MutableCFOptions, то есть его можно динамически изменять без перезапуска БД.

Исправления ошибок

  • Fsync после записи глобального порядкового номера в файл приёма данных в ExternalSstFileIngestionJob.
  • Исправление повреждения WAL, вызванного состоянием гонки между потоком пользовательской записи и FlushWAL, когда two_write_queue не установлен.
  • Fix BackupableDBOptions::max_valid_backups_to_open, чтобы не удалять файлы резервных копий, когда refcount не может быть точно определён.
  • Устранение утечки памяти при использовании pin_l0_filter_and_index_blocks_in_cache с разделёнными фильтрами.
  • Отключить откат операндов слияния в транзакциях WritePrepared для обхода проблемы в MyRocks. Его можно снова включить, установив TransactionDBOptions::rollback_merge_operands в true.
  • Исправлены неправильные результаты ReverseBytewiseComparator::FindShortSuccessor().

Изменения Java API

  • Добавление BlockBasedTableConfig.setBlockCache для совместного использования блока кэша между экземплярами БД.
  • Добавлен SstFileManager в Java API для управления файлами SST между экземплярами БД.

5.13.0 (3/20/2018)

Изменение публичного API

  • RocksDBOptionsParser::Parse() аргумент ignore_unknown_options будет эффективен только в том случае, если файл опций показывает, что он создан с использованием более высокой версии RocksDB, чем текущая версия.
  • Удаление CompactionEventListener.

Новые функции

  • SstFileManager теперь может отменять уплотнение, если оно приведёт к ошибкам максимального пространства. Пользователи SstFileManager также могут использовать SetCompactionBufferSize, чтобы указать, сколько места должно остаться во время уплотнения для вспомогательных функций файла, таких как ведение журнала и сброс.
  • Избегание ненужного сброса в CompactRange(), когда диапазон, указанный пользователем, не перекрывается неотброшенными memtables.
  • Если ColumnFamilyOptions::max_subcompactions установлено больше единицы, мы теперь распараллеливаем большие ручные уплотнения на уровне.
  • Добавьте свойство БД "rocksdb.live-sst-files-size", чтобы вернуть общий размер всех файлов SST, принадлежащих последнему дереву LSM.
  • NewSstFileManager для добавления аргумента bytes_max_delete_chunk со значением по умолчанию 64 МБ. С этим аргументом файл размером более 64 МБ будет усекаться несколько раз в зависимости от этого размера.

Исправления ошибок

  • Устранена утечка в prepared_section_completed_, где обнулённые записи не удалялись из карты.
  • Исправлено повреждение WAL, вызванное состоянием гонки между пользовательским потоком записи и потоком резервного копирования/контрольной точки.

5.12.0 (2/14/2018)

Изменение публичного API

  • Iterator::SeekForPrev теперь является чисто виртуальным методом. * Удаления, сделанные до этого seqnum, могут быть отброшены БД). Пользователь сам должен понять, как продвигать seqnum таким образом, чтобы надгробия сохранялись в течение желаемого периода времени, но в конечном итоге обрабатывались вовремя и не занимали слишком много места.
  • Был добавлен ReadOptions::iter_start_seqnum; если установить его на что-то > 0, пользователь увидит 2 изменения в поведении итераторов: 1) будут возвращаться только ключи, записанные с последовательностью больше этого параметра, и 2) срез, возвращаемый iter->key(), теперь указывает на память, которая хранит ориентированное на пользователя представление внутреннего ключа, а не пользовательский ключ. Была добавлена новая структура FullKey для представления внутренних ключей вместе с новой вспомогательной функцией ParseFullKey(const Slice& internal_key, FullKey* result).
  • Устаревание параметра trash_dir в NewSstFileManager, сейчас мы будем переименовывать удалённые файлы в .trash вместо перемещения их в корзину.
  • Разрешение установки пользовательского ограничения соотношения размера корзины/БД в SstFileManager, после которого файлы, которые должны быть запланированы для удаления, удаляются немедленно, независимо от любого предела удаления.
  • Возврат ошибки при записи, если write_options.sync = true и write_options.disableWAL = true, чтобы предупредить пользователя о несогласованности параметров. Ранее мы не записывали в WAL и не учитывали параметры синхронизации в этом случае.

Новые функции

  • CRC32C теперь использует трёхсторонний конвейерный алгоритм SSE 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.
  • Поддержка дифференциальных снимков (через итератор, выдающий последовательность пар ключ-значение, представляющих разницу между состоянием БД на двух разных порядковых номерах). Поддерживает сохранение и выдачу puts и обычных удалений, не поддерживает SingleDeletes, MergeOperator, Blobs и Range Deletes.

Исправления ошибок

  • Исправление потенциальной проблемы несогласованности данных во время восстановления на момент времени. DB:Open() прервёт работу, если во время PIT-восстановления будет обнаружена несогласованность семейства столбцов.
  • Исправлено возможное повреждение метаданных в базах данных, использующих DeleteRange().

5.8.0 (08/30/2017)

Изменение публичного API

  • Пользователи Statistics::getHistogramString() увидят меньше сегментов гистограммы и разные конечные точки сегментов.
  • Slice::compare и BytewiseComparator Compare больше не принимают Slices, содержащие nullptr.
  • Добавлены варианты Transaction::Get и Transaction::GetForUpdate с PinnableSlice.

Новые функции

  • Добавление Iterator::Refresh(), которое позволяет пользователям обновлять состояние итератора, чтобы избежать некоторых затрат на инициализацию повторного создания итераторов.

  • Замена dynamic_cast<> (кроме модульного теста), чтобы люди могли выбрать сборку с отключённым RTTI. В режиме make режим выпуска по умолчанию. CompactionOptionsFIFO.allow_compaction=true.

  • DB::ResetStats() для сброса внутренних статистических данных.

  • Statistics::Reset() для сброса пользовательских статистических данных.

  • ldb добавить опцию --try_load_options, которая откроет БД с собственным файлом опций.

  • Ввести WriteBatch::PopSavePoint для явного возврата к самой последней точке сохранения.

  • Поддержка динамического изменения параметра max_open_files через SetDBOptions().

  • Добавлены DB::CreateColumnFamilie() и DB::DropColumnFamilies() для массового создания/удаления семейств столбцов.

  • Добавить функцию отладки GetAllKeyVersions для просмотра внутренних версий диапазона ключей.

  • Поддерживать загрузку файлов в универсальном стиле уплотнения.

  • Поддерживать загрузку файлов с опцией allow_ingest_behind.

  • Новая опция enable_pipelined_write может улучшить пропускную способность записи в случае записи из нескольких потоков и при включённом WAL.

Исправления ошибок

  • Исправлена ошибка, из-за которой прямой ввод-вывод использовал прямые чтения для файла, отличного от SST.

5.4.0 (04/11/2017)

Изменение публичного API

  • random_access_max_buffer_size больше не имеет никакого эффекта.
  • Удалены Env::EnableReadAhead(), Env::ShouldForwardRawRequest().
  • Поддержка динамического изменения stats_dump_period_sec через SetDBOptions().
  • Добавлен ReadOptions::max_skippable_internal_keys для установки порога отказа в запросе как неполном при пропуске слишком большого количества ключей при использовании итераторов.
  • DB::Get вместо std::string принимает PinnableSlice, что позволяет избежать дополнительной memcpy значения в std::string в большинстве случаев.
    • PinnableSlice освобождает закреплённые ресурсы, содержащие значение, когда он разрушается или когда на него вызывается ::Reset().
    • Старый API, который принимает std::string, хотя и не рекомендуется, всё ещё поддерживается.
  • Заменить Options::use_direct_writes на Options::use_direct_io_for_flush_and_compaction. Подробнее см. в Direct IO wiki.
  • Добавлены CompactionEventListener и EventListener::OnFlushBegin интерфейсы.

Новые функции

  • Можно избежать сброса мемтаблицы во время создания контрольной точки, если общий размер файла журнала меньше указанного пользователем порога.
  • Введение многоуровневых уплотнений L0->L0 для уменьшения количества файлов, поэтому задержки записи возникают реже.
  • (Экспериментально) Фильтры разделения, которые создают индекс по разделам. Функцию можно включить, установив partition_filters при использовании kFullFilter. В настоящее время функция также требует включения двухуровневого индексирования. Количество разделов совпадает с количеством разделов для индексов, которое контролируется metadata_block_size.

5.3.0 (03/08/2017)

Изменение публичного API

  • Удалить опцию disableDataSync.
  • Удалить timeout_hint_us из WriteOptions. Опция была объявлена устаревшей и не действует с версии 3.13.0.
  • Удалить параметр min_partial_merge_operands. Частичные операнды слияния всегда будут объединяться при сбросе или уплотнении, если их больше одного.
  • Удалить параметр verify_checksums_in_compaction. Уплотнение всегда проверяет контрольную сумму.

Исправление ошибок

  • Исправлена ошибка, при которой итератор мог пропускать ключи.

5.2.0 (02/08/2017)

Изменение публичного API

  • NewLRUCache() будет определять количество битов сегмента автоматически на основе ёмкости, если пользователь не передаёт его. Это также влияет на кеш блоков по умолчанию, если пользователь явно не предоставляет его.
  • Изменить значение по умолчанию для параметра замедления на 16 МБ/с и дополнительно увеличить условие остановки L0 до 36 файлов.
  • Options::use_direct_writes и Options::use_direct_reads теперь готовы к использованию.
  • (Экспериментальный) Двухуровневый поиск индекса, который разделяет индекс и создаёт второй уровень индекса по разделам. Функция может быть включена путём установки kTwoLevelIndexSearch в качестве IndexType и настройки index_per_partition.

Новые функции

  • Добавлена новая перегруженная функция GetApproximateSizes, позволяющая указать, следует ли вычислять статистику мемтаблиц только без вычисления приближений статистики файлов SST.
  • Добавлена новая функция GetApproximateMemTableStats, которая аппроксимирует как количество записей, так и размер мемтаблиц.
  • Добавление режима прямого ввода-вывода для ввода-вывода файлов SST.

Исправление ошибок

  • RangeSync() должен работать, если ROCKSDB_FALLOCATE_PRESENT не установлен.
  • Исправить неправильные результаты в случае гонки данных в Get().
  • Некоторые исправления, связанные с 2PC.
  • Устранить ошибки данных. Повреждение при прямом вводе-выводе

5.1.0 (01/13/2017)

  • Поддержка динамического изменения параметра delete_obsolete_files_period_micros через SetDBOptions().
  • Добавлен EventListener::OnExternalFileIngested, который будет вызываться, когда IngestExternalFile() успешно добавляет файл.
  • BackupEngine::Open и BackupEngineReadOnly::Open теперь всегда возвращают статусы ошибок, соответствующие статусам резервной копии Env.

Исправления ошибок

  • Исправлена ошибка, из-за которой контрольные точки могли потерять некоторые недавние транзакции, если включено двухфазное подтверждение.
  • При копировании файлов, необходимом при создании контрольных точек или массовой загрузке файлов, используйте fsync для файла после копирования.

5.0.0 (11/17/2016)

Изменение публичного API

  • Options::max_bytes_for_level_multiplier теперь является двойным, как и все геттеры и сеттеры.
  • Поддержка динамического изменения параметров delayed_write_rate и max_total_wal_size через SetDBOptions().
  • Введение DB::DeleteRange для оптимизированного удаления больших диапазонов смежных ключей.
  • Поддержка динамического изменения параметра delayed_write_rate через SetDBOptions().
  • Параметры Options::allow_concurrent_memtable_write и Options::enable_write_thread_adaptive_yield теперь по умолчанию имеют значение true.
  • Удалите Tickers::SEQUENCE_NUMBER, чтобы избежать путаницы, если объект статистики используется совместно между экземплярами RocksDB. В качестве альтернативы можно использовать DB::GetLatestSequenceNumber(), чтобы получить то же значение.
  • Значение по умолчанию для Options.level0_stop_writes_trigger изменяется с 24 на 32.
  • Новый API фильтра уплотнения: CompactionFilter::FilterV2(). Позволяет удалять диапазоны ключей.
  • Удалена поддержка flashcache.
  • DB::AddFile() устарел и заменён на DB::IngestExternalFile(). DB::IngestExternalFile() удаляет все ограничения, которые существовали для DB::AddFile.

Новые функции

  • Добавьте параметр avoid_flush_during_shutdown, который ускоряет завершение работы БД, не сбрасывая непостоянную информацию (т. е. с disableWAL = true). Непостоянная информация будет потеряна. Параметр можно динамически изменять через SetDBOptions().
  • Добавьте опцию memtable_insert_with_hint_prefix_extractor. Опция предназначена для снижения использования ЦП при вставке ключей в memtable, если ключи можно сгруппировать по префиксу, а вставки для каждого префикса являются последовательными или почти последовательными. Дополнительные сведения см. в include/rocksdb/options.h.
  • Добавьте LuaCompactionFilter в утилиты. Это позволяет разработчикам писать фильтры сжатия на Lua. Чтобы использовать эту функцию, LUA_PATH должен быть установлен в корневой каталог Lua.
  • Больше не заполняйте файл «LATEST_BACKUP» в каталоге резервного копирования, который ранее содержал номер последней резервной копии. Последнюю резервную копию можно определить, найдя самый высокий номер файла в подкаталоге «meta/».

4.13.0 (10/18/2016)

Изменение публичного API

  • DB::GetOptions() отражают динамические изменённые параметры (например, через DB::SetOptions()) и возвращают копию параметров вместо ссылки.
  • Добавлена Statistics::getAndResetTickerCount().

Новые функции

  • Добавить DB::SetDBOptions(), чтобы динамически изменить base_background_compactions и max_background_compactions.
  • Добавлен Iterator::SeekForPrev(). Этот новый API будет искать последний ключ, который меньше или равен целевому ключу.

4.12.0 (9/12/2016)

Изменение публичного API

  • CancelAllBackgroundWork() сбрасывает все мемтаблицы для баз данных, содержащих записи, которые обошли WAL (записи, созданные с помощью WriteOptions::disableWAL=true), перед завершением работы фоновых потоков.
  • Объедините параметры source_compaction_factor, max_grandparent_overlap_bytes и expanded_compaction_factor в max_compaction_bytes.
  • Удалить ImmutableCFOptions.
  • Добавить тип сжатия ZSTD, который может работать с ZSTD 0.8.0 или выше. По-прежнему сохраняйте ZSTDNotFinal по соображениям совместимости.

Новые функции

  • Представьте NewClockCache, основанный на алгоритме CLOCK с лучшей параллельной производительностью в некоторых случаях. Его можно использовать для замены кеша блоков и кеша таблиц по умолчанию на основе LRU. Для использования его необходимо связать RocksDB с TBB lib.
  • Измените реализацию статистики тикеров/гистограмм, чтобы накапливать данные в локальном хранилище потока, что повышает производительность процессора за счёт снижения затрат на согласованность кэша. Вызывающим CreateDBStatistics не нужно ничего менять, чтобы использовать эту функцию.
  • Вставка средней точки в кэш блоков. По умолчанию DEFAULT_OPTIONS_HISTORY.md будет отслеживать историю изменений параметров по умолчанию.

4.6.0 (3/10/2016)

Изменения в публичном API

  • Измените значение по умолчанию для 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".

4.5.0 (2/5/2016)

Изменения в публичном API

  • Добавьте новый контекстный уровень perf между kEnableCount и kEnableTime. Уровень 2 теперь не включает таймеры для мьютексов.
  • Статистика продолжительности операций мьютекса по умолчанию не будет измеряться. Если вы хотите включить их, вам нужно установить Statistics::stats_level_ на kAll.
  • DBOptions::delete_scheduler и NewDeleteScheduler() удалены, используйте вместо этого DBOptions::sst_file_manager и NewSstFileManager().

Новые функции

  • Инструмент ldb теперь поддерживает операции с семействами столбцов, отличными от стандартных.
  • Добавить kPersistedTier в ReadTier. Эта опция позволяет Get и MultiGet читать только сохранённые данные и пропускать mem-таблицы, если записи выполнялись с disableWAL = true.
  • Добавить DBOptions::sst_file_manager. Используйте NewSstFileManager() в include/rocksdb/sst_file_manager.h для создания SstFileManager, который можно использовать для отслеживания общего размера файлов SST и контроля скорости удаления файлов SST.

4.4.0 (1/14/2016)

Изменения в публичном API

  • Изменение имён в CompactionPri и добавление нового.
  • Устаревшие options.soft_rate_limit и добавлены options.soft_pending_compaction_bytes_limit.
  • Если options.max_write_buffer_number > 3, запись будет замедлена при записи в последний буфер записи, чтобы отложить полную остановку.
  • Представьте CompactionJobInfo::compaction_reason, это поле включает причину запуска уплотнения.
  • После того как замедление было запущено, если ожидаемые байты сжатия продолжают увеличиваться, замедлите ещё больше.
  • Увеличение default options.delayed_write_rate до 2 МБ/с.
  • Добавлен новый параметр — путь к инструменту ldb. — Путь принимает имя файла MANIFEST, SST или WAL. При вызове ldb можно использовать либо — db, либо — path.

4.3.0 (12/8/2015)

Новые функции

  • CompactionFilter имеет новую функцию-член под названием IgnoreSnapshots, которая позволяет вызывать CompactionFilter, даже если есть снимки позже ключа.
  • RocksDB теперь будет сохранять параметры в том же каталоге, что и база данных RocksDB, при успешном выполнении DB::Open, CreateColumnFamily, DropColumnFamily и SetOptions.
  • Представить LoadLatestOptions() в rocksdb/utilities/options_util.h. Эта функция может создать последние DBOptions / ColumnFamilyOptions, используемые указанным экземпляром RocksDB.
  • Введите CheckOptionsCompatibility() в rocksdb/utilities/options_util.h. Эта функция проверяет, может ли входной набор параметров успешно открыть указанную базу данных.

Изменения в публичном API

  • Когда срабатывает options.db_write_buffer_size, будет сброшен только столбец с наибольшим размером семейства столбцов, а не все семейства столбцов.

4.2.0 (11/9/2015)

Новые функции

  • Введение CreateLoggerFromOptions(), эта функция создаёт Logger для предоставленных DBOptions.
  • Добавление GetAggregatedIntProperty(), которое возвращает сумму GetIntProperty всех семейств столбцов.
  • Добавить MemoryUtil в rocksdb/utilities/memory.h. В настоящее время он предлагает способ получить использование памяти по типу из списка экземпляров rocksdb. Изменения в версии 4.1.0 (10/8/2015)

Новые функции:

  • Добавлена операция одиночного удаления как более эффективный способ удаления ключей, которые не были перезаписаны.
  • Добавлен экспериментальный метод AddFile() в интерфейс DB, который позволяет пользователям добавлять файлы, созданные SstFileWriter, в пустую базу данных. Подробнее см. include/rocksdb/sst_file_writer.h и DB::AddFile().
  • Добавлена поддержка открытия файлов SST с суффиксом .ldb, что позволяет открывать базы данных LevelDB.
  • CompactionFilter теперь поддерживает фильтрацию операндов слияния и результатов слияния.

Изменения в публичном API:

  • В интерфейс DB добавлен метод SingleDelete().
  • В интерфейс DB добавлен метод AddFile().
  • Добавлен класс SstFileWriter.
  • У класса CompactionFilter появился новый метод FilterMergeOperand(), который RocksDB применяет к каждому операнду слияния во время уплотнения, чтобы решить, фильтровать ли операнд.
  • Из файла include/rocksdb/compaction_filter.h удалены интерфейсы CompactionFilterV2. Функциональность была объявлена устаревшей уже в версии 3.13.

Изменения в версии 4.0.0 (9/9/2015):

Новые функции:

  • Поддержка транзакций. См. 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. Мы по-прежнему продолжаем записывать его при создании новых резервных копий (из-за обратной совместимости), но больше не читаем его.

Изменения в публичном API:

  • Класс Env::RandomRWFile и Env::NewRandomRWFile() удалены.
  • DBOptions.num_subcompactions переименован в DBOptions.max_subcompactions, чтобы название лучше соответствовало фактической функциональности опции.
  • В интерфейс Comparator добавлен метод Equal(), который можно дополнительно переопределить в случаях, когда сравнения на равенство могут быть выполнены более эффективно, чем трёхсторонние сравнения.
  • Предыдущий «экспериментальный» класс OptimisticTransaction был заменён классом Transaction.

Изменения в версии 3.13.0 (8/6/2015):

Новые функции:

  • 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.

Изменения в публичном API:

  • Deprecated WriteOptions::timeout_hint_us. Мы больше не поддерживаем тайм-аут записи. Если вам действительно нужен этот параметр, свяжитесь с нами, и мы можем рассмотреть возможность его возврата.
  • Deprecated purge_redundant_kvs_while_flush option.
  • Removed BackupEngine::NewBackupEngine() и NewReadOnlyBackupEngine(), которые были объявлены устаревшими в RocksDB 3.8. Пожалуйста, используйте BackupEngine::Open() вместо этого.
  • Deprecated Compaction Filter V2. Нам неизвестны существующие варианты использования. Если вы используете этот фильтр, ваша компиляция прервётся с RocksDB 3.13. Сообщите нам, если вы его используете, и мы вернём его в RocksDB 3.14.
  • Env::FileExists теперь... 3.11.0 (5/19/2015)

Новые функции:

  • Добавлен новый API Cache::SetCapacity(size_t capacity), чтобы динамически изменять максимальную настроенную ёмкость кэша. Если новая ёмкость меньше существующего использования кэша, реализация попытается уменьшить использование, удаляя необходимое количество элементов в соответствии со строгой политикой LRU.
  • Добавлена экспериментальная API для работы с устройствами flashcache (блокирует фоновые потоки от кэширования их чтений) — NewFlashcacheAwareEnv.
  • Если используется универсальное уплотнение и options.num_levels > 1, файлы уплотнённых данных пытаются хранить не на уровне L0 с меньшими файлами на основе options.target_file_size_base. Ограничение размера БД при использовании универсального уплотнения значительно смягчается за счёт использования большего количества уровней. Можно установить num_levels = 1, чтобы универсальное уплотнение работало как раньше. Если вы установите num_levels > 1 и захотите вернуться к предыдущей версии, вам нужно уплотнить все файлы в большой файл на уровне 0 (установив target_file_size_base большим и CompactRange(<cf_handle>, nullptr, nullptr, true, 0) и заново открыть БД с той же версией, чтобы переписать манифест, а затем вы можете открыть её, используя предыдущие выпуски.
  • Больше информации о фоновых потоках rocksdb доступно в Env::GetThreadList(), включая количество байт, прочитанных / записанных заданием уплотнения, размер mem-таблицы и текущее количество байт, записанных заданием сброса, и многое другое. Подробнее см. include/rocksdb/thread_status.h.

Изменения в публичном API:

  • TablePropertiesCollector::AddUserKey() добавлен для замены TablePropertiesCollector::Add(). AddUserKey() предоставляет пользователям тип ключа, порядковый номер и размер файла до настоящего времени.
  • DBOptions::bytes_per_sync использовался для применения как к файлам WAL, так и к табличным файлам. Начиная с версии 3.11 он применяется только к табличным файлам. Если вы хотите использовать эту опцию для синхронизации WAL в фоновом режиме, пожалуйста, используйте wal_bytes_per_sync.

3.10.0 (3/24/2015):

Новые функции:

  • GetThreadStatus() теперь может сообщать подробный статус потока, включая:
    • Операцию потока, включая сброс и уплотнение.
    • Этап текущей операции потока.
    • Время, прошедшее в микросекундах с момента начала текущей операции потока. Более подробную информацию можно найти в include/rocksdb/thread_status.h. Кроме того, при запуске db_bench с параметром --thread_status_per_interval, db_bench также периодически будет сообщать о статусе потока.
  • Изменён алгоритм LRU кэширования, так что блоки, на которые ссылаются итераторы, никогда не удаляются. Это изменение сделало параметр removeScanCountLimit устаревшим. Из-за этого NewLRUCache больше не принимает три аргумента. Опция table_cache_remove_scan_limit также удалена.
  • По умолчанию мы оптимизируем компиляцию для платформы компиляции (используя -march=native). Если вы хотите создать переносимый двоичный файл, перед командой make используйте 'PORTABLE=1'.
  • Теперь мы разрешаем уплотнению уровня размещать файлы по разным путям, указывая их в db_paths вместе с target_size. Более низкие уровни будут размещены раньше в векторе db_paths, а более высокие уровни — позже.
  • Возможно значительное улучшение производительности, если вы используете RocksDB с большим количеством семейств столбцов (100–1000).
  • Добавлена опция BlockBasedTableOptions.format_version, которая позволяет пользователю указать, какую версию блочной таблицы он хочет. Как правило, новые версии имеют больше функций, но могут быть нечитаемыми старыми версиями RocksDB.
  • Добавлен новый формат блочной таблицы (версия 2), который можно включить, установив BlockBasedTableOptions.format_version = 2. Этот формат изменяет способ кодирования информации о размере в сжатых блоках и должен помочь с распределением памяти, если вы используете сжатия Zlib или BZip2.
  • MemEnv (env, который хранит данные в памяти) теперь доступен в сборке библиотеки по умолчанию. Вы можете создать его, выполнив следующие действия: Вызов NewMemEnv().
  • Добавить SliceTransform.SameResultWhenAppended() для помощи пользователям в определении безопасности применения префиксного фильтра Блума/хэша.
  • Блочно-ориентированная таблица теперь использует префиксный фильтр Блума, если это полный фильтр.
  • Блочно-ориентированная таблица запоминает, поддерживается ли в SST-файлах целый ключ или префиксный фильтр Блума. Выполняйте проверку корректности при чтении файла с пользовательской конфигурацией.
  • Исправлена ошибка в ReadOnlyBackupEngine, которая в некоторых случаях удаляла повреждённые резервные копии, хотя движок был доступен только для чтения.
  • Опция options.level_compaction_dynamic_level_bytes — функция, позволяющая RocksDB выбирать динамическую базу байтов для уровней. При включении этой функции мы автоматически настраиваем максимальное количество байтов для каждого уровня. Цель этой функции — иметь нижнюю границу для увеличения размера. Для получения более подробной информации см. комментарии в файле options.h.
  • Добавлен абстрактный базовый класс WriteBatchBase для пакетов записи.
  • Исправлена ошибка, из-за которой мы начинали удалять файлы удалённой колонки семейств, даже если на неё всё ещё были активные ссылки.

Изменения в публичном API

  • Устаревшие параметры skip_log_error_on_recovery и table_cache_remove_scan_count_limit.
  • Метод Logger logv с параметром уровня журнала теперь является виртуальным.

RocksJava

  • Добавлено сжатие на уровне API.
  • MemEnv теперь доступен в RocksJava через класс RocksMemEnv.
  • Сжатие lz4 теперь включено в статическую библиотеку rocksjava при выполнении команды make rocksdbjavastatic.
  • Переполнение size_t при установке параметров rocksdb теперь вызывает исключение IllegalArgumentException, что избавляет разработчика от необходимости явно перехватывать эти исключения.

3.9.0 (12/8/2014)

Новые функции

  • Добавление rocksdb::GetThreadList(), который в будущем будет возвращать текущий статус всех потоков, связанных с rocksdb. В следующих выпусках RocksDB у нас будет больше инструментов кода.
  • Изменение функции convert в rocksdb/utilities/convenience.h для возврата статуса вместо логического значения. Также добавлена поддержка вложенных опций в функции convert.

Изменения в публичном API

  • Новый API для создания контрольной точки добавлен. Учитывая имя каталога, создаёт новую базу данных, которая является образом существующей базы данных.
  • Новая функция LinkFile добавлена в Env. Если вы реализуете свой собственный класс Env, необходимо предоставить реализацию API LinkFile.
  • Вместо Arena MemTableRep принимает MemTableAllocator.

Улучшения

  • Библиотека RocksDBLite теперь становится меньше и будет компилироваться с флагом -fno-exceptions.

3.8.0 (11/14/2014)

Изменения в публичном API

  • BackupEngine::NewBackupEngine() устарела; теперь используйте BackupEngine::Open().
  • В BackupableDB/RestoreBackupableDB добавлены новые методы GarbageCollect(), которые очищают файлы от повреждённых и устаревших резервных копий.
  • В BackupableDB/RestoreBackupableDB добавлены новые методы GetCorruptedBackups(), которые перечисляют повреждённые резервные копии.

Очистка

  • Куча кода очистки, некоторые дополнительные предупреждения включены (-Wshadow, -Wshorten-64-to-32, -Wnon-virtual-dtor).

Новые функции

  • CompactFiles и EventListener, хотя они всё ещё находятся в экспериментальном состоянии.
  • Полная поддержка семейства столбцов в RocksJava.

3.7.0 (11/6/2014)

Изменения в публичном API

  • Введение SetOptions() API для динамической настройки подмножества параметров онлайн.
  • Введение 4 новых удобных функций для преобразования параметров из строки: GetColumnFamilyOptionsFromMap(), GetColumnFamilyOptionsFromString(), GetDBOptionsFromMap(), GetDBOptionsFromString().
  • Удаление перегрузок WriteBatchWithIndex.Delete() с использованием SliceParts.
  • При открытии БД, если options.max_background_compactions больше существующего пула с низким приоритетом options.env, он будет увеличен. Аналогично, options.max_background_flushes больше существующего пула с высоким приоритетом options.env, он также будет увеличен.

3.6.0 (10/7/2014)

Диск формат изменения

  • Если вы используете RocksDB на ARM-платформах и используете стандартный фильтр Блума, вам необходимо знать об изменении формата диска. Есть три шага, которые нужно выполнить при переходе на новую версию: 1. отключить политику фильтров, 2. уплотнить всю базу данных, 3. включить политику фильтров.

Поведенческие изменения

  • Мы реорганизовали нашу систему приостановки записи. Значения статистики, связанной с остановкой, меняются. Вместо подсчёта количества остановок на запись мы теперь считаем остановки на эпоху, где эпохи — это периоды между сбросами и уплотнениями. Более подробную информацию вы найдёте в нашем руководстве по настройке производительности, как только мы выпустим RocksDB 3.6.

  • Когда disableDataSync=true, мы больше не синхронизируем файл MANIFEST.

  • Добавьте свойство identity_as_first_hash в CuckooTable. Файл SST необходимо перестроить, чтобы читатель мог его правильно открыть.

Изменения в публичном API

  • Измените тип target_file_size_base на uint64_t вместо int.
  • Удалите allow_thread_local. Эта функция оказалась стабильной, поэтому мы включаем её всегда.

3.5.0 (9/3/2014)

Новые функции

  • Добавьте include/utilities/write_batch_with_index.h, предоставляющий служебный класс для запроса данных из WriteBatch при его создании.
  • Переместите параметры, связанные с BlockBasedTable, в BlockBasedTableOptions из Options. Измените соответствующий интерфейс 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.
  • Оптимизируйте OptimizeForPointLookup() для одного параметра размера блока кэша. Теперь он строит хеш-индекс, фильтр Блума и блок кэша.

Изменения в публичном API

  • Преобразователь префиксов, используемый с фильтрами сжатия V2, теперь передаёт пользовательский ключ в SliceTransform::Transform вместо неразобранного ключа RocksDB.

3.4.0 (8/18/2014)

Новые функции

  • Поддержка нескольких путей БД в универсальном стиле уплотнения.
  • Добавление функции хранения простого индекса таблицы и фильтра Блума в файле SST.
  • CompactRange() никогда не будет выводить сжатые файлы на уровень 0. Раньше это происходило, когда все входные файлы уплотнения находились на уровне 0.
  • Добавлен iterate_upper_bound для определения предела, до которого прямой итератор будет возвращать записи. Это предотвратит итерацию по маркерам удаления и перезаписанным записям в крайних случаях, когда вы всё равно хотите прервать итератор. Это может повысить производительность, если имеется большое количество маркеров удаления или перезаписанных записей.

Изменения в публичном API

  • DBOptions.db_paths теперь представляет собой вектор структуры DBPath, которая указывает как путь, так и целевой размер.
  • NewPlainTableFactory вместо множества параметров теперь принимает PlainTableOptions, который определён в include/rocksdb/table.h.
  • Перенесены include/utilities/.h в include/rocksdb/utilities/.h.
  • Статистические API теперь принимают uint32_t в качестве типа вместо Tickers. Также создайте две функции доступа getTickerCount и histogramData const.
  • Добавить свойство DB rocksdb.estimate-num-keys, оценочное количество живых ключей в БД.
  • Добавить DB::GetIntProperty(), который возвращает свойства DB, которые являются целыми числами как uint64_t.
  • Преобразователь префикса, используемый с фильтрами уплотнения V2, теперь передаёт пользовательский ключ в SliceTransform::Transform вместо неразобранного ключа RocksDB.

3.3.0 (7/10/2014)

Новые функции

  • Добавлена прототипная версия JSON API.
  • HashLinklist снижает выбросы производительности, вызванные перекосом корзины, путём переключения данных в корзине со связанного списка на список пропуска. Добавьте параметр threshold_use_skiplist в NewHashLinkListRepFactory().
  • RocksDB теперь может более эффективно восстанавливать пространство памяти во время процесса уплотнения. Это достигается за счёт компенсации размера каждой записи об удалении средним значением 2X, что облегчает запуск уплотнения записями об удалении.
  • Добавьте TimeOut API для записи. Теперь WriteOptions имеют переменную timeout_hint_us. С установленным timeout_hint_us, отличным от нуля, любая запись, связанная с этим timeout_hint_us, может быть прервана, если она выполняется дольше указанного timeout_hint_us, и гарантируется, что любая запись завершится раньше указанного времени ожидания не будет прервана из-за условия тайм-аута.
  • Добавьте опцию rate_limiter, которая контролирует общую пропускную способность сброса и уплотнения. Пропускная способность указана в байтах/сек. При ограничении доступной полосы пропускания сброс всегда имеет приоритет над уплотнением.

Изменения в публичном API

  • Удалено. 3.2.0 (20.06.2014)

Изменения в публичном API

  • Мы удалили поиск уплотнения как концепцию из RocksDB, потому что:
    1. Это больше подходит для рабочих нагрузок на вращающихся дисках, в то время как RocksDB в первую очередь предназначен для флэш-памяти и памяти;
    2. Это добавило некоторую сложность важным путям кода;
    3. Ни один из наших внутренних клиентов фактически не использовал его. Из-за этого Options::disable_seek_compaction теперь устарел. Он всё ещё является параметром в Options, поэтому не нарушает сборку, но не имеет никакого эффекта. Мы планируем полностью удалить его в какой-то момент, поэтому просим пользователей удалить эту опцию из своей кодовой базы.
  • Добавьте два параметра в NewHashLinkListRepFactory() для регистрации слишком большого количества записей в хэш-ведре при сбросе.
  • Добавлена новая опция BlockBasedTableOptions::hash_index_allow_collision. Когда она включена, префиксный хеш-индекс для блочной таблицы не будет хранить префикс и разрешит коллизию хешей, уменьшая потребление памяти.

Новые функции

  • PlainTable теперь поддерживает новое кодирование ключей: для ключей с одинаковым префиксом префикс записывается только один раз. Его можно включить через параметр encoding_type в NewPlainTableFactory().
  • Добавить AdaptiveTableFactory, который используется для преобразования из БД PlainTable в BlockBasedTabe или наоборот. Его можно создать с помощью NewAdaptiveTableFactory().

Улучшения производительности

  • Хвостовой итератор реализован заново с ForwardIterator + каскадным поиском подсказки, см. улучшение пропускной способности примерно на 20%.

3.1.0 (21.05.2014)

Изменения в публичном API

  • Заменено ColumnFamilyOptions::table_properties_collectors на ColumnFamilyOptions::table_properties_collector_factories.

Новые функции

  • Хеш-индекс для блочных таблиц будет материализован и реконструирован более эффективно. Ранее хеш-индекс создавался путём сканирования всей таблицы во время каждого открытия таблицы.
  • Стиль уплотнения FIFO.

3.0.0 (05.05.2014)

Изменения в публичном API

  • Добавлено _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().

2.8.0 (04.04.2014)

  • Удалена 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::Context.

  • Добавлены «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. Эти записи были прерваны, и мы можем спокойно проигнорировать это.

  • Добавлен новый формат SST «PlainTable», оптимизированный для рабочих нагрузок только с использованием памяти. Его можно создать через NewPlainTableFactory() или NewTotalOrderPlainTableFactory().

  • Реализована новая реализация таблицы mem hash связанного списка, оптимизированная для случая, когда для каждого префикса имеется всего несколько ключей. Её можно создать с помощью NewHashLinkListRepFactory().

  • Оператор слияния поддерживает новую функцию PartialMergeMulti(), позволяющую пользователям выполнять частичное слияние с несколькими операндами.

  • Теперь интерфейс компактора имеет версию V2. Он буферизует пары KV-ключей с общим префиксом ключа, обрабатывает их пакетами и возвращает результаты пакетной обработки обратно в БД. Новый интерфейс использует новую структуру CompactionFilterContext для той же цели, что и CompactionFilter::Context в версии V1.

  • Геопространственная поддержка местоположений и радиального поиска.

2.7.0 (01/28/2014)

Изменения в публичном API

  • Переименован StackableDB::GetRawDB() в StackableDB::GetBaseDB().
  • Переименована функция WriteBatch::Data() const std::string& Data() const.
  • Переименован класс TableStats в TableProperties.
  • Удалён класс PrefixHashRepFactory. Вместо него следует использовать NewHashSkipListRepFactory().
  • Поддерживаются многопоточные EnableFileDeletions() и DisableFileDeletions().
  • Добавлена функция DB::GetOptions().
  • Добавлена функция DB::GetDbIdentity().

Новые функции

  • Добавлена BackupableDB.
  • Реализован TailingIterator — особый тип итератора, который не создаёт моментальный снимок (может использоваться для чтения вновь вставленных данных) и оптимизирован для последовательного чтения.
  • Добавлен блок свойств для таблицы, позволяющий (1) таблице хранить свои метаданные и (2) конечному пользователю собирать и хранить интересующие их свойства.
  • Включено кэширование индекса и блока фильтра в блочном кэше (по умолчанию отключено).
  • При выполнении ручного уплотнения поддерживается сообщение об ошибке.
  • Поддерживается дополнительная платформа Linux и Mac OS.
  • Put с SliceParts — вариант Put(), который собирает выходные данные, такие как writev(2).

Улучшения производительности

  • Значительные улучшения производительности благодаря множеству усилий. Например, увеличение количества операций чтения в секунду с примерно 530 тыс. в выпуске 2.6 до 1,1 млн в 2.7 [1].
  • Ускорение способа, которым RocksDB удаляет устаревшие файлы — больше не перечисляет весь каталог под блокировкой — уменьшение p99.
  • Использование необработанного указателя вместо общего указателя для статистики: [5b825d] — значительное увеличение производительности — общие указатели работают медленно.
  • Оптимизация блокировки для Get() — [1fdb3f] — увеличение QPS на 1,5x для некоторых рабочих нагрузок.
  • Увеличение скорости кэша — [e8d40c3].
  • Реализация автовектора, который выделяет первые N элементов в стеке. Большинство векторов в RocksDB небольшие. Кроме того, мы никогда не хотим выделять объекты кучи, удерживая мьютекс. — [c01676e4].
  • Множество усилий по перемещению malloc, memcpy и IO за пределы блокировок.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/victory_always-rocksdb.git
git@api.gitlife.ru:oschina-mirror/victory_always-rocksdb.git
oschina-mirror
victory_always-rocksdb
victory_always-rocksdb
master