powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нумерация записей в таблице каждый день начиная с 1-цы
25 сообщений из 33, страница 1 из 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
25 сообщений из 33, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нумерация записей в таблице каждый день начиная с 1-цы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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