powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нумерация записей в таблице каждый день начиная с 1-цы
33 сообщений из 33, показаны все 2 страниц
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542426
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Ситуация следующая. Есть высоконагруженная БД (очень много пользователей, правда объем файла базы всего 60 гигов).
Основная логика работы крутится вокруг одной таблицы. Это приходится принимать как данность.

Схематично таблица выглядит так:
- ID - код записи, формируемый генератором
- ORD_ID - код организации
- PERFORMER_ID - код исполнителя
- DONE_DATE - дата исполнения
- DONE_TIME - время исполнения
- ну и далее поля данных

Т.е. это своего рода список задач для исполнителя на каждый день.
Формируется список задач заранее сразу на несколько дней вперед.
Задачи могут добавляться даже в день исполнения.
Исполнитель сам может добавлять себе задания.
Эта таблица есть практически во всех запросах, которые выполняются.

Поставлена задача
- Сделать нумерацию задач локально для каждого исполнителя.
- Каждый день для каждого исполнителя нумерация задач должна начинаться с единицы.
- При добавлении новой задачи она получает очередной порядковый номер для этого исполнителя в этот день (ну т.е. max(num) + 1)


Может кто подкинуть идею, как это правильнее организовать, чтобы минимизировать тормоза и исключить возможные ошибки в нумерации?
Предложение "сказать что это неправильно и не делать" не подходит. Задача поставлена и ее нужно решать.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542432
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делай на клиенте, при отображении.
хранить такую хрень нет необходимости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542448
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

авторделай на клиенте, при отображении.
хранить такую хрень нет необходимости.

не вариант, придется хранить в базе, т.к. нумерация должна возрастать в порядке добавления записей в базу.
Записи могут удаляться, на этом месте должны образовываться "дырки".
Записи могут вставляться в серединку временной цепочки заданий, тогда больший номер должен попасть в середину "дня".

Ну и до кучи - к БД подключается несколько разных клиентов. С БД работает слишком много разных приложений, чтобы можно было везде сделать одинаковый алгоритм нумерации.

Так что интересует меня именно нумерация записей в самой БД и хранение записей в самой БД, о чем я изначально и спросил.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542449
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkot,

непонятно, в чем проблема, даже если и хранить эти номера на сервере. ИД задачи же локальный для конкретного пользователя, так что действительно max(n) +1 вполне рабочее решение.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542456
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkotПоставлена задача
- Сделать нумерацию задач локально для каждого исполнителя.
- Каждый день для каждого исполнителя нумерация задач должна начинаться с единицы.
- При добавлении новой задачи она получает очередной порядковый номер для этого исполнителя в этот день (ну т.е. max(num) + 1)В лоб - заведи таблицу с (user_name, day, tasknum) и инкрементируй tasknum для конкретного (user_name, day).
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542461
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

а что мне делать когда два клиента "одновременно" добавляют записи в одно расписание?
max(N)+1 сделает ведь один и тот же номер для двух разных записей.
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE A (
    N  INTEGER
);
commit;
insert into A(N) values (1);
commit;



В первой транзакции
Код: sql
1.
2.
insert into A(N)
select max(N)+1 from A;



Во второй транзакции
Код: sql
1.
2.
insert into A(N)
select max(N)+1 from A;



Коммичу обе транзакции.
Получаю в таблице
Код: plaintext
1.
2.
3.
4.
N
----------
1
2
2
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542470
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблица календарь на пару день-юзер роботом назначать начальное значение на месяц вперед, а далее банальный мах+1 с блокировкой на запись.

Не вижу проблемы, типовая задача, которую надо сесть и запрограммировать.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542474
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.10.2017 14:07, imkot пишет:
> В первой транзакции
> insert into A(N)

никаких инсёртов!
только апдейты с no_record_version.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542476
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийтолько апдейты с no_record_version.и логика на клиенте с несколькими попытками обработки блокировок.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542477
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Да. Я думаю в эту сторону. Создать "свой генератор".
Работу с такой таблицей мне придется делать в
Код: plaintext
read_commited rec_version
транзакции?
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542483
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkot,

см выше - либо rc+no_rec_ver, либо snapshot.

Кроме того, я бы использовал
Код: sql
1.
2.
3.
update ... 
  set num = num + 1 
  returning new.num 
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542485
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее параметр NO_REC_VERSION. Ошибся в предыдущем ответе Владу.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542489
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание?

Для начала - ничего. Собери статистику как часто это происходит и происходит ли вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542502
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladimkot,

см выше - либо rc+no_rec_ver, либо snapshot.

Кроме того, я бы использовал
Код: sql
1.
2.
3.
update ... 
  set num = num + 1 
  returning new.num 



Значит все же так. Думаю что я получил ответ на свой вопрос.

Спасибо всем за советы.

PS: Такой подход у меня уже используется, но на менее востребованной таблице.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542505
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в таком виде не решена задача вставки номера "между существующими"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542506
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovimkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание?

Для начала - ничего. Собери статистику как часто это происходит и происходит ли вообще.


