powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Путешествия в прошлое
25 сообщений из 121, страница 4 из 5
Путешествия в прошлое
    #38751986
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Запускается скрипт/процедура по восстановлению исторической базы на время заданное пользователем. После чего происходит переконнент на эту базу.
Проблема в том, что восстановление может занимать заметное время (минуты/часы) - какой объем вашей базы?
Также надо будет разобраться с протоколом - если историческая база используется, то один из вас будет обломан.

Самое плохое решение. Почти тоже самое, что с бекапом.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752006
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttsoulsurferВам нужен встроенный в СУБД Git чтоли?

Ну типа.

А может втихушку поделим добычу? Вы там будете долго париться и еще неизвестно что получится, а у меня уже это есть.
Предложим заказчегу за полцены, - он не устоит:)
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752012
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заказчик не только сможет бросить взгляд в прошлое и/или в будущее, но и сможет получить некую "дельту" используя встроенную 16594626 |> http://%5Bmsg=16594626]]скриптовую подсистему (языки программирования), я сейчас этим как раз озабочен:)
Всевозможная обработка данных при помощи скриптов, отчетная подсистема, все что хошь:)
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752022
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о как, разные языки - полная демократия и плюрализм
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752027
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поговорите с заказчиком. У меня в одном проекте попросили вдруг добавить такую же функциональность к уже тестирующейся в бете системе. За месяц.
После дискуссии сошлись на том, что в системе делается месячный снапшот, и можно увидеть данные на 1 число каждого месяца за последние пять лет. Заказчика это устроило. База была небольшая, архивные снапшоты кидались на дешевые медленные диски.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752034
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt Самое плохое решение. Почти тоже самое, что с бекапом.Тогда интерфейс к планировщику - когда запустить джоб, на какую дату восстанавливатся и кому прислать уведомление когда база будет восстановлена.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752037
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergei.AgalakovПоговорите с заказчиком. У меня в одном проекте попросили вдруг добавить такую же функциональность к уже тестирующейся в бете системе. За месяц.
После дискуссии сошлись на том, что в системе делается месячный снапшот, и можно увидеть данные на 1 число каждого месяца за последние пять лет. Заказчика это устроило. База была небольшая, архивные снапшоты кидались на дешевые медленные диски.

Со снапшотами понятно. Они не скажут нам о таки вещах как: "Что у нас в базе есть со сроком окончания через 10 дней" и тому подобных комбинаций
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752151
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257hVosttСамое плохое решение. Почти тоже самое, что с бекапом.Тогда интерфейс к планировщику - когда запустить джоб, на какую дату восстанавливатся и кому прислать уведомление когда база будет восстановлена.

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

Ну что же вы, разве никому не интересно?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752152
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei.AgalakovПоговорите с заказчиком. У меня в одном проекте попросили вдруг добавить такую же функциональность к уже тестирующейся в бете системе. За месяц.
После дискуссии сошлись на том, что в системе делается месячный снапшот, и можно увидеть данные на 1 число каждого месяца за последние пять лет. Заказчика это устроило. База была небольшая, архивные снапшоты кидались на дешевые медленные диски.

Заказчик хочет бомбу, а не унылую хрень Да нам и самим интересно. Думал, может кто-то уже заморачивался, подсказал бы направление. Я не прошу решить эту задачу за нас, просто пару советов, да верное направление вполне бы устроило.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752153
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prog123А может втихушку поделим добычу? Вы там будете долго париться и еще неизвестно что получится, а у меня уже это есть.
Предложим заказчегу за полцены, - он не устоит:)

В смысле, методология или готовая система? Нужна методология, остальное мы как-нибудь осилим. И не такое решали.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752156
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttprog123А может втихушку поделим добычу? Вы там будете долго париться и еще неизвестно что получится, а у меня уже это есть.
Предложим заказчегу за полцены, - он не устоит:)

В смысле, методология или готовая система? Нужна методология, остальное мы как-нибудь осилим. И не такое решали.

У меня все готовенькое и на блюдечке с голубой каёмочкой, а вот вашу контору надо бы всем составом на овощную базу, на трудовое перевоспитание:)
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752201
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prog123У меня все готовенькое и на блюдечке с голубой каёмочкой, а вот вашу контору надо бы всем составом на овощную базу, на трудовое перевоспитание:)

Согласен, все на картошку!
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752238
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Направление-то понятно: effectivetimestamp, expiredtimestamp, update==delete+insert во всех таблицах...
Производительность сильно страдает. JOIN нескольких таблиц с условиями 'в момент времени x' может оказаться таким медленным,
что бысто работающая унылая хрень покажется марципанчиком.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752244
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei.Agalakov Направление-то понятно: effectivetimestamp, expiredtimestamp, update==delete+insert во всех таблицах...Не совсем так.

alter table mytable add d_from default sysdate()
update mytable set d_from='01 Jan 1900'

create table mytable_hist as select *, sysdate() as d_to from mytable where 1=0

insert идет штатно d_from принимает default значение

при update
insert into mytable_hist select *, sysdate() as d_to from mytable -- для всех обновляемых данных
update mytable set d_from=sysdate() -- дополнительный update для обновляемых строк
собственно update

при delete
insert into mytable_hist select *, sysdate() as d_to from mytable -- для всех удаляемых строк
собственно delete

запрос на дату :dselect

select * from mytable
where ... -- условие
and d_from<=:dselect
union all
select * from mytable_hist
where ... условие
and :dselect between d_from and d_to -- between для компактности, удобно, но при нем d_to должен быть чутка раньше чем d_from следующей записи

либо вьюху
create view my_hist_view as
select *, '31 Jan 9999' as d_to from mytable
union all
select * from mytable_hist

select * from my_hist_view
where ... условие
and :dselect between d_from and d_to

индексы для mytable_hist должны быть такими же как и для mytable

как-то так навскидку.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752635
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нучотам?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752676
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАнатоЛойпропущено...

Эт-то почему же? :)

Нет нужды для ретроспективы.
Непонятно. Зачем тогда вообще логировать просмотры?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752683
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛойhVosttпропущено...


Нет нужды для ретроспективы.
Непонятно. Зачем тогда вообще логировать просмотры?

тут набежали малолетние чтобы подускутировать про джойны:)

Надо говорить прикладным языком(чисто русским), а именно: что, для чего и как должно быть, т.е. что должно скрываться за той единственной кнопкой на экране - "Сделай мне хорошо!"
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752730
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prog123нучотам?

будем делать куда деваться

в пятницу остановились на вопросе, можно ли ретроспективу использовать для чего-нибудь ещё, например для отображения активности.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752888
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
За прикладную логику в БД у нас бьют по рукам. Обоснование должно быть такое, что по-другому просто ну никак. Пока таких случаев не было.

Логика в БД -- моветон.



Вот полностью не согласен :)
Всё очень сильно зависит от конкретного приложения и конкретной СУБД.

Видимо у вас такой проект, в котором не требуется
1) Десктопный клиент
2) WEB клиент с точно такой же функциональностью
3) Android клиент, который реализует основные функции приложения
4) iOS клиент, который полностью аналогичен андроидному
5) Вторая версия десктопного клиента специально для техсаппорта, реализующая фичи, недоступные ни в одном из вышеперечисленных, но при этом сохраняющие общий с ними функционал


Вот когда вам потребуется при изменении логики какого-то функционала переписывать ПЯТЬ клиентов, вместо того, чтобы поправить один пакет в базе - тогда и посмотрим, моветон логика в БД или не моветон.

Так что у нас наоборот, за логику в клиенте руки отрывают :)
Плюс запрещая держать логику в БД для, например, Oracle - вы автоматом выбрасываете на помойку половину функционала БД.
Для хранения обычных табличек можно взять гораздо более дешевую в лицензировании базу.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38752916
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему опыту, такие требования появляются, когда заказчик сам не знает, чего хочет.
Чем связываться с полностью версионными данными, имеет смысл понять БИЗНЕС-требования заказчика.

Высока вероятность, что его хотелки можно удовлетворить намного более дешевым способом. Например, версионировать не всю базу. Или вообще ему нужна не версионность, а, скажем, возможность прошлогодние отчеты смотреть.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38753469
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
1. Ведём две БД: операционную (ОБД) и историческую/версионную (ИБД).
2. Запросы на чтение к ОБД и ИБД от слоя бизнес-логики одинаковы, но проходят "препроцессорную" обработку.

3. Структуры ОБД и ИБД синхронизированы с небольшими поправками:
3.1.У каждой таблицы в ОБД есть поле id - первичный ключ таблицы.
3.2.Для каждой таблицы из ОБД в ИБД последовательно сделано:
0) создана копия структуры таблицы;
1) удалены ограничения целостности;
2) восстановлены все сопровождавшие эти ограничения индексы (уникальные индексы преобразованы в неуникальные);
3) добавлены доп. поля:
а) id_original - заполняется значением первичного ключа таблицы в ОБД (но не является альтеративным ключом в ИБД!).
б) id - autoinc, первичный ключ в ИБД.
в) timestamp - дата и время добавления записи в ИБД.
г) is_operation - признак операции CUD в ОБД, приведший к появлению записи в ИБД.
5) все внешние ключи в ИБД восстановлены как в ОБД, но ссылаются не на поле id_original, а на поле id.

