Как я использовал бы журнал аудита для отображения, какие поля когда-либо редактировались?

Преимущество выражения генератора заключается в том, что оно использует меньше памяти, поскольку не создает весь список сразу. Выражения генератора лучше всего использовать, когда список является посредником, например, суммируя результаты или создавая из результатов выборку.

Например:

sum(x*2 for x in xrange(256))

dict( ((k, some_func(k) for k in some_list_of_keys) )

Преимущество состоит в том, что список не полностью сформирован, и, следовательно, мало памяти используется (и также должен быть быстрее)

Вы должны, Тем не менее, используйте понимание списка, когда желаемый конечный продукт является списком. Вы не собираетесь сохранять какую-либо память, используя выражения генератора, так как вам нужен сгенерированный список. Вы также получаете возможность использовать любые функции списка, например отсортированные или перевернутые.

Например:

reversed( [x*2 for x in xrange(256)] )
7
задан Kirsehn 1 July 2009 в 21:36
поделиться

3 ответа

Я бы обработал информацию аудита отдельно от фактической информации домена, насколько это возможно.

Требование №1: Думаю, вы создадите дополнительные таблицы аудита для записи изменений. Хорошее предложение Эрика - создание контрольной информации с помощью триггеров в базе данных SQL. Таким образом, ваше приложение не должно знать логику аудита.

Если ваша база данных не поддерживает триггеры, возможно, вы используете какой-то уровень устойчивости или базы данных. Это также было бы хорошим местом для размещения такой логики, поскольку вы снова минимизируете любые зависимости между нормальным кодом приложения и кодом аудита.

Требование № 2: Что касается отображения индикаторов: я бы не стал создавать логические поля в таблице, в которой хранится фактическое значение. (Это привело бы к существованию всевозможных зависимостей между вашим нормальным кодом приложения и вашим кодом контрольного журнала ).

Я бы попытался позволить коду, отвечающему за отображение формы, также нести ответственность за отображение данных аудита на полевом уровне. Это вызовет накладные расходы на запрос, но это затраты на отображение этого дополнительного уровня информации. Возможно, вы сможете свести к минимуму накладные расходы базы данных, добавив метаданные к информации аудита, что упростит поиск.

Некоторое большое приложение Enterpriseisy, которое я поддерживаю, использует примерно следующую структуру:

  • Таблица заголовков изменений, соответствующая изменению записи в таблице.

Поля:

changeId, changeTable, changedPrimaryKey, userName, dateTime

- Таблица полей изменений, соответствующая изменяемому полю.

Поля:

changeId, changeField, oldValue, NewValue

Образец содержания:

Заголовок изменения:

'1', 'BooksTable', '1852860138', 'AdamsD', '2009-07-01 15:30'

Элемент изменения:

'1', 'Title', 'The Hitchhiker's Guide to the Gaxaly', 'The Hitchhiker's Guide to the Galaxy'
'1', 'Author', 'Duglas Adasm', 'Douglas Adams'

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

4
ответ дан 7 December 2019 в 10:06
поделиться

Как общее требование, отметка измененного поля "пахнет" немного странно. Если записи являются долгоживущими и могут меняться со временем, то в конечном итоге все поля будут иметь тенденцию быть помеченными. Поэтому мне интересно, как любой пользователь может понять простой набор индикаторов для каждого поля.

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

Я думаю, что ваша идея о подготовке каких-то агрегированных данных TheAuditTrail, вероятно, будет очень полезной. Возникает вопрос, достаточно ли одного флага на запись? Если основной доступ пользователя осуществляется через список, может быть, достаточно просто выделить измененные записи для последующего просмотра. Или дату последнего изменения значения записи, чтобы выделялись только недавно измененные записи - все возвращается к реальным потребностям пользователя. Мне трудно представить, что записи, измененные 3 года назад, так же интересны, как и те, которые были изменены на прошлой неделе.

Затем, когда мы переходим к переходу к единственной записи. Опять же, простой флаг для поля не кажется полезным (хотя ваш домен, ваши требования). Если да, то ваша общая идея в порядке. Я предполагаю, что последовательность изменений в поле и последовательность общих изменений записи, намного интереснее. У сотрудника было повышение заработной платы, сотрудник переехал в отдел, сотрудник был повышен в должности = три отдельных бизнес-события или одно?

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

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

сотрудник был повышен в должности = три отдельных бизнес-события или одно?

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

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

сотрудник был повышен в должности = три отдельных бизнес-события или одно?

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

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

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

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

2
ответ дан 7 December 2019 в 10:06
поделиться

Лично я бы сделал отслеживание простым, а отчетность - забавным.

Каждый раз, когда пользователь вставляет запись, вы делаете вставку в таблицу аудита для этой таблицы

'I', 'Date', 'User', 'Data column1','Data Column2', etc.

Это предполагает, что структура таблиц не будет меняться со временем (относительно количества столбцов данных)

Для обновлений просто вставьте

'U', 'Date', 'User', 'Data column1', etc

Вставьте то, что пользователь только что ввел, как обновление.

Затем, после вставьте и обновите, у вас будет следующее

'I','May 3 2009','BLT','person005','John','Smith','Marketing'
'U','May 4 2009','BLT','person005','John','Smith','Accounting'

Тогда это просто простой отчет, показывающий, что запись об уникальном человеке 'person005' была вставлена ​​и обновлена, где их отдел был обновлен.

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

0
ответ дан 7 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: