ΠžΠΏΠΈΡ‚ с Β«Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄Β»

ΠžΠΏΠΈΡ‚ с Β«Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄Β»

SQL, ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎ-просто? ВсСки ΠΎΡ‚ нас ΠΌΠΎΠΆΠ΅ Π΄Π° напишС ΠΏΡ€ΠΎΡΡ‚ΠΈΡ‡ΡŠΠΊ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ β€” въвСТдамС select, изброявамС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, слСд Ρ‚ΠΎΠ²Π° from, ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, ΠΌΠ°Π»ΠΊΠΎ условия Π² where ΠΈ всичко β€” ΠΏΠΎΠ»Π΅Π·Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ са Π² нашия Π΄ΠΆΠΎΠ±, ΠΏΡ€ΠΈ Ρ‚ΠΎΠ²Π° (ΠΏΠΎΡ‡Ρ‚ΠΈ) нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ²Π° коя Π‘Π£Π‘Π” Π΅ Π·Π°Π΄ кулиситС (ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ всС ΠΏΠ°ΠΊ Π½Π΅ Π΅ Π‘Π£Π‘Π”). Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ΠΏΠΎΡ‡Ρ‚ΠΈ всякакъв ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ (Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΈ Π½Π΅ само) ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π° Π² контСкста Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΊΠΎΠ΄ (с всички ΠΏΡ€ΠΎΠΈΠ·Ρ‚ΠΈΡ‡Π°Ρ‰ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ²Π° β€” ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° вСрсиитС, ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°, статичСн Π°Π½Π°Π»ΠΈΠ·, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ тСстовС ΠΈ всичко Ρ‚ΠΎΠ²Π°). И Ρ‚ΠΎΠ²Π° касаС Π½Π΅ само самитС Π΄Π°Π½Π½ΠΈ, схСми ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, Π° ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ цялото Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΠΎΠ΄ ΡƒΠ³Π»Π΅Π΄Π° Π½Π° "database as code".

И Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π½Π°ΠΏΡ€Π°Π²ΠΎ с ORM. ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ ΡΠ±Π»ΡŠΡΡŠΡ†ΠΈ "SQL vs ORM" бяха забСлязани ΠΎΡ‰Π΅ Π² допСтровска Рус.

ΠžΠ±Π΅ΠΊΡ‚Π½ΠΎ-Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΈΠ½Π³

ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠ½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ORM Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ цСнят скоростта ΠΈ простотата Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π°, нСзависимостта ΠΎΡ‚ Π‘Π£Π‘Π” ΠΈ чистотата Π½Π° ΠΊΠΎΠ΄Π°. Π—Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ нас, ΠΊΠΎΠ΄ΡŠΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π‘Π” (Π° чСсто ΠΈ самата Π‘Π”)

ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ така…

@Entity
@Table(name = "stock", catalog = "maindb", uniqueConstraints = {
        @UniqueConstraint(columnNames = "STOCK_NAME"),
        @UniqueConstraint(columnNames = "STOCK_CODE") })
public class Stock implements java.io.Serializable {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "STOCK_ID", unique = true, nullable = false)
    public Integer getStockId() {
        return this.stockId;
    }
  ...

