Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6085
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Эффективная стратегия для оставления истории аудита trail/изменений для DB приложений?
Назовите Некоторые стратегии, которые люди успешно использовали для ведения истории изменений данных в довольно сложной базе данных. Одно из приложений, которое я часто использую и разрабатываю, действительно может извлечь выгоду из более полного способа отслеживания изменений записей с течением времени. Например, прямо сейчас записи могут иметь ряд timestamp и измененных пользовательских полей, но в настоящее время у нас нет схемы для регистрации нескольких изменений, например, если операция откатывается. В идеальном мире можно было бы восстановить запись, какой она была после каждого сохранения, и т. д.
Немного информации о DB:
- Необходимо иметь возможность расти на тысячи записей в неделю
- 50-60 таблиц
- Основные пересмотренные таблицы могут содержать несколько миллионов записей каждая
- Разумное количество внешних ключей и индексов набора
- Использование PostgreSQL 8.x
Одна из стратегий, которую вы можете использовать, - это MVCC, управление многозначным параллелизмом. В этой схеме вы никогда не делаете обновления ни для одной из ваших таблиц, вы просто делаете вставки, сохраняя номера версий для каждой записи. Это имеет преимущество в предоставлении точного снимка с любого момента времени, а также полностью устраняет проблемы блокировки обновления, которые преследуют многие базы данных.
Но это создает огромную базу данных, и все они требуют дополнительного предложения для выбора текущей версии записи.
Если вы используете Hibernate, посмотрите на JBoss Envers . С главной страницы проекта:
Проект Envers направлен на упрощение управления версиями постоянных классов JPA. Все, что вам нужно сделать, это аннотировать ваш постоянный класс или некоторые его свойства, которые вы хотите изменить, с помощью @Versioned. для каждой версионной сущности будет создана таблица, которая будет содержать историю изменений, внесенных в сущность. Затем вы можете без особых усилий извлекать и запрашивать исторические данные.
Это несколько похоже на подход Эрика, но, вероятно, гораздо меньше усилий. Однако я не знаю, какой язык/технологию вы используете для доступа к базе данных.
В прошлом я использовал триггеры для построения журнала db update/insert/delete.
Вы можете вставлять запись каждый раз, когда одно из вышеперечисленных действий выполняется в определенной таблице, в таблицу ведения журнала, которая отслеживает действие, то, что сделал пользователь БД, timestamp, таблицу, в которой оно было выполнено, и Предыдущее значение.
Есть, вероятно, лучший ответ, хотя, как это потребует от вас кэшировать значение, прежде чем фактическое удаление или обновление было выполнено я думаю. Но вы можете использовать это, чтобы сделать откаты.
Единственная проблема с использованием триггеров заключается в том, что он добавляет к производительности накладные расходы любого insert/update/delete. Для повышения масштабируемости и производительности необходимо свести транзакцию базы данных к минимуму. Аудит с помощью триггеров увеличивает время, необходимое для выполнения транзакции, и в зависимости от объема может вызвать проблемы с производительностью.
другой способ-изучить, предоставляет ли база данных какой-либо способ извлечения журналов "Redo", как это имеет место в Oracle. Повтор журналов-это то, что база данных использует для воссоздания данных в случае сбоя и необходимости восстановления.
Подобно триггеру (или даже с ним), вы можете заставить каждую транзакцию запускать событие ведения журнала асинхронно и иметь другой процесс (или просто поток), фактически обрабатывающий ведение журнала. Существует много способов реализовать это в зависимости от вашего приложения. Я предлагаю, чтобы приложение запустило событие, чтобы оно не вызывало ненужной нагрузки на вашу первую транзакцию (что иногда приводит к блокировкам из каскадных журналов аудита).
Кроме того, можно повысить производительность базы данных-источника, сохранив базу данных аудита в отдельном расположении.
Я использую SQL сервер, а не PostgreSQL, так что я не уверен, будет ли это работать для вас или нет, но у попа Риветта была отличная статья о создании аудита trail здесь: Поп Риветт сервер SQL FAQ No.5: Поп на аудит Trail
Создайте таблицу аудита, а затем создайте триггер для каждой таблицы, которую вы хотите проверить.
Подсказка: используйте Codesmith для создания триггеров.