powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионность строк
14 сообщений из 14, страница 1 из 1
Версионность строк
    #36785297
ТС_001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица хранящая историю изменения сущности.
Код: plaintext
1.
2.
3.
4.
5.
6.
ID
VERSION_ID
F1
F2
F3
..
F80

Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля?
Каким потом запросом получать состояние объекта на определенную версию?
За пол года в этой таблице уже 2.5 млрд записей, таких таблиц несколько. Дальше будет расти быстрее.

Если транспонировать эту таблицу в:
Код: plaintext
ID F_NAME F_VALUE
то вся экономия уйдет на хранение самих F_NAME.
...
Рейтинг: 0 / 0
Версионность строк
    #36785308
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС_001Как правильно сделать структуруУже обсуждалось не раз, вот последняя тема
Уверен, поиском найдете больше...

ТС_001Каким потом запросом получать состояние объекта на определенную версию?при Вашей текущей модели БД - наверное как-то так:
Код: plaintext
1.
2.
3.
select *
  from таблица
 where ID = @ID_определенного_объекта
    and VERSION_ID = @VERSION_ID_определенной версии
хотя может зависеть от СУБД

ТС_001Если транспонировать эту таблицу в:
Код: plaintext
ID F_NAME F_VALUE
то вся экономия уйдет на хранение самих F_NAME.а ничего что типы данных F_VALUE разные?
...
Рейтинг: 0 / 0
Версионность строк
    #36785424
ТС_001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПаганельУже обсуждалось не раз

Там обсуждается несколько иное, как сделать структуры для хранения истории, это вопрос очень банальный и поезженный. У меня вопрос: как сделать структуру, чтобы НЕ хранить неменявшиеся атрибуты .

Паганельа ничего что типы данных F_VALUE разные?

На самом деле это не столько принципиально, создать any_type не самая большая проблема. Часть параметров в самом деле так и хранится.
...
Рейтинг: 0 / 0
Версионность строк
    #36785434
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС_001как сделать структуру, чтобы НЕ хранить неменявшиеся атрибуты Это и есть Ваша цель?
Вы уверены?
Тогда под каждый атрибут создать свою таблицу версий
...
Рейтинг: 0 / 0
Версионность строк
    #36785550
ТС_001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПаганельТогда под каждый атрибут создать свою таблицу версий
Тогда бОльшая часть экономии съестся на дублированием поля ID объекта в 80 таблиц со значениями атрибутов.

Задача минимизировать объем архивных данных ценой небольшого снижения скорости доступа к ним. При текущей структуре хранения это порядка 15ТБ в год на одну БД, а таких БД - 6.
Это не оценочные цифры, а уже живая статистика.

Как сконвертировать имеющиеся данные в новую структуру хранения, если её получиться придумать, вопрос номер два.
...
Рейтинг: 0 / 0
Версионность строк
    #36785619
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля?

Декомпозиция. 80 полей в таблице - это нонсенс.
...
Рейтинг: 0 / 0
Версионность строк
    #36785835
Ortogon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля?

Декомпозиция. 80 полей в таблице - это нонсенс.

А мужики то не знают. То-то в сапе в какой-нить bseg более 200 полей.
...
Рейтинг: 0 / 0
Версионность строк
    #36785876
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А мужики то не знают. То-то в сапе в какой-нить bseg более 200 полей.

Дебилов в этом мире больше, чем нормальных людей. Новость для вас?
...
Рейтинг: 0 / 0
Версионность строк
    #36785938
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС_001При текущей структуре хранения это порядка 15ТБ в год на одну БД, а таких БД - 6Извините, опыта работы с такими объемами не имею, потому ничем помочь ну могу

Если бы Вы сразу огласили, чтоТС_001Задача минимизировать объем архивных данных ценой небольшого снижения скорости доступа к нимто я бы в эту тему вообще ничего не писал
Еще раз извините
...
Рейтинг: 0 / 0
Версионность строк
    #36785968
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТС_001Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля?
самое простое: хранить только изменившиеся поля. записей будет много, но на null-ах экономия
...
Рейтинг: 0 / 0
Версионность строк
    #36786128
Ortogon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> А мужики то не знают. То-то в сапе в какой-нить bseg более 200 полей.

Дебилов в этом мире больше, чем нормальных людей. Новость для вас?

Ога, а вы у нас написатор мегабаз, которые покупают тысячи людей во все мире? Или просто непризнанный убергений, фанатично исповедующий ультра-православный подход к проектированию таблиц?
...
Рейтинг: 0 / 0
Версионность строк
    #36787354
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС_001При текущей структуре хранения это порядка 15ТБ в год на одну БД, а таких БД - 6При таких объемах решение в лоб чисто админское - секционирование (partitioning) и сжатие (compressing) блоков. В зависимости от кластеризации данных, а при секционировании этого можно добиться, эффект от сжатия должен быть хорошим.
Однозначный плюс - не надо переделывать приложение.
Однозначный минус - ваша СУБД (редакция) должна уметь сжимать блоки.
...
Рейтинг: 0 / 0
Версионность строк
    #36787363
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак что если опция сжатия недоступна.
Тогда может иметь смысл нормализация (архивирование своими руками) т.е. замена длинного поля короткой ссылкой. Однако боюсь что со строками такой фокус уже был проделан, смысл может быть для дат (если для даты время не нужно, то двухбайтовый день хранящий 64K дней покрывает двести лет). Опять же какая будет выгода зависит от данных.

_мод самое простое: хранить только изменившиеся поля. записей будет много, но на null-ах экономияТеперь по решению обнуления. То есть замены значения алгоритмом - если значение нулл сортируем для данного объекта по дате (или VERSION_ID
) и отступаем на шаг назад пока не получим не нулл значение или пока не кончится курсор.
Тогда ваш запрос на выборку будет типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select object_id, version_id, -- или (dfrom, dto)
(select top  1  -- в других базах может быть другой синтаксис
field1 from mytable m where m.object_id=t.object_id and field1 is not null
order by object_id, version_id -- или (dfrom)
) as field1,
(select top  1  -- в других базах может быть другой синтаксис
field2 from mytable m where m.object_id=t.object_id and field2 is not null
order by object_id, version_id -- или (dfrom)
) as field2,
... as field80
from mytable t
если ваша таблица кластеризована по object_id и VERSION_ID (дате) то количество физических чтений будет небольшим, но вот логических чтений будет много.
Можно сделать финт ушами написав фунцию, которая будет в курсоре читать записи по object_id и прекращать фетч когда все поля станут не нулл (реализация сильно зависит от СУБД). Возвращать функция должна несколько значений в одном, типа запись или "в лоб" строку с полями фиксированной ширины. Для того чтобы фетчей было не слишком много надо обнулять не все строки а оставлять периодически записи с заполненными значениями.
Тут может возникнуть проблема отделения null как неизменного значения и null как честного значения в таблице.
...
Рейтинг: 0 / 0
Версионность строк
    #36790327
Raziel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионность строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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