4. При любом CUD в ОБД делаем асинхронный insert в ИБД, при котором:
для значения каждого внешнего ключа в записи выполняется поиск в связанной таблице актуальной записи на дату этого insert (можно подумать просто про последнее значение - но сейчас лень).

5. Все запросы при обращении к полям используют препроцессорные вызовы функций:

1) обращение к полю первичного ключа таблицы %ActualPK(<table>)%
2) обращение к значению поля со вторичным ключом %ActualFK(<table>.<field>)%
3) обращение к значению поля для сравнения с константой

Например:

X) SELECT a.*, b.*
FROM a join b on %ActualPK(a)% = %ActualFK(b.a_id)%

Y)
SELECT a.name
FROM a
WHERE %ConstCompare(a.field_name)% LIKE 'Вау*'

6. Примеры разворачивания запросов:

X.ОБД) В ОБД препроцессор делает следующее:

SELECT a.*, b.*
FROM a join b on a.id = b.a_id;

Y.ОБД)
SELECT a.name
FROM a
WHERE a.field_name LIKE 'Вау*'


В ИБД у всех шаблонов есть некая константа "точка прошлого" для сессии типа дата-время.

X.ИБД)
Шаблон разворачивается:
SELECT a.*, b.*
FROM a join b on GetActualId(a.id_original, %history_time_point%) = b.a_id AND b.id IN (GetActualIds(b, %history_time_point%))

Y.ИБД)
SELECT a.name
FROM a
WHERE a.field_name LIKE 'Вау*' AND a.id IN (GetActualIds(а, %history_time_point%))

Производительность может быстро оказаться в Опе, но это уже другая история :).
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38753562
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой, ой-ой, пару ошибок, в реализации, но думаю, что суть понятна :).
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38753604
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ себе это как вижу. В каждой таблице добавить поле типа HistoryId, которое ссылается на оригинальную запись. При любом изменении записи, создаётся копия со значением HistoryId, указывающую на оригинал. На уровне организации доступа к данным, записи с заполненным полем HistoryId игнорируются. В режиме ретроспективы, всегда берётся самая свежая запись, с датой изменения меньше указанного временного штампа. Не понятно только как толком восстанавливать связи, с учётом ретроспективы.
Просто. На каждый "обычный" внешний ключ нужно иметь ещё один внешний ключ, ссылающийся на исторически правильную запись.
В моём варианте я так и попытался описать.
+ финт с шаблонами в моём варианте (закрыть проблему логически одинаковых запросов) в этом решении тоже подойдёт.
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38753666
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойПросто. На каждый "обычный" внешний ключ нужно иметь ещё один внешний ключ, ссылающийся на исторически правильную запись.

Какой в этом смысл? у Вас есть внешний ключ (определяющий множество "версий" обьекта) и дата ретроспективы (глобальная). Этого достаточно, чтобы выбрать исторически правильную версию - зачем нужен дополнительный внешний ключ?
...
Рейтинг: 0 / 0
Путешествия в прошлое
    #38753684
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvanohVosttЗа прикладную логику в БД у нас бьют по рукам. Обоснование должно быть такое, что по-другому просто ну никак. Пока таких случаев не было.

Логика в БД -- моветон.



Вот полностью не согласен :)
Всё очень сильно зависит от конкретного приложения и конкретной СУБД.

Видимо у вас такой проект, в котором не требуется
1) Десктопный клиент
2) WEB клиент с точно такой же функциональностью
3) Android клиент, который реализует основные функции приложения
4) iOS клиент, который полностью аналогичен андроидному
5) Вторая версия десктопного клиента специально для техсаппорта, реализующая фичи, недоступные ни в одном из вышеперечисленных, но при этом сохраняющие общий с ними функционал


Вот когда вам потребуется при изменении логики какого-то функционала переписывать ПЯТЬ клиентов, вместо того, чтобы поправить один пакет в базе - тогда и посмотрим, моветон логика в БД или не моветон.

Так что у нас наоборот, за логику в клиенте руки отрывают :)
Плюс запрещая держать логику в БД для, например, Oracle - вы автоматом выбрасываете на помойку половину функционала БД.
Для хранения обычных табличек можно взять гораздо более дешевую в лицензировании базу.Хм, я в замешательстве. Вы не знаете, что такое ООП? Паттерны и прочая муть?
...
Рейтинг: 0 / 0
25 сообщений из 121, страница 4 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Путешествия в прошлое
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]