Автор Тема: СУБД. Оптимальность хранения данных.  (Прочитано 21600 раз)

alexus

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #15 : Апрель 13, 2012, 02:08:01 pm »
Есть какой-то тонкий негатив с вашей стороны... Или мне мерещится?
Может не будем в шахматы играть?
Это не негатив... это противоположность взглядов, подходов к решению...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: СУБД. Оптимальность хранения данных.
« Ответ #16 : Апрель 13, 2012, 03:17:53 pm »
Вещи то вроде очевидные. Но я все равно погуглил для вас.

Даю ссылки, т.к. лень много писать:
http://www.sql.ru/articles/mssql/03090102transactionlogguidelines.shtml
http://bourabai.kz/dbt/dbms/1102.htm
http://www.sql.ru/forum/actualthread.aspx?tid=458042&pg=1&mid=4465931#4465931

Цитировать
2. в ms sql нет "нежурналируемых" операций, есть минимально журналируемые, так что совсем отключить не удастся ни в 2000-м, ни в 2005-м, бо это приведет к нарушению правил ACID и вероятному разрушению БД.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: СУБД. Оптимальность хранения данных.
« Ответ #17 : Апрель 13, 2012, 03:22:02 pm »
Цитата: ilovb
Вот тут есть ответы и по поводу журнала, и по поводу firebird:
http://www.sql.ru/forum/actualthread.aspx?tid=924197
Можно, получить от Вас полезную выжимку из этого трёпа?..
Другими словами, если Вам есть что сказать, то скажите, а если сказать нечего... тогда не надо...

Цитировать
я ж говорю: у него этот журнал запрятан внутрь самой базы.
И транзакцию можно откатить как полностью так и частично:

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: СУБД. Оптимальность хранения данных.
« Ответ #18 : Апрель 13, 2012, 03:26:50 pm »
Вердикт такой:
СУБД либо ведет журнал транзакций, либо не отвечает требованиям ACID.

alexus

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #19 : Апрель 13, 2012, 06:20:46 pm »
Вердикт такой:
СУБД либо ведет журнал транзакций, либо не отвечает требованиям ACID.

Причём здесь требования ACID? Мы говорили:
Это Вам придётся учитывать (я с MS SQL не работаю), на Firebird, к примеру, никакого журнала транзакций нет.

Неужели? А как он транзакции выполняет?
То есть, с Вашей точки зрения без журнала транзакций выполнить транзакцию невозможно. На это я и возражал. Теперь Вы переводите разговор на ACID... Не спортивно.
Теперь в двух словах я Вам расскажу о том, как работают блокировочные и версионные СУБД, и почему для работы (не для восстановления!) версионным СУБД не нужен журнал транзакций.
Блокировочная СУБД меняет данные по месту их хранения, затирая старые данные новыми значениями. Но в момент изменения данных никто не знает того, как завершится транзакция (да, и завершится ли она вообще). Поэтому, на случай отката (rollback) или сбоя, старые данные из записи переносятся в журнал транзакций. К новым данным другие (читающие и пишущие) транзакции доступа не имеют (поскольку эти данные ещё могут "откатить"). Доступ к новым/обновлённым данным открывают только после фиксации (commit) транзакции. Это создаёт большое количество проблем...
Версионная СУБД для меняемых данных создаёт новую версию (в случае добавления записи новая запись первоначально пуста; при изменении старой записи, она копируется в новую область), и в этой новой области происходит редактирование записи. Старая запись не меняется никогда! Поэтому переносить её в журнал для возможного отката нет никакой необходимости, а значит и нет никакого журнала транзакций (для целей отката). Каждая запись имеет маркер той транзакции, которая её создала/изменила. Если меняющая транзакция завершается фиксацией, то актуальна новая запись, если завершается откатом, то актуальной остаётся старая запись. Старая запись не удаляется даже после того, как изменившая её транзакция была зафиксирована, поскольку могут быть транзакции, которые в ней заинтересованы (это те транзакции, которые стартовали раньше, чем меняющая транзакция и имеющие высокие уровни изолированности repeatable read и выше (хотя у версионных СУБД иные уровни изолированности, отличные от блокировочных)). Удаление старых записей возможно только тогда, когда не существует заинтересованных в них транзакций. Такая (версионная) форма изоляции транзакций позволяет пишущей/меняющей транзакции не блокировать данные от читающих транзакций. В существующих версионных СУБД, куда теперь относится и MS SQL пишущие/меняющие одну и ту же запись транзакции блокируются. Но возможен вариант полноверсионной СУБД, когда даже пишущие одну и ту же запись транзакции не блокируют друг друга. Это открывает интересные возможности, прежде всего... в системах принятия решений... Но это уже совсем другая тема.
Что же касается ACID (речь про D - durability), то надо либо поддерживать журнал, либо сохранять БД после каждого COMMIT пишущих транзакций. Firebird не имеет журнала транзакций и поэтому эта СУБД не в полной мере соответствует требованиям ACID. С другой стороны, поддержка журнала для версионных СУБД не такое трудное дело (в отличие от блокировочных), и почему команда Firebird до сих пор этого не сделала, для меня остаётся загадкой.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: СУБД. Оптимальность хранения данных.
« Ответ #20 : Апрель 13, 2012, 06:40:46 pm »
И в чем разница?
Записи в журнале или версии... Суть механизма транзакций то не меняется.