ΠœΠΎΠ΄Π΅Π»ΡŠΡ‚ Π΅ ΠΎΠ±ΠΎΠ³Π°Ρ‚Π΅Π½ с ΡƒΠΌΠ½ΠΈ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, Π° ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈ Π΄Π° Π΅, смСлият ORM Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΈ изпълнява Ρ‚ΠΎΠ½ΠΎΠ²Π΅ всякакъв SQL ΠΊΠΎΠ΄. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ с всички сили Π΄Π° сС ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ своята Π‘Π” с ΠΊΠΈΠ»ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈ абстракции, ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° извСстна "ΠΎΠΌΡ€Π°Π·Π° към SQL".

ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° страна Π½Π° Π±Π°Ρ€ΠΈΠΊΠ°Π΄Π°Ρ‚Π°, ΠΏΡ€ΠΈΠ²ΡŠΡ€ΠΆΠ΅Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° чистото "Ρ€ΡŠΡ‡Π½ΠΎ" SQL отбСлязват Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ всичко ΠΎΡ‚ своята Π‘Π£Π‘Π” Π±Π΅Π· Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ прослойки ΠΈ абстракции. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ сС появяват "data-centric" ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π±Π°Π·Π°Ρ‚Π° Π΅ Π² Ρ€ΡŠΡ†Π΅Ρ‚Π΅ Π½Π° спСциално ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈ Ρ…ΠΎΡ€Π° (ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ "Π±Π°Π·ΠΈΡ†ΠΈ", "Π±Π°Π·ΠΎΠ²ΠΈΠΊΠΈ", "Π±Π°Π·Π΄Π΅Π½ΡŒΡ‰ΠΈΠΊΠΈ" ΠΈ Ρ‚.Π½.), Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ остава само Π΄Π° "ΠΈΠ·Π΄ΡŠΡ€ΠΏΠ°Ρ‚" Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ ΠΈ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ, Π±Π΅Π· Π΄Π° сС Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π°Π²Π°Ρ‚ Π² Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅.

А ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΎΡ‚ΠΎ ΠΎΡ‚ Π΄Π²Π°Ρ‚Π° свята? ΠšΠ°ΠΊΡ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π² забСлСТитСлния инструмСнт с ΡƒΡ‚Π²ΡŠΡ€Π΄ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈΠΌΠ΅ Yesql. Π©Π΅ Π΄Π°ΠΌ няколко Ρ€Π΅Π΄Π° ΠΎΡ‚ ΠΎΠ±Ρ‰Π°Ρ‚Π° концСпция Π² моят свободСн ΠΏΡ€Π΅Π²ΠΎΠ΄, Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ с нСя ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊ.

Clojure Π΅ страхотСн Π΅Π·ΠΈΠΊ Π·Π° създаванС Π½Π° DSL, Π½ΠΎ SQL сам ΠΏΠΎ сСбС си Π΅ страхотСн DSL, ΠΈ Π½Π΅ Π½ΠΈ трябва ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½. S-ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅ са прСкрасни, Π½ΠΎ Ρ‚ΡƒΠΊ Π½Π΅ добавят Π½ΠΈΡ‰ΠΎ Π½ΠΎΠ²ΠΎ. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ скоби просто Π·Π°Ρ€Π°Π΄ΠΈ скобитС. НС стС съгласни? Π’ΠΎΠ³Π°Π²Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΉΡ‚Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ абстракцията Π½Π°Π΄ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ пропуснС, ΠΈ Π²ΠΈΠ΅ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π±ΠΎΡ€Π±Π° с функцията (raw-sql)

И ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ? НСка оставим SQL ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ SQL β€” Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ» Π½Π° Π΅Π΄ΠΈΠ½ запрос:

-- name: users-by-country
select *
  from users
 where country_code = :country_code

… ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ», ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ Π³ΠΎ Π² ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° Clojure функция:

(defqueries "some/where/users_by_country.sql"
   {:connection db-spec})

;;; Ѐункция с ΠΈΠΌΠ΅Ρ‚ΠΎ `users-by-country` Π΅ създадСна.
;;; НСка я използвамС:
(users-by-country {:country_code "GB"})
;=> ({:name "Kris" :country_code "GB" ...} ...)

Π‘ΠΏΠ°Π·Π²Π°ΠΉΠΊΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° "SQL ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, Clojure ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ", ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅:

  • Никакви синтактични ΠΈΠ·Π½Π΅Π½Π°Π΄ΠΈ. Π’Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ (ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ всяка Π΄Ρ€ΡƒΠ³Π°) Π½Π΅ отговаря Π½Π° SQL стандарта Π½Π° 100% β€” Π½ΠΎ Π·Π° Yesql Ρ‚ΠΎΠ²Π° няма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Никога няма Π΄Π° Π³ΡƒΠ±ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ със синтаксис Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π΅Π½ Π½Π° SQL. Никога няма Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ към функция (raw-sql "some (β€˜funky’ :: SYNTAX)")).
  • Най-Π΄ΠΎΠ±Ρ€Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°. Π’Π°ΡˆΠΈΡΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° ΠΎΡ‚Π»ΠΈΡ‡Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° SQL. Π—Π°ΠΏΠ°Π·Π²Π°ΠΉΠΊΠΈ SQL ΠΊΠ°Ρ‚ΠΎ SQL, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅.
  • Командна ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚. Π’Π°ΡˆΠΈΡ‚Π΅ DBA ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ ΠΈ ΠΏΠΈΡˆΠ°Ρ‚ SQL, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π² своя Clojure ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.
  • По-лСсна настройка Π½Π° производитСлността. НуТно Π»ΠΈ Π΅ Π΄Π° построитС ΠΏΠ»Π°Π½ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅Π½ запрос? Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²Π°ΡˆΠΈΡΡ‚ запрос Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ SQL.
  • ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° запроси. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠ΅Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ ΡΡŠΡ‰ΠΈΡ‚Π΅ SQL-Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π° Π΅ просто старият Π΄ΠΎΠ±ΡŠΡ€ SQL β€” просто Π³ΠΎ сподСлСтС.

Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠ΅Π½ идСята Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΈΠ½Π° ΠΈ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ проста, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ послСдоватСли Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ. А Π½ΠΈΠ΅ впослСдствиС Ρ‰Π΅ ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° философия, отдСляйки SQL ΠΊΠΎΠ΄Π° ΠΎΡ‚ всичко останало, Π΄Π°Π»Π΅Ρ‡ извън ORM.

IDE & DB-ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ

НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с Π΅Π΄Π½Π° проста Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Π° Π·Π°Π΄Π°Ρ‡Π°. ЧСсто сС Π½Π°Π»Π°Π³Π° Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² Π‘Π”, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² схСма ΠΈ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ структурата ѝ (ΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅, индСкси, ограничСния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚). ΠžΡ‚ всяка Π³Ρ€Π°Ρ„ΠΈΡ‡Π½Π° IDE ΠΈΠ»ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ DB-manager, Π½Π°ΠΉ-Π½Π°ΠΏΡ€Π΅Π΄, ΠΎΡ‡Π°ΠΊΠ²Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅Π·ΠΈ способности. Π—Π° Π΄Π° Π΅ Π±ΡŠΡ€Π·ΠΎ ΠΈ Π΄Π° Π½Π΅ сС Π½Π°Π»Π°Π³Π° Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ час, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ сС появи ΠΏΡ€ΠΎΠ·ΠΎΡ€Π΅Ρ† с Π½ΡƒΠΆΠ½Π°Ρ‚Π° информация (особСно ΠΏΡ€ΠΈ Π±Π°Π²Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½Π° Π‘Π”), ΠΈ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π°Ρ‚Π° информация Π΄Π° Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π° ΠΈ свСТа, Π° Π½Π΅ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π° остаряла информация. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-слоТна ΠΈ голяма Π΅ Π‘Π” ΠΈ ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ са Ρ‚Π΅, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΅ Ρ‚ΠΎΠ²Π°.

Но ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΡΠΌ ΠΌΠΈΡˆΠΊΠ°Ρ‚Π° ΠΈ просто пиша ΠΊΠΎΠ΄. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ трябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (ΠΈ с ΠΊΠ°ΠΊΠ²ΠΈ свойства) сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π² схСмата "HR". Π’ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π‘Π£Π‘Π”, нСобходимият Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС постигнС с Ρ‚Π°ΠΊΠ°Π²Π° проста заявка ΠΎΡ‚ information_schema:

select table_name
     , ...
  from information_schema.tables
 where schema = 'HR'

Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° справочни Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π²Π°Ρ€ΠΈΡ€Π° Π² зависимост ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° всяка Π‘Π£Π‘Π”. НапримСр, Π·Π° MySQL ΠΎΡ‚ ΡΡŠΡ‰ΠΈΡ справочник ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ спСцифични ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°:

select table_name
     , storage_engine -- Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΡ‚ "Π΄Π²ΠΈΠΆΠΎΠΊ" ("MyISAM", "InnoDB" ΠΈ Π΄Ρ€.)
     , row_format     -- Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° Ρ€Π΅Π΄Π° ("Fixed", "Dynamic" ΠΈ Π΄Ρ€.)
     , ...
  from information_schema.tables
 where schema = 'HR'

Oracle Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° information_schema, Π½ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° с Oracle metadata, ΠΈ Π½Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

select table_name
     , pct_free       -- Минимално свободно място Π² Π±Π»ΠΎΠΊΠ° с Π΄Π°Π½Π½ΠΈ (%)
     , pct_used       -- Минимално ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ място Π² Π±Π»ΠΎΠΊΠ° с Π΄Π°Π½Π½ΠΈ (%)
     , last_analyzed  -- Π”Π°Ρ‚Π° Π½Π° послСдното ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° статистика
     , ...
  from all_tables
 where owner = 'HR'

НС ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ClickHouse:

select name
     , engine -- Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΡ‚ "Π΄Π²ΠΈΠΆΠΎΠΊ" ("MergeTree", "Dictionary" ΠΈ Π΄Ρ€.)
     , ...
  from system.tables
 where database = 'HR'

НСщо ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈ Π² Cassandra (ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ° columnfamilies вмСсто Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ keyspace-ΠΎΠ²Π΅ вмСсто схСми):

select columnfamily_name
     , compaction_strategy_class  -- БтратСгия Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ
     , gc_grace_seconds           -- Π’Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ°
     , ...
  from system.schema_columnfamilies
 where keyspace_name = 'HR'

Π—Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π‘Π” ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС измислят ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ заявки (Π΄ΠΎΡ€ΠΈ Π² Mongo ΠΈΠΌΠ° спСциална систСмна колСкция, която ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° информация Π·Π° всички ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ Π² систСмата).

Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ информация Π½Π΅ само Π·Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅, Π° ΠΈ Π·Π° всякакъв ΠΎΠ±Π΅ΠΊΡ‚. ΠžΡ‚ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅ Π΄ΠΎΠ±Ρ€ΠΈ Ρ…ΠΎΡ€Π° сподСлят Ρ‚Π°ΠΊΡŠΠ² ΠΊΠΎΠ΄ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² сСрия ΠΎΡ‚ статии Π² Π₯Π°Π±Ρ€Π° "Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ PostgreSQL" (Π°ΠΉΠ±, Π±Π΅Π½, Π³ΠΈΠΌ). Π Π°Π·Π±ΠΈΡ€Π° сС, Π΄Π° Π΄ΡŠΡ€ΠΆΠΈΡˆ цялата Ρ‚Π°Π·ΠΈ ΠΊΡƒΠΏΡ‡ΠΈΠ½Π° заявки Π² Π³Π»Π°Π²Π°Ρ‚Π° си ΠΈ постоянно Π΄Π° Π³ΠΈ Π½Π°Π±ΠΈΡ€Π°Ρˆ β€” Ρ‚ΠΎΠ²Π° Π΅ "ΠΏΠΎ-скоро" удоволствиС, Π·Π°Ρ‚ΠΎΠ²Π° Π² Π»ΡŽΠ±ΠΈΠΌΠ°Ρ‚Π° ΠΌΠΈ IDE/Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠΌΠ°ΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ сниппСти Π·Π° чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ заявки, ΠΈ остава само Π΄Π° напишСш ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π² шаблона.

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° навигация ΠΈ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-гъвкав, спСстява ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅, позволява Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡˆ Ρ‚ΠΎΡ‡Π½ΠΎ информацията ΠΈ Π² ΠΎΠ½Π°Π·ΠΈ Ρ„ΠΎΡ€ΠΌΠ°, която Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° (ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ описано Π² поста "Експорт Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π‘Π” Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всякакъв Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠ³Π°Ρ‚ IDE Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° IntelliJ").

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΎΠ±Π΅ΠΊΡ‚ΠΈ

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ ΠΈ ΠΏΡ€ΠΎΡƒΡ‡ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΈΠ΄Π²Π° Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ с тях. Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΏΠ°ΠΊ Π±Π΅Π· Π΄Π° ΠΎΡ‚ΠΊΡŠΡΠ²Π°ΠΌΠ΅ ΠΏΡ€ΡŠΡΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ‚Π°.

