
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.82] |
![]() |
|
![]() | Данный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Знатоки, здравствуйте!
Помогите идеей. Суть проблемы. Есть таблица в бд oracle, в которой есть поле типа blob. При каждой выборке из этого поля нужно записывать в другую таблицу размер этого блоба. Другими словами - нужно собрать статистику по объему полученных из этого поля данных за определенное время (день/неделя/месяц и т.д.). Как бы это реализовать на стороне БД? |
![]() |
Сообщ.
#2
,
|
|
Цитата estra @ При каждой выборке из этого поля нужно записывать в другую таблицу размер этого блоба. А зачем? от SELECT размер не изменяется, так что достаточно записывать размер после вставки/обновления. |
Сообщ.
#3
,
|
|
|
В этой таблице картинок лежит на 8ТБ, их будут выносить из базы в файловое хранилище. Послу этого картинки будут передавать по шине. Суть задачи - оценить нагрузку, которая на эту шину ляжет после выноса картинок из БД.
Есть идеи по существу вопроса? |
![]() |
Сообщ.
#4
,
|
|
Так вопроса, имеющего смысл, тупо нет... получайте свой блоб из хранимой процедуры, а в ней - не только получение блоба из таблицы, но и запись его размера куда там надо... или в запросе получать блоб не прямо, а функцией - а функции получить блоб и записать куда надо его размер.
Самая простая реализация, не требующая изменений в клиентском коде - это создание вместо таблицы представления, которое собственно всё нужное (вызов функции) и организует. Правда, придётся немножко покорячиться при наличии триггеров и внешних ключей - таблицу-то придётся переименовывать. |
Сообщ.
#5
,
|
|
|
>Так вопроса, имеющего смысл, тупо нет...
Тупо есть. Есть клиент с нехилым количеством форм, которые дергают данные из этой таблицы. И переписывать все это на вызов процедуры никто не будет. Хотелось бы найти решение, не требующее правки кода на клиенте... Можете привести пример вьюшки, которая организует вызов функции? |
![]() |
Сообщ.
#6
,
|
|
Перенеси тавлицу и ее индексы на отдельный диск. Запусти какую-нибудь утилиту, мониторющую io.
И чтоб два раза не вставать: ты сам себе противоречишь в двух стейтментах - что никто не будет ради этого изменения перелопачивать весь код и что картинки будут храниться в хранилище другого типа. |
![]() |
Сообщ.
#7
,
|
|
Цитата estra @ Можете привести пример вьюшки, которая организует вызов функции? Ну если очень схематично, то типа ![]() ![]() CREATE VIEW old_table_name AS SELECT id, {other columns}, get_blob_size(blob_comn) FROM new_table_name и соответственно ![]() ![]() 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 |
Сообщ.
#8
,
|
|
|
>MIF
Я не противоречу, я просто не упоминал о деталях, не относящихся к сути вопроса. Ни кто не будет этого делать не данном этапе. Сейчас задача собрать статистеку, на эту задачу выделено 5 дней времени и 1 человек. После выноса картинок из БД на рефакторинг кода клиентсого приложения будут выделены отдельные, более серьезные, ресурсы. >Akina Спасибо, годная идея, попробую ею воспользоваться. |