|
|
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
Есть таблица хранящая историю изменения сущности. Код: plaintext 1. 2. 3. 4. 5. 6. Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля? Каким потом запросом получать состояние объекта на определенную версию? За пол года в этой таблице уже 2.5 млрд записей, таких таблиц несколько. Дальше будет расти быстрее. Если транспонировать эту таблицу в: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 09:53 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
ТС_001Как правильно сделать структуруУже обсуждалось не раз, вот последняя тема Уверен, поиском найдете больше... ТС_001Каким потом запросом получать состояние объекта на определенную версию?при Вашей текущей модели БД - наверное как-то так: Код: plaintext 1. 2. 3. ТС_001Если транспонировать эту таблицу в: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 10:02 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
ПаганельУже обсуждалось не раз Там обсуждается несколько иное, как сделать структуры для хранения истории, это вопрос очень банальный и поезженный. У меня вопрос: как сделать структуру, чтобы НЕ хранить неменявшиеся атрибуты . Паганельа ничего что типы данных F_VALUE разные? На самом деле это не столько принципиально, создать any_type не самая большая проблема. Часть параметров в самом деле так и хранится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 10:45 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
ТС_001как сделать структуру, чтобы НЕ хранить неменявшиеся атрибуты Это и есть Ваша цель? Вы уверены? Тогда под каждый атрибут создать свою таблицу версий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 10:48 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
ПаганельТогда под каждый атрибут создать свою таблицу версий Тогда бОльшая часть экономии съестся на дублированием поля ID объекта в 80 таблиц со значениями атрибутов. Задача минимизировать объем архивных данных ценой небольшого снижения скорости доступа к ним. При текущей структуре хранения это порядка 15ТБ в год на одну БД, а таких БД - 6. Это не оценочные цифры, а уже живая статистика. Как сконвертировать имеющиеся данные в новую структуру хранения, если её получиться придумать, вопрос номер два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 11:23 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
> Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля? Декомпозиция. 80 полей в таблице - это нонсенс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 11:53 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля? Декомпозиция. 80 полей в таблице - это нонсенс. А мужики то не знают. То-то в сапе в какой-нить bseg более 200 полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 13:08 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
> А мужики то не знают. То-то в сапе в какой-нить bseg более 200 полей. Дебилов в этом мире больше, чем нормальных людей. Новость для вас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 13:20 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
ТС_001При текущей структуре хранения это порядка 15ТБ в год на одну БД, а таких БД - 6Извините, опыта работы с такими объемами не имею, потому ничем помочь ну могу Если бы Вы сразу огласили, чтоТС_001Задача минимизировать объем архивных данных ценой небольшого снижения скорости доступа к нимто я бы в эту тему вообще ничего не писал Еще раз извините ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 13:43 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
ТС_001Как правильно сделать структуру, чтобы при изменении одного-двух полей F не приходилось хранить все не изменившиеся поля? самое простое: хранить только изменившиеся поля. записей будет много, но на null-ах экономия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 13:53 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
guest_20040621> А мужики то не знают. То-то в сапе в какой-нить bseg более 200 полей. Дебилов в этом мире больше, чем нормальных людей. Новость для вас? Ога, а вы у нас написатор мегабаз, которые покупают тысячи людей во все мире? Или просто непризнанный убергений, фанатично исповедующий ультра-православный подход к проектированию таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2010, 14:46 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
ТС_001При текущей структуре хранения это порядка 15ТБ в год на одну БД, а таких БД - 6При таких объемах решение в лоб чисто админское - секционирование (partitioning) и сжатие (compressing) блоков. В зависимости от кластеризации данных, а при секционировании этого можно добиться, эффект от сжатия должен быть хорошим. Однозначный плюс - не надо переделывать приложение. Однозначный минус - ваша СУБД (редакция) должна уметь сжимать блоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2010, 04:05 |
|
||
|
Версионность строк
|
|||
|---|---|---|---|
|
#18+
Итак что если опция сжатия недоступна. Тогда может иметь смысл нормализация (архивирование своими руками) т.е. замена длинного поля короткой ссылкой. Однако боюсь что со строками такой фокус уже был проделан, смысл может быть для дат (если для даты время не нужно, то двухбайтовый день хранящий 64K дней покрывает двести лет). Опять же какая будет выгода зависит от данных. _мод самое простое: хранить только изменившиеся поля. записей будет много, но на null-ах экономияТеперь по решению обнуления. То есть замены значения алгоритмом - если значение нулл сортируем для данного объекта по дате (или VERSION_ID ) и отступаем на шаг назад пока не получим не нулл значение или пока не кончится курсор. Тогда ваш запрос на выборку будет типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Можно сделать финт ушами написав фунцию, которая будет в курсоре читать записи по object_id и прекращать фетч когда все поля станут не нулл (реализация сильно зависит от СУБД). Возвращать функция должна несколько значений в одном, типа запись или "в лоб" строку с полями фиксированной ширины. Для того чтобы фетчей было не слишком много надо обнулять не все строки а оставлять периодически записи с заполненными значениями. Тут может возникнуть проблема отделения null как неизменного значения и null как честного значения в таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2010, 05:19 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36785434&tid=1542588]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 512ms |

| 0 / 0 |