К сожалению происходит. И чаще чем хотелось бы :(

Ладно, можно закрыть тему.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542511
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МП> в таком виде не решена задача вставки номера "между существующими"

В смысле? Между номерами 3 и 4 вставить "три с чучуткой"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542517
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.10.2017 14:38, Гаджимурадов Рустам пишет:
> Между номерами 3 и 4 вставить "три с чучуткой"?

ага.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542518
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийв таком виде не решена задача вставки номера "между существующими"

Я наверное неверно выразился.

Есть задачи
09:00 - №1
10:00 - №2
11:00 - №3

Если мы добавляем задачу на 09:30, то она будет №4. Номер не должны двигаться.
А если удаляем задачу на 10:00, то будет "дырка" в нумерации.

Т.е. нужно решение со своим генератором.
Изначально в задаче про генератор умолчал намеренно, чтобы услышать возможные решения.
Вдруг есть что-то очень простое и эффективнное.

Но раз меня все начали тыкать носом в обновление с блокировкой, значит ничего лучшего нет.

PS. Есть много чего, что надо бы сделать в БД и инфраструктуре в целом, но к сожалению приходится заниматься вот такими вот задачами :(
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542521
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542524
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkotА если удаляем задачу на 10:00, то будет "дырка" в нумерации.

ну например задачу можно не удалять, а отменять
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542527
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkot> А если удаляем задачу на 10:00, то будет "дырка" в нумерации.

Что потом вы с этой дыркой делать собираетесь (гусары, молчать!) ?
Присвоить её номер другой записи (событию) ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542536
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание?
ну что за фигня, честное слово. Два клиента, два исполнителя, и прочее, НЕ МОГУТ добавлять задания в расписания одному и тому же человеку.
Таблица ID_человека и номер_задания - номер задания можно делать сколь угодно последовательным для одного ID_человека, никаких проблем.

imkotТ.е. нужно решение со своим генератором.
да нафиг. N людей, а генератор один? N генераторов?
Либо вы задачу неправильно описали, либо вы вместо простого решения начинаете что-то сложное выдумывать.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542547
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> ну что за фигня, честное слово. Два клиента, два исполнителя, и прочее,
kdv> НЕ МОГУТ добавлять задания в расписания одному и тому же человеку.

Ты это с прикладной т.з. такое утверждаешь или с технической?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542550
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамimkot> А если удаляем задачу на 10:00, то будет "дырка" в нумерации.

Что потом вы с этой дыркой делать собираетесь (гусары, молчать!) ?
Присвоить её номер другой записи (событию) ?


Нет, так и останется дыра на этом месте.
Тут уж я не властен что-то менять. За что купил, за то и продаю.
Это не самое интересное требование. Бывает все намного веселее. Бюджетная сфера она такая...
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542553
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.10.2017 15:10, imkot пишет:
> Бюджетная сфера она такая...

она "такая" из-за восприятия любого бреда заказчика как "единственно возможное решение".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542559
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvimkotа что мне делать когда два клиента "одновременно" добавляют записи в одно расписание?
ну что за фигня, честное слово. Два клиента, два исполнителя, и прочее, НЕ МОГУТ добавлять задания в расписания одному и тому же человеку.
Таблица ID_человека и номер_задания - номер задания можно делать сколь угодно последовательным для одного ID_человека, никаких проблем.

imkotТ.е. нужно решение со своим генератором.
да нафиг. N людей, а генератор один? N генераторов?
Либо вы задачу неправильно описали, либо вы вместо простого решения начинаете что-то сложное выдумывать.

Я ж сказал, тему можно закрыть. Я удовлетворен ответами.
На каждого исполнителя будет свой генератор номеров. На каждый день новый генератор.

Не расстраивайтесь так, вы тут немного развлекетесь и поржете, а мне с этим еще и жить надо будет
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542567
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий26.10.2017 15:10, imkot пишет:
> Бюджетная сфера она такая...

она "такая" из-за восприятия любого бреда заказчика как "единственно возможное решение".


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

Впрочем это получается полный оффтоп. А сегодня еще не пятница. Хотя и четверг уже к концу у меня подходит.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542570
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на каком по счёту генераторе нонче база ломается? Вмешиваться в проктологический консилиум намерения не имею, любопытно просто, остал от жизни-то.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542598
Фотография imkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаА на каком по счёту генераторе нонче база ломается? Вмешиваться в проктологический консилиум намерения не имею, любопытно просто, остал от жизни-то.

В том то и беда, что это не будет генератор БД. Это будет таблица счетчиков, для эмуляции работы генератора.
"генератор" надо было писать в кавычках.

Влад вполне исчерпывающий ответ дал вот тут 20902280 . Такое решение в БД уже есть, но для таблицы которая не так часто модифицируется.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542616
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkotК сожалению происходит. И чаще чем хотелось бы :(

Ну а в чём проблема при этом откатить транзакцию и повторить попытку в новой, которая
увидит новое значение max()?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542651
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
100 пользователей, 365 дней. За год 36500 генераторов. Больше, чем 32767.
...
Рейтинг: 0 / 0
Нумерация записей в таблице каждый день начиная с 1-цы
    #39542810
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imkotСтарый плюшевый мишкаА на каком по счёту генераторе нонче база ломается? Вмешиваться в проктологический консилиум намерения не имею, любопытно просто, остал от жизни-то.

В том то и беда, что это не будет генератор БД. Это будет таблица счетчиков, для эмуляции работы генератора.
"генератор" надо было писать в кавычках.

Влад вполне исчерпывающий ответ дал вот тут 20902280 . Такое решение в БД уже есть, но для таблицы которая не так часто модифицируется.

Ну и в чём тут беда-то? Держи этот счётчик в таблице Users или как там она у тебя называется, в записи с данными о работнике, и селекть-апдейть в снапшоте, в котором создаёшь новое задание. Если первым оператором, то снапшот даже роллбачить не придётся при конфликте, изменений нет, можно смело коммитить. Узким местом это не будет и на быстродействие влияние - тьфу 3 раза. Зануляй по ночам роботом.
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нумерация записей в таблице каждый день начиная с 1-цы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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