![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
доброго времени суток!
Собственно разрабатываю БД под свой проект. В XML стало напряжно хранить большой массив данных, да и управлять этим зверем тоже стало сложно, БД справится лучше. Исходник БД во втором посте. Таблица Groups и Childrens представляют собой древовидную структуру, хранимую в таблице tree, так же есть view отображающая последнее видимое состояние в UI (Здесь tree,view не описаны, не нужно). Таблицы table_blobs1(1:1), table_blobs2(1:n) хранят некоторый массив данных, принадлежащих конкретной записи childrens.ID, в blob1 принадлежит 1 запись, в blob2 - бесконечное множество. Так же я переложил всю работу на БД в части формирования статистики, с помощью триггеров, после INSERT, DELETE для групп, элементов, блобов, в таблице Stats обновляются соотв. поля. Проблемы: 1. В блобах планируется хранить файлы. На сколько это разумно? 2. Можно ли блобы отделить от отновной БД, затем подключать их и использовать (JOIN к примеру)? 3. Каскадное удаление данных, если удаляется запись из Groups, все childrens.id, group.id (для них так же срабатывает триггер) ссылающиеся на удаляемую запись - так же стираются, при удалении записи из childrens, чистятся таблицы с BLOB'ми. Я делаю это с помощью триггеров. Тут же обновляется статистика, и tree, view. итого такой подход очень дорого стоит в не большой БД на 5-10 тыс. записей, даже если это делать внутри транзакции. Есть ли иной, более правильный подход? 4. Как правильно делать статистику? Сейчас я это делаю триггерами после вставки, удаления, для каждой записи. Но работает медленно на 20-30 тыс записей, на 50-60 тыс. - страх и ужос. Как лечить? Цель: на 100 тыс.записей тормозов быть не должно ![]() Последний раз редактировалось Человек_Борща; 09.06.2015 в 11:03. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
И так DDL моей БД:
Код:
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
1. Файлы в блобах бы не держал
2. stats бы не создавал. Вся статистика запросом элементарно получается 3. Не вижу ни одного индекса. Естественно при удалении будут долго записи искаться. Но и обилие индексов убыстрив поиск замедлит удаление. Но они нужны в разумных пределах 4. Зачем несколько триггеров на удаление, в одном нельзя все сделать? Может SQLite не позволяет, не в курсе. Если позволяет - срочно объединить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 09.06.2015 в 11:31. |
![]() |
![]() |
![]() |
#4 | ||||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Цитата:
Цитата:
Цитата:
Триггер можно сделать для каждой записи и для STATEMENT(как понимать?) так с понимаем самого слова проблема, у него масса значений, в контексте БД что это? 1 запрос? |
||||
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Индексы для полей из WHERE. Составные если несколько полей
Судя по этому https://www.sqlite.org/lang_createtrigger.html есть только триггера FOR EACH ROW. Т.е. триггер срабатывает для каждой обрабатываемой строки таблицы, а не для всей команды редактирования в целом. Вообще-то не в курсе, не работаю с этой СУБД. Для каждой строки значит, что триггер отработает три раза при удалении одной командой трех строк
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 09.06.2015 в 14:47. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
SQLite, | egresr | БД в Delphi | 5 | 04.11.2014 11:51 |
SQLite | PinkPink | Qt и кроссплатформенное программирование С/С++ | 3 | 10.04.2012 00:19 |
SQLite | Dr.Badnezz | БД в Delphi | 2 | 24.03.2010 09:46 |
SQLite 3 | XeN0N | PHP | 4 | 19.01.2009 19:06 |
SQLite 3 | XeN0N | PHP | 1 | 18.01.2009 20:30 |