Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую коллеги!
Давно не имел дело с партициями и тут вот понадобилось, но что-то не до конца получается.
Есть таблица с документами, среди прочих в ней есть черновики и удаленные, для чего используется два поля is_delete, is_draft
И есть идея эти недозаписи вынести в отдельные партиции, чтобы они не мешались при поиске по действующим документам. Делаю так:
Отредактированно Shopen (11.10.2017 15:25:08)
Неактивен
А бывают удаленные черновики? Их тоже надо куда-то помещать
Про подход надо смотреть на запросы. Часто бывает, что deleted ты хранишь для истории, и вообще никогда к ним не обращаешься. Тогда может оказаться проще их сбрасывать в отдельную таблицу триггером, например.
Неактивен
Паш, ты прям зришь в корень ))
Я думал что таких не бывает, лично по мне удаленный черновик это ммм... ну его надо просто удалить совсем. Но оказалось что да, они тоже существуют, так что пришлось и четвертую партицию (11) добавлять. Удаленные хранятся по сути для истории, про сброс в отдельную таблицу уже думал, да и для черновиков тоже можно. Но встает вопрос что делать со связанными таблицами. Либо каждой таблице по копии _deleted, либо делать денормализацию. Какие-то есть "рекомендуемые" решения или тут всё как обычно - каждый как может свой огород копает?
Неактивен
А что у тебя в связанных таблицах? Вообще, про них не думал, интересный кейс. Да, видимо по той же логике надо будет распилить, но это уже будет некрасиво, особенно если может быть несколько типов связанных.
Неактивен
Связанная таблица пока у меня одна - в ней лежат виды деятельности привязанные к id документа, то есть один ко многим.
Есть еще одна база, там устроен "вертикальный шардинг", то есть в доп. таблицу вынесены все текстовые поля один к одному.
Тут еще интересно как решить проблему связности... Если триггеры вешать на каждую отдельную таблицу - то потом нельзя будет в общем случае понять какие записи второй таблицы относятся к конкретной записи в архиве. Значит нужен какой то дополнительный общий для них "идентификатор удаления".
Отредактированно Shopen (13.10.2017 16:03:48)
Неактивен
Если ты шардируешь приложением, то почему не удалять приложением правильно?
Но вообще да, получается сложно. А упираешься в производительность, если не делить?
Неактивен
Приложение не моё, поэтому и не могу удалять им правильно, пытаюсь на уровне БД решить ))
Производительность да, сильно падает. Плюс чисто концептуально у этой БД две задачи - реестр в который только читают (is_draft = 0) и черновики, с которыми работают, т.е. читают/пишут. Как мне видится разделение на две партиции тут очень логично.
Неактивен
Да, тогда дели, конечно )
Неактивен