Стратегии использования последовательностей баз данных? - PullRequest
1 голос
/ 14 апреля 2010

У меня есть высокопроизводительная архитектура, которая получает много запросов каждую секунду (фактически, она может получать много запросов каждую миллисекунду). Архитектура разработана таким образом, что некоторые элементы управления зависят от определенного уникального идентификатора, назначенного каждому запросу.

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

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

Итак, есть ли лучшие стратегии при использовании последовательностей? Пожалуйста, предположите, что у меня нет другого способа получить уникальный идентификатор, кроме как полагаться на базу данных.

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Использование последовательности обязательно сериализует ваше приложение. Тем не менее, эти вещи оптимизированы, чтобы иметь минимальное влияние. Конечно, мы всегда можем все испортить, заявив, что это бесполезно. Итак, как определяется эта последовательность? У него большой кеш? Вы указали НЕТ ЗАКАЗА?

Сказав, что ....

В вашем вопросе выпадает не фраза, выделенная жирным шрифтом, а предложение перед ней:

"Моя команда только что обнаружила увеличение почти 1000% в прошедшем времени для каждая транзакция, которой мы являемся если предположить, что произошло из-за последовательность. "

Мы все знаем, что делает ASSUME (ну, не в этом случае, потому что я ничего не предполагаю). Были ли недавние изменения, влияющие на эту последовательность? Если нет, то почему вы все думаете, что это является причиной внезапного спада производительности на 1000%? Вместо того, чтобы предположить (то есть предположить), возможно, было бы лучше собрать некоторые доказательства. Это время куда-то уходит, и вам нужно выяснить, где. Нет смысла настраивать вашу последовательность, если у вас в коде есть состояние гонки, или вы используете процессор, ожидающий блокировки, или у вас плохое соединение, которое замедляет запись в SAN и т. Д., И т. Д.

У вас есть какие-либо журналы или трассировка, или вы могли бы включить? Можете ли вы воспроизвести это замедление в другой среде, такой как разработка или системный тест? Может быть, виновата последовательность. По крайней мере, тогда вы можете подойти к задаче реинжиниринга, зная, что вы решаете реальную проблему.

0 голосов
/ 14 апреля 2010

Одним из возможных подходов для получения идентификаторов, которые могут иметь отношение к делу, является использование UUID / GUID. Хотя я не знаю, насколько он требователен для генерации этих значений, он определенно не страдает от проблемы сериализации, о которой вы беспокоитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...