Я работаю над корпоративным приложением, разработанным на C++, а база данных - mariadb. Приложение обрабатывает два файла аудита Authentication.log
и SytemDetails.log
.Авто id в базе данных против Авто id через код
Для проведения аудита требуется, чтобы данные вставлялись в две таблицы: Authentication table
и SystemDetails table
. Авто id - это первичный ключ для Authentication table
и внешний ключ в SystemDetails table
.
Authentication table
сохраняет информацию об аутентификации. I.e сеанс открыт, информация о сеансе входа и SystemDetails
хранит сведения о команде, выполняемой в течение каждого сеанса.
Right теперь AUTHID является автогенерируемый в базе данных, а именно:
Authentication :AuthID,ParentAuthID,info1,Info2....
SystemDetails:sysid,authid,info1,info2....
Он работает следующим образом:
- App вставить одну запись вставки Authentication wihtout parentauthid
- Получает сгенерированный AUTH id
- Обновление поля атрибута аутентификации в поле Autodesk
- Поиск записи о связанной системе
- Получает идентификатор auth из базы данных и вставляет запись в таблицу базы данных.
Проблема:
БД размер 200k записей (таблица аутентификации). Я нашел 6000 записей, занимающих более 30 минут.
После анализа я обнаружил, что шаг 2 и шаг 3 - это процессы, при которых происходит рост базы данных.
Я чувствую, что лучше генерировать идентификатор Auth в коде C++, а не через базу данных. С помощью этого изменения мы можем удалить шаги 3 и 5.
Какая из лучших методов генерации Auto ID для таблицы?
ParentID и AuthID одинаковы.ParentAuthID есть, чтобы сгруппировать записи, принадлежащие одному сеансу. ParentAuthID не известен во время вставки, поскольку AuthID генерируется во время вставки записи DB. После ввода мы запрашиваем authid и обновляем ParentAuthID с использованием значения authid. –
@Chris_vr: Исправьте свои запросы, вместо того, чтобы добавлять дублирующее поле. Любой запрос, который может группировать bu 'ParentAuthID', также может быть записан в группу с помощью' AuthID'. – MSalters
ParentAuthID должен идентифицировать запись, принадлежащую к той же сессии, что и все. Мой вопрос, который является одним, лучше, автоматически Authid в генерации db или auto auth id с помощью кода C++ –