Грань между блокировочными и версионными СУБД сегодня довольно размытая ИМХО

Цитировать
Вы переводите разговор на ACID... Не спортивно.
Транзакции - это вроде как фундамент ACID.
А ACID - это вроде как фундамент СУБД.

Поправьте, если ошибаюсь.

Цитировать
Firebird не имеет журнала транзакций и поэтому эта СУБД не в полной мере соответствует требованиям ACID.
Откуда такая информация? (правда интересно :))

alexus

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #21 : Апрель 13, 2012, 07:51:31 pm »
И в чем разница?
Записи в журнале или версии... Суть механизма транзакций то не меняется.
А что такое "механизм транзакций"? Я знаю два механизма изоляции транзакций, они принципиально разные, каждый имеет свою историю развития (то есть, они менялись и меняются).

Цитата: ilovb
Грань между блокировочными и версионными СУБД сегодня довольно размытая ИМХО
И кто же и как же её размыл?.. Можно попросить поподробнее?..

Цитата: ilovb
Цитировать
Вы переводите разговор на ACID... Не спортивно.
Транзакции - это вроде как фундамент ACID.
А ACID - это вроде как фундамент СУБД.
Многие СУБД вообще не поддерживают транзакций. Не все транзакционные системы соответствуют ACID.  Они, что "воздушные замки"?

Цитата: ilovb
Поправьте, если ошибаюсь.
Вы судите очень... поверхностно.

Цитата: ilovb
Цитировать
Firebird не имеет журнала транзакций и поэтому эта СУБД не в полной мере соответствует требованиям ACID.
Откуда такая информация? (правда интересно :))
Из головы... а голове эта информация складывалась долго (порядка 20 лет)... из практики, литературы, исходных текстов... собственных размышлений.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: СУБД. Оптимальность хранения данных.
« Ответ #22 : Апрель 13, 2012, 08:29:00 pm »
А что такое "механизм транзакций"? Я знаю два механизма изоляции транзакций, они принципиально разные, каждый имеет свою историю развития (то есть, они менялись и меняются).

Если выделить самую суть:
До момента фиксации транзакции на жестком диске обязательно присутствуют и новые и старые данные.

Подробнее написано в книгах и ссылках, что я приводил.

И кто же и как же её размыл?.. Можно попросить поподробнее?..

Все большее число СУБД поддерживает версионность в том или ином виде.

Многие СУБД вообще не поддерживают транзакций. Не все транзакционные системы соответствуют ACID.  Они, что "воздушные замки"?

Можно примеры?

Если СУБД не поддерживает ACID на 100% - это не значит, что она не поддерживает ACID

Вы судите очень... поверхностно.

Как вы такой вывод сделали?

Из головы... а голове эта информация складывалась долго (порядка 20 лет)... из практики, литературы, исходных текстов... собственных размышлений.

Т.е. это ваше личное мнение.

http://ru.wikipedia.org/wiki/Firebird
Цитировать
Соответствие требованиям ACID: Firebird сделан специально, чтобы удовлетворять требованиям «атомарности, целостности, изоляции и надёжности» транзакций («Atomicity, Consistency, Isolation and Durability»)[1].

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: СУБД. Оптимальность хранения данных.
« Ответ #23 : Апрель 13, 2012, 08:50:40 pm »
Вот еще по поводу сути транзакции:

http://www.sql.ru/forum/actualthread.aspx?tid=924197
Цитировать
Для обеспечения Durability достаточно, чтобы commit не вернул "ok" пока данные не попали
на диск. Точка. В какое место диска эти данные попали - пох, детали реализации.

alexus

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #24 : Апрель 13, 2012, 09:40:58 pm »
А что такое "механизм транзакций"? Я знаю два механизма изоляции транзакций, они принципиально разные, каждый имеет свою историю развития (то есть, они менялись и меняются).

Если выделить самую суть:
До момента фиксации транзакции на жестком диске обязательно присутствуют и новые и старые данные.
Присутствуют. Но какое это имеет отношению к журналу транзакций?..

Цитата: ilovb
Подробнее написано в книгах и ссылках, что я приводил.
Ну, так и читайте их, а лучше почитайте классиков...

Цитата: ilovb
И кто же и как же её размыл?.. Можно попросить поподробнее?..

Все большее число СУБД поддерживает версионность в том или ином виде.
И что из этого следует?.. Блокировка и версионность - два принципиально разных механизма. И даже, если СУБД поддерживает оба из них, то это не означает, что она их поддерживает одновременно! "Размыть" и/или "смешать" эти механизмы невозможно в принципе. Я же Вам подробно описал суть того и другого механизма... Ну, начните же думать, наконец.

Цитата: ilovb
Многие СУБД вообще не поддерживают транзакций. Не все транзакционные системы соответствуют ACID.  Они, что "воздушные замки"?

Можно примеры?
Примеры чего СУБД?.. Да, пожалуйста, те кто не поддерживал/не поддерживает транзакций MySQL, FoxPro, Access, большинство "объектных" СУБД и пр. Они же не соответствуют и требованиям ACID... естественно.

Цитата: ilovb
Если СУБД не поддерживает ACID на 100% - это не значит, что она не поддерживает ACID
А что же это значит?.. Это значит, что она не соответствует требованиям ACID. Или теперь уже можно быть "немножко беременной"?

Цитата: ilovb
Вы судите очень... поверхностно.

Как вы такой вывод сделали?
Путём размышления...

Цитата: ilovb
Из головы... а голове эта информация складывалась долго (порядка 20 лет)... из практики, литературы, исходных текстов... собственных размышлений.

Т.е. это ваше личное мнение.
Да, конечно.

Цитата: ilovb
http://ru.wikipedia.org/wiki/Firebird
Цитировать
Соответствие требованиям ACID: Firebird сделан специально, чтобы удовлетворять требованиям «атомарности, целостности, изоляции и надёжности» транзакций («Atomicity, Consistency, Isolation and Durability»)[1].
"Сделан специально" - ещё не факт, что соответствует. У пингвина и страуса тоже крылья сделаны... специально, чтобы птицам соответствовать... но не летают... как птицы.

Тема исчерпана... "бодаться" неинтересно.

DIzer

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #25 : Апрель 14, 2012, 01:16:43 am »
Тема исчерпана... "бодаться" неинтересно.
Но почему же, по поводу "яблока раздора"  ;)
- "Firebird не имеет журнала транзакций и поэтому эта СУБД не в полной мере соответствует требованиям ACID.  " -  можно с уверенностью сказать, что наличие оного не будет гарантировать выполнения полного соответствия ACID(хотя бы просто по тому, что его возможной целью может быть не обеспечение D = а многоуровневого отката в "регулярных" случаях).
« Последнее редактирование: Апрель 14, 2012, 01:18:51 am от DIzer »

alexus

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #26 : Апрель 14, 2012, 05:27:33 am »
Тема исчерпана... "бодаться" неинтересно.
Но почему же, по поводу "яблока раздора"  ;)
- "Firebird не имеет журнала транзакций и поэтому эта СУБД не в полной мере соответствует требованиям ACID.  " -  можно с уверенностью сказать, что наличие оного не будет гарантировать выполнения полного соответствия ACID(хотя бы просто по тому, что его возможной целью может быть не обеспечение D = а многоуровневого отката в "регулярных" случаях).
Не важно, для каких целей используется журнал транзакций помимо обеспечения D[urability]. Важно то, что обеспечение D без журнала... нетривиальная задача. Потенциально, можно хранить версии записей до очередного резервного копирования (backup)... Но как это поможет при восстановлении? Поэтому, сбрасывать куда-то и сохранять отдельно от БД меняющие запросы необходимо. Это (сохранение и передача запросов меняющих транзакций) полезно и для построения распределённых систем, в случаях полного или частичного дублирования информации в узлах системы.

alexus

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #27 : Апрель 14, 2012, 06:41:22 am »
Другими словами, наличие журнала - необходимое, но недостаточное условие для обеспечения долговечности (durabilty).

DIzer

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #28 : Апрель 14, 2012, 06:58:13 am »
Другими словами, наличие журнала - необходимое, но недостаточное условие для обеспечения долговечности (durabilty).
Да ну   ;)  а что вы скажете по поводу использования "теневых(shadow)"  копий (коль скоро упомянули firebird)?

alexus

  • Гость
Re: СУБД. Оптимальность хранения данных.
« Ответ #29 : Апрель 14, 2012, 07:14:06 am »
Другими словами, наличие журнала - необходимое, но недостаточное условие для обеспечения долговечности (durabilty).
Да ну   ;)  а что вы скажете по поводу использования "теневых(shadow)"  копий (коль скоро упомянули firebird)?
Shadows повышают живучесть системы, но к её восстановлению они отношения не имеют. Давайте посмотрим определение:
Цитировать
Durability — Долговечность
Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу. Другими словами, если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.
Firebird не поддерживает работу с БД на сетевых устройствах, то есть, и основная, и shadow БД расположены на одном и том же компьютере. А, значит при общем сбое (отключения от питания, например) информация в shadow БД ничем не будет отличаться от информации в основной БД.
Shadows БД выносятся на другой носитель, и полезны только тогда, когда происходит повреждения носителя (жёсткого диска) с основной БД. Как я понимаю, дублирование информации было одним из требований военных, при выборе Interbase, как встраиваемой СУБД на абрамсах. Выживаемость и долговечность не одно и то же... Тот, кто способен выживать в критических ситуациях, не всегда долгожитель, но и долгожитель не всегда может выжить в критической ситуации.