Berkeley db чем открыть

Обновлено: 01.07.2024

Функция Db::open открывает базу данных, представленную файлом, как для чтения, так и для записи. Файлы, не предназначенные для совместного использования или хранения на диске, могут быть созданы путем установки для параметра файла значения NULL.

Обратите внимание: несмотря на то, что большинство методов доступа используют файл в качестве имени базового файла на диске, это не гарантируется. Кроме того, вызов Db::open — довольно дорогая операция. (Это основано на модели, в которой СУБД держит набор файлов открытым в течение длительного времени, а не открывает и закрывает их при каждом запросе.)

Аргумент типа имеет тип DBTYPE и должен иметь значение DB_BTREE, DB_HASH, DB_RECNO или DB_UNKNOWN. Если тип DB_UNKNOWN, база данных уже должна существовать, и Db::open затем определит, имеет ли она тип DB_BTREE, DB_HASH или DB_RECNO.

Метод доступа Btree представляет собой отсортированную сбалансированную древовидную структуру, в которой хранятся связанные пары ключ/данные. Поиски, вставки и удаления в b-дереве завершатся за O (lg по основанию N), где основание — это среднее количество ключей на странице. Часто вставка упорядоченных данных в b-деревья приводит к заполнению страниц наполовину. Эта реализация была изменена, чтобы сделать упорядоченную (или обратную) вставку в лучшем случае, что привело к почти идеальному использованию пространства страницы.

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

Метод доступа Hash — это расширяемая динамическая схема хеширования.

Метод доступа Recno обеспечивает поддержку записей фиксированной и переменной длины, которые могут поддерживаться файлом с неструктурированным текстом (поток байтов). Доступ к записям фиксированной и переменной длины осуществляется по их логическому номеру записи.

Действительно создать запись, номер которой более чем на единицу больше, чем у последней записи, находящейся в настоящее время в базе данных. Например, создание записи номер 8, когда записи 6 и 7 еще не существуют, не является ошибкой. Однако любая попытка получить такие записи (например, записи 6 и 7) вернет DB_KEYEMPTY.

По умолчанию удаление записи не приводит к перенумерации записей, следующих за удаленной записью (дополнительную информацию см. в описании флага DB_RENUMBER). Любая попытка восстановить удаленные записи вернет DB_KEYEMPTY.

Флаги и аргументы режима указывают, как будут открываться и/или создаваться файлы, если они еще не существуют. Значение flags определяется путем логического объединения одного или нескольких из следующих значений:

DB_CREATE При необходимости создайте любые базовые файлы. Если файлы еще не существуют и флаг DB_CREATE не указан, вызов завершится ошибкой.

DB_NOMMAP Не сопоставлять этот файл (см. DbMpool::open для получения дополнительной информации).

DB_RDONLY Открыть базу данных только для чтения. Любая попытка изменить элементы в базе данных потерпит неудачу независимо от фактических разрешений любых базовых файлов.

DB_THREAD Делает так, чтобы дескриптор m4_reg(Db), возвращаемый Db::open, мог использоваться несколькими потоками в пределах одного адресного пространства, т. е. был беспотоковым.

DB_TRUNCATE Логически обрезать базу данных, если она существует, т. е. вести себя так, как если бы база данных была только что создана, отбрасывая все предыдущее содержимое.

Все файлы, созданные методами доступа, создаются с режимом режима (как описано в chmod(2)) и модифицируются значением umask процесса во время создания (см. umask(2))))). Групповое владение созданными файлами основано на параметрах системы и каталога по умолчанию и далее не указывается Berkeley DB.

При совместном использовании среды базы данных с другими процессами необходимо предоставить методам доступа информацию о среде базы данных. См. DbEnv для описания аргумента dbenv.

Кроме того, при вызове Db::open можно указать конкретную информацию о методе доступа. См. DbInfo для описания аргумента db_info.

Метод Db::open копирует указатель на объект Db в область памяти, на которую ссылается dbpp. Методы этого объекта позволяют выполнять различные действия с базой данных. Методы описаны на следующих страницах руководства: Db::close, Db::cursor, Db::del, Db::fd, Db::get, Db::get_type, Db::put и Db::sync.

