Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионность строк / 14 сообщений из 14, страница 1 из 1
11.08.2010, 09:53
    #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
11.08.2010, 10:02
    #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
11.08.2010, 10:45
    #36785424
ТС_001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность строк
ПаганельУже обсуждалось не раз

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

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

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

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

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

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

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

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

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

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

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

Ога, а вы у нас написатор мегабаз, которые покупают тысячи людей во все мире? Или просто непризнанный убергений, фанатично исповедующий ультра-православный подход к проектированию таблиц?
...
Рейтинг: 0 / 0
12.08.2010, 04:05
    #36787354
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность строк
ТС_001При текущей структуре хранения это порядка 15ТБ в год на одну БД, а таких БД - 6При таких объемах решение в лоб чисто админское - секционирование (partitioning) и сжатие (compressing) блоков. В зависимости от кластеризации данных, а при секционировании этого можно добиться, эффект от сжатия должен быть хорошим.
Однозначный плюс - не надо переделывать приложение.
Однозначный минус - ваша СУБД (редакция) должна уметь сжимать блоки.
...
Рейтинг: 0 / 0
12.08.2010, 05:19
    #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
13.08.2010, 11:57
    #36790327
Raziel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность строк
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионность строк / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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