powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Несколько баз sqlite в php
28 сообщений из 28, показаны все 2 страниц
Несколько баз sqlite в php
    #36556659
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Подскажите, пожалуйста, имеет ли смысл при использовании sqlite в php вместо одной, единой таблицы использовать несколько таблиц, чтобы за счет этого блокировать не всю базу при записи, а отдельные таблицы (1 база = 1 таблица). Смысл сего в ускорении работы при одновременных обращениях к БД (возможно здесь я и не прав и издержки на открытие базы и прочее будут выше, нежели выгоды от блокирования отдельных таблиц).
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36556727
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Зависит от задачи. Вообще открытие базы занимает около 150 микросекунд, так что при использовании php это время вы никогда и не заметите.

Что касается борьбы с блокировками - сколько у вас модифицирующих запросов в секунду? Если не более нескольких десятков, обычно достаточно обеспечить быстрые селекты. Хинт: десяток модифицирующих запросов в секунду это примерно 10 миллионов отображаемых веб-страниц в сутки, очень сомневаюсь, что у вас подобные масштабы системы и нужно об этом беспокоиться.

Другой вопрос - какого размера у вас БД? Вот это уже серьезно, т.к. работа с эскулайт БД размером более нескольких Гб становится сложной. Скажем так - или вы делаете большую, но простую БД с парой таблиц, или небольшую, но сколь угодно сложную.

В общем, опишите что и как у вас, думаю, смогу привести пример похожей системы. Только учтите, что у меня все проекты под линуксом, особенности винды я не знаю.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36556770
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опишу в общих чертах. Есть некая система (CMS), в которой пользовательская часть набирается из отдельных компонентов. Компонент в данном случае - некий код, который решает свою задачу, в нем по мимо прочего могут быть и запросы в базу для извлечения / обновления / удаления информации. То, сколько и каких компонентов будет на той или иной странице сайта - неизвестно. Ориентировочно планируется не более 30 запросов на самых насыщенных (компонентами) страницах. Реально ограничений нет. Посещаемость, характеристики железа, размер бд заранее неизвестны.

(размер бд ~ до 20 гб)

Задача состоит в том, что при различных вариациях количества компонентов / посещаемости / размера бд и прочего, производительность не страдала (понимаю, что здесь нужно рассматривать на конкретных ситуациях, но пока нет возможности их модулировать). Я вижу это в разбитии единой базы на несколько. В итоге мы получим в случаи записи блокировку фактически таблицы, а не всей базы.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36557388
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
SeratorРеально ограничений нет. Посещаемость, характеристики железа, размер бд заранее неизвестны.

В таком виде задача не имеет решения. Сделать аналог гугла на компьютере Pentium I не получится.

SeratorЗадача состоит в том, что при различных вариациях количества компонентов / посещаемости / размера бд и прочего, производительность не страдала (понимаю, что здесь нужно рассматривать на конкретных ситуациях, но пока нет возможности их модулировать). Я вижу это в разбитии единой базы на несколько. В итоге мы получим в случаи записи блокировку фактически таблицы, а не всей базы.

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

Почитайте для начала архивы рассылки sqlite-users, там много интересного обсуждается. В том числе использование эскулайт на кластерах, большие БД и многое другое.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558537
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MBGВ таком виде задача не имеет решения. Сделать аналог гугла на компьютере Pentium I не получится.
Сие и не планируется, просто четких границ нет.

Вообще, если открытие БД по сути ни на что не влияет, то почему при множестве одновременных обращений не использовать отдельные базы на отдельные таблицы? Просто я до прихода на форум пытался найти ответ на свой вопрос, но как-то не нашел упоминания об этой проблеме (ли).

Какие подводные камни могут встретиться при использовании данного подхода?
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558664
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Serator
Какие подводные камни могут встретиться при использовании данного подхода?

Нарушение целостности. Подумайте про view и триггеры, которые должны будут работать с несколькими БД. Обратите внимание, что их код будет невалиден, если нужные БД не подключены.

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

Сам я использую разделение базы на несколько - но не так, как это хотите делать вы...
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558671
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну полной целостности не будет еще из-за того, что есть простые файлы (не скрипты), которые лежат в ФС, а не в базе.

А вот с памятью возможны какие-либо проблемы?
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558723
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeratorВообще, если открытие БД по сути ни на что не влияет, то почему при множестве одновременных обращений не использовать отдельные базы на отдельные таблицы? Просто я до прихода на форум пытался найти ответ на свой вопрос, но как-то не нашел упоминания об этой проблеме (ли).Потому что не там искал. Резать реляционные базы на отдельные таблицы ради производительности нет смысла, потому что для такого есть специальные типы баз данных. Называются flat-file databases.

Если желаешь хранить таблицы отдельно друг от друга, то и смотри соотвествнно в сторону BerkleyDB или ее кузенов.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558724
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Serator
А вот с памятью возможны какие-либо проблемы?

А вы мои тесты смотрели? Все не все, но многие проблемы описаны и измерены:
http://geomapx.blogspot.com/search/label/SQLite
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558750
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl, я искал именно для SQLite, ибо мне она интересна.

MBGА вы мои тесты смотрели?

Смотрел, только ответа в том или ином виде не нашел.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558762
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Serator
MBGА вы мои тесты смотрели?

Смотрел, только ответа в том или ином виде не нашел.

В зависимости от используемых индексов нужно мало или много памяти. Сколько именно для тех или иных индексов - см. тесты.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558766
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeratorWhite Owl, я искал именно для SQLite, ибо мне она интересна.ааа... я думал вы задачу решеате, а вы оказывается развлекаетесь. Тогда умолкаю.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558779
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
White OwlРезать реляционные базы на отдельные таблицы ради производительности нет смысла, потому что для такого есть специальные типы баз данных. Называются flat-file databases.

Если желаешь хранить таблицы отдельно друг от друга, то и смотри соотвествнно в сторону BerkleyDB или ее кузенов.

Не соглашусь. Пример - корпоративный телефонный биллинг на эскулайт, ежемесячно миллионы звонков обрабатываются. Если хранить все звонки в одной БД, производительность будет в разы падать на каждые 10 миллионов записей, а разделив данные трафика по месяцам, получаем очень шуструю систему. Я уже как-то приводил цифры - система биллингует 1 миллион звонков в минуту на процессоре кореквадро, поддерживается репликация, синхронный и асинхронный режимы биллингования и проч. Скорость построения отчетов для пользователей тоже высокая и заранее известна, поскольку месячный объем данных оценить не составляет сложностей. Кроме того, отсутствуют блокировки - все настройки биллинга и данные о пользователях, тарифах, etc. хранятся в отдельной базе и процесс биллингования эту базу не блокирует.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558805
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBGНе соглашусь. Пример - корпоративный телефонный биллинг на эскулайт, ежемесячно миллионы звонков обрабатываются. Если хранить все звонки в одной БД, производительность будет в разы падать на каждые 10 миллионов записей, а разделив данные трафика по месяцам, получаем очень шуструю систему.Это немножко другая задача. Serator хочет разбить базу на отдельные таблицы. А вы говорите про сегментирование данных. Это две очень большие разницы.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558815
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
White OwlЭто немножко другая задача. Serator хочет разбить базу на отдельные таблицы. А вы говорите про сегментирование данных. Это две очень большие разницы.

Сдается мне, что он хочет именно сегментирования, только не тем путем идет. Хотя если у него винда, к примеру, то может иметь смысл и некоторые большие таблицы в отдельные базы вытащить - это может здорово улучшить кэширование базы. Под линуксом оно в принципе тоже может быть полезно, но лучше ядро обновить, в 2.6.32 так делать уже нет смысла... Но это все нужно проверять тестами и делать только в крайнем случае, когда иначе никак.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558830
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owlааа... я думал вы задачу решеате, а вы оказывается развлекаетесь. Тогда умолкаю.

Задача была не подобрать базу под какую-то задачу. База уже выбрана и нужно на этой базе решить конкретную задачу.

MBG, про память я имел ввиду издержки именно на сами БД (к примеру 1 база и несколько с идентичными данными)