DB_HOME Если аргумент dbenv для Db::open был инициализирован с помощью DbEnv::appinit, переменная среды DB_HOME может использоваться как путь к домашней базе данных для интерпретации каталога. В частности, на Db::open влияет значение строки конфигурации DB_DATA_DIR.

Если в Berkeley DB возникает фатальная ошибка, метод Db::open может завершиться ошибкой и либо вернуть DB_RUNRECOVERY, либо сгенерировать исключение, инкапсулирующее DB_RUNRECOVERY, после чего все последующие вызовы базы данных также завершатся ошибкой.Методы, помеченные как возвращающие errno, по умолчанию будут генерировать исключение, которое инкапсулирует информацию об ошибке. Поведение ошибки по умолчанию можно изменить, см. DbException.

Метод Db::open может дать сбой и вызвать исключение для любой из ошибок, указанных для следующих библиотечных функций Berkeley DB и C: Db::cursor, Db::sync, DBcursor->c_close(3), DBmemp. ->pgin(3), DBmemp->pgout(3), __account_page(3), abort(3), close(3), dbenv->db_paniccall(3), dbp->h_hash(3), fcntl(3) , fflush(3), fprintf(3), free(3), fstat(3), fsync(3), func(3), getenv(3), getpid(3), getuid(3), isdigit(3) , DbLockTab::get, DbLockTab::id, DbLock::put, DbLockTab::vec, DbLog::compare, DbLog::flush, DbLog::put, DbLog::db_register, DbLog::db_unregister, lseek(3) , malloc(3), memcmp(3), memcpy(3), memmove(3), DbMpool::close, DbMpoolFile::close, DbMpoolFile::get, DbMpoolFile::open, DbMpoolFile::put, DbMpoolFile::set , DbMpoolFile::sync, DbMpool::open, DbMpool::db_register, memset(3), mmap(3), munmap(3), open(3), pread(3), pstat_getdynamic(3), pwrite(3) , read(3), realloc(3), sigfillset(3), sigprocmask(3), stat(3), strerror(3), strlen(3), sysconf(3), time(3), unlink(3) , вфпринтф(3), вснпринт f(3) и написать(3).

Кроме того, метод Db::open может завершиться ошибкой и вызвать исключение или вернуть ошибку в следующих случаях:

EAGAIN Блокировка недоступна.

EINVAL Было указано недопустимое значение флага или параметр (например, неизвестный тип базы данных, размер страницы, хеш-функция, байт recno pad, порядок байтов) или значение флага или параметр, несовместимый с текущей спецификацией файла.

Был указан флаг DB_THREAD, и спин-блокировки не реализованы для этой архитектуры.

Обнаружено несоответствие между номером версии файла и программного обеспечения.

Файл re_source был указан либо с флагом DB_THREAD, либо с ненулевым полем tx_info в аргументе DB_ENV для Db::open.

В настоящее время в Berkeley DB поддерживаются следующие форматы файлов (или методы доступа): Btree, Hash, Queue и Recno. Формат Btree представляет собой отсортированную сбалансированную древовидную структуру. Формат Hash — это расширяемая динамическая схема хеширования. Формат Queue поддерживает быстрый доступ к записям фиксированной длины, доступ к которым осуществляется последовательно или по логическому номеру записи. Формат Recno поддерживает записи фиксированной или переменной длины, доступ к которым осуществляется последовательно или по логическому номеру записи, и при необходимости может поддерживаться простым текстовым файлом.

Хранение и поиск методов доступа к базе данных Berkeley DB основаны на парах ключ/данные; см. Dbt для получения дополнительной информации.

Интерфейс Db::open открывает базу данных, представленную файлом и аргументами базы данных, как для чтения, так и для записи. Аргумент файла используется как имя базового файла, который будет использоваться для поддержки базы данных. Аргумент базы данных является необязательным и позволяет приложениям иметь несколько баз данных в одном файле. Хотя аргумент базы данных указывать не нужно, попытка открыть вторую базу данных в файле, который изначально не был создан с использованием имени базы данных, является ошибкой. Кроме того, аргумент базы данных не поддерживается форматом Queue. Наконец, при открытии нескольких баз данных в одном физическом файле важно учитывать проблемы с блокировкой и кешем памяти; дополнительную информацию см. в разделе Открытие нескольких баз данных в одном файле.

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

