SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.10.2017 15:00:02

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Table has no partition value

Приветствую коллеги!
Давно не имел дело с партициями и тут вот понадобилось, но что-то не до конца получается.
Есть таблица с документами, среди прочих в ней есть черновики и удаленные, для чего используется два поля is_delete, is_draft
И есть идея эти недозаписи вынести в отдельные партиции, чтобы они не мешались при поиске по действующим документам. Делаю так:

ALTER TABLE docs PARTITION BY LIST ((is_draft*10)+is_delete) (
    PARTITION main VALUES IN (0),
    PARTITION drafts VALUES IN (10),
    PARTITION dels VALUES IN (11)
)


Но при попытке вставить запись с полем is_delete = 1 получаю ошибку "Table has no partition value 1"
Что я делаю не так? Структура табицы мне неподвластна, сразу говорю

UPD. Сам нашел свою глупость, последняя партиция неправильно определена, надо
PARTITION dels VALUES IN (1)


Вообще сам подход норм?

Отредактированно Shopen (11.10.2017 15:25:08)

Неактивен

 

#2 11.10.2017 18:51:50

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Table has no partition value

А бывают удаленные черновики? Их тоже надо куда-то помещать smile

Про подход надо смотреть на запросы. Часто бывает, что deleted ты хранишь для истории, и вообще никогда к ним не обращаешься. Тогда может оказаться проще их сбрасывать в отдельную таблицу триггером, например.

Неактивен

 

#3 11.10.2017 19:11:09

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Table has no partition value

Паш, ты прям зришь в корень ))
Я думал что таких не бывает, лично по мне удаленный черновик это ммм... ну его надо просто удалить совсем. Но оказалось что да, они тоже существуют, так что пришлось и четвертую партицию (11) добавлять. Удаленные хранятся по сути для истории, про сброс в отдельную таблицу уже думал, да и для черновиков тоже можно. Но встает вопрос что делать со связанными таблицами. Либо каждой таблице по копии _deleted, либо делать денормализацию. Какие-то есть "рекомендуемые" решения или тут всё как обычно - каждый как может свой огород копает?

Неактивен

 

#4 12.10.2017 13:23:11

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Table has no partition value

А что у тебя в связанных таблицах? Вообще, про них не думал, интересный кейс. Да, видимо по той же логике надо будет распилить, но это уже будет некрасиво, особенно если может быть несколько типов связанных.

Неактивен

 

#5 13.10.2017 14:35:35

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Table has no partition value

Связанная таблица пока у меня одна - в ней лежат виды деятельности привязанные к id документа, то есть один ко многим.
Есть еще одна база, там устроен "вертикальный шардинг", то есть в доп. таблицу вынесены все текстовые поля один к одному.

Тут еще интересно как решить проблему связности... Если триггеры вешать на каждую отдельную таблицу - то потом нельзя будет в общем случае понять какие записи второй таблицы относятся к конкретной записи в архиве. Значит нужен какой то дополнительный общий для них "идентификатор удаления".

Отредактированно Shopen (13.10.2017 16:03:48)

Неактивен

 

#6 19.10.2017 21:12:48

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Table has no partition value

Если ты шардируешь приложением, то почему не удалять приложением правильно? smile

Но вообще да, получается сложно. А упираешься в производительность, если не делить?

Неактивен

 

#7 30.10.2017 13:29:10

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Table has no partition value

Приложение не моё, поэтому и не могу удалять им правильно, пытаюсь на уровне БД решить ))
Производительность да, сильно падает. Плюс чисто концептуально у этой БД две задачи - реестр в который только читают (is_draft = 0) и черновики, с которыми работают, т.е. читают/пишут. Как мне видится разделение на две партиции тут очень логично.

Неактивен

 

#8 31.10.2017 12:51:21

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Table has no partition value

Да, тогда дели, конечно )

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson