Я принимал участие в бета-оценке кода 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 - интеграция, преимущества и отличия