2015-03-10 2 views
0

Я работаю над корпоративным приложением, разработанным на 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.... 

Он работает следующим образом:

  1. App вставить одну запись вставки Authentication wihtout parentauthid
  2. Получает сгенерированный AUTH id
  3. Обновление поля атрибута аутентификации в поле Autodesk
  4. Поиск записи о связанной системе
  5. Получает идентификатор auth из базы данных и вставляет запись в таблицу базы данных.

Проблема:
БД размер 200k записей (таблица аутентификации). Я нашел 6000 записей, занимающих более 30 минут.

После анализа я обнаружил, что шаг 2 и шаг 3 - это процессы, при которых происходит рост базы данных.

Я чувствую, что лучше генерировать идентификатор Auth в коде C++, а не через базу данных. С помощью этого изменения мы можем удалить шаги 3 и 5.

Какая из лучших методов генерации Auto ID для таблицы?

ответ

0

Создание уникальных идентификаторов в присутствии нескольких пользователей является нетривиальным и, вероятно, требует записи в постоянное хранилище. Это медленно. Сгенерированный клиентом GUID будет быстрее.

При этом, если вы вставляете новую дочернюю запись, вы уже должны знать идентификатор родителя (избегаете шага 3), и данные системы аналогичным образом должны быть вставлены в БД только в том случае, если существует запись об аутентификации (избегает шага 4). Это верно независимо от того, где вы создаете эти идентификаторы.

+0

ParentID и AuthID одинаковы.ParentAuthID есть, чтобы сгруппировать записи, принадлежащие одному сеансу. ParentAuthID не известен во время вставки, поскольку AuthID генерируется во время вставки записи DB. После ввода мы запрашиваем authid и обновляем ParentAuthID с использованием значения authid. –

+1

@Chris_vr: Исправьте свои запросы, вместо того, чтобы добавлять дублирующее поле. Любой запрос, который может группировать bu 'ParentAuthID', также может быть записан в группу с помощью' AuthID'. – MSalters

+0

ParentAuthID должен идентифицировать запись, принадлежащую к той же сессии, что и все. Мой вопрос, который является одним, лучше, автоматически Authid в генерации db или auto auth id с помощью кода C++ –

Смежные вопросы