|
|
|
Аудит: одна таблица на все или таблицы аудита для каждой таблицы?
|
|||
|---|---|---|---|
|
#18+
Стоит задача вести выборочный аудит по таблицам и пользователем Есть 2 варианта: 1 - ведем аудит в одной общей таблице {дата, сущность:текст, пользователь:uid, id-записи:id, изменения: текст} - в поле "изменения" кладутся значения измененной записи. id-записи - в некоторых БД (к примеру PostgreSQL) можно иметь уникальный для всей базы id записи любой таблицы 2 - ведем для каждой таблицы таблицу аудита = полной копии структуры исходной таблицы + поля {дата, пользователь:uid} 1й вариант удобен - потому что одна таблица и все выборки можно делать на ней, но неудобно что измененные поля хранятся в текстовом виде (или в виде JSON для PostgreSQL) и манипуляция с ними крайне не эфективна 2й вариант хорош тем что все измененные поля представлены в "родном" виде и сними можно сразу работать - к примеру выполнить Undo, но проблема возникает с количеством и поддержкой таких таблиц - их надо периодически чистить (а если поддерживать секционирование + оверхед на создание и манипуляции) + выборка по юзеру что он изменил потребует включения в запрос все таблицы аудита Какой из вариантов по вашему мнению все же наиболее подходящий для практики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 17:07 |
|
||
|
Аудит: одна таблица на все или таблицы аудита для каждой таблицы?
|
|||
|---|---|---|---|
|
#18+
Я бы выбрал второй вариант: divide et impera. Первый вариант легко реализуется вьюхой с union all. Производительность подобных запросов беспокоить вас не должна, не так часто это делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 18:35 |
|
||
|
Аудит: одна таблица на все или таблицы аудита для каждой таблицы?
|
|||
|---|---|---|---|
|
#18+
sp, Прежде всего надо решить, в чем будет заключаться "практика". Какие запросы будут идти к системе аудита, с какой интенсивностью? Какой объем данных предполагается держать в рабочих таблицах? Предполагается ли сброс в архивы, и обращение к ним? Немаловажный вопрос также - динамика наполнения самих таблиц аудита. Может, в какую-то таблицу у вас тысяча юзеров в секунду сканерами штрих-кодов что-то вливают, так что общая таблица аудита станет "бутылочным горлышком" ? А вообще, мой хрустальный шар подсказывает, что Вы склонитесь к первому варианту. "Неудобство" тектового представления борется один раз соответствующей библиотечной прослойкой. "Неэффективность" манипуляций не будет иметь значения, в связи с разовым характером "разборов полетов" и запросов к системе аудита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 18:39 |
|
||
|
Аудит: одна таблица на все или таблицы аудита для каждой таблицы?
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, Я вот задумался, что если в одну таблицу будет идти большое количество обновлений а в другие - редко, то запрос по одной таблице будет медленным в силу ее общего большого размера, в то время если запрос будет идти к одной конкретной таблице - это будет гораздо быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 20:30 |
|
||
|
Аудит: одна таблица на все или таблицы аудита для каждой таблицы?
|
|||
|---|---|---|---|
|
#18+
хотя в Postgres можно создать одну секционированную таблицу, в которой прописать функцию перенаправляющую вставку данных и выборку в секцию соотносящуюся с таблицей данных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 20:34 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38209648&tid=1541316]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 471ms |

| 0 / 0 |
