powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / как для множества потоков получить уникальный id записи для логирования в базе данных
8 сообщений из 8, страница 1 из 1
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37422202
TAlex62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день

Недавно вот задумался:

Есть множество потоков работающих внутри message broker. Каждый поток пишет логи в оракловскую базу данных. Для получения id новой записи использую последовательность (этим занимается отдельный подпоток, встраеваемый в каждый поток).
Однако приходится дважды дёргать базу (первый раз чтобы получить id записи, второй чтобы записать в базу строку с логами).
Казалось бы: сделай триггер в базе и получай id записи прямо внутри базы. НО! В случае ошибки внутри потока сообщение откатывается и посылается письмо с id записи в логах (где будет сообщение об ошибке).
То есть мне просто необходимо дёргать базу дважды. В начале потока - для получения id из последовательности. И в конце - для записи в базу логов.
Хотелось бы избежать первого дёргания.

Собственно вопрос: как бы мне из потоков (их много и работают одновременно) получать уникальное, возрастающее, целое число которое я мог бы исползовать как id записи. При этом не используя sequence и вообще не исползуя базу данных.

Думал в направлении shared memory и ноды на java, но не сообразил ничего путного.
Кроме того: что будет если перезагрузится сервер? Значение всё равно должно увеличиваться...

Пока самое лучшее решение, которое придумал:
есть отдельный поток - кладёт в очередь сообщения с этим самым возрастающем id.
Другие потоки черпают сообщения и используют. Если сообщения нет, то пинают тот поток и ждут, пока он не выложит сообщение (нода MQGet).
Вроде бы работать будет, но напоминает карточный домик - того и гляди развалится.

Есть у кого мысли в тему?
...
Рейтинг: 0 / 0
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37422278
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое отношение это имеет к IBM?

Воспольуйтесь PL/SQL, напишите для вставки хранимую процедуру. (В DB2 это не нужно).
...
Рейтинг: 0 / 0
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37422488
шубин_ду
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAlex62Казалось бы: сделай триггер в базе и получай id записи прямо внутри базы.
в этом случае триггер не нужен. insert values(seq.nextval,...)

TAlex62Хотелось бы избежать первого дёргания.

Непонятна цель избежания. Чисто эстетическая? Какие реальные проблемы связаны с первым дерганием?
...
Рейтинг: 0 / 0
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37422510
TAlex62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
шубин_ду,

Цель такая: несколько брокеров, следовательно несколько (одинаковых по структуре) баз с логами. Хотелось бы сквозной id на записи в логах. ОДин на все базы
...
Рейтинг: 0 / 0
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37422538
шубин_ду
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TAlex62шубин_ду,

Цель такая: несколько брокеров, следовательно несколько (одинаковых по структуре) баз с логами. Хотелось бы сквозной id на записи в логах. ОДин на все базы

А почему не дергать id только из одной базы и использовать его для всех баз? Или каждый брокен имеет доступ только к своей базе?
...
Рейтинг: 0 / 0
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37422546
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TAlex62...
Есть у кого мысли в тему?Здравствуйте.
java.util.UUID .randomUUID()
?
...
Рейтинг: 0 / 0
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37426058
iamanonym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Текущий день с начала веков :) * коэффициент + текущий час * коэффициент+ текущая минута * коэффициент + текущая секунда * кэффициент.
При правильном подборе коэффициентов должно работать.
Синтаксис типа :
DECLARE IN INTEGER EXTRACT(DAY FROM CURRENT_TIMESTAMP);
...
Рейтинг: 0 / 0
как для множества потоков получить уникальный id записи для логирования в базе данных
    #37426276
TAlex62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С датой и временем в качестве уникального ай-ди работать будет не стабильно

спасибо всем отвечавшим. Буду думать
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / как для множества потоков получить уникальный id записи для логирования в базе данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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