Подтвердить что ты не робот

Насколько быстро Berkeley DB SQL по сравнению с SQLite?

Недавно Oracle выпустил серверный сервер Berkeley для SQLite. У меня есть база данных SQLite сотнями мегабайт, которая может очень хорошо выиграть от "улучшенной производительности, concurrency, масштабируемости и надежности", но на сайте Oracle отсутствуют какие-либо измерения улучшений. Кто-нибудь здесь сделал некоторый бенчмаркинг?

4b9b3361

Ответ 1

Я участвовал в бета-оценке кода SQLite BDB и один из все, что я пытался понять, было разницу в производительности. С этой точки зрения, Я не могу опубликовать точно, что я нашел, пока у меня не будет хотя бы еще один человек оценить мой код, запустить тесты и подтвердить числа, которые я получил (который сделанный). Однако я могу обобщить здесь и сказать, что бывают случаи, когда BDB предлагает значительные улучшения производительности по сравнению с SQLite, особенно в область обработки тяжелых нагрузок, которые включают запись concurrency.

Есть, как правило, две меры "быстрого" права - (1) эффективность: как долго требуется ли для одного процесса делать XYZ против (2) concurrency: сколько раз может много процессов делать XYZ в единицу времени. Основной проблемой BDB-адресов является concurrency - крупномасштабная обработка транзакций. Таким образом, вы думаете о многих одновременные соединения, записывающие и/или изменяющие содержимое базы данных.

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

BDB, с другой стороны, использует блокировку уровня страницы, что позволяет нескольким сценаристам работать в базе данных в определенный момент времени (при условии, что они работают над отдельные страницы). Таким образом, ставка BDB потенциально увеличивается с и поэтому его масштабируемость является одновременно вопросом эффективности (1) и concurrency (2), который может складываться.

В основном, что это сводится к (писать) concurrency. BDB может увеличить количество TPS, чем SQLite для нескольких авторов. По транзакции я имею в виду что-то, что изменяет базы данных (как они относятся к реальной помощи для операций только для чтения?). Тем не менее, для чтения concurrency (приложения, которые в основном делают SELECT), SQLite вполне может пойти голова к голове с BDB, потому что блокировка больше не является критическим вопросом.

Что касается размера набора данных, я не уверен. Я не смотрел что. В конечном счете, они используют B-деревья для хранения. Могут быть факторы в их соответствующие реализации рассмотреть, но я не исследовал это. я знаете, что SQLite может изящно обрабатывать наборы данных в сотни МБ и двузначные ГБ (и, возможно, больше теперь, когда реализация грязной страницы был изменен).

Поэтому, если у вас есть приложение, в котором используется множество подключений, которые изменяют данная база данных и конкуренция страниц относительно низки, тогда BDB может предложить значительное улучшение производительности. Но разглашение страницы является критическим переменная. В пределе, если у вас есть база данных BDB, данные которой состоят из одна страница, то ее производительность будет соответствовать производительности SQLite во всех случаях потому что блокировка на уровне страницы эффективно дегенерирует в эквивалент блокировка уровня базы данных - все борются за одну вещь. Однако, поскольку количество страниц увеличивается в BDB (и уменьшается количество страниц), затем максимальный TPS начнет расти с количеством одновременных соединений. затем с этого момента память становится следующим ограничивающим фактором. Но это другое история.

Кстати, я в процессе написания статьи об использовании BDB для тех, кто приходит из SQLite.

Ссылки на статьи:

Oracle Berkeley DB SQL API против SQLite API - Техническая оценка

Oracle Berkeley DB SQL API против SQLite API - интеграция, преимущества и различия

Ответ 2

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

В целом, BerkeleyDB может быть очень быстрым - недавно я разработал встроенную платформу анализа данных для работодателя, которая способна выполнять 40 тыс. вложений в секунду на 8-ядерную систему x86 (при этом одновременно делать тысячи чтений в секунду ) с набором данных в диапазоне 30G. Это было с полной защитой транзакций.

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

В целом это отличная система, но документация и знания довольно тонкие. Я рекомендую The BerkeleyDB Book как, вероятно, лучшую в настоящее время доступную ссылку.

Ответ 3

В дополнение к книге Berkeley DB, о которой говорит Брайан, вы также можете найти следующие полезные ресурсы:

  • В онлайн-форумах Berkeley DB можно найти множество предложений от пользователей и разработчиков продукта. См. Форум Berkeley DB,
  • Набор документации Berkeley DB, который можно найти здесь. В частности, в Справочном руководстве есть несколько разделов, посвященных настройке, производительности и пропускной способности.