НС Π΅ Ρ‚Π°ΠΉΠ½Π°, Ρ‡Π΅ простото ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎΡ‡Ρ‚ΠΈ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ във всички Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ:

drop table hr.persons

Но с ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π²Π΅Ρ‡Π΅ Π΅ ΠΏΠΎ-интСрСсно. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всяка Π‘Π£Π‘Π” (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ NoSQL) ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ "create table", ΠΈ основната ѝ част Π΄ΠΎΡ€ΠΈ ΠΌΠ°Π»ΠΊΠΎ Ρ‰Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° (ΠΈΠΌΠ΅, списък Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅, Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ), Π½ΠΎ останалитС Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ ΠΌΠΎΠ³Π°Ρ‚ драстично Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ ΠΈ зависят ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° структура ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° Π‘Π£Π‘Π”. ΠœΠΎΡΡ‚ любим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Π² докумСнтацията Π½Π° Oracle само "Π³ΠΎΠ»ΠΈΡ‚Π΅" БНЀ-ΠΈ Π·Π° синтаксиса "create table" Π·Π°Π΅Ρ‚ΠΈ са 31 страници. Π”Ρ€ΡƒΠ³ΠΈ Π‘Π£Π‘Π” ΠΈΠΌΠ°Ρ‚ ΠΏΠΎ-скромни Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ всяка ΠΎΡ‚ тях ΡΡŠΡ‰ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° мноТСство интСрСсни ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° създаванС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (postgres, mysql, cockroach, cassandra). Малко вСроятно Π΅ някой Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ "wizard" ΠΎΡ‚ ΠΏΠΎΡ€Π΅Π΄Π½Π°Ρ‚Π° IDE (особСно унивСрсалната) Π΄Π° ΠΌΠΎΠΆΠ΅ напълно Π΄Π° ΠΎΠ±Ρ…Π²Π°Π½Π΅ всичкитС Ρ‚Π΅Π·ΠΈ способности, Π° Π΄Π°ΠΆΠ΅ ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΅ Π·Ρ€Π΅Π»ΠΈΡ‰Π΅ Π½Π΅ Π·Π° Π½Π΅Ρ€Π²Π½ΠΈΡ‚Π΅. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ Π½Π°Π²Ρ€Π΅ΠΌΠ΅ написаният ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ create table Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π±Π΅Π· усилиС Π΄Π° сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΡ‚ всички тях, Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ Π²Π°ΡˆΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΈ ΠΈ максимално ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΈ.

Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΈ спСцифични Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎ Π‘Π£Π‘Π”, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚ΡΡŠΡΡ‚Π²Π°Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΠΈ. МоТСм Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ само Π½Π°Π΄ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈ Π½Π°Π΄ самата Π‘Π£Π‘Π”, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° "ΡƒΠ±ΠΈΠ΅ΠΌ" процСс, Π΄Π° освободим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° област ΠΏΠ°ΠΌΠ΅Ρ‚, Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ трасировка, Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ Π² Ρ€Π΅ΠΆΠΈΠΌ "read only" ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.

А сСга Π΄Π° ΠΏΠΎΡ€Π°Π±ΠΎΡ‚ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ с рисунки

Π•Π΄Π½Π° ΠΎΡ‚ Π½Π°ΠΉ-чСсто срСщанитС Π·Π°Π΄Π°Ρ‡ΠΈ Π΅ Π΄Π° сС построи Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° с ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π½Π° красив Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ ΠΎΠ±Ρ€Π°Π· ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ тях. ΠŸΠΎΡ‡Ρ‚ΠΈ всяка Π³Ρ€Π°Ρ„ΠΈΡ‡Π½Π° IDE, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ "command line" ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ, спСциализирани Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈ инструмСнти ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Ρ‰ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π³ΠΎ направят. Π’Π΅ Ρ‰Π΅ Π²ΠΈ нарисуват β€žΠΊΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚β€œ, Π° ΠΌΠ°Π»ΠΊΠΎ влияниС Π²ΡŠΡ€Ρ…Ρƒ процСса ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡƒΠΏΡ€Π°ΠΆΠ½ΠΈ само с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° няколко ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° Π² конфигурационния Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ Π² интСрфСйса.

Но Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-просто, гъвкаво ΠΈ Π΅Π»Π΅Π³Π°Π½Ρ‚Π½ΠΎ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠ΄. Π—Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ с всякаква слоТност Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ с няколко спСциализирани Π΅Π·ΠΈΠΊΠ° Π·Π° Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° (DOT, GraphML ΠΈ Π΄Ρ€.), Π° към тях сС добавят мноТСство прилоТСния (GraphViz, PlantUML, Mermaid), ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ Ρ‚Π°ΠΊΠΈΠ²Π° инструкции ΠΈ Π΄Π° Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ Π² Π½Π°ΠΉ-Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ. А информацията Π·Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ тях Π²Π΅Ρ‡Π΅ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ.

НСка Π΄Π°Π΄Π΅ΠΌ малък ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π±ΠΈ ΠΌΠΎΠ³Π»ΠΎ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ PlantUML ΠΈ дСмонстрационна Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π° PostgreSQL (вляво SQL заявка, която Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΡƒΠΆΠ½Π°Ρ‚Π° инструкция Π·Π° PlantUML, Π° вдясно Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚):

ΠžΠΏΠΈΡ‚ с Β«Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄Β»

select '@startuml'||chr(10)||'hide methods'||chr(10)||'hide stereotypes' union all
select distinct ccu.table_name || ' --|> ' ||
       tc.table_name as val
  from table_constraints as tc
  join key_column_usage as kcu
    on tc.constraint_name = kcu.constraint_name
  join constraint_column_usage as ccu
    on ccu.constraint_name = tc.constraint_name
 where tc.constraint_type = 'FOREIGN KEY'
   and tc.table_name ~ '.*' union all
select '@enduml'

Ако ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ усилия, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π° Π½Π° истинска ER Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ER шаблон Π·Π° PlantUML ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ наподобява истинска ER Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°:

SQL заявката Ρ‡ΡƒΡƒΡƒΡ‚ΡŒ ΠΏΠΎ-слоТна

-- Π—Π°Π³Π»Π°Π²ΠΈΠ΅
select '@startuml
        !define Table(name,desc) class name as "desc" << (T,#FFAAAA) >&gt;
        !define primary_key(x) <b>x</b>
        !define unique(x) <color:green>x</color>
        !define not_null(x) <u>x</u>
        hide methods
        hide stereotypes'
 union all
-- Π’Π°Π±Π»ΠΈΡ†ΠΈ
select format('Table(%s, "%s n информация Π·Π° %s") {'||chr(10), table_name, table_name, table_name) ||
       (select string_agg(column_name || ' ' || upper(udt_name), chr(10))
          from information_schema.columns
         where table_schema = 'public'
           and table_name = t.table_name) || chr(10) || '}'
  from information_schema.tables t
 where table_schema = 'public'
 union all
-- Π’Ρ€ΡŠΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅
select distinct ccu.table_name || ' "1" --&gt; "0..N" ' || tc.table_name || format(' : "A %s ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ %s"', ccu.table_name, tc.table_name)
  from information_schema.table_constraints as tc
  join information_schema.key_column_usage as kcu on tc.constraint_name = kcu.constraint_name
  join information_schema.constraint_column_usage as ccu on ccu.constraint_name = tc.constraint_name
 where tc.constraint_type = 'FOREIGN KEY'
   and ccu.constraint_schema = 'public'
   and tc.table_name ~ '.*'
 union all
-- Π”ΡŠΠ½ΠΎ
select '@enduml'

ΠžΠΏΠΈΡ‚ с Β«Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄Β»

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ инструмСнтитС Π·Π° визуализация ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ заявки Π² основата. Вярно Π΅, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ заявки ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ са дълбоко "Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ" Π² ΠΊΠΎΠ΄Π° Π½Π° самото ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ са Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π΅Π½Π΅, Π΄Π° Π½Π΅ спомСнавамС Π·Π° ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ модификация.

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

Π”Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ слоТната Ρ‚Π΅ΠΌΠ° β€” ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° производитСлността Π½Π° Π‘Π”. Π©Π΅ си спомня Π΅Π΄Π½Π° ΠΌΠ°Π»ΠΊΠ° истинска история, Ρ€Π°Π·ΠΊΠ°Π·Π°Π½Π° ΠΌΠΈ "ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΉ приятСл". На порСдния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Тивял-Π±ΠΈΠ» Π΅Π΄ΠΈΠ½ ΠΌΠΎΡ‰Π΅Π½ DBA, ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π³ΠΎ ΠΏΠΎΠ·Π½Π°Π²Π°Π»ΠΈ Π»ΠΈΡ‡Π½ΠΎ, Π½ΠΈΡ‚ΠΎ пък ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π±ΠΈΠ»ΠΈ Π²ΠΈΠΆΠ΄Π°Π»ΠΈ Π»ΠΈΡ†Π΅Ρ‚ΠΎ ΠΌΡƒ (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ слуховСтС Ρ‚Π²ΡŠΡ€Π΄ΡΡ‚, Ρ‡Π΅ Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Π» някъдС Π² ΡΡŠΡΠ΅Π΄Π½Π°Ρ‚Π° сграда). Π’ часа "X", ΠΊΠΎΠ³Π°Ρ‚ΠΎ систСмата Π½Π° голям Ρ€ΠΈΡ‚Π΅ΠΉΠ»ΡŠΡ€ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π°Π»Π° Π΄Π° "сС чувства Π·Π»Π΅", Ρ‚ΠΎΠΉ ΠΌΡŠΠ»Ρ‡Π°Π»ΠΈΠ²ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π» ΡΠΊΡ€ΠΈΠΉΠ½ΡˆΠΎΡ‚ΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΡ†ΠΈ ΠΎΡ‚ Oracle Enterprise Manager, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π» ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ мСста с Ρ‡Π΅Ρ€Π²Π΅Π½ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π·Π° "разбираСмост" (ΠΊΠΎΠ΅Ρ‚ΠΎ, ΠΌΠ΅ΠΊΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠΌΠ°Π³Π°Π»ΠΎ). И ΠΏΠΎ Ρ‚Π°Π·ΠΈ "Ρ„ΠΎΡ‚ΠΎΠΊΠ°Ρ€Ρ‚ΠΈΡ‡ΠΊΠ°" трябвало Π΄Π° сС Π»Π΅ΠΊΡƒΠ²Π°ΠΌΠ΅. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ цСнния (Π² Π΄Π²Π°Ρ‚Π° смисъла Π½Π° Π΄ΡƒΠΌΠ°Ρ‚Π°) Enterprise Manager Π½Π΅ Π±ΠΈΠ» прСдоставСн Π½Π° Π½ΠΈΠΊΠΎΠ³ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ систСмата Π±ΠΈΠ»Π° слоТна ΠΈ скъпа, Π²Π΄Ρ€ΡƒΠ³ΠΈ "Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° Π½Π΅ Π½Π°Ρ‚ΡŠΠΊΠ½Π°Ρ‚ Π½Π° Π½Π΅Ρ‰ΠΎ ΠΈ всичко Π΄Π° сС счупи". Π—Π°Ρ‚ΠΎΠ²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΠΎ "Π΅ΠΌΠΏΠΈΡ€ΠΈΡ‡Π΅Π½" Π½Π°Ρ‡ΠΈΠ½ Π½Π°ΠΌΠΈΡ€Π°Π»ΠΈ мястото ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° забавянията ΠΈ пускали ΠΏΠ°Ρ‡. Ако страховитото писмо ΠΎΡ‚ DBA Π½Π΅ пристигнСло ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π² Π±Π»ΠΈΠ·ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅, всички с ΠΎΠ±Π»Π΅ΠΊΡ‡Π΅Π½ΠΈΠ΅ си ΠΏΠΎΠ΅ΠΌΠ°Π»ΠΈ Π²ΡŠΠ·Π΄ΡƒΡ… ΠΈ сС Π²Ρ€ΡŠΡ‰Π°Π»ΠΈ към Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ си Π·Π°Π΄Π°Ρ‡ΠΈ (Π΄ΠΎ Π½ΠΎΠ²ΠΎ Писмо).

Но ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ-вСсСл ΠΈ приятСлски, Π° Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ β€” Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½ Π·Π° всички. Най-ΠΌΠ°Π»ΠΊΠΎ основната ΠΌΡƒ част, ΠΊΠ°Ρ‚ΠΎ допълнСниС към основнитС систСми Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ (ΠΊΠΎΠΈΡ‚ΠΎ бСзспорно са ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎ случаи Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΈ). Всяка Π‘Π£Π‘Π” свободно ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ Π΅ Π³ΠΎΡ‚ΠΎΠ²Π° Π΄Π° сподСли информация Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ си ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΈ производитСлност. Π’ ΡΡŠΡ‰Π°Ρ‚Π° "ΠΊΡŠΡ€Π²Π°Π²Π°" Oracle DB ΠΏΠΎΡ‡Ρ‚ΠΈ всяка информация Π·Π° производитСлността ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° ΠΎΡ‚ систСмнитС прСдставлСния, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ процСситС ΠΈ сСсиитС ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°ΠΉΠΊΠΈ със ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° буфСрния кСш (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DBA Scripts, Ρ€Π°Π·Π΄Π΅Π» "ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³"). Π’ Postgresql ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° цяла ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ систСмни прСдставлСния Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π‘Π”, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π° Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΈ Π² Π΅ΠΆΠ΅Π΄Π½Π΅Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° всСки DBA, ΠΊΠ°Ρ‚ΠΎ pg_stat_activity, pg_stat_database, pg_stat_bgwriter. Π’ MySQL Π·Π° Ρ‚Π°Π·ΠΈ Ρ†Π΅Π» Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π° Π΄ΠΎΡ€ΠΈ ΠΎΡ‚Π΄Π΅Π»Π½Π° схСма performance_schema. А Π² Mongo Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ Π·Π° производитСлността Π² систСмната колСкция system.profile.

Π’Π°ΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ смС сС сдобили с някакъв сборник Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (Telegraf, Metricbeat, Collectd), ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° изпълнява пСрсонализирани SQL запитвания, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° Ρ‚Π΅Π·ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (InfluxDB, Elasticsearch, Timescaledb) ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ (Grafana, Kibana), ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ сравнитСлно лСсна ΠΈ гъвкава систСма Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, която Ρ‰Π΅ бъдС тясно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π° с Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠ±Ρ‰ΠΈ систСмни ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€, ΠΎΡ‚ ОБ ΠΈ Π΄Ρ€.). ΠšΠ°ΠΊΡ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π² pgwatch2, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° комбинация ΠΎΡ‚ InfluxDB + Grafana ΠΈ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ запитвания към систСмни прСдставяния, към ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС добавят пСрсонализирани запитвания.

Π˜Ρ‚ΠΎΠ³ΠΎ

И Ρ‚ΠΎΠ²Π° Π΅ само ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π΅Π½ списък Π½Π° Π½Π΅Ρ‰Π°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ с Π½Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Ρ‡Ρ€Π΅Π· ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ SQL ΠΊΠΎΠ΄. Π£Π²Π΅Ρ€Π΅Π½ съм, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ ΠΎΡ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ прилоТСния, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅. А Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ (ΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ, Π·Π°Ρ‰ΠΎ) Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ всичко Ρ‚ΠΎΠ²Π° ΠΈ Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π² своя CI/CD pipeline, Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ слСдващия ΠΏΡŠΡ‚.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster