2012-09-03 4 views
2

Мне нужно улучшить веб-приложение PHP-MySQL, которое использует MySQL только для операций REPL (и некоторых функций поиска). 99% приложений, с которыми я работал, никогда не использовали расширенные возможности MySQL, такие как репликация, ограничения между столами, блокировка и т. Д.Должен ли я использовать SQLite вместо MySQL?

Насколько я понимаю, вместо этого я должен использовать SQLite.

Есть ли какие-либо практические выгоды, если я это сделаю? Я увижу значительное (> 100 мс) ускорение скорости? Должен ли я ожидать проблем с таблицами с более чем 1 000 000 строк?

+0

У вас возникли проблемы при использовании MySQL? – PeeHaa

+0

@PeeHaa no.но мне любопытно, будут ли какие-либо преимущества - производительность - простота - такие вещи –

+0

Это с 2008 года, но: http://stackoverflow.com/questions/3630/sqlite-vs-mysql – PeeHaa

ответ

5

На этот вопрос нет ответа, но есть основной момент для рассмотрения: очень хорошее эмпирическое правило состоит в том, что чем выше ваша степень параллелизма, тем больше вы будете получать прибыль от MySQL и пороков наоборот.

Это означает, что в сценарии, когда запросы базы данных никогда не совпадают, вы можете увидеть ускорение с помощью SQlite, хотя я сомневаюсь, что он будет в порядке порядка 100 мс.

Причина этого является (очень грубо):

В сервере базы данных окружающей среды, такие как MySQL, PostgreSQL, MS SQL, Oracle и друзья, выделенный процесс (или группа процессов) исключительно коснуться файлы базы данных - важная часть - , посвященная. Это означает, что проблемы параллелизма могут быть разрешены в процессе.

В файловой базе данных, такой как SQlite, MS Access (Jet Engine) и друзьях, несколько процессов будут касаться файлов DB, ​​не зная друг о друге - это означает, что проблемы параллелизма должны быть решены путем написания их на DB или вспомогательный файл (ы). Это, как правило, намного медленнее и менее надежным. В обмен на это накладные расходы на связь между клиентом базы данных (веб-приложение) и сервером базы данных (который находится в процессе) не существует.

Редактировать

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

+0

Параллелизм здесь преимущественно «параллельные/смешанные записи». SQLite в основном имеет бесплатные «параллельные чтения»; блокировка/конфликт файлов происходит, когда должны быть получены блокировки, которые немного отличаются между WAL и традиционными режимами работы. Кроме того, ** SQLite полностью совместим с ACID и является столь же «надежным», как базы данных клиент-сервер ** (за исключением нескольких очень специфических краевых случаев с отсутствием гарантированного fsync в очень специфических ситуациях/нелокальных файловых системах, которые обсуждаются в другом месте). Тем не менее, «стоимость» этой ACID требуется для получения файловых блокировок на системном уровне, что и ограничивает возможности записи на параллелизм. –

+0

@pst Обновленный мой ответ, чтобы более четко отражать, я говорил о записи, а не читал. –

+0

Что касается надежности, то я считаю, что компромисс между отказоустойчивостью и производительностью отказа по-прежнему выступает за сервер базы данных от файловой базы данных. Все, кто попал в печально известную «базу данных» SQlite, после нечистого закрытия, требующего ручного вмешательства, скорее всего, будут иметь такое же мнение, и я еще не начал работу с другими членами семейства файлов. Это ** определенно ** не следует понимать как критику SQlite: я считаю SQlite исключительно полезным членом этого семейства, и я использую его довольно регулярно. –

2

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

Основным преимуществом MySQL (с использованием стандартного типа таблицы) является то, что это сервер базы данных, который использует SQL в качестве языка запросов. На основе сервера можно использовать многие функции, которые система на основе файлов не может обрабатывать просто (например, репликация), но делает некоторые вещи более сложными для развертывания.

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

Смежные вопросы