Ну а про обновление это увы, макс - 3.6.19 :(
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558845
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Serator
MBG, про память я имел ввиду издержки именно на сами БД (к примеру 1 база и несколько с идентичными данными)

А, вы об этом - так оно без разницы совершенно. Потребление ОЗУ зависит от выборки, а не от того, где физически данные лежат. Я-то говорил про стоимость модификации данных - большие индексы требуют много памяти при их модификации.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558887
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно. Тогда получается при использовании нескольких баз минусы сводятся только лишь к временным издержкам на подключение, что (0.00015) незначительно. Плюсы же в том, что при одновременной записи блокировок будет меньше.

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

Получается существенных проблем в данном решении и его можно использовать, так?
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558899
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Serator
Получается существенных проблем в данном решении и его можно использовать, так?

Можно. Но я не видел ни одного случая, когда имело бы смысл использовать такое решение. Никакой принципиальной разницы с блокировками на уровне таблицы и БД на самом деле нет - разница лишь в технике работы со встроенной БД.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558904
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Уточняю:

Код: plaintext
1.
2.
3.
4.
5.
sqlite3 db :memory:
db eval {attach ... as work}
db eval {create temp table result as select ...}
db eval {select * from result} {
    # обработка результата
}

Это код на языке Tcl, смысл в том, что все операции с БД делаем по возможности краткими, а продолжительную обработку выполняем на временных таблицах. Ориентировочно до 10 000 одновременных веб-пользователей такой техники достаточно.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558926
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, а в какой ситуации оно может понадобиться? Ибо блокировка будет на время записи, а здесь обрабатывать-то по сути нечего.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558955
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
SeratorХм, а в какой ситуации оно может понадобиться? Ибо блокировка будет на время записи, а здесь обрабатывать-то по сути нечего.

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

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

Теперь понятно, почему нет нужды бороться с блокировкой чтения при записи?
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558965
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, я пытаюсь свести к минимуму издержки на блокирование. К примеру имеем 2 таблицы. Если будем писать больше в первую, а из второй больше читать, то нет смысла блокировать вторую, так ведь? На деле же получится тоже самое, только в больших масштабах.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558966
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И, Алексей, хочу вас поблагодарить за все ваши объяснения. Большое вам человеческое спасибо.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36558984
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
SeratorХм, я пытаюсь свести к минимуму издержки на блокирование. К примеру имеем 2 таблицы. Если будем писать больше в первую, а из второй больше читать, то нет смысла блокировать вторую, так ведь? На деле же получится тоже самое, только в больших масштабах.

На деле получится так, что вы раньше упретесь в предел по числу пишущих транзакций - то есть в иную проблему. Если же вам удастся сделать все операции записи кратковременными - порядка единиц мс на каждую, притом, что на 10 000 RPM диске больше 100 транзакций в секунду не получить, и операции чтения порядка единиц-десятков мс, то вы избежите всех проблем.

Подсказка: бывает полезно создать несколько идентичных баз, например, для корпоративной системы - по базе на филиал или регион, а при построении месячной отчетности объединять их с помощью attach. Скажем, создав 10 одинаковых БД, вы снизите нагрузку на каждую из них в 10 раз, сохранив в пределах БД целостность.

Примечание: а еще у меня выложен репликатор для эскулайт, который полезен для создания реплики БД для длительных читающих запросов. Догадываетесь, к чему я об этом говорю? :-)
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36559160
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Копия базы, это хорошо, но мне нужна актуальная информация при каждом запросе и сей подход не подойдет. По ограничению транзакций вы тоже правы, но все же эти ограничения более отдаленные, нежели ограничения с блокировками. Наверное правильным подходом на данном этапе будет оставить все как есть (1 база), а в случае проблем решать их, но хочется все же заранее предотвратить большинство проблем, ибо в дальнейшем переделывать придется гораздо больше (если придется вообще).
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36559226
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
SeratorКопия базы, это хорошо, но мне нужна актуальная информация при каждом запросе и сей подход не подойдет. По ограничению транзакций вы тоже правы, но все же эти ограничения более отдаленные, нежели ограничения с блокировками. Наверное правильным подходом на данном этапе будет оставить все как есть (1 база), а в случае проблем решать их, но хочется все же заранее предотвратить большинство проблем, ибо в дальнейшем переделывать придется гораздо больше (если придется вообще).

В определенных случаях возможно использовать базы в 100 Гб при конкурентном доступе, а в других ситуациях проблемы возникают уже на базах в 1 Гб при однопользовательской работе. Тестируйте, делайте - и не бойтесь менять архитектуру; все известные крупные проекты меняли архитектуру много раз.

Кстати, хинт - бойтесь индексов с высокой селективностью на больших таблицах, для них скорость вставки быстро падает с ростом числа записей (не только в эскулайте). По большей части, это относится к таблицам от 10М записей. А вот если у вас в таблице "проблемных" индексов нет, то и миллиард записей в одной таблице можно хранить.
...
Рейтинг: 0 / 0
Несколько баз sqlite в php
    #36559231
Serator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей, спасибо за советы. То, что хотел, я узнал. Еще раз спасибо.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Несколько баз sqlite в php
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]