Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠœΠΈΡ€ InterBase. АрхитСктура, администрированиС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² InterBase/FireBird/YaffilΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 104

Автор А Ковязин

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ сСрвСра с классичСской Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Win32 нСсколько отличаСтся ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… дистрибутивов для UNIX-систСм. Главная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ - это Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π² сСбя SS ΠΈ CS сборки сСрвСра, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° скомпонованы статичСски. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° сСрвСра Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, раздСляСмой всСми процСссами, ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ клиСнтской ΠΈ сСрвСрной подсистСм. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого стала Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ стандартных инструмСнтов ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (isql, gbak, gfix ΠΈ Ρ‚. Π΄.) ΠΎΡ‚ дистрибутива сСрвСра, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ смСны Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ установлСнного сСрвСра "Π½Π° Π»Π΅Ρ‚Ρƒ", Ρ‚. Π΅. Π±Π΅Π· пСрСустановки дистрибутива.

Π”Π°Π»Π΅Π΅, вСрсия сСрвСра для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Win32 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»ΡŽΡ‡ рССстра (HKLM\Software\FirebirdSQL\Firebird). Π’ случаС отсутствия Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° сСрвСр всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ работоспособСн, Π΅Π³ΠΎ базовая дирСктория ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ физичСским располоТСниСм Ρ„Π°ΠΉΠ»ΠΎΠ² сСрвСра. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС (ΠΏΡ€ΠΈ запускС сСрвСра ΠΊΠ°ΠΊ прилоТСния, Ρ‚. Π΅. с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки "-Π°") установка Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ трСбуСтся - достаточно просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ сСрвСра Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска сСрвСра Firebird ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с сСрвСром IB/FBI Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ запуска Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ сСрвСра (всС это ΠΏΡ€ΠΈ условии Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚Π°Ρ…, Ρ‡Ρ‚ΠΎ настраиваСтся ΠΏΠ΅Ρ€Π΅Π΄ запуском сСрвСра).

Помимо собствСнно Π‘Π£Π‘Π”, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Firebird Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ODBC. JCA-JDBC (Π’ΡƒΡ€Π΅ 4) ΠΈ .NET-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ вмСстС с сСрвСром ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

РСализация языка SQL

Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ сразу ряд Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй, ΠΊΠ°ΠΊ-Ρ‚ΠΎ: Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ DDL (RECREATE <object>. CREATE OR ALTER <object>, ALTER VIEW), ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ†Π΅Π»Ρ‹Ρ… чисСл (встроСнный Ρ‚ΠΈΠΏ BIGINT, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅), ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ Π½Π° Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ встроСнным функциям (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, EXTRACT) ΠΈ Ρ‚. Π΄.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - CASE, COALESCE ΠΈ NULLIF (всС ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ SQL-стандарта). CASE являСтся Π±Π°Π·ΠΎΠ²ΠΎΠΉ для этого ряда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· списка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

SELECT CASE WHEN (О.TYPE = 0) THEN 'Π”ΠΎΡ…ΠΎΠ΄' ELSE 'Расход' END FROM OPERATIONS 0

ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ:

SELECT CASE 0.TYPE WHEN 0 THEN 'Π”ΠΎΡ…ΠΎΠ΄' ELSE 'Расход' END FROM OPERATIONS 0

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CASE ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚. Π΅. ΠΎΠ½Π° Π½Π΅ ограничиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Ρ‚ΠΈΠΏΠ° "Π•Π‘Π›Π˜- Π˜ΠΠΠ§Π•", Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

SELECT CASE О.TYPE WHEN О THEN 'Π”ΠΎΡ…ΠΎΠ΄' WHEN 1 THEN 'Расход'

ELSE '---' END

FOM OPEPATIONS O<

Ѐункция COALESCE являСтся ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ CASE для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° NULL, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

SELECT COALESCE(0. STATUS, '---')

FROM OPERATIONS O

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ COALESCE Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Ссли ΠΎΠ½ Π½Π΅ NULL, ΠΈΠ»ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Ѐункция NULLIF Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ CASE, Π½ΠΎ для Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ случая:

SELECT NULLIF(О.STATUS1, О.STATUS2)

FROM OPERATIONS O

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ NULLIF Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ NULL, Ссли ΠΎΠ±Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ€Π°Π²Π½Ρ‹, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

ΠšΡ€ΠΎΠΌΠ΅ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΎΠ²Ρ‹Π΅ систСмныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

* CONNECTION_ID - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ соСдинСния; " TRANSACTION_ID - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ;

* ROWS_AFFECTED - количСство записСй, Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Ρ… (Ρ‚. Π΅. Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ…, исправлСнных ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ…) послСдним Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ;

* GDSCODE ΠΈ SQLCODE - ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ΄Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Π² Π±Π»ΠΎΠΊΠ°Ρ… WHEN.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ CONNECTION_ID ΠΈ TRANSACTION_ID доступны Π²ΠΎ всСх Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… SQL, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ROWS_AFFECTED, GDSCODE ΠΈ SQLCODE - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² PSQL (Ρ‚. Π΅. Π² Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ…). ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ значСния упомянутых систСмных ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² (CONNECTIONJDD ΠΈ TRANSACTIONJD) Ρ‡Π΅Ρ€Π΅Π· запрос, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

SELECT TRANSACTION_ID FROM RDB$DATABASE;

Π’Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ EXCEPTION:

* EXCEPTION (Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) - Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π² WHEN-Π±Π»ΠΎΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅;

* EXCEPTION <name> <msg> - ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ с тСкстом, опрСдСляСмым Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ msg.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚ΠΎΡ‡Π΅ΠΊ сохранСния (savepoints), Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ стандартный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ всю Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ Π΅Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ послС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ сохранСния. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ SQL-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

SAVhPOINT <name>

ΠΈ

ROLLBACK [WORK] TO [SAVEPOINT] <name>.

Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ нСдоступны Π² PSQL ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с клиСнтской стороны, ΠΏΡ€ΠΈ этом ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² контСкстС клиСнтской Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Помимо всСго пСрСчислСнного, интСрСс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСского выполнСния SQL-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ…. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ новая ΠΊΠΎΠΌΠ°Π½Π΄Π° EXECUTE STATEMENT <stmt>, Π³Π΄Π΅ СдинствСнным ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ являСтся строка, содСрТащая выполняСмоС SQL-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. НапримСр:

stmt_var = 'update my_table set flag = 0 where parent_id = ' ||

cast (:param as varchar(10));

EXECUTE STATEMENT stmt_var;

Π­Ρ‚ΠΈΠΌ Π½ΠΎΠ²Ρ‹Π΅ возмоТности Π² SQL Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π½ΠΎ ΠΈΡ… описаниС Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ i Π»Π°Π²Ρ‹.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° событий

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ оповСщСния ΠΎ событиях (event alerters) являСтся способом асинхронной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с сСрвСра ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Для этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚ рСгистрируСт свой интСрСс Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… событиях ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠΉ ΠΎΡ‚ сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ посылаСт Π΅ΠΌΡƒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ POST_EVENT, доступной Π² Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ…. Бобытия ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ сСрвСром Π½Π΅ сразу, Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ подтвСрТдСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ событиС ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ счСтчик ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΠΈ, Ρ‚. Π΅. Ссли Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° POST_EVENT для Π΄Π°Π½Π½ΠΎΠ³ΠΎ события Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° нСсколько Ρ€Π°Π·, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ доставлСно ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹, Π½ΠΎ Π΅Π³ΠΎ счСтчик Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ количСство ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΠΈ. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с событиями Π½Π° клиСнтской сторонС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API: isc_event_block, isc_que_events, isc_wait_for_ event ΠΈ isc_event_counts.

Ho ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ использованию этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° мСшала фиксация ΠΈΠΌΠ΅Π½ΠΈ события, Ρ‚. Π΅. ΠΊΠ»ΠΈΠ΅Π½Ρ‚ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ событиС с Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ сСрвСр, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ вмСстС с событиСм. Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии Firebird ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ событий Π±Ρ‹Π» Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… событий, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ событиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ сторону вмСстС с событиСм. Π’ΠΎΠ³Π΄Π° сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ событиС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π΅):

POST_EVENT 'MY_EVENT', NEW.OPER_TYPE || '_ID=' | CAST(NEW.ID AS VARCHAR(IO));

Для получСния списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² событий с ΠΈΡ… собствСнными счСтчиками ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΠΈ Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° новая функция API: isc_event_params.

Вакая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ позволяСт максимально Π³ΠΈΠ±ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ "ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅" ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² клиСнтском ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, внСшнюю Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии Π±Ρ‹Π»ΠΈ прСдприняты Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ шаги ΠΏΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ быстродСйивия сСрвСра. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, нСбольшой прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π»Π° ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… подсистСм сСрвСра, Π² частности оптимизация ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° памяти.

Π‘Ρ‹Π» ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π° запросов, Π² частности Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… направлСниях:

* использованиС индСксов Π² подзапросах с Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°ΠΌΠΈ,

* ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ "ΠΏΠ»ΠΎΡ…ΠΈΡ…" индСксов, Ρ‚. Π΅. индСксов, использованиС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ привСсти лишь ΠΊ замСдлСнию выполнСния запроса;

* Π±ΠΎΠ»Π΅Π΅ качСствСнный Π°Π½Π°Π»ΠΈΠ· сСлСктивности индСксов ΠΏΡ€ΠΈ построСнии ΠΏΠ»Π°Π½Π°;

* ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ построСниС ΠΏΠ»Π°Π½Π° Π² случаС доступности ΠΎΠ΄Π½ΠΎ- ΠΈ многосСгмСнтных индСксов;

* Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ΅ использованиС индСксов Π² условиях Ρ‚ΠΈΠΏΠ° "OR", особСнно Π² случаС слоТных ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΎΠ² (Π² частности, слоТных нСявных соСдинСний).

ΠšΡ€ΠΎΠΌΠ΅ этого, Π±Ρ‹Π»ΠΈ внСсСны измСнСния Π² ΠΊΠΎΠ΄ сСрвСра, приводящиС ΠΊ эффСктивному использованию ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π² процСссС сортировки (Ρ€Π΅ΠΆΠΈΠΌ использования памяти настраиваСтся Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ). Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‚Π°ΠΊΠΆΠ΅ новая стратСгия Ρ€Π°Π±ΠΎΡ‚Ρ‹ сортировщика, оптимизированная для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² запросов, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ тСкущая рСализация Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ SS ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… нСдостатков, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСрвСра Π΄ΠΎΠ»Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ запросами, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ практичСской нСвозмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° частично Ρ€Π΅ΡˆΠ΅Π½Π° Π² вСрсии 1.5 ΠΏΡƒΡ‚Π΅ΠΌ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π° рСакция сСрвСра ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

Π‘Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ нСсколько Π½ΠΎΠ²Ρ‹Ρ… систСмных индСксов (Ρ‚. Π΅. индСксов Π½Π° систСмныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹), Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±ΠΎΠ»Π΅Π΅ быстро Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запросы ΠΊ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π² случаС слоТной схСмы ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ кэш ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ.

ВсС Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сСрии ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… тСстов TPC-R (ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠ΅ΠΉΡΡ Π² этой ΠΊΠ½ΠΈΠ³Π΅) ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Ρ€Π΅Ρ…ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ прСвосходство Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π»ΠΈΠ½ΠΈΠ΅ΠΉ 1.0. РазумССтся, это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всСх 5апросов Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ быстрСС, Π½ΠΎ позволяСт Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² рядС случаСв