Аргумент type имеет тип DBTYPE и должен иметь значение DB_BTREE, DB_HASH, DB_QUEUE, DB_RECNO или DB_UNKNOWN. Если тип DB_UNKNOWN, база данных уже должна существовать, и Db::open автоматически определит ее тип. Метод Db::get_type можно использовать для определения базового типа баз данных, открытых с помощью DB_UNKNOWN.

Если операция должна быть защищена транзакцией (кроме указания флага DB_AUTO_COMMIT), параметр txnid представляет собой дескриптор транзакции, возвращаемый из DbEnv::txn_begin; в противном случае NULL.

Флаги и аргументы режима указывают, как будут открываться и/или создаваться файлы, если они еще не существуют.

Значение flags должно быть установлено равным 0 или путем побитового ИЛИ включительно одно или несколько из следующих значений:

DB_AUTO_COMMIT Включите вызов Db::open в транзакцию. Если вызов завершится успешно, операцию открытия можно будет восстановить. Если вызов завершится ошибкой, база данных не будет создана.

DB_CREATE Создать базу данных. Если база данных еще не существует и флаг DB_CREATE не указан, Db::open завершится ошибкой.

DB_DIRTY_READ Поддержка грязного чтения; то есть операции чтения в базе данных могут запрашивать возврат измененных, но еще не зафиксированных данных.

DB_EXCL Возвращает ошибку, если база данных уже существует. Флаг DB_EXCL имеет смысл, только если указан с флагом DB_CREATE.

DB_NOMMAP Не сопоставлять эту базу данных с памятью процесса (дополнительную информацию см. в описании метода DbEnv::set_mp_mmapsize).

DB_RDONLY Открыть базу данных только для чтения. Любая попытка изменить элементы в базе данных потерпит неудачу, независимо от фактических разрешений любых базовых файлов.

DB_THREAD Делает дескриптор Db, возвращаемый Db::open, свободным потоком; то есть может использоваться несколькими потоками в одном адресном пространстве.

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

Флаг DB_TRUNCATE не может быть защищен от транзакций, и указывать его в защищенной от транзакций среде является ошибкой.

В системах UNIX или в средах IEEE/ANSI Std 1003.1 (POSIX) все файлы, созданные при открытии базы данных, создаются в режиме режима (как описано в chmod(2)) и модифицируются значением umask процесса в момент создания (см. umask(2)). Если режим равен 0, открытая база данных будет использовать режим по умолчанию, доступный для чтения и записи как для владельца, так и для группы. В системах Windows аргумент режима игнорируется. Групповое владение созданными файлами основано на параметрах системы и каталога по умолчанию и далее не указывается Berkeley DB.

Вызов Db::open — довольно затратная операция, и поддержка набора открытых баз данных обычно предпочтительнее, чем многократное открытие и закрытие базы данных для каждого нового запроса.

Метод Db::open либо возвращает ненулевое значение ошибки, либо генерирует исключение, которое инкапсулирует ненулевое значение ошибки в случае ошибки и возвращает 0 в случае успеха. В случае сбоя Db::open следует вызвать метод Db::close, чтобы сбросить дескриптор Db.

DB_HOME Если был указан аргумент dbenv для db_create, переменная среды DB_HOME может использоваться как путь к домашней среде базы данных.

На Db::open влияет любой каталог базы данных, указанный с помощью метода DbEnv::set_data_dir или путем установки строки "set_data_dir" в файле среды DB_CONFIG.

TMPDIR Если аргументы file и dbenv для Db::open равны NULL, переменная среды TMPDIR может использоваться как каталог для создания временных резервных файлов

Метод Db::open может завершиться ошибкой и вызвать исключение или вернуть ненулевую ошибку в следующих случаях:

DB_OLD_VERSION Базу данных нельзя открыть без предварительного обновления.

Указаны EEXIST DB_CREATE и DB_EXCL, и база данных существует.

EINVAL Было указано недопустимое значение флага или параметра. (например, неизвестный тип базы данных, размер страницы, хэш-функция, байт заполнения, порядок байтов) или значение флага или параметр, несовместимый с указанной базой данных.

Был указан флаг DB_THREAD, и для этой архитектуры недоступны быстрые мьютексы.

Флаг DB_THREAD был указан для Db::open, но не был указан для вызова DbEnv::open для среды, в которой был создан дескриптор Db.

Базовый простой текстовый файл был указан либо с флагом DB_THREAD, либо предоставленная среда базы данных поддерживает обработку транзакций.

ENOENT Был указан несуществующий файл re_source.

Метод Db::open может завершиться ошибкой и вызвать исключение или вернуть ненулевую ошибку для ошибок, указанных для других СУБД Berkeley и библиотеки C или системных методов. Если произошла катастрофическая ошибка, метод Db::open может завершиться ошибкой и либо вернуть DB_RUNRECOVERY, либо сгенерировать исключение DbRunRecoveryException, и в этом случае все последующие вызовы Berkeley DB завершатся таким же образом.

Метод DB->open() открывает базу данных, представленную файлом и базой данных.

В настоящее время в Berkeley DB поддерживаются следующие форматы файлов (или методы доступа): Btree, Hash, Heap, Queue и Recno. Формат Btree представляет собой отсортированную сбалансированную древовидную структуру. Формат Hash — это расширяемая динамическая схема хеширования. Формат Queue поддерживает быстрый доступ к записям фиксированной длины, доступ к которым осуществляется последовательно или по логическому номеру записи. Формат Recno поддерживает записи фиксированной или переменной длины, доступ к которым осуществляется последовательно или по логическому номеру записи, и при необходимости может поддерживаться простым текстовым файлом.

Хранение и поиск методов доступа к базе данных Berkeley DB основаны на парах ключ/данные; см. DBT для получения дополнительной информации.

Вызов DB->open() является относительно дорогостоящей операцией, и поддержка набора открытых баз данных обычно предпочтительнее, чем многократное открытие и закрытие базы данных для каждого нового запроса.

Метод DB->open() возвращает ненулевое значение ошибки в случае ошибки и 0 в случае успеха. Если DB->open() завершается ошибкой, необходимо вызвать метод DB->close(), чтобы сбросить дескриптор БД.

Параметры

txnid

Если операция является частью транзакции, указанной приложением, параметр txnid представляет собой дескриптор транзакции, возвращаемый из DB_ENV->txn_begin(); если операция является частью группы параллельных хранилищ данных Berkeley DB, параметр txnid является дескриптором, возвращаемым из DB_ENV->cdsgroup_begin(); в противном случае NULL. Если дескриптор транзакции не указан, но указан флаг DB_AUTO_COMMIT, операция будет неявно защищена от транзакции. Обратите внимание, что операции с защитой транзакций в дескрипторе БД требуют, чтобы сам дескриптор БД был защищен транзакциями во время его открытия. Также обратите внимание, что транзакция должна быть зафиксирована до закрытия дескриптора; см. дескрипторы Berkeley DB для получения дополнительной информации.

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

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

При использовании сборки Unicode в Windows (по умолчанию) аргумент файла будет интерпретироваться как строка UTF-8, что эквивалентно ASCII для латинских символов.

база данных

Параметр базы данных является необязательным и позволяет приложениям иметь несколько баз данных в одном файле. Хотя параметр базы данных указывать не нужно, попытка открыть вторую базу данных в файле, который изначально не был создан с использованием имени базы данных, является ошибкой. Кроме того, параметр базы данных не поддерживается форматом Queue или Heap. Наконец, при открытии нескольких баз данных в одном физическом файле важно учитывать проблемы с блокировкой и кешем памяти; дополнительную информацию см. в разделе Открытие нескольких баз данных в одном файле.

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

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

Параметр типа имеет тип DBTYPE и должен иметь значение DB_BTREE , DB_HASH , DB_HEAP , DB_QUEUE , DB_RECNO или DB_UNKNOWN . Если тип DB_UNKNOWN, база данных уже должна существовать, и DB->open() автоматически определит ее тип. Метод DB->get_type() может использоваться для определения базового типа баз данных, открытых с помощью DB_UNKNOWN.

Указание неправильного типа для уже существующей базы данных является ошибкой.

флаги

Параметр flags должен быть установлен равным нулю или побитовым включительно ИЛИ объединяющим вместе одно или несколько из следующих значений:

Включите вызов DB->open() в транзакцию. Если вызов завершится успешно, операцию открытия можно будет восстановить, и все последующие операции модификации базы данных, основанные на этом дескрипторе, будут защищены от транзакций. Если вызов завершится ошибкой, база данных не будет создана.

Создайте базу данных. Если база данных еще не существует и флаг DB_CREATE не указан, DB->open() завершится ошибкой.

Возвращает ошибку, если база данных уже существует. Флаг DB_EXCL имеет смысл только в том случае, если указан с помощью DB_CREATE. флаг.

Откройте базу данных с поддержкой управления параллельным выполнением нескольких версий. Это приведет к тому, что обновления в базе данных будут следовать протоколу копирования при записи, который требуется для поддержки изоляции моментальных снимков. Флаг DB_MULTIVERSION требует, чтобы база данных была защищена от транзакций во время ее открытия, и не поддерживается форматом очереди.

Не сопоставляйте эту базу данных с памятью процесса (дополнительную информацию см. в методе DB_ENV->set_mp_mmapsize()).

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

Поддержка транзакционных операций чтения с изоляцией степени 1. Операции чтения в базе данных могут запрашивать возврат измененных, но еще не зафиксированных данных. Этот флаг должен быть указан для всех дескрипторов БД, используемых для выполнения грязного чтения или обновления базы данных, в противном случае запросы на грязное чтение могут не выполняться и чтение может быть заблокировано.

Дескриптор БД, возвращаемый DB->open(), должен быть свободным потоком ; то есть одновременно может использоваться несколькими потоками в адресном пространстве. Вы должны использовать этот флаг только при отсутствии внешней среды.

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

Обратите внимание, что этот флаг несовместим с методом DB->set_lk_exclusive().

Учтите, что при включении этого флага обращения к БД будут сериализованы при использовании дескриптора между потоками. Если параллельное масштабирование важно для вашего приложения, мы рекомендуем открывать отдельные дескрипторы для каждого потока (и не указывать этот флаг), а не совместно использовать дескрипторы между потоками.

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

Флаг DB_TRUNCATE не может быть заблокирован или защищен от транзакций, и его указание в среде с блокировкой или защитой от транзакций является ошибкой.

В системах Windows параметр режима игнорируется.

В системах UNIX или в средах IEEE/ANSI Std 1003.1 (POSIX) файлы, созданные при открытии базы данных, создаются в режиме режима (как описано в chmod (2)) и изменяются с помощью значения umask процесса во время создание (см. umask (2)). Созданные файлы принадлежат владельцу процесса; групповое владение созданными файлами основано на параметрах системы и каталога по умолчанию и далее не указывается Berkeley DB. Сегменты системной общей памяти, созданные при открытии базы данных, создаются с режимом mode , не изменяемым значением umask процесса. Если режим равен 0, открытая база данных будет использовать режим по умолчанию, доступный для чтения и записи как для владельца, так и для группы.

Переменные среды

Если база данных была открыта в среде базы данных, переменная среды DB_HOME может использоваться в качестве пути к домашнему каталогу среды базы данных.

На DB->open() влияет любой каталог базы данных, указанный с помощью метода DB_ENV->add_data_dir() или путем установки строки "add_data_dir" в файле DB_CONFIG среды.

TMPDIR

Если параметры файла и dbenv для DB->open() равны NULL , переменная среды TMPDIR может использоваться как каталог для создания временных резервных файлов

Ошибки

Метод DB->open() может завершиться ошибкой и вернуть одну из следующих ненулевых ошибок:

DB_LOCK_DEADLOCK

Для устранения взаимоблокировки была выбрана операция среды транзакционной базы данных.

DB_LOCK_NOTGRANTED

Среда базы данных Berkeley DB Concurrent Data Store, настроенная на время ожидания блокировки, не смогла предоставить блокировку в разрешенное время.

Вы попытались открыть дескриптор базы данных, настроенный на монопольную блокировку без ожидания, но монопольную блокировку не удалось получить немедленно. См. DB->set_lk_exclusive() для получения дополнительной информации.

Открывается команда berkdb open, которая дополнительно создает базу данных. Возвращаемый дескриптор базы данных привязывается к команде Tcl вида dbN, где N — целое число, начинающееся с 0 (например, db0 и db1). Именно через эту команду Tcl сценарий получает доступ к методам базы данных.

Возможны следующие варианты:

-auto_commit Включить вызов в транзакцию. Если вызов завершится успешно, изменения, сделанные операцией, можно будет восстановить. Если вызов завершится ошибкой, операция не внесет изменений.

-btree Открыть/создать базу данных типа Btree. Формат Btree представляет собой отсортированную сбалансированную древовидную структуру.

-hash Открыть/создать базу данных типа Hash. Формат Hash — это расширяемая динамическая схема хеширования.

-queue Открыть/создать базу данных типа Queue. Формат Queue поддерживает быстрый доступ к записям фиксированной длины, доступ к которым осуществляется по последовательному или логическому номеру записи.

-recno Открыть/создать базу данных типа Recno. Формат Recno поддерживает записи фиксированной или переменной длины, доступ к которым осуществляется последовательно или по логическому номеру записи и при необходимости извлекается из простого текстового файла.

-unknown База данных неизвестного типа и должна уже существовать.

-cachesize Установите размер буферного пула разделяемой памяти базы данных (то есть кэша) в гигабайты плюс байты. Кэш должен иметь размер обычного рабочего набора данных приложения с небольшим объемом дополнительной памяти для нестандартных ситуаций. (Примечание: рабочий набор не совпадает с количеством страниц, на которые одновременно ссылаются, и должен быть немного больше!)

Размер кэша по умолчанию составляет 256 КБ, и его нельзя указать меньше 20 КБ. Любой размер кэша менее 500 МБ автоматически увеличивается на 25 % для учета накладных расходов на пул буферов; размеры кеша более 500 МБ используются, как указано.

Для Berkeley DB можно указать кэши достаточного размера, чтобы их нельзя было размещать непрерывно на некоторых архитектурах; например, некоторые выпуски Solaris ограничивают объем памяти, который может быть непрерывно выделен процессом. Если ncache равен 0 или 1, кэш будет размещен в памяти непрерывно.Если оно больше 1, кеш будет разбит на ncache одинаковых по размеру отдельных частей памяти.

Информацию о настройке размера кэша Berkeley DB см. в разделе Выбор размера кэша.

Поскольку базы данных, открытые в среде Berkeley DB, используют кэш, указанный для среды, попытка установить кэш в базе данных, созданной в среде, является ошибкой.

-create При необходимости создайте любые базовые файлы. Если файлы еще не существуют и аргумент -create не указан, вызов завершится ошибкой.

-delim delim Установите байт-разделитель, используемый для обозначения конца записи в резервном исходном файле для метода доступа Recno.

Этот байт используется для записей переменной длины, если указан исходный файл аргументов. Если указан файл аргумента -source и не указан байт-разделитель, символы (то есть ASCII 0x0a) интерпретируются как маркеры конца записи.

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

ошибка при указании и -dup, и -recnum.

-dupsort Сортировка дубликатов в наборе элементов данных. Будет использовано лексическое сравнение по умолчанию. Указание того, что дубликаты должны быть отсортированы, изменяет поведение операции put db, а также операции put dbc, когда указаны параметры -keyfirst, -keylast и -current.

-env env Если аргумент -env не указан, база данных является автономной; то есть он не является частью какой-либо среды Berkeley DB.

Если задан аргумент -env, база данных создается в указанной среде Berkeley DB. Методы доступа к базе данных автоматически вызывают другие подсистемы Berkeley DB в зависимости от окружающей среды. Например, если среда настроена на использование блокировки, методы доступа будут автоматически получать правильные блокировки при чтении и записи страниц базы данных.

Когда в библиотеке Berkeley DB возникает ошибка, функция возвращает ошибку Berkeley DB или возвращаемое значение ошибки. Однако в некоторых случаях значения errno может быть недостаточно для полного описания причины ошибки, особенно во время первоначальной отладки приложения.

Аргумент -errfile используется для улучшения механизма передачи сообщений об ошибках в приложение путем указания файла, который будет использоваться для отображения дополнительных сообщений об ошибках Berkeley DB. В некоторых случаях при возникновении ошибки Berkeley DB выводит дополнительное сообщение об ошибке для указанной ссылки на файл.

Сообщение об ошибке будет состоять из имени команды Tcl и двоеточия (":"), строки ошибки и завершающего символа. Если база данных была открыта в среде, именем команды Tcl будет имя среды (например, env0), в противном случае это будет имя команды базы данных (например, db0).

Это усовершенствование ведения журнала ошибок не снижает производительность и не значительно увеличивает размер приложения, и его можно запускать как в обычном режиме, так и во время отладки приложения.

Для дескрипторов базы данных, открытых в средах Berkeley DB, указание аргумента -errfile влияет на всю среду и эквивалентно указанию того же аргумента в команде berkdb env.

-excl Возвращает ошибку, если база данных уже существует.

-extent size Установить размер экстентов базы данных Queue; размер указывается как количество страниц в экстенте. Каждый экстент создается как отдельный физический файл. Если размер экстента не задан, по умолчанию создается только один базовый файл базы данных.

Информацию о настройке размера экстента см. в разделе Выбор размера экстента.

-fфактор плотности Установите желаемую плотность в хэш-таблице.

Плотность – это приблизительное количество ключей, которое может накапливаться в любом сегменте

-len len Для метода доступа Queue укажите, что записи имеют длину len.

Для метода доступа Recno укажите, что записи имеют фиксированную длину, не разделены байтами и имеют длину len.

Все добавляемые в базу данных записи, длина которых меньше len байт, автоматически дополняются (дополнительную информацию см. в аргументе -pad).

Любая попытка вставить в базу данных записи, длина которых превышает len байт, приведет к немедленному сбою вызова и возврату ошибки.

В системах UNIX или в средах IEEE/ANSI Std 1003.1 (POSIX) все файлы, созданные с помощью методов доступа, создаются с режимом режима (как описано в chmod(2)) и модифицируются значением umask процесса в момент время создания (см. umask(2)). Групповое владение созданными файлами основано на параметрах системы и каталога по умолчанию и далее не указывается Berkeley DB.Если режим равен 0, файлы создаются с возможностью чтения и записи как владельцем, так и группой. В системах Windows аргумент режима игнорируется.

-nelem size Установить приблизительный размер хеш-таблицы.

Если значение не задано или задано слишком низкое значение, хэш-таблицы по-прежнему будут корректно расширяться по мере ввода ключей, хотя может быть замечено небольшое снижение производительности.

-pad pad Установите символ заполнения для коротких записей фиксированной длины для методов доступа Queue и Recno.

Если символ заполнения не указан, для заполнения используются символы (то есть ASCII 0x20).

-pagesize pagesize Установите размер страниц, используемых для хранения элементов в базе данных, в байтах. Минимальный размер страницы составляет 512 байт, а максимальный размер страницы — 64 КБ. Если размер страницы не задан явно, он выбирается на основе размера блока ввода-вывода базовой файловой системы. Автоматически выбранный размер имеет нижний предел 512 байт и верхний предел 16 КБ.

Информацию о настройке размера страницы Berkeley DB см. в разделе Выбор размера страницы.

-rdonly Открыть базу данных только для чтения. Любая попытка изменить элементы в базе данных потерпит неудачу, независимо от фактических разрешений любых базовых файлов.

-recnum Поддержка извлечения из B-дерева с использованием номеров записей.

Логические номера записей в базах данных Btree могут изменяться при вставке или удалении записей. См. аргумент -renumber для дальнейшего обсуждения.

Ведение счетчиков записей в B-дереве приводит к серьезному спору, а именно к расположению страниц, на которых хранятся счетчики записей. Кроме того, все дерево должно быть заблокировано как во время вставки, так и во время удаления, что эффективно делает дерево однопоточным для этих операций. Указание -recnum может привести к серьезному снижению производительности некоторых приложений и наборов данных.

Указание одновременно -dup и -recnum является ошибкой.

-renumer При указании аргумента -renumber логические номера записей становятся изменяемыми и изменяются по мере добавления и удаления записей из базы данных. Например, удаление записи с номером 4 приводит к перенумерации записей с номером 5 и выше на единицу вниз. Если перед удалением курсор был установлен на запись номер 4, после удаления он будет ссылаться на новую запись номер 4, если такая запись существует. Если перед удалением курсор был расположен после записи номер 4, он будет сдвинут вниз на одну логическую запись, продолжая ссылаться на ту же запись, что и раньше.

