|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Добрый день. Ситуация следующая. Есть высоконагруженная БД (очень много пользователей, правда объем файла базы всего 60 гигов). Основная логика работы крутится вокруг одной таблицы. Это приходится принимать как данность. Схематично таблица выглядит так: - ID - код записи, формируемый генератором - ORD_ID - код организации - PERFORMER_ID - код исполнителя - DONE_DATE - дата исполнения - DONE_TIME - время исполнения - ну и далее поля данных Т.е. это своего рода список задач для исполнителя на каждый день. Формируется список задач заранее сразу на несколько дней вперед. Задачи могут добавляться даже в день исполнения. Исполнитель сам может добавлять себе задания. Эта таблица есть практически во всех запросах, которые выполняются. Поставлена задача - Сделать нумерацию задач локально для каждого исполнителя. - Каждый день для каждого исполнителя нумерация задач должна начинаться с единицы. - При добавлении новой задачи она получает очередной порядковый номер для этого исполнителя в этот день (ну т.е. max(num) + 1) Может кто подкинуть идею, как это правильнее организовать, чтобы минимизировать тормоза и исключить возможные ошибки в нумерации? Предложение "сказать что это неправильно и не делать" не подходит. Задача поставлена и ее нужно решать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 13:43 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
делай на клиенте, при отображении. хранить такую хрень нет необходимости. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 13:47 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Мимопроходящий, авторделай на клиенте, при отображении. хранить такую хрень нет необходимости. не вариант, придется хранить в базе, т.к. нумерация должна возрастать в порядке добавления записей в базу. Записи могут удаляться, на этом месте должны образовываться "дырки". Записи могут вставляться в серединку временной цепочки заданий, тогда больший номер должен попасть в середину "дня". Ну и до кучи - к БД подключается несколько разных клиентов. С БД работает слишком много разных приложений, чтобы можно было везде сделать одинаковый алгоритм нумерации. Так что интересует меня именно нумерация записей в самой БД и хранение записей в самой БД, о чем я изначально и спросил. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 13:58 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkot, непонятно, в чем проблема, даже если и хранить эти номера на сервере. ИД задачи же локальный для конкретного пользователя, так что действительно max(n) +1 вполне рабочее решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 13:58 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkotПоставлена задача - Сделать нумерацию задач локально для каждого исполнителя. - Каждый день для каждого исполнителя нумерация задач должна начинаться с единицы. - При добавлении новой задачи она получает очередной порядковый номер для этого исполнителя в этот день (ну т.е. max(num) + 1)В лоб - заведи таблицу с (user_name, day, tasknum) и инкрементируй tasknum для конкретного (user_name, day). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:05 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
kdv, а что мне делать когда два клиента "одновременно" добавляют записи в одно расписание? max(N)+1 сделает ведь один и тот же номер для двух разных записей. Код: sql 1. 2. 3. 4. 5. 6.
В первой транзакции Код: sql 1. 2.
Во второй транзакции Код: sql 1. 2.
Коммичу обе транзакции. Получаю в таблице Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:07 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
таблица календарь на пару день-юзер роботом назначать начальное значение на месяц вперед, а далее банальный мах+1 с блокировкой на запись. Не вижу проблемы, типовая задача, которую надо сесть и запрограммировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:13 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
26.10.2017 14:07, imkot пишет: > В первой транзакции > insert into A(N) никаких инсёртов! только апдейты с no_record_version. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:15 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Мимопроходящийтолько апдейты с no_record_version.и логика на клиенте с несколькими попытками обработки блокировок. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:17 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
hvlad, Да. Я думаю в эту сторону. Создать "свой генератор". Работу с такой таблицей мне придется делать в Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:17 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkot, см выше - либо rc+no_rec_ver, либо snapshot. Кроме того, я бы использовал Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:21 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Вернее параметр NO_REC_VERSION. Ошибся в предыдущем ответе Владу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:23 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание? Для начала - ничего. Собери статистику как часто это происходит и происходит ли вообще. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:24 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
hvladimkot, см выше - либо rc+no_rec_ver, либо snapshot. Кроме того, я бы использовал Код: sql 1. 2. 3.
Значит все же так. Думаю что я получил ответ на свой вопрос. Спасибо всем за советы. PS: Такой подход у меня уже используется, но на менее востребованной таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:30 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
в таком виде не решена задача вставки номера "между существующими" Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:32 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovimkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание? Для начала - ничего. Собери статистику как часто это происходит и происходит ли вообще. К сожалению происходит. И чаще чем хотелось бы :( Ладно, можно закрыть тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:33 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
МП> в таком виде не решена задача вставки номера "между существующими" В смысле? Между номерами 3 и 4 вставить "три с чучуткой"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:38 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
26.10.2017 14:38, Гаджимурадов Рустам пишет: > Между номерами 3 и 4 вставить "три с чучуткой"? ага. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:40 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Мимопроходящийв таком виде не решена задача вставки номера "между существующими" Я наверное неверно выразился. Есть задачи 09:00 - №1 10:00 - №2 11:00 - №3 Если мы добавляем задачу на 09:30, то она будет №4. Номер не должны двигаться. А если удаляем задачу на 10:00, то будет "дырка" в нумерации. Т.е. нужно решение со своим генератором. Изначально в задаче про генератор умолчал намеренно, чтобы услышать возможные решения. Вдруг есть что-то очень простое и эффективнное. Но раз меня все начали тыкать носом в обновление с блокировкой, значит ничего лучшего нет. PS. Есть много чего, что надо бы сделать в БД и инфраструктуре в целом, но к сожалению приходится заниматься вот такими вот задачами :( ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:41 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
26.10.2017 14:41, imkot пишет: > Есть задачи > 09:00 - №1 > 10:00 - №2 > 11:00 - №3 > > Если мы добавляем задачу на 09:30, то она будет №4. Номер не должны двигаться. > А если удаляем задачу на 10:00, то будет "дырка" в нумерации. и нафига козе баян? смысл в такой "нумерации", если после 2 идёт 4, а после неё 3 Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:42 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkotА если удаляем задачу на 10:00, то будет "дырка" в нумерации. ну например задачу можно не удалять, а отменять ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:44 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkot> А если удаляем задачу на 10:00, то будет "дырка" в нумерации. Что потом вы с этой дыркой делать собираетесь (гусары, молчать!) ? Присвоить её номер другой записи (событию) ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:49 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание? ну что за фигня, честное слово. Два клиента, два исполнителя, и прочее, НЕ МОГУТ добавлять задания в расписания одному и тому же человеку. Таблица ID_человека и номер_задания - номер задания можно делать сколь угодно последовательным для одного ID_человека, никаких проблем. imkotТ.е. нужно решение со своим генератором. да нафиг. N людей, а генератор один? N генераторов? Либо вы задачу неправильно описали, либо вы вместо простого решения начинаете что-то сложное выдумывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 14:55 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
kdv> ну что за фигня, честное слово. Два клиента, два исполнителя, и прочее, kdv> НЕ МОГУТ добавлять задания в расписания одному и тому же человеку. Ты это с прикладной т.з. такое утверждаешь или с технической? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 15:04 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустамimkot> А если удаляем задачу на 10:00, то будет "дырка" в нумерации. Что потом вы с этой дыркой делать собираетесь (гусары, молчать!) ? Присвоить её номер другой записи (событию) ? Нет, так и останется дыра на этом месте. Тут уж я не властен что-то менять. За что купил, за то и продаю. Это не самое интересное требование. Бывает все намного веселее. Бюджетная сфера она такая... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 15:10 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
26.10.2017 15:10, imkot пишет: > Бюджетная сфера она такая... она "такая" из-за восприятия любого бреда заказчика как "единственно возможное решение". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 15:13 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
kdvimkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание? ну что за фигня, честное слово. Два клиента, два исполнителя, и прочее, НЕ МОГУТ добавлять задания в расписания одному и тому же человеку. Таблица ID_человека и номер_задания - номер задания можно делать сколь угодно последовательным для одного ID_человека, никаких проблем. imkotТ.е. нужно решение со своим генератором. да нафиг. N людей, а генератор один? N генераторов? Либо вы задачу неправильно описали, либо вы вместо простого решения начинаете что-то сложное выдумывать. Я ж сказал, тему можно закрыть. Я удовлетворен ответами. На каждого исполнителя будет свой генератор номеров. На каждый день новый генератор. Не расстраивайтесь так, вы тут немного развлекетесь и поржете, а мне с этим еще и жить надо будет ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 15:15 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Мимопроходящий26.10.2017 15:10, imkot пишет: > Бюджетная сфера она такая... она "такая" из-за восприятия любого бреда заказчика как "единственно возможное решение". Вот именно из-за таких ответов я и не люблю задавать вопросы на форуме. Предпочитаю просто читать и искать решения. Вроде бы я в самом начале сказал что задача не подлежит изменению. Есть ТЗ и его надо решать, либо его решит кто-то другой. Но чтобы поддерживать и развивать свою систему приходится решать и такие вот задачи в угоду заказчика, который не сам принял его решение, а его спустили вышестоящие органы. Впрочем это получается полный оффтоп. А сегодня еще не пятница. Хотя и четверг уже к концу у меня подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 15:27 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
А на каком по счёту генераторе нонче база ломается? Вмешиваться в проктологический консилиум намерения не имею, любопытно просто, остал от жизни-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 15:30 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаА на каком по счёту генераторе нонче база ломается? Вмешиваться в проктологический консилиум намерения не имею, любопытно просто, остал от жизни-то. В том то и беда, что это не будет генератор БД. Это будет таблица счетчиков, для эмуляции работы генератора. "генератор" надо было писать в кавычках. Влад вполне исчерпывающий ответ дал вот тут 20902280 . Такое решение в БД уже есть, но для таблицы которая не так часто модифицируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 15:55 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkotК сожалению происходит. И чаще чем хотелось бы :( Ну а в чём проблема при этом откатить транзакцию и повторить попытку в новой, которая увидит новое значение max()? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 16:04 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
100 пользователей, 365 дней. За год 36500 генераторов. Больше, чем 32767. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 16:21 |
|
Нумерация записей в таблице каждый день начиная с 1-цы
|
|||
---|---|---|---|
#18+
imkotСтарый плюшевый мишкаА на каком по счёту генераторе нонче база ломается? Вмешиваться в проктологический консилиум намерения не имею, любопытно просто, остал от жизни-то. В том то и беда, что это не будет генератор БД. Это будет таблица счетчиков, для эмуляции работы генератора. "генератор" надо было писать в кавычках. Влад вполне исчерпывающий ответ дал вот тут 20902280 . Такое решение в БД уже есть, но для таблицы которая не так часто модифицируется. Ну и в чём тут беда-то? Держи этот счётчик в таблице Users или как там она у тебя называется, в записи с данными о работнике, и селекть-апдейть в снапшоте, в котором создаёшь новое задание. Если первым оператором, то снапшот даже роллбачить не придётся при конфликте, изменений нет, можно смело коммитить. Узким местом это не будет и на быстродействие влияние - тьфу 3 раза. Зануляй по ночам роботом. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2017, 18:45 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561362]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 487ms |
0 / 0 |