Ответ 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 - интеграция, преимущества и различия