На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днем Победы!
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> oracle + аналог триггера на select
Знатоки, здравствуйте!

Помогите идеей. Суть проблемы. Есть таблица в бд oracle, в которой есть поле типа blob. При каждой выборке из этого поля нужно записывать в другую таблицу размер этого блоба. Другими словами - нужно собрать статистику по объему полученных из этого поля данных за определенное время (день/неделя/месяц и т.д.).

Как бы это реализовать на стороне БД?
Цитата estra @
При каждой выборке из этого поля нужно записывать в другую таблицу размер этого блоба.

А зачем? от SELECT размер не изменяется, так что достаточно записывать размер после вставки/обновления.
В этой таблице картинок лежит на 8ТБ, их будут выносить из базы в файловое хранилище. Послу этого картинки будут передавать по шине. Суть задачи - оценить нагрузку, которая на эту шину ляжет после выноса картинок из БД.
Есть идеи по существу вопроса?
Сообщение отредактировано: estra -
Так вопроса, имеющего смысл, тупо нет... получайте свой блоб из хранимой процедуры, а в ней - не только получение блоба из таблицы, но и запись его размера куда там надо... или в запросе получать блоб не прямо, а функцией - а функции получить блоб и записать куда надо его размер.

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

Можете привести пример вьюшки, которая организует вызов функции?
Перенеси тавлицу и ее индексы на отдельный диск. Запусти какую-нибудь утилиту, мониторющую io.

И чтоб два раза не вставать: ты сам себе противоречишь в двух стейтментах - что никто не будет ради этого изменения перелопачивать весь код и что картинки будут храниться в хранилище другого типа.
Цитата estra @
Можете привести пример вьюшки, которая организует вызов функции?

Ну если очень схематично, то типа
ExpandedWrap disabled
    CREATE VIEW old_table_name
    AS
    SELECT id, {other columns}, get_blob_size(blob_comn)
    FROM new_table_name

и соответственно
ExpandedWrap disabled
    CREATE FUNCTION get_blob_size(blob_comn BLOB)
    RETURNS BLOB
    AS
    BEGIN
        INSERT INTO debug_table (blob_size) VALUES (LENGTH(blob_column));
        RETURN blob_column;
    END
>MIF
Я не противоречу, я просто не упоминал о деталях, не относящихся к сути вопроса. Ни кто не будет этого делать не данном этапе. Сейчас задача собрать статистеку, на эту задачу выделено 5 дней времени и 1 человек. После выноса картинок из БД на рефакторинг кода клиентсого приложения будут выделены отдельные, более серьезные, ресурсы.

>Akina
Спасибо, годная идея, попробую ею воспользоваться.
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script execution time: 0,0334 ]   [ 20 queries used ]   [ Generated: 9.05.21, 08:10 GMT ]