Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
23.12.2016, 14:33
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Всем доброго дня! Понадобилось добавить фотографии в карточке сотрудников. Реализовал через GTT-таблицу, пока открыто окно редактирования сотрудника - фотографии добавляются в GTT, затем при нажатии на кнопку ОК - заливаются в постоянную. Вроде как мусор из-за GTT скапливаться не должен. Но в ходе тестирования заметил одну странность. К примеру заливаю фотографию размером 1.9 МБ, к одному и тому же сотруднику цепляю ее несколько раз. Все отрабатывает нормально, НО, размер БД почему-то меняется не сразу, а спустя какое-то время, и становится чуть больше, чем я ожидаю. К примеру надо изменить сотрудника 4 раза, каждый раз цепляя фото, и только после 4-го раза размер БД меняется. И меняется на примерно на 9-10 МБ. Это нормально? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.12.2016, 14:38
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
aidynchik, при версионности если блоб меняется, или "еще раз прицепляется", то он будет копироваться полностью каждый раз. Если меняется только запись, то ссылка на блоб остается старая, так что блоб не копируется. Есть аспект с временными блобами а что касается вообще места - то БД в ФБ 2.5 увеличивается не "постранично", а блоками, см. параметр DatabaseGrowthIncrement в firebird.conf. если в БД добавить тучу данных, а потом удалить, то после долгое время БД увеличиваться не будет, т.к. пустое место будет использоваться, и т.д. Так что я советую не париться по этому поводу, за исключением вот такой темы http://www.ibase.ru/dbgrowth/ ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.12.2016, 15:03
|
|||
---|---|---|---|
|
|||
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikПонадобилось добавить фотографии в карточке сотрудников. Реализовал через GTT-таблицу, пока открыто окно редактирования сотрудника - фотографии добавляются в GTT, затем при нажатии на кнопку ОК - заливаются в постоянную. "Сон разума рожает чудовищ." (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.12.2016, 15:29
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
kdvвот такой темы http://www.ibase.ru/dbgrowth/ Кстати! ест там такой параграф... Еще вариант от Arioch: создано view с конкатенацией строковых столбцов Таки вот, в моём примере - 14624481 - радость словить можно было не только VIEW, но и COMPUTED BY столбцы в обычной таблице, а вот это упомянуть забыли. Код: sql 1.
Кстати, интересно что будет с SP или с появившимися в FB3 функциями. Пример тот же - тупо собираем ФИО из отдельных компонент. Но - внутри функции или внутри SP. Что-нибудь типа такого Код: sql 1. 2. 3. 4. 5.
На момент создания процедуры (или аналогичной функции) столбцы Fam/Nam/Sur были VARCHAR(256) Потом один из этих столбцов изменился и стал текстовым BLOB'ом. Процедура - два варианта - то ли была перекомпилирована после изменения таблицы, то ли нет. Будут ли из процедуры течь BLOB ID ? Сам :FIO не BLOB, но результат в него BLOB'овый записывается. Соответственно непонятно как здесь сыграет критерий при закрытии SQL-оператора, если BLOB-id не выдаются запросом "наружу" Аналогично, если BLOB ID явно выходят из запроса, но не из процедуры, типа такого Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
На момент создания процедуры (или аналогичной функции) столбцы Fam/Nam/Sur были VARCHAR(256) Потом один из этих столбцов изменился и стал текстовым BLOB'ом. Будет ли вызов процедуры создавать временные BLOBы, живущие до окончания транзакции, 1) без перекомпиляции процедуры ? 2) после перекомпиляции процедуры ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.12.2016, 16:00
|
|||
---|---|---|---|
|
|||
вопрос по работе с BLOB-полями |
|||
#18+
AriochНа момент создания процедуры (или аналогичной функции) столбцы Fam/Nam/Sur были VARCHAR(256) Потом один из этих столбцов изменился и стал текстовым BLOB'ом. за такие изменения надо руки выдёргивать AriochБудет ли вызов процедуры создавать временные BLOBы, живущие до окончания транзакции, Вроде недавно Влад какие-то изменения делал чтобы временные блобы жили до конца активного запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.12.2016, 16:07
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Симонов Денис, если не держать транзакции неделями - то в общем-то не сильно опасное изменение. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.12.2016, 16:48
|
|||
---|---|---|---|
|
|||
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikЭто нормально?Да. Мы тут с месяцок тому назад с нашим ДБА на пару почистили малёху базу, гигов на десяток, так она с той поры и не растет, стоит себе на отметке 75 гиг и не шелохнется. Мерить мегабайты прироста базы дело решительно пустое. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.12.2016, 21:46
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Dimitry Sibiryakov"Сон разума рожает чудовищ." (с) Что это значит? Я пошел сложным путем? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 16:30
|
|||
---|---|---|---|
|
|||
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikЧто это значит?Ну есть еще "буря в стакане воды". aidynchikЯ пошел сложным путем?скорее бессмысленным. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 16:39
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Ivan_PisarevskyaidynchikЧто это значит?Ну есть еще "буря в стакане воды". aidynchikЯ пошел сложным путем?скорее бессмысленным. Тогда подскажите пожалуйста каким еще можно было пойти... Вставлять записи сразу в постоянную таблицу не закоммичивая транзакцию? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 17:38
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikВставлять записи сразу в постоянную таблицу не закоммичивая транзакцию? мы (вроде) тут не очень поняли вашу исходную идею, т.е. на чем вы собрались экономить. aidynchikВроде как мусор из-за GTT скапливаться не должен. gtt у Firebird находятся вне базы данных. Соответственно, про мусор речь не идет. Если данные вставлять в обычные таблицы, то тоже про мусор не может быть и речи - откуда мусор? Единственное оправдание вашему решению - это если вы вставляемые данные перед переносом из gtt в БД обновляете раз по 20, причем в разных транзакциях. Однако я не очень понимаю, по каким причинам это может произойти, если речь идет об "окне редактирования сотрудника". Ладно бы если эти редактирования были "сохранением" промежуточного редактирования. Так ведь максимум жизни данных gtt - это в коннекте. А если приложение отвалилось, то и данные из gtt уже не будут видны. Так зачем здесь gtt? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 17:54
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
kdv, GTT я использовал не из-за BLOB-полей. Я просто не вижу другого выхода при добавлении фото и вообще реквизитов больше одного (например телефоны), которые падают в отдельную таблицу и имеют ссылку на сотрудника. 1) При добавлении к уже имеющемуся сотруднику - да, можно обойтись и без GTT. Но как быть при создании нового сотрудника? Как ее заполнять? Можно вставлять записи с null, затем апдейтить после создания сотрудника, но программа многопользовательская, мало ли там таких записей может быть за это время. ID сотрудника присваивается генератором на момент инсерта в таблицу сотрудников. 2) В вашей ссылке http://www.ibase.ru/dbgrowth/ есть информация о длинных транзакциях. Если вставлять BLOB сразу в обычную таблицу и не коммитить, то есть риск, что транзакция растянется, вдруг юзер посреди редактирования сотрудника пошел пить чай с концами. Это не будет длинной транзакцией? Или я туплю, и чего-то не понимаю в транзакциях? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 18:15
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
aidynchik Я просто не вижу другого выхода при добавлении фото и вообще реквизитов больше одного (например телефоны), которые падают в отдельную таблицу и имеют ссылку на сотрудника. опять я не понимаю. "не вижу другого выхода" - почему? Представьте себе, что в ФБ нет gtt. Что дальше? Случится катастрофа? aidynchikЕсли вставлять BLOB сразу в обычную таблицу и не коммитить, то есть риск, что транзакция растянется, вдруг юзер посреди редактирования сотрудника пошел пить чай с концами. Это не будет длинной транзакцией? Или я туплю, и чего-то не понимаю в транзакциях? Во-первых, длинные транзакции действительно зло. Значит, надо сохранять данные в таблицы только после того как пользователь нажмет кнопку "сохранить" (и именно в этот момент стартовать транзацию). А не в самом начале. Еще раз повторю - с точки зрения потери данных при сбое приложения до сохранения, что гтт, что обычная таблица равнозначны. Если же вы хотите что-то сохранять в промежутке - тогда да, надо использовать обычные таблицы, и периодически делать коммит. Во-вторых, вы с блобами что-то попутали. В статье идет речь про МАССОВЫЕ временные блобы. У вас речь про фотографию сотрудника, ОДНУ. Где вы тут проблему увидели, вообще непонятно. aidynchikНо как быть при создании нового сотрудника? Как ее заполнять? ну, вы же собираетесь реально создать нового сотрудника, так? Не баловством же пользователь программы занимается? Так получите id, создайте сотрудника, сделайте коммит, и добавляйте себе другие данные к этому сотруднику. Или, получите id, создайте сотрудника, добавляйте данные, и потом делайте коммит. Кстати, по поводу "пошел пить чай с концами" - вы можете поставить в программе таймер по неактивности пользователя, и через 10-15 минут предупреждать, что несохраненные данные будут потеряны. Красными буквами на весь экран. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 18:34
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
kdv, извините, я вас подастаю, раз такая возможность =) kdvВ статье идет речь про МАССОВЫЕ временные блобы. У вас речь про фотографию сотрудника, ОДНУ. она может быть и не одна, их может быть и десяток, ограничений нет, таково пожелание заказчика. kdvЗначит, надо сохранять данные в таблицы только после того как пользователь нажмет кнопку "сохранить" (и именно в этот момент стартовать транзацию). А не в самом начале. Сейчас так и происходит. Пользователь нажимает кнопку "Сохранить", транзакция открывается, делается инсерт в таблицу сотрудников, генерится ID, затем переносятся фото из ГТТ в постоянную на уже имеющийся ID сотрудника, транзакция закрывается. Как в этом случае мне получить ID сотрудинка заранее? По нажатию на кнопку "Добавить" в интерфейсе - сразу же генерить ID и вставлять фото в постоянную таблицу на этот ID, хотя даже сотрудник еще не вставлен? Или же вы предлагаете, чтобы программа вначале требовала сохранить сотрудника, а затем только разрешала навешивать на него фотографии и другие множественные реквизиты? Мне кажется это не правильно. Должно работать так - пользователь нажал кнопку "Добавить", заполнил данные, загрузил фотогрфии, нажал кнопку одну общую кнопку Сохранить - процесс пошел. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 19:06
|
|||
---|---|---|---|
|
|||
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikКак в этом случае мне получить ID сотрудинка заранее? По нажатию на кнопку "Добавить" в интерфейсе - сразу же генерить ID и вставлять фото в постоянную таблицу на этот ID, хотя даже сотрудник еще не вставлен? 1) Сгенерить ID 2) Вставить сотрудника с этим ID 3) Вставить фото и прочие данные с этим ID. В чём проблема? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 19:12
|
|||
---|---|---|---|
|
|||
вопрос по работе с BLOB-полями |
|||
#18+
Dimitry SibiryakovaidynchikКак в этом случае мне получить ID сотрудинка заранее? По нажатию на кнопку "Добавить" в интерфейсе - сразу же генерить ID и вставлять фото в постоянную таблицу на этот ID, хотя даже сотрудник еще не вставлен? 1) Сгенерить ID 2) Вставить сотрудника с этим ID 3) Вставить фото и прочие данные с этим ID. В чём проблема? А вдруг дырка в автонумерации? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 19:27
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Dimitry Sibiryakov, я чего-то не знаю или просто туплю? В интерфейсе, когда пользователь вставляет фото - они сразу сохраняются в БД, я для того и задействовал ГТТ. Ведь я не могу передать фото массивом в хранимую процедуру, соответственно я сразу кладу их в БД. Поэтому по вашему пути получается 1) Сгенерил ID 2) При нажатии "добавить фото" - вставил фото с этим id 3) при нажатии "сохранить" вставил сотрудника. Но это же не логично ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 19:51
|
|||
---|---|---|---|
|
|||
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikя чего-то не знаю или просто туплю? Обои. Поэтому aidynchikВ интерфейсе, когда пользователь вставляет фото - они сразу сохраняются в БД полный бред. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 20:03
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Товарищ младший сержантА вдруг дырка в автонумерации? Тогда стокубово дырка в консерватории. За автонумерацию в ID - в особо извращенной форме многократно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 20:08
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Dimitry Sibiryakov, хорошо, тогда объясните мне, пожалуйста, как передать массив БЛОБОВ в хранимую процедуру Firebird 2.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 20:17
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
aidynchik как передать массив БЛОБОВ в хранимую процедуру Firebird 2.5 И как и для чего ты лопатишь во внутри процедуры содержимое этих блобов? А если не лопатишь их содержимое, то на кукуя они на входе процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 20:24
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
Di_LIne, да не лопачу я... и да, в теле процедуры они мне нафиг не нужны. я понял, все мне тут предлагают, после отработки ХП, запускать отдельные инсерты на вставку блобов ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 20:29
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikя понял, все мне тут предлагают, после отработки ХП, запускать отдельные инсерты на вставку блобов Я жеж не все, а по этому икс_клюзив. По утрам класть в карманы штанов по кирпичу. На вопль "Азпадлянакуда?!" отвечаю заранее "Инии..фсё, штоп было!". - Ы? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 20:29
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
aidynchik1) Сгенерил ID 2) При нажатии "добавить фото" - вставил фото с этим id 3) при нажатии "сохранить" вставил сотрудника. Но это же не логично нелогично - это когда вы почему-то переставили местами пункты 2 и 3. Кто вам сказал, что надо добавить фото фиг знает к кому, т.е. к еще несохраненному сотруднику? Как вы все то же самое делаете в gtt? почему вы не можете то же самое делать с обычными таблицами? О каком вообще массиве блобов "передаваемом в процедуру" идет речь? Вы что, в gtt тоже передаете массив блобов? Короче. В обычных таблицах вы можете делать все то же самое, что и сейчас с GTT. Боязнь какого-то там мусора из-за длинных транзакций - так вы не понимаете природу версионности. Любая активная read-write транзакция, даже если она ничего не делает - ни в гтт, ни в обычные таблицы ничего не пишет - все равно является причиной накопления версий в БД. Прочитайте http://www.ibase.ru/mga/ Если уже читали - второй раз, третий, и т.д. Вы себе чего-то там придумали, начали чесать левое ухо правой рукой, и теперь спрашиваете "как же мне быть"? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
24.12.2016, 20:31
|
|||
---|---|---|---|
вопрос по работе с BLOB-полями |
|||
#18+
aidynchikя понял, все мне тут предлагают, после отработки ХП, запускать отдельные инсерты на вставку блобов 1. откуда взялась ХП? 2. почему вы не можете с обычными таблицами работать так же, как сейчас работаете с гтт? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=40&tablet=1&tid=1561785]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 420ms |
0 / 0 |