Использование интерфейсов db put или dbc put для создания новых записей приведет к созданию нескольких записей, если номер записи более чем на единицу больше, чем самая большая запись в настоящее время. в базе данных. Например, создание записи 28, когда запись 25 ранее была последней записью в базе данных, создаст записи 26 и 27, а также 28.

Если созданная запись находится не в конце базы данных, все записи, следующие за новой записью, будут автоматически перенумерованы на единицу вверх. Например, создание новой записи с номером 8 приводит к увеличению нумерации записей с номером 8 и выше на единицу. Если перед вставкой курсор был установлен на запись номер 8 или выше, он будет сдвинут вверх на одну логическую запись, продолжая ссылаться на ту же запись, что и раньше.

По этим причинам одновременный доступ к базе данных Recno с указанным флагом -renumber может быть в значительной степени бессмысленным, хотя он и поддерживается.

-snapshot Этот аргумент указывает, что любой указанный исходный файл будет прочитан полностью при открытии базы данных. Если этот аргумент не указан, исходный файл может быть прочитан лениво.

-source file Задайте базовый исходный файл для метода доступа Recno. Файл -source предназначен для обеспечения быстрого доступа и изменения баз данных, которые обычно хранятся в виде простых текстовых файлов.

Если задан аргумент -source, он указывает базовый файл базы данных с неструктурированным текстом, который считывается для инициализации временного индекса номеров записей. В случае записей переменной длины записи разделяются, как указано параметром -delim. Например, стандартные файлы потоков байтов UNIX можно интерпретировать как последовательность записей переменной длины, разделенных символами.

Кроме того, когда кэшированные данные обычно записываются обратно в базовый файл базы данных (например, при вызове команд db close или db sync), копия базы данных в памяти будет записана обратно в исходный файл.

По умолчанию резервный исходный файл читается лениво, то есть записи не считываются из файла до тех пор, пока они не будут запрошены приложением. Если несколько процессов (не потоков) одновременно обращаются к базе данных Recno и либо вставляют, либо удаляют записи, резервный исходный файл должен быть полностью прочитан, прежде чем более чем один процесс получит доступ к базе данных, и только этот процесс должен указывать аргумент резервного источника. в рамках открытого конкурса berkdb.См. аргумент -snapshot для получения дополнительной информации.

Чтение и запись резервного исходного файла, заданного параметром -source, не могут быть защищены транзакциями, поскольку они включают операции с файловой системой, которые не являются частью методологии транзакций Berkeley DB. По этой причине, если для хранения записей используется временная база данных, можно потерять содержимое файла -file, например, в случае сбоя системы в нужный момент. Если файл используется для хранения базы данных, то есть имя файла было указано в качестве аргумента файла для открытия berkdb, можно использовать обычное восстановление базы данных для этого файла, чтобы предотвратить потерю информации, хотя все еще возможно, что содержимое -source будут потеряны в случае сбоя системы.

Файл -source должен уже существовать (но может иметь нулевую длину), когда вызывается berkdb open.

Указание исходного файла, доступного только для чтения, при создании базы данных не является ошибкой, как не является ошибкой и изменение результирующей базы данных. Однако любая попытка записать изменения в резервный исходный файл с помощью команд db close или db sync, конечно же, потерпит неудачу. Укажите аргумент -nosync для команды закрытия db, чтобы она не пыталась записать изменения в резервный файл; вместо этого они будут автоматически удалены.

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

-truncate Физически обрезать базовый файл, отбрасывая все предыдущие базы данных, которые он мог содержать. Базовые примитивы файловой системы используются для реализации этого флага. По этой причине он применим только к физическому файлу и не может использоваться для удаления баз данных в файле.

Аргумент -truncate не может быть защищен от транзакций, и его указание в среде с защитой от транзакций является ошибкой.

-txn txnid Если операция должна быть защищена транзакцией (кроме указания флага -auto_commit), параметр txnid представляет собой дескриптор транзакции, возвращаемый из env txn.

-- Пометить конец аргументов команды.

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

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

Читайте также: