ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

РСализация высокоуровнСго интСрфСйса Π²ΠΎΠΊΡ€ΡƒΠ³ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Berclee DB

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — отсутствиС потСрянных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сцСнарий совмСстного выполнСния Π΄Π²ΡƒΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Вранзакция 1 измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… A. Π”ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1 транзакция 2 Ρ‚Π°ΠΊΠΆΠ΅ измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A. Вранзакция 2 Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ROLLBACK (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ цСлостности). Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° A Ρ‚ранзакция 1 Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

РСализация высокоуровнСго интСрфСйса Π²ΠΎΠΊΡ€ΡƒΠ³ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Berclee DB (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠ˜ΠΠ˜Π‘Π’Π•Π Π‘Π’Π’Πž НАУКИ И ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π― УКРАИНЫ ΠžΠ”Π•Π‘Π‘ΠšΠ˜Π™ ΠΠΠ¦Π˜ΠžΠΠΠ›Π¬ΠΠ«Π™ Π£ΠΠ˜Π’Π•Π Π‘Π˜Π’Π•Π’

ΠΈΠΌ. Π˜. И. ΠœΠ΅Ρ‡Π½ΠΈΠΊΠΎΠ²Π° ИНБВИВУВ ΠœΠΠ’Π•ΠœΠΠ’Π˜ΠšΠ˜, ЭКОНОМИКИ И ΠœΠ•Π₯АНИКИ курсовая Ρ€Π°Π±ΠΎΡ‚Π° На Ρ‚Π΅ΠΌΡƒ

«Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ высокоуровнСго интСрфСйса для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Berkeley DB»

студСнта 5 курса

ΠΊΠ°Ρ„Π΅Π΄Ρ€Ρ‹ матСматичСского обСспСчСния ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм Π’Ρ€ΠΎΡ„ΠΈΠΌΠΎΠ²Π° Бориса Научный Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ:

Π΄ΠΎΡ†. КамСнСва А. Π’.

ОдСсса 2004

1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

2. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΈΠ· Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

Β· основныС опрСдСлСния ΠΈ ΠΊΠ»Π°ΡΡΠΈΡ„икация

Β· Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊ Π‘Π”

Β· ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ ΠΊΡƒΡ€ΡΠΎΡ€ΠΎΠ²

3. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΈΠ· Berkeley DB

4. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ языков программирования YAPP

5. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Β· Π―Π΄Ρ€ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π² ΡΠ΅Π±Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов ΠΈ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ стаба инструмСнты

Β· ЛСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, Π΅Π³ΠΎ структура

Β· БинтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, Π΅Π³ΠΎ структура

Β· Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ°, гСнСрация Π‘++ стабов (автоматичСски сгСнСрированный ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄)

6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

7. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

8. Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

9. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

1.Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΌΠΈΡ€Π΅, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π½Π΅Ρ‚ мСста, Π³Π΄Π΅ Π±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ… — Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Они Π½ΡƒΠΆΠ½Ρ‹ Π²ΠΎ Π²ΡΠ΅Ρ… отраслях ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ хозяйства, Π² Π½ΠΈΡ… хранится информация ΠΏΡ€ΠΎ курсы Π²Π°Π»ΡŽΡ‚, Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π²ΠΈΠ°Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ², ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ спутника ΠΈ Ρ‚. Π΄. ЕстСствСнно, доступ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ врСмя, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмы — это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡ‹Ρ… сущСствСнных ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π².

На ΡΠ΅Π³ΠΎΠ΄Π½ΡΡˆΠ½ΠΈΠΉ дСнь Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ СстСствСнной ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ рСляционныС, сСтСвыС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-рСляционныС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. НаибольшСС распространСниС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° рСляционная модСль. Π­Ρ‚ΠΎΠΌΡƒ способствовало нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

1. РСляционная модСль являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ схСму Π΄Π°Π½Π½Ρ‹Ρ….

2. РСляционная модСль ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄ собой матСматичСский Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ рСляционной Π°Π»Π³Π΅Π±Ρ€Ρ‹, ΠΎΠ½Π° Π±ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

3. РСляционная модСль ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ SQL, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы ΡƒΠΆΠ΅ послС создания Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь Ρ„Π°Π½Ρ‚Π°Π·ΠΈΠ΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (кстати, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ программиста).

Однако Π·Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. И ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π°Π±Ρ‹Ρ… мСст Ρƒ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π‘Π£Π‘Π” являСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния запроса! ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ прСпроцСссоры, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ запрос, Π° Ρ‚Π°ΠΊΠΆΠ΅ врСмя Π΅Π³ΠΎ выполнСния (Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΎΠΉ Π΅ΡΡ‚ΡŒ Π² InterBase, Oracle, Informix), Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ°ΠΌΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π‘Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Ρ‹ экспСримСнты, Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π° с Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎ-сСтСвой Π‘Π£Π‘Π” (Berkeley DB) Π±Ρ‹Π»Π° эффСктивнСй Π½Π° ΠΏΠΎΡ€ΡΠ΄ΠΎΠΊ, Ρ‡Π΅ΠΌ с Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π‘Π£Π‘Π” (Informix).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сСтСвыС Π‘Π£Π‘Π” Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстрСй, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Π΅ΠΉ, ΠΈΡ… ΡΠ΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° Π±ΠΎΠ»Π΅Π΅ слоТная, Ρ‡Π΅ΠΌ рСляционная, практичСски нСдоступная для понимания ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΊ Ρ‚Π°ΠΊΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, Π° Π½Π΅Π»ΡŒΠ·Ρ Π»ΠΈ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ интСрфСйс ΠΊ Π½Π΅ΠΉ Π±ΠΎΠ»Π΅Π΅ понятным ΠΈ ΠΏΡ€ΠΎΡΡ‚Ρ‹ΠΌ для программиста. Π­Ρ‚ΠΎ послуТило основой для Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π˜Ρ‚Π°ΠΊ, постановка Π·Π°Π΄Π°Ρ‡ΠΈ:

Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ транслятор Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ интСрфСйса Π½Π° Π‘++ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π‘Π£Π‘Π” BerkeleyDB ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ схСмС Π΄Π°Π½Π½Ρ‹Ρ….

2.ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΈΠ· Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… — это поимСнованная ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ структурированных Π΄Π°Π½Π½Ρ‹Ρ…, относящихся ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области.

Π’ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ доступа ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ инструмСнтария — систСм управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

БистСма управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π£Π‘Π”) — это комплСкс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΈ ΡΠ·Ρ‹ΠΊΠΎΠ²Ρ‹Ρ… срСдств, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для создания Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π½ΠΈΡ… поиска Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π‘Π£Π‘Π” прСдоставляСт интСрфСйсы для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ хранСния.

К ΠΎΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ функциям Π‘Π£Π‘Π” принято ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Β· ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²ΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΉ памяти;

Β· ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти;

Β· ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями;

Β· Турнализация ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π‘Π” послС сбоСв;

Β· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° языков Π‘Π”;

Π›ΡŽΠ±Π°Ρ Π‘Π£Π‘Π” обСспСчиваСт ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π΅ услуги.

ΠŸΠ΅Ρ€Π²Π°Ρ услуга являСтся доступом ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. Она ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. ВсС соврСмСнныС Π‘Π£Π‘Π” ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ эти услуги.

Вторая услуга являСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π”Π°Π½Π½Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅ слоТноС, Ρ‡Π΅ΠΌ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. НапримСр, услуги управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ многочислСнныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π‘Π” Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ врСмя.

Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π΄ΠΎΡΡ‚ΡƒΠΏΡƒ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

Β· Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ интСрфСйсом, Ρ‚Π°ΠΊΠΈΠ΅ Π±Π°Π·Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ встроСнных срСдств опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с «ΡΡ‹Ρ€Ρ‹ΠΌΠΈ» Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Они ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно быстрым доступом ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.

Β· Π‘Π°Π·Ρ‹ с Π²Ρ‹ΡΠΎΠΊΠΎΠ°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½Ρ‹ΠΌ интСрфСйсом доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ. Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ интСрфСйса входят срСдства опрСдСлСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ доступа ΠΊ Π½ΠΈΠΌ. Π’Π°ΠΊΠΈΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ всС рСляционныС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅, Π΄Π΅Π΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅.

БоотвСтствСнно интСрфСйсы ΠΊ Π½ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π‘Π”. Для нас Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ интСрфСйс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ). Π’Π°ΠΊΠΎΠΉ интСрфСйс прСдусматриваСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π•Π³ΠΎ построСниС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ обуславливаСтся Ρ‡Π°Ρ‰Π΅ всСго нСудобством Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ Π‘Π”.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ систСмы Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…

Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π‘Π£Π‘Π” Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, программист, прикладная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°), Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ с ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрфСйсом ΠΊ Π½Π΅ΠΉ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ:

ΠŸΠ΅Ρ€Π²Π°Ρ — систСмныС, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΠΎΠ»ΠΎΡ‡Π΅ΠΊ для Π±Π°Π·Ρ‹. Π£ Π½Π°Ρ это ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ стабы ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ схСмС хранСния Π΄Π°Π½Π½Ρ‹Ρ….

Вторая — ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (эту ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ).

Π’Ρ€Π΅Ρ‚ΡŒΡ — ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… нСпосрСдствСнно Ρ‡Π΅Ρ€Π΅Π· интСрфСйс-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Он Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ ΡΡ…Π΅ΠΌΠΎΠΉ хранСния Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ с ΡΠ°ΠΌΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ: добавляСт, удаляСт ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΏΠΎ Π½Π΅ΠΎΠ±Ρ…одимости.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ ΠΊΡƒΡ€ΡΠΎΡ€ΠΎΠ²

Вранзакция — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Π‘Π”, рассматриваСмых Π‘Π£Π‘Π” ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅. Π›ΠΈΠ±ΠΎ транзакция ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ выполняСтся, ΠΈ Π‘Π£Π‘Π” фиксируСт (COMMIT) измСнСния Π‘Π”, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ этой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, Π²ΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΉ памяти, Π»ΠΈΠ±ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡ‚ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚раТаСтся Π½Π° ΡΠΎΡΡ‚оянии Π‘Π”, Ρ‚. Π΅. происходит Π΅Π΅ ΠΎΡ‚ΠΊΠ°Ρ‚. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для поддСрТания логичСской цСлостности Π‘Π” ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π‘Π£Π‘Π”.

Π˜Ρ‚Π°ΠΊ, транзакция ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ свойствами:

Β· ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ — Π»ΠΈΠ±ΠΎ транзакция принимаСтся Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚.

Β· Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ — транзакция Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ†Π΅Π»ΠΎΠΉ Π‘Π” ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π‘Π”, Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΠ΅ состояниС

Β· Π˜Π·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ‚ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

Β· Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ — Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ привСсти ΠΊ ΠΊΡ€Π°Ρ…Ρƒ Π‘Π” Π’ΠΎ свойство, Ρ‡Ρ‚ΠΎ каТдая транзакция начинаСтся ΠΏΡ€ΠΈ цСлостном состоянии Π‘Π” ΠΈ ΠΎΡΡ‚авляСт это состояниС цСлостным послС своСго Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ использованиС понятия Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ активности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π‘Π”. ΠŸΡ€ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ транзакциями со ΡΡ‚ΠΎΡ€ΠΎΠ½Ρ‹ Π‘Π£Π‘Π” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΎΡ‰ΡƒΡ‰Π°Ρ‚ΡŒ сСбя СдинствСнным ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π‘Π£Π‘Π” (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, это нСсколько ΠΈΠ΄Π΅Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ прСдставлСниС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π‘Π£Π‘Π” ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‰ΡƒΡ‚ΠΈΡ‚ΡŒ присутствиС своих ΠΊΠΎΠ»Π»Π΅Π³).

Π‘ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ транзакциями Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π‘Π£Π‘Π” связаны Π²Π°ΠΆΠ½Ρ‹Π΅ понятия сСриализации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ ΡΠ΅Ρ€ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° выполнСния смСси Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Под сСриализаций ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ понимаСтся Ρ‚Π°ΠΊΠΎΠΉ порядок планирования ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ суммарный эффСкт смСси Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ эквивалСнтСн эффСкту ΠΈΡ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния. Π‘Π΅Ρ€ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½ выполнСния смСси Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ — это Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ»Π°Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли удаСтся Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния смСси Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π° транзакция, присутствиС Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ (Ссли Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ замСдлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ΄Π½ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ).

БущСствуСт нСсколько Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сСриализации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Π’ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π‘Π£Π‘Π” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСны Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, основанныС Π½Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π·Π°Ρ…Π²Π°Ρ‚Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π‘Π”. ΠŸΡ€ΠΈ использовании любого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сСриализации Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ситуации ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ транзакциями ΠΏΠΎ Π΄ΠΎΡΡ‚ΡƒΠΏΡƒ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Π‘Π”. Π’ ΡΡ‚ΠΎΠΌ случаС для поддСрТания сСриализации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Ρ‚ (Π»ΠΈΠΊΠ²ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС измСнСния, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² Π‘Π”) ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»ΡƒΡ‡Π°Π΅Π², ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π‘Π£Π‘Π” ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ (ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎ нСприятно) ΠΎΡ‰ΡƒΡ‚ΠΈΡ‚ΡŒ присутствиС Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

ΠŸΡ€ΠΈ соблюдСнии ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ трСбования поддСрТания цСлостности Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ изолированности Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ:

Β· ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — отсутствиС потСрянных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сцСнарий совмСстного выполнСния Π΄Π²ΡƒΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Вранзакция 1 измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… A. Π”ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1 транзакция 2 Ρ‚Π°ΠΊΠΆΠ΅ измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A. Вранзакция 2 Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ROLLBACK (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ цСлостности). Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° A Ρ‚ранзакция 1 Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π½Π΅Π΅. Вакая ситуация называСтся ситуациСй потСрянных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ЕстСствСнно, ΠΎΠ½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ изолированности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ситуации Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1 трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1 никакая другая транзакция Π½Π΅ ΠΌΠΎΠ³Π»Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ потСрянных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ являСтся ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ Π‘Π£Π‘Π” ΠΏΠΎ Ρ‡Π°ΡΡ‚ΠΈ синхронизации ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмых Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Β· Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — отсутствиС чтСния «Π³Ρ€ΡΠ·Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…». Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сцСнарий совмСстного выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ 1 ΠΈ 2. Вранзакция 1 измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… A. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΡΡ‚ΠΈΠΌ транзакция 2 Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ опСрация измСнСния Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, транзакция 2 Π²ΠΈΠ΄ΠΈΡ‚ нСсогласованныС «Π³Ρ€ΡΠ·Π½Ρ‹Π΅» Π΄Π°Π½Π½Ρ‹Π΅ (Π² Ρ‡Π°ΡΡ‚ности, опСрация Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ€Π½ΡƒΡ‚Π° ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ провСряСмого ограничСния цСлостности). Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΡΠΎΠΎΡ‚вСтствуСт Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ изолированности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ свою Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ согласованном состоянии Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π² ΠΏΡ€Π°Π²Π΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ согласованныС Π΄Π°Π½Π½Ρ‹Π΅). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ситуации чтСния «Π³Ρ€ΡΠ·Π½Ρ‹Ρ…» Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1, измСнившСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A, никакая другая транзакция Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A (ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ являСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° чтСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° A Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ измСнСния Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1).

Β· Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — отсутствиС Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сцСнарий. Вранзакция 1 Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… A. Π”ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1 транзакция 2 измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ COMMIT. Вранзакция 1 ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A ΠΈ Π²ΠΈΠ΄ΠΈΡ‚ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ состояниС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠΉ, Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ 1 никакая другая транзакция Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ A. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ систСм это являСтся ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, хотя, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅, отсутствиС Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ‡Ρ‚Π΅Π½ΠΈΠΉ Π΅Ρ‰Π΅ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ изолированности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обСспСчСния Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изолированности для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ систСмС Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… (Π² Ρ‡Π°ΡΡ‚ности, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ прСдусмотрСны Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅ SQL 2). Как ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΈ, для поддСрТания цСлостности достаточСн ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. БущСствуСт ряд ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня достаточно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ ΠΈΠ»ΠΈ систСмныС статистичСскиС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… нСсущСствСнна). ΠŸΡ€ΠΈ этом удаСтся сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π‘Π£Π‘Π” ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

ΠšΡƒΡ€ΡΠΎΡ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π‘Π”. Одной ΠΈΠ· ΡΠ°ΠΌΡ‹Ρ… распространСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π‘Π” являСтся прСдоставлСниС Π½Π°Π±ΠΎΡ€Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ Π·Π°ΠΏΡ€ΠΎΡΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π‘Π” это организуСтся Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ «select …». Π˜Ρ‚Π°ΠΊ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ запроса Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, взятый ΠΈΠ· Π‘Π”. Однако ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡΡ‚ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ? Π’ ΡΠΎΠΎΡ‚вСтствии с Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠΎΠΉ ООП — шаблонами проСктирования, опрСдСляСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ курсором, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ простого ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ЀактичСски Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² ΡΠΎΡΡ‚оянии ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅, хранящиСся Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС.

Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ интСрфСйс:

Init (…); созданиС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Bool GetNextInfo (); ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…

GetCurrData (); ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ….

ЕстСствСнно, понятиС курсора тСсно связано с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выполнСния запроса ΠΏΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ курсора ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π±Π°Π·Π° Π½ΠΈ ΠΊΠ°ΠΊ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ся ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². ИспользованиС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π±Π°Π·Ρƒ Π² Π½Π΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎΠ΅ состояниС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всС дСйствия с ΠΊΡƒΡ€ΡΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ скобки.

3.ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΈΠ· BerkeleyDB

Berkeley DB — «open source» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, которая обСспСчиваСт ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅, Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… Π·Π°Ρ‰ΠΈΡ‚Ρƒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Berkeley DB обСспСчиваСт простой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² API для доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ для мноТСства языков программирования, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ C, C++, Java, Perl, Tcl, Pyton, ΠΈ PHP. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π±Π°Π·ΠΎΠΉ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Низкий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠ³ΠΎ управлСния, управлСния памяти ΠΈ Ρ‚. ΠΏ.

По ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ BerkeleyDB являСтся Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎ-сСтСвой Π±Π°Π·ΠΎΠΉ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ пСрСмСщСния ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Слям структур. Однако эти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ указатСлями Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π½Π΅ Π½Π° ТСсткий диск, Ρ‡Ρ‚ΠΎ нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Π΅Π΅ ΠΎΡ‚ ΡΠ΅Ρ‚Π΅Π²Ρ‹Ρ….

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° являСтся достаточно ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ. Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΠΏΠΎΡ‡Ρ‚ΠΈ всСми UNIX ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Linux, Windows, ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π½Π° 32- Π±ΠΈΡ‚Π΅ Ρ‚Π°ΠΊ ΠΈ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… систСмах.

Π‘Π°ΠΌΠ° Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ являСтся Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠΉ (ΠΏΠΎΠ΄ 300 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°ΠΌΠΈ тСкстового пространства Π² ΠΎΠ±Ρ‰Π΅ΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅), Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ 256 terabytes. Она Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ высокий ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, с Ρ‚ысячами ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎ ΠΆΠ΅ самоС врСмя.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Berkeley DB содСрТат достаточноС количСство схСм хранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ подходят ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. Berkeley DB ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚ΠΈΠΏΠ° Hash, Btrees, простыС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с Ρ‡ΠΈΡΠ»ΠΎΠ²Ρ‹ΠΌ доступом ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· ΡΡ‚ΠΈΡ… структур памяти, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠ°Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π’Π°Π±Π»ΠΈΡ†Ρ‹ Hash ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈ для ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ поиск ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ врСмя ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа записСй. Π’Π°Π±Π»ΠΈΡ†Ρ‹ Hash ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ, «ΡΡ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сущСствуСт?» ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ запись с ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π’Π°Π±Π»ΠΈΡ†Ρ‹ Hash Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ записи с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Btree ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поисков, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Ρ…, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ всС записи с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΊΠΎΠ½Ρ†ΠΎΠΌ. Btree Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ссылочной зависимости. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Btree Ρ…Ρ€Π°Π½ΠΈΡ‚ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ рядом Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ (Π½Π° Π΄ΠΈΡΠΊΠ΅), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ сосСдних Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚рСбуСтся дисковый доступ. ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ, основанныС Π½Π° Ρ‡ΠΈΡΠ»ΠΎΠ²ΠΎΠΉ индСксации записСй. КаТдая запись ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€. И ΠΏΠΎΠΈΡΠΊ, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ записи осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· этот Π½ΠΎΠΌΠ΅Ρ€. Berkeley DB Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эти Ρ€Π΅ΠΊΠΎΡ€Π΄Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° автоматичСски.

Berkeley DB ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ услуги управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, страничноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ кэшСм. ВсС ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ для Π»ΡŽΠ±Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² хранСния Π΄Π°Π½Π½Ρ‹Ρ….

Berkeley DB Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся сСрвСром Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Berkeley загруТаСтся Π² Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠ΅ пространство прилоТСния ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Π³ΠΎ. Π₯отя Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎ.

Π˜Ρ‚Π°ΠΊ, Berkeley DB состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: Dbt, Db, DbEnv. Они связаны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

4.ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ систСмС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ языков программирования YAPP

YAPP прСдставляСт собой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ систСму с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Perl для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡ синтаксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² LALR. ЀактичСски это коллСкция ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, написанных Π½Π° Perl, совмСстимая с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ YACC ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ perl-ΠΊΠΎΠ΄.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» с Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ язык. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» подаСтся Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊ yapp

yapp grammar_file.yp

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ perl-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ языка, описываСмого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, фактичСски, yapp ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ синтаксичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ своими силами лСксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

use MyParser;

$parser=new MyParser ();

$value=$parser->YYParse (yylex => &lexer_sub, yyerror => &error_sub);

Π€Π°ΠΉΠ» Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ

1) ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚ Π² ΡΡ‚ΠΈΠ»Π΅ Perl # ΠΈΠ»ΠΈ Π² ΡΡ‚ΠΈΠ»Π΅ Π‘ //, /* */.

2) ΠŸΡ€ΠΈΠ·Π½Π°ΠΊΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ ΡΡ‚Ρ€ΠΎΠΊ.

Π’ Π»ΡŽΠ±ΠΎΠΌ грамматичСском Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° символов: Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ символы, назвавшиС Ρ‚Π°ΠΊΠΆΠ΅ Π»Π΅Π²ΠΎ-Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ символы (ΠΈΠΌΠ΅Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»), ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ символы Π½Π°Π·Π²Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ лСксСмами. ЛСксСмы ΡΠ²Π»ΡΡŽΡ‚ΡΡ символами, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΌΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ лСксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

Бинтаксис Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… символов ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… лСксСм:

[A-Za-z][A-Za-z0−9_]*.

Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ использованиС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ «error» для Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ².

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΅Π³ΠΎ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° yacc, фактичСски являСтся Π΅Π΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ) Π€Π°ΠΉΠ» состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… сСкций, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… %%:

Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

%%

сСкция ΠΏΡ€Π°Π²ΠΈΠ»

%%

ниТняя сСкция

Заголовочная сСкция содСрТит любой ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Perl, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ копируСтся дословно Π² ΡΠ°ΠΌΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ модуля синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎ полСзная Π²Π΅Ρ‰ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для объявлСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Она содСрТит Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°, прСдставлСнных %left, %right ΠΈ %nonassoc (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰. Π°ΡΡΠΎΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ).

%start ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ (Π»Π΅Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ), Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.

БСкция ΠΏΡ€Π°Π²ΠΈΠ» содСрТит грамматичСскиС ΠΏΡ€Π°Π²ΠΈΠ»Π°:

КаТдоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ состоит ΠΈΠ· ΡΠ»Π΅Π²Π° Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ символа (Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ), Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ':' ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ '|' ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ ';':

exp: exp '+' exp

| exp '-' exp

;

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ справа ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым

input: #empty

| input line

;

Для задания явного ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° Π² ΡΠ»ΡƒΡ‡Π°Π΅ нСоднозначности слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ %prec, Π΄Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚.

exp: '-' exp %prec NEG { -$_[1] }

| exp '+' exp { $_[1] + $_[3] }

| NUM

;

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ YAPP позволяСт Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π² ΡΠΈΠ½Ρ‚аксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ сСмантику. Π­Ρ‚ΠΎ организуСтся ΠΏΡƒΡ‚Π΅ΠΌ добавлСния Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° конструкций {…}, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Perl-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Они Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΠΈΠ½Ρ‚аксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ся послС примСнСния Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ этого ΠΏΡ€Π°Π²ΠΈΠ»Π°. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $_[1], $_[n] ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ Ρ…ранят значСния Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

НиТняя сСкция ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Perl-ΠΊΠΎΠ΄, встраиваСмый Π² ΠΊΠΎΠ½Ρ†Π΅ сформированного синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ лСксСр, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π°Π½Π°Π»ΠΈΠ·Π° ошибок.

5.Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ИдСология ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… сначала описываСт Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ языкС структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ фактичСски интСрфСйсы) ΠΈΡ… ΡΡΡ‹Π»ΠΎΡ‡Π½Ρ‹Π΅ связи, индСксы ΠΈ Ρ‚. ΠΏ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ транслятора ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π‘++ ΠΊΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ саму Π±Π°Π·Ρƒ, Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, записи Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Код, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ транслятором, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, являСтся Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ части транслятора ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ΄ собой ΠΎΠ±Ρ‰Π΅Π΅ основаниС. Π­Ρ‚ΠΈ статичСскиС классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° для этого — сСмантика самого транслятора Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. И ΠΊΠ°ΠΊ слСдствиС этого, ΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†.

Новая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ возмоТностями:

Β· Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„икация ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅.

Β· ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±Π°Π·Ρ‹ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, бСзопасном Ρ€Π΅ΠΆΠΈΠΌΠ΅ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для монопольного доступа ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ восстановлСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Β· Π˜ΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² ΠΏΡƒΡΡ‚ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…

Β· Экспорта Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π±Π°Π·Ρ‹, ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡ… Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π² Ρ„Π°ΠΉΠ»Π΅, ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для чтСния. ЯвляСтся Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ.

Β· ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ индСксной цСлостности. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π°, вслСдствиС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅ΠΏΠ°Π΄ напряТСния), тСряСтся Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, ΠΈ ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСриодичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ нСобходимости Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ.

Β· ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ссылочной цСлостности. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° коррСктности логичСских зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π² Π±Π°Π·Π΅.

Π˜Ρ‚Π°ΠΊ, вся ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… частСй:

1. БобствСнно, базовая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° статичСских классов, для высокоуровнСвой Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Berkeley, нСобходимая транслятору.

2. Вранслятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ являСтся Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ ΠΏΠΎΠ΄ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²ΠΎΠΊΡ€ΡƒΠ³ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° классов

«Π”Π²ΠΈΠΆΠΎΠΊ» прСдставляСт собой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ с ΠΎΠ΄Π½ΠΎΠΉ стороны ΡΠ²Π»ΡΡŽΡ‚ΡΡ надстройками Π²ΠΎΠΊΡ€ΡƒΠ³ стандартных ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… структур, Π° Ρ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΡ… ΠΈΠ½Ρ‚СрфСйс Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ транслятора. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

Β· Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Β· Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Β· Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ записи

Β· Π’Π°Π±Π»ΠΈΡ†Ρ‹

Β· Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Β· ΠšΡƒΡ€ΡΠΎΡ€Ρ‹

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ записи

Базовая запись — это элСмСнтарная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° хранСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ОписаниС Π΅Π΅ ΠΊΠ»Π°ΡΡΠ°:

//! Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для записСй с vtable pointer

class hbObj{

Dbt dbt;

protected:

void dbtInit (uint s, void* d)

{

dbt.set_flags (DB_DBT_USERMEM);

dbt.set_ulen (s);

dbt.set_size (s);

dbt.set_data (d);

}

public:

operator Dbt*(){return &dbt;}

void* getData (void) {return dbt. get_data ();};

uint getSize (void) {return dbt. get_size ();};

hbObj () {}

virtual ~hbObj () {}

};

Π­Ρ‚ΠΎΡ‚ класс Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡƒΠ΄ΠΎΠ±Π΅Π½ для нСпосрСдствСнного использования. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΎΠ± ΠΈΡΡ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² ΡΠ΅Π±Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ. Π­Ρ‚ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ шаблона с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Ρ‚ΠΈΠΏΠ° Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ структуры ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

//! Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ приводится ΠΊ Dbt

template class hbRec: public hbObj

{

A data;

public:

A* getPnt (void) { return &data;} // Ссли Π² Π² A ΠΌΠ°ΡΡΠΈΠ² Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ & для А

hbRec () { memset (&data, 0, sizeof (A));dbtInit (sizeof (A),&data);}

hbRec (const hbRec& a):data (a.data) { dbtInit (sizeof (A),&data);}

hbRec (const A& a) :data (a) { dbtInit (sizeof (A),&data);}

void SetData (const A& a) { data = a;dbtInit (sizeof (A),&data);}

virtual ~hbRec () {}

};

Π’Π°Π±Π»ΠΈΡ†Ρ‹

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½ΠΈΠΆΠ΅:

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Π·Π°ΠΏΠΈΡΡΠΌΠΈ сущСствуСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Ρ‚Π°Π±Π»ΠΈΡ† hbBasetbl, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ со Π²ΡΠ΅ΠΌΠΈ стандартными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ† (Hash, Btree, Queue). ЀактичСски Π΅Π΅ Ρ‚ΠΈΠΏ являСтся Π΅Π΅ ΡΠΎΡΡ‚ояниСм ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ открытия.

class hbBasetbl

{

// Π½ΡƒΠΆΠ΅Π½ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ set_flags Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·

uint Set_flg_Counter;

ushort state;

// Ρ„Π»Π°Π³, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰. ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° Π»ΠΈ сама Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для экстр. закрытия Π² ΡΠ»ΡƒΡ‡Π°Π΅ Π½Π΅ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ

// открытия

bool tableopen;

hbInit ini;

protected:

uint recsize;

uint keysize; //Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для DB_HASH

Db *table;

virtual void UsrOpen (hbTxn *tx, FileConf& conf, bool openidx, hbInitRt* irt = 0, u_int32_t op_flags = 0);

virtual void UsrClose ();

void SetRecSize (uint recsize1){recsize = recsize1;}

void SetKeySize (uint keysize1){keysize = keysize1;}

uint GetType () {return ini. type;}

bool IsDup () ini. st_flags & DB_DUPSORT)>0;

public:

hbEnv& env;

operator Db*(){return table;}

Db* operator ->(){return table;}

const char* GetDbName (){return ini. dbname;}

hbBasetbl (hbEnv& e, hbInit&);

virtual ~hbBasetbl (){ if (state) Close ();}

void Open (hbTxn *tx, FileConf& conf, bool openidx, hbInitRt* irt = 0, u_int32_t op_flags = 0);

void Close ();

virtual void Create (hbTxn *tx, FileConf& conf, hbInitRt* irt = 0, u_int32_t op_flags = 0);

virtual int Get (hbTxn *tx, hbObj *key, hbObj *val, u_int32_t flags=0); // Π² ΡΡ‚ΠΈΠ»Π΅ Π‘ (Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ)

virtual int Pget (hbTxn *tx, hbObj *fkey, hbObj *pkey, // Π² ΡΡ‚ΠΈΠ»Π΅ Π‘ (Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ)

hbObj *val, u_int32_t flags=0);

virtual int Del (hbTxn *tx, hbObj *key, u_int32_t flags=0); // Π² ΡΡ‚ΠΈΠ»Π΅ Π‘ (Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ)

virtual int tGet (hbTxn *tx, hbObj *key, hbObj *val, u_int32_t flags=0); // Π² ΡΡ‚ΠΈΠ»Π΅ Π‘++

virtual int tPget (hbTxn *tx, hbObj *fkey, hbObj *pkey, hbObj *val, u_int32_t flags=0); // Π² ΡΡ‚ΠΈΠ»Π΅ Π‘++

virtual int tDel (hbTxn *tx, hbObj *key, u_int32_t flags=0); // Π² ΡΡ‚ΠΈΠ»Π΅ Π‘++

virtual int Put (hbTxn *tx, hbObj *key, hbObj *val, u_int32_t flags=0);

bool IsOpen (){return state;}

};

Для ускорСния доступа ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… вводятся индСксныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Ими ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ· ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΈΡ… ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ями. Класс hbBasetbl являСтся с ΠΎΠ΄Π½ΠΎΠΉ стороны Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом, содСрТащим всю Ρ€ΡƒΡ‚ΠΈΠ½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π»Π°Π³Π°ΠΌΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ опСрациями с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ, Π° Ρ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡ‚ΠΎΡ€ΠΎΠ½Ρ‹Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ классом для индСксной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π­Ρ‚ΠΎΡ‚ класс являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ, ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ссли эта Ρ‚Π°Π±Π»ΠΈΡ†Π° являСтся индСксированной (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ индСксы — Π΄Ρ€ΡƒΠ³ΠΈΠ΅ индСксныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹). НСобходим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠΌ понятия индСксируСмой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для Ρ‚Π°ΠΊΠΈΡ… индСксных Ρ‚Π°Π±Π»ΠΈΡ†. Π­Ρ‚ΠΎΡ‚ класс прСдставлСн Π½ΠΈΠΆΠ΅.

class hbPTable: public hbBasetbl{

void ErrorClose ();

void eee ();

void FixIdx (uint bulk_ret_buffer_size, int i, FileConf& conf);

void FixIdxForQueue (uint bulk_ret_buffer_size, int i, FileConf& conf);

void FixIdxForHash (uint bulk_ret_buffer_size, int i, FileConf& conf);

void CheckMainToIdx (uint bulk_ret_buffer_size, bool fix, FileConf& conf);

void CheckMainToIdxForQueue (uint bulk_ret_buffer_size, bool fix, FileConf& conf);

void CheckMainToIdxForHash (uint bulk_ret_buffer_size, bool fix, FileConf& conf);

void CheckIdxToMain (uint bulk_ret_buffer_size, bool fix, FileConf& conf);

void CheckIdxToMainForQueue (uint bulk_ret_buffer_size, bool fix, FileConf& conf);

void CheckIdxToMainForHash (uint bulk_ret_buffer_size, bool fix, FileConf& conf);

inline void ExportForQueue (uint bulk_ret_buffer_size, FILE* f, hbTxn* tx);

inline void ExportForHash (uint bulk_ret_buffer_size, FILE* f, hbTxn* tx);

inline void Import3(Dbt* key, Dbt* data);

inline void Import2(char* buf);

inline void Import1(FILE* f, char*& buf1, uint&);

inline void CheckForRefForQueue (uint bulk_ret_buffer_size);

inline void CheckForRefForHash (uint bulk_ret_buffer_size);

inline uint GetMaxRefRecBuf ();

protected:

int sz;

IdxItem *idx;

RefItems ref;

virtual void UsrOpen (hbTxn *tx, FileConf& conf, bool openidx, hbInitRt* irt = 0, u_int32_t flags = 0);

virtual void UsrClose ();

inline virtual void ExportDBTemplate (FILE*, const char*, const char*) = 0;

inline virtual void ImportDBTemplate (char* buf1,

uint buf1len,

char* buf2,

uint buf2len,

hbObj*& Key,

hbObj*& Val) = 0;

public:

//! конструктор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² (Π² Ρ‚Ρ‡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²)

hbPTable (hbEnv& env, hbInit& ini1);

virtual ~hbPTable ();

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° индСксной цСлостности

void CheckIdx (uint bulk_ret_buffer_size, bool fix);

// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ссылочной цСлостности

void CheckForRef (uint bulk_ret_buffer_size);

void Export (uint bulk_ret_buffer_size, FILE* f, hbTxn* tx);

void Import (FILE* f, char*& buf, uint&);

virtual int Pget (hbTxn *tx, int n, hbObj *fkey, hbObj* pkey, hbObj *val, u_int32_t flags=0)

{return idx[n]. table. Pget (tx, fkey, pkey, val, flags);}

hbBasetbl& GetIdx (int n)

{return idx[n]. table;}

inline uint GetIdxCount () {return sz;}

inline uint GetRecSize () {return recsize;}

};

Как Π²ΠΈΠ΄ΠΈΠΌ, этот класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ старый интСрфСйс ΠΏΡƒΡ‚Π΅ΠΌ ввСдСния ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ€Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² экспорта, ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡΠΌΠΈ с ΠΈΠ½Π΄Π΅ΠΊΡΠ½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ. Однако этот класс Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π² Ρ€Π°Π±ΠΎΡ‚Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π·Π½Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… структур ΠΈ Π΅Π΅ Ρ…арактСристиках.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

этих Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² шаблона ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΈΠ½Ρ‚СрфСйсом индСксируСмой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Π½ΠΎ Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ!). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅:

template class hbTable: public hbPTable

{

public:

//! конструктор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² (Π² Ρ‚Ρ‡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²)

hbTable (hbEnv& e, hbInit& ini1):hbPTable (e, ini1) {SetRecSize (sizeof (Val));SetKeySize (sizeof (Key));}

//SetRecSize use by QUEUE only

virtual ~hbTable () {}

// Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

int Get (const bexcp& excp, hbTxn *tx, const Key &key, Val *val, u_int32_t flags=0)

{

Get (excp, tx,(Key*)&key, val, flags);

}

int Pget (const bexcp& excp, hbTxn *tx, int n, hbObj *fkey, Key *pkey, Val *val, u_int32_t flags=0)

{

MTRY

hbRec k;

hbRec v;

int z=Pget (tx, n, fkey,&k,&v, flags);

*pkey= *(k.getPnt ());

*val= *(v.getPnt ());

return z;

CATCH_hbExcp

}

int Del (const bexcp& excp, hbTxn *tx, const Key &key, u_int32_t flags=0)

{

Del (excp, tx,(Key*)&key, flags);

}

int tGet (const bexcp& excp, hbTxn *tx, Key *key, Val *val, u_int32_t flags=0)

{

MTRY

hbRec k (*key);

hbRec v;

int z = tGet (tx,&k,&v, flags);

*val= *(v.getPnt ());

return z;

CATCH_hbExcp

}

int Put (const bexcp& excp, hbTxn *tx, const Key &key, const Val &val, u_int32_t flags=0)

{

Put (excp, tx,(Key*)&key,(Val*)&val, flags);

}

uint Append (const bexcp& excp, hbTxn *tx, Val *val)

{

MTRY

if (GetType () ≠ DB_QUEUE) return 0;

hbRec k;

hbRec v (*val);

hbBasetbl:Put (tx,&k,&v, DB_APPEND);

return (uint&)*(k.getPnt ());

CATCH_hbExcp

}

uint Append (const bexcp& excp, hbTxn *tx, const Val &val)

{

return Append (excp, tx,(Val*)&val);

}

};

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ окруТСния

Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ фактичСски прСдставляСт собой Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…: являСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для индСксируСмых Ρ‚Π°Π±Π»ΠΈΡ†, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΡ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, доступ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Π½Π°Π΄ Π½ΠΈΠΌΠΈ слуТСбныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ экспорта ΠΈ Ρ‚. ΠΏ. На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ это выглядит Ρ‚Π°ΠΊ:

ОписаниС класса ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅:

class hbEnv

{

DbEnv *env;

bool is_native_log;

Log* LogObj;

//! ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ

char* path;

//! ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°Π· — Π»ΠΎΠΌΠ°Π΅Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ — Ρ‚ΠΎΠ³Π΄Π° дольшС компилится

int sz;

//! Π˜Π½ΠΈΡˆΠΈΠ°Π»Π°ΠΉΠ·Π΅Ρ€Ρ‹ (Π² ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅ Ρ€Π°Π²Π½ΠΎΠΌ sz)

hbInit *dbinits;

hbInit *idxinits;

int idxsz;

char* schemaid; // ΡƒΠΆΠ΅ провСряСтся, ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΈΠ· ΡΠ»ΠΎΠ²Π°Ρ€Ρ Ρ‡ΠΈΡ‚. ΠΎΡ€ΠΈΠ³ΠΈΠ½. ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ся

//! ΠœΡƒΡ‚Π΅ΠΊΡ для Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ

pthread_mutex_t mx;

uint dltype;

//! in secs interval for checkpoints and logarchs

ulong dldelay, bdbchkpoint, bdblogrem;

static void* thf_deadrs (void*);

static void* thf_chkpnt (void*);

static void* thf_logarc (void*);

pthread_t pth_deadrs, pth_chkpnt, pth_logarc;

ushort stflags;

ushort stflags;

bool IsOpenflag;

ushort state;

TDictionary dict;

//char* ConfFile; //имя ΠΊΠΎΠ½Ρ„. Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ пСрСопрСдСлятся Π² ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°Ρ…/ Π½ΠΎ Π·Π°Ρ‡Π΅ΠΌ

FILE* OpenOutputStream (const char* fn, const char* mode);

void CloseOutputStream (FILE* f);

// удаляСт всС __db.00x Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚. ΠΊ Ρ‚Π°ΠΌ хранится Ρ…ΡΡˆ, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° индСксов

protected:

//! Π‘Π°ΠΌΠΈ Ρ‚Π΅ΠΉΠ±Π»Ρ‹, индСксов здСсь Π½Π΅Ρ‚, ΠΎΠ½ΠΈ Π² ΡΠ°ΠΌΠΈΡ… Ρ‚Π΅ΠΉΠ±Π»Π°Ρ…

hbPTable **dbs;

void SetSchemaid (const char* File) {if (schemaid)free (schemaid);schemaid = strdup (File);}

// тэйблы Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°, ΠΈ Π²Π½ΠΎΡΠΈΡ‚ΡŒΡΡ Π² dbs

int Close (int);

virtual void UsrClose ();

public:

Log* GetLog () {return LogObj;}

operator DbEnv*() {return env;};

DbEnv* operator ->() {return env;}

//DbEnv& GetDbEnv (){ return env;}

const char* GetSchemaId ()const {return schemaid;}

const char* GetUuid (const bexcp&, hbTxn *tx);

const char* GetPath ()const {return path;}

bool IsOpen () {return state;}

hbEnv (const char *p, envInit& e, ushort flt = LL_DEBUG, Log* LogObj1 = 0);

virtual ~hbEnv ();

//st_flags ΠΏΠΎΠΌΠ΅Ρ‰. Π² DbEnv: set_flags (DB_TXN_NOSYNC)

//op_flags ΠΏΠΎΠΌΠ΅Ρ‰. Π² Db: open (DB_PRIVATE/DB_THREAD — by default)

// Ссли Ρ€Π΅ΠΆΠΈΠΌ CDS Ρ‚ΠΎ ΡΡ‚ΠΈ Ρ„Π»Π°Π³ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ op_flags = DB_PRIVATE!

void OpenTDSMode (const bexcp& excp, u_int32_t st_flags = 0, u_int32_t op_flags = (DB_THREAD | DB_RECOVER)) //DB_THREAD | DB_RECOVER_FATAL

{DBOpen (excp, OPEN_TDS, true, st_flags, op_flags);}

void OpenCDSMode (const bexcp& excp, bool opentables = true, u_int32_t op_flags = 0/*Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для DB_PRIVATE*/)

{DBOpen (excp, OPEN_CDS, opentables, 0, op_flags);}

void Close (const bexcp& excp);

void Close ();

// полная инициализация&созданиС Π±Π°Π·Ρ‹ с Π½ΡƒΠ»Ρ (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π‘Π”)

void Init (const bexcp& excp, u_int32_t op_flags=DB_THREAD);

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° индСксов ΠΈ Π΅ΡΠ»ΠΈ Π½Π°Π΄ΠΎ ΠΈΡ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π±Π°Π·Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² offline

void CheckForIdx (const bexcp& excp, uint bulk_ret_buffer_size = (5 * 1024 * 1024), bool fix = false);

void CheckForRef (const bexcp& excp, uint bulk_ret_buffer_size = (5 * 1024 * 1024));

//! экспорт Π±Π°Π·Ρ‹ Π΄Π°Π½Ρ‹Ρ…

void ExportDB (const bexcp& excp, const char* fn, uint bulk_ret_buffer_size = (5 * 1024 * 1024));

//! ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Ρ‹Ρ…

void ImportDB (const bexcp& excp, const char* fn);

void printf (ushort level, const char* fmt,…); // ΠΎΠ±Π²Π΅Ρ€Ρ‚ΠΊΠ° ΠΏΠΎΠ΄ Log: printf

};

Π­Ρ‚ΠΎΡ‚ класс инкапсулируСт Ρ€Π°Π±ΠΎΡ‚Ρƒ со ΡΠ»ΠΎΠ²Π°Ρ€Π΅ΠΌ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ информация, полСзная для программиста.

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Класс Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

class hbTxn{

hbEnv& Env;

bexcp excp1;

hbTxn* parent;

DbTxn* Txn;

void SetFlags (){}

hbTxn (const hbTxn& Txn1):Env (Txn1.Env){} //copy constr

hbTxn& operator=(const hbTxn&){return *this;} // :=

public:

operator DbTxn*() {return Txn;};

hbTxn (const bexcp& excp, hbEnv& env1, ullong flags = 0, hbTxn* parent1 = 0); // младшиС 32 Π±ΠΈΡ‚Π° это //ΠΎΠ±Ρ‹Ρ‡Π½. Π±Π΅Ρ€ΠΊΠ». Ρ„Π»Π°Π³ΠΈ 33 Π±ΠΈΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ старт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ сразу ΠΆΠ΅ послС создания

hbTxn (const bexcp& excp, hbTxn* parent1, ullong flags = 0);

// —- «—;

~hbTxn ();

bool HaveParentTxn () {return parent≠0;}

void Start (const bexcp& excp, ulong flags = 0);

void Commit (const bexcp& excp, ulong flags = 0);

void RollBack (const bexcp& excp);

//void RollBack ();

};

Π•Π³ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ нСльзя ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. А Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ автоматичСски, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ стСковая пСрСмСнная:

try

{

hbTxn tx (excp, parent_tx);

// ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π±Π°Π·ΠΎΠΉ

tx.Commit ();

}

catch (…){}

Как Π²ΠΈΠ΄ΠΈΠΌ, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ — Π½Π΅ Π½Π°Π΄ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (ΠΏΡ€ΠΈ любой ситуации), Π²Ρ‚ΠΎΡ€ΠΎΠ΅ — Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Rollback () вызовСтся автоматичСски Π² Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Вранслятор

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Π·Π°Π΄Π°Ρ‡Π° транслятора состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ максимально ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΡΠΎΠΎΡ‚вСтствии с Π΅Π³ΠΎ опрСдСлСниями основных элСмСнтов Π±Π°Π·Ρ‹.

Π€Π°ΠΉΠ» Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅:

%%

#———————————————————————————;

#——— COMMENTS ——————————————————-;

#———————————————————————————;

#id ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

#string строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

#num Ρ‡ΠΈΠ»ΠΎΠ²ΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π»

#float Π»ΠΈΡ‚Π΅Ρ€Π°Π» числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ

#char ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π»

#rawcode := любая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ '{*' ΠΈ '*}'

file: 'end' {tblproc:Finish ();}

| filetext 'end' {tblproc:Finish ();}

;

filetext: item

| item filetext

;

item: optionblock

| idxblock

| structblock

| enumblock

| codeblock

| tableblock

;

literal: string {[$_[1], 0]}

| num {[$_[1], 1]}

| float {[$_[1], 2]}

| char {[$_[1], 3]}

;

#————————————————————————————;

optionblock: 'option' '{' oplist '}' ';'

{tblproc:OptBlockPrint ('',$_[3]);}

| 'option' opitem ';'

{tblproc:OptBlockPrint ('',[$_[2]]);}

| 'option' id '{' oplist '}' ';'

{tblproc:OptBlockPrint ($_[2],$_[4]);}

| 'option' id opitem ';'

{tblproc:OptBlockPrint ($_[2],[$_[3]]);}

;

oplist:

opitem ';' {[$_[1]]}

| opitem ';' oplist {push @{$_[3]}, $_[1]; $_[3]}

;

opitem: id '=' literal

{[$_[1],@{$_[3]}[0], 0,@{$_[3]}[1]]}

| id '=' id {[$_[1],$_[3], 1,'']}

;

#————————————————————————————;

idxblock: 'idx' id idxitem ';'

{tblproc:IdxBlockPrint ($_[2],[$_[3]]);}

| 'idx' id '{' idxitemlist '}' ';'

{tblproc:IdxBlockPrint ($_[2],$_[4]);}

;

idxitemlist: idxitem ';' {[$_[1]]}

| idxitem ';' idxitemlist {unshift @{$_[3]},$_[1]; $_[3]}

;

idxitem: idxmod1 id '(' flist1 ')'

{[0,$_[1],$_[2],$_[4],'']}

| idxmod1 id '(' flist1 ')' '{*' rawcode '*}'

{[0,$_[1],$_[2],$_[4],$_[7]]}

| idxmod2 id '(' flist2 ')' {[1,$_[1],$_[2],$_[4],'']}

| idxmod2 id '(' flist2 ')' '{*' rawcode '*}'

{[1,$_[1],$_[2],$_[4],$_[7]]}

;

idxmod1: '.!'

| ':!'

| '%!'

;

idxmod2: '.'

| ':'

| '%'

;

flist1: id {[[$_[1],'']]}

| id ',' flist1 {unshift

@{$_[3]},[$_[1],'']; $_[3]}

;

flist2: idxmod3 id {[[$_[2],$_[1]]]}

| idxmod3 id ',' flist2 {unshift

@{$_[4]},[$_[2],$_[1]]; $_[4]}

;

idxmod3: '+'

| '-'

| '^'

;

#————————————————————————————;

codeblock: code 'decl' '{*' rawcode '*}'

{tblproc:CodeBlockPrint ('hh', $_[4], 0);}

| code 'tab' '{*' rawcode '*}'

{tblproc:CodeBlockPrint ('tab', $_[4], 0);}

| code 'def' '{*' rawcode '*}'

{tblproc:CodeBlockPrint ('cc', $_[4], 0);}

| code 'def' 'top' '{*' rawcode '*}'

{tblproc:CodeBlockPrint ('cc', $_[5], 1);}

| code '{*' rawcode '*}'

{tblproc:CodeBlockPrint ('all', $_[3], 0);}

;

#————————————————————————————;

enumblock: 'enum' id '{' enumlist '}' ';'

{tblproc:EnumBlockPrint ($_[2],$_[4]);}

| 'enum' id ';'

{tblproc:EnumBlockPrint ($_[2],[]);}

;

enumlist: enumitem {[$_[1]]}

| enumitem ',' enumlist {unshift @{$_[3]}, $_[1]; $_[3]}

;

enumitem: id {[$_[1],'']}

| id '=' num {[$_[1],$_[3]]}

;

#————————————————————————————;

structblock: 'struct' id '{' structlist '}' ';'

{tblproc:StructBlockPrint ($_[2],$_[4]);}

;

structlist: structitem {[$_[1]]}

| structitem structlist {unshift @{$_[2]}, $_[1]; $_[2]}

;

structitem: id pnlistid ';'

{[$_[1],@{$_[2]}[0],@{$_[2]}[1]]}

;

#————————————————————————————;

tableblock: tableforward

{tblproc:TableBlockPrint (@{$_[1]}[0],'',[],[]);}

| tablehead ';'

{tblproc:TableBlockPrint (@{$_[1]}[0],@{$_[1]}[1],@{$_[1]}[2], []);}

| tablehead tail ';'

{tblproc:TableBlockPrint (@{$_[1]}[0],@{$_[1]}[1],@{$_[1]}[2], $_[2]);}

;

tail: idxtailitem {$_[1]}

| idxtailitem tail {unshift @{$_[2]},$_[1]; $_[2]}

| optiontailitem

| optiontailitem tail

;

tableforward: 'table' id ';' {[$_[2]]}

;

tablehead: 'table' memmodifid '{' memberlist '}'

{[@{$_[2]}[0],@{$_[2]}[1],$_[4]]}

;

memmodifid: id {[$_[1],'']}

| memmodificator id {[$_[2],'$']}

;

memberlist: memberitem {[$_[1]]}

| memberitem memberlist {unshift @{$_[2]}, $_[1]; $_[2]}

;

memberitem: id pnlistid ';'

{[$_[1],@{$_[2]}[0],@{$_[2]}[1],[]]}

| id pnlistid modificator1 ';'

{[$_[1],@{$_[2]}[0],@{$_[2]}[1],$_[3]]}

;

modificator1: idxmodificator {[$_[1], '']}

# | idxmodificator memmodificator {[$_[1], '$','']}

| idxmodificator '{*' rawcode '*}' {[$_[1], $_[3]]}

# | idxmodificator memmodificator '{*' rawcode '*}' {[$_[1], '$', $_[4]]}

;

pnlistid: pnlist id {[$_[1], $_[2]]}

| id {[[], $_[1]]}

;

pnlist: pointer {[$_[1],'']}

| pointer array {[$_[1],$_[2]]}

| array {['',$_[1]]}

;

pointer: '+'

| '-'

| '*'

;

array: '[' id ']' {$_[2]}

| '[' num ']' {$_[2]}

;

idxmodificator: '.!'

| ':!'

| '%!'

| '.+'

| ':+'

| '%+'

| '.-'

| ':-'

| '%-'

| '.^'

| ':^'

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