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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Код: 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
02.04.2010, 23:52
    #36558926
Serator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько баз sqlite в php
Хм, а в какой ситуации оно может понадобиться? Ибо блокировка будет на время записи, а здесь обрабатывать-то по сути нечего.
...
Рейтинг: 0 / 0
03.04.2010, 00:30
    #36558955
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько баз sqlite в php
SeratorХм, а в какой ситуации оно может понадобиться? Ибо блокировка будет на время записи, а здесь обрабатывать-то по сути нечего.

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

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

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

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

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

Примечание: а еще у меня выложен репликатор для эскулайт, который полезен для создания реплики БД для длительных читающих запросов. Догадываетесь, к чему я об этом говорю? :-)
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Несколько баз sqlite в php / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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