Насколько быстро работает Berkeley DB SQL по сравнению с SQLite? - PullRequest
44 голосов
/ 13 мая 2010

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

Ответы [ 3 ]

56 голосов
/ 19 мая 2010

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

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

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

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

Главным образом, это сводится к (записи) параллелизма. BDB может выдвинуть больше TPS, чем SQLite для нескольких авторов. Под транзакцией я имею в виду то, что изменяет база данных (как они могут помочь в операциях только для чтения?). Это сказало, для параллельного чтения (приложения, которые в основном делают 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 - интеграция, преимущества и отличия

11 голосов
/ 18 мая 2010

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

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

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

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

7 голосов
/ 19 мая 2010

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

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