|
|
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
SERG1257Запускается скрипт/процедура по восстановлению исторической базы на время заданное пользователем. После чего происходит переконнент на эту базу. Проблема в том, что восстановление может занимать заметное время (минуты/часы) - какой объем вашей базы? Также надо будет разобраться с протоколом - если историческая база используется, то один из вас будет обломан. Самое плохое решение. Почти тоже самое, что с бекапом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 19:18 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
hVosttsoulsurferВам нужен встроенный в СУБД Git чтоли? Ну типа. А может втихушку поделим добычу? Вы там будете долго париться и еще неизвестно что получится, а у меня уже это есть. Предложим заказчегу за полцены, - он не устоит:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 19:48 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
Заказчик не только сможет бросить взгляд в прошлое и/или в будущее, но и сможет получить некую "дельту" используя встроенную 16594626 |> http://%5Bmsg=16594626]]скриптовую подсистему (языки программирования), я сейчас этим как раз озабочен:) Всевозможная обработка данных при помощи скриптов, отчетная подсистема, все что хошь:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 19:57 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
о как, разные языки - полная демократия и плюрализм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 20:09 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
Поговорите с заказчиком. У меня в одном проекте попросили вдруг добавить такую же функциональность к уже тестирующейся в бете системе. За месяц. После дискуссии сошлись на том, что в системе делается месячный снапшот, и можно увидеть данные на 1 число каждого месяца за последние пять лет. Заказчика это устроило. База была небольшая, архивные снапшоты кидались на дешевые медленные диски. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 20:15 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
hVostt Самое плохое решение. Почти тоже самое, что с бекапом.Тогда интерфейс к планировщику - когда запустить джоб, на какую дату восстанавливатся и кому прислать уведомление когда база будет восстановлена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 20:19 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
Sergei.AgalakovПоговорите с заказчиком. У меня в одном проекте попросили вдруг добавить такую же функциональность к уже тестирующейся в бете системе. За месяц. После дискуссии сошлись на том, что в системе делается месячный снапшот, и можно увидеть данные на 1 число каждого месяца за последние пять лет. Заказчика это устроило. База была небольшая, архивные снапшоты кидались на дешевые медленные диски. Со снапшотами понятно. Они не скажут нам о таки вещах как: "Что у нас в базе есть со сроком окончания через 10 дней" и тому подобных комбинаций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 20:20 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
SERG1257hVosttСамое плохое решение. Почти тоже самое, что с бекапом.Тогда интерфейс к планировщику - когда запустить джоб, на какую дату восстанавливатся и кому прислать уведомление когда база будет восстановлена. При иных обстоятельствах так бы и сделали. Нужна полная интеграция, часть функциональности системы, на уровне самой модели и реализации, а не путём каких-то нашлёпок. Поэтому я и поднял тему в ветке форума "Проектирование БД" Ну что же вы, разве никому не интересно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 22:53 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
Sergei.AgalakovПоговорите с заказчиком. У меня в одном проекте попросили вдруг добавить такую же функциональность к уже тестирующейся в бете системе. За месяц. После дискуссии сошлись на том, что в системе делается месячный снапшот, и можно увидеть данные на 1 число каждого месяца за последние пять лет. Заказчика это устроило. База была небольшая, архивные снапшоты кидались на дешевые медленные диски. Заказчик хочет бомбу, а не унылую хрень Да нам и самим интересно. Думал, может кто-то уже заморачивался, подсказал бы направление. Я не прошу решить эту задачу за нас, просто пару советов, да верное направление вполне бы устроило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 22:56 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
prog123А может втихушку поделим добычу? Вы там будете долго париться и еще неизвестно что получится, а у меня уже это есть. Предложим заказчегу за полцены, - он не устоит:) В смысле, методология или готовая система? Нужна методология, остальное мы как-нибудь осилим. И не такое решали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 22:57 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
hVosttprog123А может втихушку поделим добычу? Вы там будете долго париться и еще неизвестно что получится, а у меня уже это есть. Предложим заказчегу за полцены, - он не устоит:) В смысле, методология или готовая система? Нужна методология, остальное мы как-нибудь осилим. И не такое решали. У меня все готовенькое и на блюдечке с голубой каёмочкой, а вот вашу контору надо бы всем составом на овощную базу, на трудовое перевоспитание:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 23:07 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
prog123У меня все готовенькое и на блюдечке с голубой каёмочкой, а вот вашу контору надо бы всем составом на овощную базу, на трудовое перевоспитание:) Согласен, все на картошку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 00:26 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
Направление-то понятно: effectivetimestamp, expiredtimestamp, update==delete+insert во всех таблицах... Производительность сильно страдает. JOIN нескольких таблиц с условиями 'в момент времени x' может оказаться таким медленным, что бысто работающая унылая хрень покажется марципанчиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 02:41 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
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 как-то так навскидку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 03:26 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
hVosttАнатоЛойпропущено... Эт-то почему же? :) Нет нужды для ретроспективы. Непонятно. Зачем тогда вообще логировать просмотры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 22:35 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
АнатоЛойhVosttпропущено... Нет нужды для ретроспективы. Непонятно. Зачем тогда вообще логировать просмотры? тут набежали малолетние чтобы подускутировать про джойны:) Надо говорить прикладным языком(чисто русским), а именно: что, для чего и как должно быть, т.е. что должно скрываться за той единственной кнопкой на экране - "Сделай мне хорошо!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2014, 22:40 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
prog123нучотам? будем делать куда деваться в пятницу остановились на вопросе, можно ли ретроспективу использовать для чего-нибудь ещё, например для отображения активности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2014, 00:11 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
hVostt За прикладную логику в БД у нас бьют по рукам. Обоснование должно быть такое, что по-другому просто ну никак. Пока таких случаев не было. Логика в БД -- моветон. Вот полностью не согласен :) Всё очень сильно зависит от конкретного приложения и конкретной СУБД. Видимо у вас такой проект, в котором не требуется 1) Десктопный клиент 2) WEB клиент с точно такой же функциональностью 3) Android клиент, который реализует основные функции приложения 4) iOS клиент, который полностью аналогичен андроидному 5) Вторая версия десктопного клиента специально для техсаппорта, реализующая фичи, недоступные ни в одном из вышеперечисленных, но при этом сохраняющие общий с ними функционал Вот когда вам потребуется при изменении логики какого-то функционала переписывать ПЯТЬ клиентов, вместо того, чтобы поправить один пакет в базе - тогда и посмотрим, моветон логика в БД или не моветон. Так что у нас наоборот, за логику в клиенте руки отрывают :) Плюс запрещая держать логику в БД для, например, Oracle - вы автоматом выбрасываете на помойку половину функционала БД. Для хранения обычных табличек можно взять гораздо более дешевую в лицензировании базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2014, 14:08 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
По моему опыту, такие требования появляются, когда заказчик сам не знает, чего хочет. Чем связываться с полностью версионными данными, имеет смысл понять БИЗНЕС-требования заказчика. Высока вероятность, что его хотелки можно удовлетворить намного более дешевым способом. Например, версионировать не всю базу. Или вообще ему нужна не версионность, а, скажем, возможность прошлогодние отчеты смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2014, 14:55 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
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%)) Производительность может быстро оказаться в Опе, но это уже другая история :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 13:39 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
АнатоЛой, ой-ой, пару ошибок, в реализации, но думаю, что суть понятна :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 14:50 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
hVosttЯ себе это как вижу. В каждой таблице добавить поле типа HistoryId, которое ссылается на оригинальную запись. При любом изменении записи, создаётся копия со значением HistoryId, указывающую на оригинал. На уровне организации доступа к данным, записи с заполненным полем HistoryId игнорируются. В режиме ретроспективы, всегда берётся самая свежая запись, с датой изменения меньше указанного временного штампа. Не понятно только как толком восстанавливать связи, с учётом ретроспективы. Просто. На каждый "обычный" внешний ключ нужно иметь ещё один внешний ключ, ссылающийся на исторически правильную запись. В моём варианте я так и попытался описать. + финт с шаблонами в моём варианте (закрыть проблему логически одинаковых запросов) в этом решении тоже подойдёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 15:20 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
АнатоЛойПросто. На каждый "обычный" внешний ключ нужно иметь ещё один внешний ключ, ссылающийся на исторически правильную запись. Какой в этом смысл? у Вас есть внешний ключ (определяющий множество "версий" обьекта) и дата ретроспективы (глобальная). Этого достаточно, чтобы выбрать исторически правильную версию - зачем нужен дополнительный внешний ключ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 16:06 |
|
||
|
Путешествия в прошлое
|
|||
|---|---|---|---|
|
#18+
anvanohVosttЗа прикладную логику в БД у нас бьют по рукам. Обоснование должно быть такое, что по-другому просто ну никак. Пока таких случаев не было. Логика в БД -- моветон. Вот полностью не согласен :) Всё очень сильно зависит от конкретного приложения и конкретной СУБД. Видимо у вас такой проект, в котором не требуется 1) Десктопный клиент 2) WEB клиент с точно такой же функциональностью 3) Android клиент, который реализует основные функции приложения 4) iOS клиент, который полностью аналогичен андроидному 5) Вторая версия десктопного клиента специально для техсаппорта, реализующая фичи, недоступные ни в одном из вышеперечисленных, но при этом сохраняющие общий с ними функционал Вот когда вам потребуется при изменении логики какого-то функционала переписывать ПЯТЬ клиентов, вместо того, чтобы поправить один пакет в базе - тогда и посмотрим, моветон логика в БД или не моветон. Так что у нас наоборот, за логику в клиенте руки отрывают :) Плюс запрещая держать логику в БД для, например, Oracle - вы автоматом выбрасываете на помойку половину функционала БД. Для хранения обычных табличек можно взять гораздо более дешевую в лицензировании базу.Хм, я в замешательстве. Вы не знаете, что такое ООП? Паттерны и прочая муть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 16:19 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38751986&tid=1540795]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 182ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...