Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Вниз

Отслеживание изменений в базе   Найти похожие ветки 

 
Sirus   (2007-11-03 08:31) [0]

Привет Мастера!
Есть вопрос: Как можно реализовать отслеживание изменений в базе данных? Отслеживаться должны изменение, удаление и вставка записи в базу данных. При этом нужно еще хранить код пользователя проделавшего эти изменения.

Есть какие-нить соображения или наработки, поделитесь опытом.


 
Reindeer Moss Eater ©   (2007-11-03 10:08) [1]

Триггеры


 
atruhin ©   (2007-11-03 11:05) [2]

В IB Expert пункт меню "Инструменты\Менеджер протоколов данных", выбираешь что логировать,
он сам создаст нужные тригера и таблицы.


 
Sergey13 ©   (2007-11-06 09:57) [3]

> [0] Sirus   (03.11.07 08:31)

> Есть какие-нить соображения или наработки, поделитесь опытом.

Про тригеры уже сказали.
Но по моему опыту есть соображение, что делать такой логинг стоит ОЧЕНЬ осторожно и после тщательного думания на тему "А оно мне вообще надо?". Ибо объем лога будет на порядки выше объема данных и расти будет очень быстро. Соответственно и производительность будет ... ну ты понял.


 
clickmaker ©   (2007-11-06 12:31) [4]


> Sirus   (03.11.07 08:31)

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


 
stud ©   (2007-11-06 14:27) [5]

Sergey13 ©   (06.11.07 9:57) [3]
Ибо объем лога будет на порядки выше объема данных и расти будет очень быстро.


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


 
Sergey13 ©   (2007-11-06 14:38) [6]

> [5] stud ©   (06.11.07 14:27)
> ну это если пользователи только и занимаются что исправлением
> только что введенных данных.

А в чем по твоему заключается работа пользователей в БД? По моему как раз в воде, редактировании и удалении записей.

> при грамотной работе пользователей))) объем не такой уж
> и большой
Это типа поставить им ZUMA и отдыхать? 8-)


 
PEAKTOP ©   (2007-11-06 14:51) [7]

>Sergey13 ©   (06.11.07 09:57) [3]
> Соответственно и производительность будет ... ну ты понял.


А ежели мы на железо денег не пожалеем, то можно и каждый чих в логи писать.

Тестировалось на Intel Core2duo / 4096DDR2 / RAID10 на SATA 160ГБ.

>Sirus   (03.11.07 08:31) [0]

А есть ли у твоих заказчиков таке железо ?


 
Sergey13 ©   (2007-11-06 15:06) [8]

> [7] PEAKTOP ©   (06.11.07 14:51)

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

Кроме того (опять же из опыта) надо сначала найти человека, который этими данными будет реально пользоваться. Делать это только ради "чтоб було" смысла никакого.


 
Desdechado ©   (2007-11-06 15:12) [9]

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


 
stud ©   (2007-11-06 15:52) [10]

Sergey13 ©   (06.11.07 14:38) [6]
А в чем по твоему заключается работа пользователей в БД? По моему как раз в воде, редактировании и удалении записей.


для пользователей основная работа - ввод данных. редактирование, удаление это уже побочный эффект связанный с некачественной "основной" работой.

Desdechado ©   (06.11.07 15:12) [9]
Такие данные единственно могут понадобиться для "разбора полетов", если кто-то что-то испортил и не признается.


и кстати как правило количество исправлений и удалений после разбора сокращается, иногда очень значительно)))


 
clickmaker ©   (2007-11-06 15:55) [11]


> правило количество исправлений и удалений после разбора
> сокращается, иногда очень значительно

по закону сохранения энергии, оно увеличивается в других конторах, куда ушли уволенные после разбора сотрудники )


 
Sergey13 ©   (2007-11-06 16:04) [12]

> [10] stud ©   (06.11.07 15:52)
> редактирование, удаление это уже побочный эффект связанный
> с некачественной "основной" работой.

Странно ты рассуждаешь. Если 1 юзер ввел новую запись и заполнил в ней 3 (из допустим 20) поля. Юзер 2 ввел свои данные - заполнил (отредактировал) еще 5 полей. Юзер 3 ... и т.д.
Тебя может удивит но иногда это все гуляет по кругу.

Я не говорю что логирование всегда плохо и что это вообще плохо. Я говорю, что это накладно, и посему делать это надо ОПРАВДАНО.


 
PEAKTOP ©   (2007-11-06 16:14) [13]

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

Правильной дорогой идете, товарищь !

А еще можно хранить это г**но вообще в отдельной БД. Благо, ЖарПтица не накладывает ограничения на подключения.


 
Desdechado ©   (2007-11-06 17:59) [14]

> можно хранить это г**но вообще в отдельной БД
В EXTERNAL TABLE - да, в отдельной БД - на уровне триггеров никак.


 
Anatoly Podgoretsky ©   (2007-11-06 19:19) [15]

> stud  (06.11.2007 14:27:05)  [5]

Объем равен = количество изменений одной записи + дополнительная информация по записи.
Десять раз отредактируешь одну запись получишь 10 копий со служебной информацией, а без служебной информации лог мало чего стоит.


 
Anatoly Podgoretsky ©   (2007-11-06 19:21) [16]

> Sergey13  (06.11.2007 14:38:06)  [6]

> А в чем по твоему заключается работа пользователей в БД? По моему как раз в воде, редактировании и удалении записей.

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


 
Anatoly Podgoretsky ©   (2007-11-06 19:22) [17]

> PEAKTOP  (06.11.2007 14:51:07)  [7]

Для информации, у меня запись на диск происходит весьма редко, раз в две минуты, а сервер постоянно пашет.


 
Anatoly Podgoretsky ©   (2007-11-06 19:23) [18]

> stud  (06.11.2007 15:52:10)  [10]

Боятся :-)


 
Anatoly Podgoretsky ©   (2007-11-06 19:25) [19]

> Desdechado  (06.11.2007 17:59:14)  [14]

Не знаю про Firebird, но на MSSQL нет проблем, и не тольно в другой БД, но и на другой сервер, на другой машине.


 
PEAKTOP ©   (2007-11-06 20:04) [20]

> Anatoly Podgoretsky ©   (06.11.07 19:22) [17]
> а сервер постоянно пашет.


С ума сойти... а что он еще делать должен ? :)

> Anatoly Podgoretsky ©   (06.11.07 19:25) [19]
> но на MSSQL нет проблем, и не тольно в другой БД, но и на другой сервер, на другой машине.


На Firebird тоже, если через UDF. Но это решение задачи по пути "истинного проктолога", ИМХО.
Гораздо кошернее решать ее через железо. 4Гб база данных (60% - логи) ? - ну и фиг с ней ! Работает.


 
Anatoly Podgoretsky ©   (2007-11-06 20:50) [21]

> PEAKTOP  (06.11.2007 20:04:20)  [20]

Да я не возражаю, возражение не от меня было.
А то что упор на диски был не убедителен.
Диски становятся определяющим фактором при нехватке оперативной памяти, но тут уже надо подумать об переходе на 64 бита и наращивание до предела, например до 128 гб. Но и это может оказаться недостаточным для террабайтных баз с большой нагрузкой тогда SAN то 10 гб оптике с мультичанел.

Хорошее железо залог успеха.


 
stud ©   (2007-11-07 08:25) [22]

Anatoly Podgoretsky ©   (06.11.07 20:50) [21]
Хорошее железо залог успеха.


хорошее железо развращает программистов)))

Anatoly Podgoretsky ©   (06.11.07 19:19) [15]
Объем равен = количество изменений одной записи + дополнительная информация по записи.


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

Anatoly Podgoretsky ©   (06.11.07 19:23) [18]
Боятся :-)

ишо как!!) пару раз разбор устраивали, тем более что с деньгами дело связано было. почемуто потом перестали паролями обмениваться))


 
Sergey13 ©   (2007-11-07 08:44) [23]

> [16] Anatoly Podgoretsky ©   (06.11.07 19:21)

Твои слова, ИМХО, никак не противоречат моим. Понятно, что читающих запросов в БД на порядки больше чем модифицирующих, но работа пользователей (а не сервера) все таки в основном состоит из модификации информации, а не из наблюдения за ней в "типовой" БД.


 
Anatoly Podgoretsky ©   (2007-11-07 08:54) [24]

> Sergey13  (07.11.2007 08:44:23)  [23]

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


 
Sergey13 ©   (2007-11-07 09:01) [25]

> [24] Anatoly Podgoretsky ©   (07.11.07 08:54)

> В большинстве баз...
> ...например Интерпола.

Ты думаешь автор топика пишет для Интерпола или ЮНЕСКО с ООН? Сомневаюсь.
Мне кажется он пишет очередной склад/бухгалтерию/документооборот, в которой все таки меняют инфу чаще. 8-)
Для меня например подобные БД являются более "типовыми".


 
Anatoly Podgoretsky ©   (2007-11-07 09:14) [26]

> Sergey13  (07.11.2007 09:01:25)  [25]

Таких баз, в которых чаще меняют, чем читают почти нет


 
Sergey13 ©   (2007-11-07 13:24) [27]

> [26] Anatoly Podgoretsky ©   (07.11.07 09:14)

Я тебе про Фому, а ты мне про Ерему.
Оператор на складе меняет информацию?

ЗЫ: Разговор переместился в сторону от вопроса, ИМХО. Стоит ли продолжать?


 
Anatoly Podgoretsky ©   (2007-11-07 14:27) [28]

Оператор это не база.


 
Sergey13 ©   (2007-11-07 15:21) [29]

> [28] Anatoly Podgoretsky ©   (07.11.07 14:27)

Так и я про это толкую. 8-)


 
Anatoly Podgoretsky ©   (2007-11-07 15:48) [30]

Нашли общую точку соприкосновения.


 
StriderMan   (2007-11-27 14:15) [31]

Удалено модератором


 
Sergey13 ©   (2007-11-27 14:34) [32]

> [31] StriderMan   (27.11.07 14:15)

1. Нафига поднимать чужой топик трехнедельной давности?
2. То, что это работает на порядки быстрее логирования понятно. Непонятно как это относится к логированию.


 
StriderMan   (2007-11-27 14:46) [33]

Удалено модератором


 
Sergey Masloff   (2007-11-27 22:58) [34]

Вставлю свои 5 копеек.
1. По моим наблюдениям (это не прикидки а статистические замеры на реальных базах) доля модифицирующих операций конечно не 1% но практически редко превышает 5%

2. Вот на скорость работы базы фактически write-only таблица лога не повлияет вообще никак. А диски сейчас дешевые так что если лог нужен то пиши спокойно и не парься.


 
Andrey ©   (2007-11-28 10:05) [35]

>Sergey Masloff   (27.11.07 22:58) [34]
Хм... базы разные бывают )
Бывают базы на CD, в которые запись возможна только чисто теоретически.
Бывают базы хранящие статистику разных датчиков пишущююся посекундно и выдающие оператору отчет раз в сутки.
Бывают разные наколенные блининги которые в MySQL базейку заливают весь NetFlow (свят-свят-свят), а потом один раз его считывают и агрегируют, расчитывают всякие разности, делают отчеты... такой себе цыкл жизни записи: insert -> select -> to_archiv

А вот про скорость работы, это вы зря ) Логирование на тригерах хорошо подгружает сервер при редактировании данных. Конечно если в базе 3 таблички по 100 записей, а машинка какой-нибудь там коре-два-дуо-и-еще-раз-дуо, то на глаз разницы не увидишь. Я раньше тестировал свои подел на пеньке 133. Вот там очень(!) хорошо видно любое бутылочное горлышко... и иногда даже бутылочное донышко )


 
Petr V. Abramov ©   (2007-11-28 11:25) [36]

> Sergey Masloff   (27.11.07 22:58) [34]
это все так, пока транзакции, в которых происходит логирование, не начинают биться за какой-нить ресурс. И вот тут совсем небольшое уменьшение скорости работы продавщицы (время транзакции) может начать заметно увеличивать длину очереди


 
Desdechado ©   (2007-11-28 11:52) [37]

> Sergey Masloff   (27.11.07 22:58) [34]
Не совсем так.
Если логирование ведется один-в-один, то да - сдублировать запись проблемы нет. А вот если приходится расшифровывать кучу внешних ключей из справочников, то изменение одной записи приводит к множеству дополнительных чтений, а это уже не фигня.


 
Sergey Masloff   (2007-11-28 21:06) [38]

Andrey ©   (28.11.07 10:05) [35]
В данный момент это база с 4500 пользователей объемом 0.6 терабайт и ростом впримерно в 20 Гб в неделю. Расходы на полное логгирование - пара-тройка процентов ресурсов сервера. Все ходы записаны.


 
Sergey Masloff   (2007-11-28 21:09) [39]

Petr V. Abramov ©   (28.11.07 11:25) [36]
>это все так, пока транзакции, в которых происходит логирование, не >начинают биться за какой-нить ресурс.
Так оно же в той же транзакции что и изменение данных. И как раз в нем ничего военного нет - просто прямая запись. Мизерная нагрузка по сравнению с собственно редактированием. На таблицах логов естественно никаких ключей и так далее. Не за что там конкурировать



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.041 c
3-1196183873
AntonUSAnoV
2007-11-27 20:17
2008.04.20
не могу сформулировать, проблема записи в поля типа dbmemo, dbedi


2-1206565281
MSD
2008-03-27 00:01
2008.04.20
вопрос Edit


2-1206460637
QAT
2008-03-25 18:57
2008.04.20
Битовые флаги


15-1204646353
GlFox
2008-03-04 18:59
2008.04.20
Distributed File System


15-1204716527
афоня
2008-03-05 14:28
2008.04.20
рисование графиков в Perl





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский