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

Как масштабируемый SQLite?

Недавно я прочитал этот вопрос о SQLite vs MySQL, и в ответе было указано, что SQLite недостаточно масштабируется и официальный сайт sort-of подтверждает это, однако.

Насколько масштабируемым является SQLite и каковы его верхние пределы?

4b9b3361

Ответ 1

Вчера я выпустил небольшой сайт * чтобы отслеживать репутацию, использующую общую базу данных SQLite для всех посетителей. К сожалению, даже при небольшой нагрузке, которую он надел на мой хост, он работал довольно медленно. Это связано с тем, что вся база данных была заблокирована каждый раз, когда кто-то просматривал страницу, потому что содержал обновления/вставки. Вскоре я переключился на MySQL, и, хотя у меня не было много времени, чтобы проверить его, он выглядит намного более масштабируемым, чем SQLite. Я просто помню медленные загрузки страниц и иногда получаю ошибку блокировки базы данных при попытке выполнить запросы из оболочки в sqlite. Тем не менее, я просто запускаю другой сайт из SQLite. Разница в том, что сайт является статическим (т.е. я единственный, который может изменить базу данных), и поэтому он работает отлично для одновременных чтений. Мораль истории: используйте только SQLite для сайтов, где обновления базы данных происходят редко (реже, чем каждая страница загружается).

edit. Я только понял, что я, возможно, не был честным с SQLite. Я не индексировал ни одного столбца в базе данных SQLite, когда я служил ему с веб-страницы. Это частично вызвало замедление, которое я испытал. Тем не менее, наблюдение за блокировкой базы данных - если у вас есть особенно обременительные обновления, производительность SQLite не будет соответствовать MySQL или Postgres.

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

Сайт, о котором я упоминал, я выпустил в первом абзаце, был переведен обратно в SQLite, и он работает довольно плавно, как только я настроил свой код в нескольких местах.

* сайт больше не доступен

Ответ 2

Sqlite является масштабируемым с точки зрения однопользовательского режима, у меня есть база данных с несколькими гигабайтами, которая работает очень хорошо, и у меня не было много проблем с ней.

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

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

Итак, если у вас много изменений, внесенных в базу данных, вы, по сути, очень быстро решаете проблемы масштабирования. Если, с другой стороны, у вас много доступа для чтения по сравнению с доступом для записи, это может быть не так уж плохо.

Но Sqlite, конечно, будет функционировать в многопользовательской среде, но он не будет работать хорошо.

Ответ 3

SQLite управляет сайтом sqlite.org и другими, у которых много трафика. Они предполагают, что если у вас менее 100 тыс. Страниц в день, SQLite должен работать нормально. И это было написано до того, как они отправили функцию записи "Writeahead Logging" .

Если вы хотите ускорить работу с SQLite, сделайте следующее:

  • перейти на SQLite 3.7.x
  • Включить запись на запись
  • Запустите следующую прагму: "PRAGMA cache_size = Number-of-pages;" Размер по умолчанию (количество страниц) - 2000 страниц, но если вы поднимете это число, вы увеличите объем данных, которые будут выполняться прямо из памяти.

Вы можете посмотреть мое видео на YouTube под названием "Улучшить производительность SQLite при записи журнала Writeahead", в котором показано, как использовать запись на основе записи и демонстрирует 5x улучшение скорости для записи.

Ответ 4

Вы прочитали эти документы SQLite - http://www.sqlite.org/whentouse.html?

SQLite обычно отлично работает, поскольку механизм базы данных для низкого и среднего трафик веб-сайтов (то есть, 99,9% всех веб-сайтов). Объем веб-трафика, который может обрабатывать SQLite зависит, конечно, от того, насколько сильно сайт использует свою базу данных. В общем говорящий, любой сайт, который получает меньше чем 100K хитов/день должны работать нормально с SQLite. Показатель 100K/день является консервативной оценкой, а не жесткой верхняя граница. SQLite был продемонстрировал работу в 10 раз этот объем трафика.

Ответ 5

Sqlite - это настольная или встроенная база данных. SQL Server, MySQL, Oracle и их братья - серверы.

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

Ответ 6

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

Одна вещь, которую нужно помнить, несмотря на все хвастовство, SQLite НЕ производится для хранения данных. Существуют различные варианты использования не рекомендуется для SQLite. Прекрасные люди, стоящие за SQLite, говорят сами:

Еще один способ взглянуть на SQLite: SQLite не предназначен для замены Oracle. Он предназначен для замены fopen().

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

Ответ 7

В ответ на GateKiller (выше), если вы делаете обновления/вставки без использования операторов SQL Transaction, SQLLite будет "казаться" медленным. Если вы отправляете SQL в транзакции, скорость будет быстрее. Большинство SQL-серверов не требуют такого рода вещей, но SQLlite, Firebird и JavaDB - это те, которые требуют формальных транзакций...

Прочтите следующее: http://www.sqlite.org/lang_transaction.html

Ответ 8

Я думаю, что (в числах 1) веб-сервер, обслуживающий хандры клиентов, появляется на сервере с одним подключением к базе данных, не так ли?

Таким образом, в базе данных нет параллельного доступа, поэтому мы можем сказать, что база данных работает в режиме "одного пользователя". В этом случае нет смысла диссуссировать многопользовательский доступ, поэтому SQLite работает так же, как и любая другая база данных на базе сервера.

Ответ 9

Я использую MySQL для своего форума, и большую часть времени, когда я запускаю "show processlist", есть только один поток, обращающийся к базе данных в любой момент времени. Интересно, как SQLite будет вести себя в такой ситуации. Где concurrency низкий, но нагрузка действительно высокая.

Ответ 10

Подумайте об этом так. SQL Lite будет заблокирован каждый раз, когда кто-то его использует. Поэтому, если ваша служба веб-страницы или приложение, которое имеет несколько одновременных пользователей, только один может использовать ваше приложение одновременно с SQLLite. Так что есть проблема масштабирования. Если приложение с одним человеком скажет музыкальную библиотеку, в которой вы держите сотни названий, рейтингов, информации, использования, воспроизведения, воспроизведения, тогда SQL Lite будет масштабировать красиво, удерживая тысячи, если не миллионы записей (желаемый жесткий диск)

MySQL, с другой стороны, хорошо работает для приложений серверов, в которых люди будут использовать его одновременно. Он не блокируется, и он довольно большой по размеру. Итак, для вашей музыкальной библиотеки MySql будет убивать, потому что только один человек увидит ее, ЕСЛИ это общедоступная музыкальная библиотека, где тысячи добавляют или обновляют ее. Тогда MYSQL будет использоваться.

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

Ответ 11

Возможно, стоит проверить REAL SQL Server, который является сервером базы данных, построенным на SQLite.

Ответ 12

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

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