ΠžΠΏΠΈΡ‚ β€žΠ‘Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄β€œ.

ΠžΠΏΠΈΡ‚ β€žΠ‘Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄β€œ.

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

И Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΎΡ‚ ORM. ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Π±ΠΈΡ‚ΠΊΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° "SQL срСщу 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β€œ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ спСциално ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈ Ρ…ΠΎΡ€Π° участват Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са β€žbasicistsβ€œ, Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са β€žbasicistsβ€œ, Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са β€žbasdenersβ€œ ΠΈ Ρ‚.Π½.), Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ трябва само Π΄Π° β€žΠΈΠ·Π΄ΡŠΡ€ΠΏΠ°Ρ‚Π΅β€œ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ ΠΈ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ, Π±Π΅Π· Π΄Π° Π½Π°Π²Π»ΠΈΠ·Π°Ρ‚Π΅ Π² подробности.

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

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

;;; A function with the name `users-by-country` has been created.
;;; Let's use it:
(users-by-country {:country_code "GB"})
;=> ({:name "Kris" :country_code "GB" ...} ...)

ΠšΠ°Ρ‚ΠΎ сС ΠΏΡ€ΠΈΠ΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ към ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° β€žSQL сам ΠΏΠΎ сСбС си, Clojure сам ΠΏΠΎ сСбС ΡΠΈβ€œ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅:

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

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

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

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

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

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

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

select table_name
     , storage_engine -- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ "Π΄Π²ΠΈΠΆΠΎΠΊ" ("MyISAM", "InnoDB" etc)
     , row_format     -- Π€ΠΎΡ€ΠΌΠ°Ρ‚ строки ("Fixed", "Dynamic" etc)
     , ...
  from information_schema.tables
 where schema = 'HR'

Oracle Π½Π΅ Π·Π½Π°Π΅ информация_схСма, Π½ΠΎ ΠΈΠΌΠ° ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° Oracle, ΠΈ Π½Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

select table_name
     , pct_free       -- ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ свободного мСста Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… (%)
     , pct_used       -- ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ мСста Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… (%)
     , last_analyzed  -- Π”Π°Ρ‚Π° послСднСго сбора статистики
     , ...
  from all_tables
 where owner = 'HR'

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

select name
     , engine -- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ "Π΄Π²ΠΈΠΆΠΎΠΊ" ("MergeTree", "Dictionary" etc)
     , ...
  from system.tables
 where database = 'HR'

НСщо ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π² Cassandra (която ΠΈΠΌΠ° сСмСйства ΠΊΠΎΠ»ΠΎΠ½ΠΈ вмСсто Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ пространства вмСсто схСми):

select columnfamily_name
     , compaction_strategy_class  -- БтратСгия сборки мусора
     , gc_grace_seconds           -- ВрСмя ΠΆΠΈΠ·Π½ΠΈ мусора
     , ...
  from system.schema_columnfamilies
 where keyspace_name = 'HR'

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

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

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

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

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…ΠΌΠ΅ ΠΈ ΠΏΡ€ΠΎΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ с тях. ЕстСствСно, ΡΡŠΡ‰ΠΎ Π±Π΅Π· Π΄Π° отдСлятС ΠΏΡ€ΡŠΡΡ‚ΠΈΡ‚Π΅ си ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ‚Π°.

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

drop table hr.persons

Но със ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° масата става ΠΏΠΎ-интСрСсно. ΠŸΠΎΡ‡Ρ‚ΠΈ всяка Π‘Π£Π‘Π” (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ NoSQL) ΠΌΠΎΠΆΠ΅ Π΄Π° β€žΡΡŠΠ·Π΄Π°Π΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°β€œ ΠΏΠΎΠ΄ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° Ρ„ΠΎΡ€ΠΌΠ° ΠΈ основната част ΠΎΡ‚ нСя Π΄ΠΎΡ€ΠΈ Ρ‰Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° Π»Π΅ΠΊΠΎ (ΠΈΠΌΠ΅, списък с ΠΊΠΎΠ»ΠΎΠ½ΠΈ, Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ), Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ подробности ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Π΄Ρ€Π°ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈ зависят ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ устройство ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° Π‘Π£Π‘Π”. Π›ΡŽΠ±ΠΈΠΌΠΈΡΡ‚ ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅, Ρ‡Π΅ Π² докумСнтацията Π½Π° Oracle ΠΈΠΌΠ° само β€žΠ³ΠΎΠ»ΠΈβ€œ BNF Π·Π° синтаксиса β€žΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°β€œ Π·Π°Π΅ΠΌΠ°Ρ‚ 31 страници. Π”Ρ€ΡƒΠ³ΠΈ Π‘Π£Π‘Π” ΠΈΠΌΠ°Ρ‚ ΠΏΠΎ-скромни Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ всяка ΠΎΡ‚ тях ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ интСрСсни ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° създаванС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ (Postgres, MySQL, Ρ…Π»Π΅Π±Π°Ρ€ΠΊΠ°, ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°). Малко вСроятно Π΅ някой Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ β€žΠΌΠ°Π³ΡŒΠΎΡΠ½ΠΈΠΊβ€œ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° IDE (особСно унивСрсална) Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΊΡ€ΠΈΠ΅ напълно всички Ρ‚Π΅Π·ΠΈ способности, Π° Π΄ΠΎΡ€ΠΈ ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅, няма Π΄Π° Π΅ ΡΠΏΠ΅ΠΊΡ‚Π°ΠΊΡŠΠ» Π·Π° Ρ…ΠΎΡ€Π° със слаби ΡΡŠΡ€Ρ†Π°. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ Π½Π°Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ написано изявлСниС ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ лСсно Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ всички тях, Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ Π²Π°ΡˆΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΈ ΠΈ възмоТно Π½Π°ΠΉ-ΡƒΠ΄ΠΎΠ±Π½ΠΈ.

ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π‘Π£Π‘Π” ΠΈΠΌΠ°Ρ‚ свои спСцифични Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈ Π‘Π£Π‘Π”. ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ само Π²ΡŠΡ€Ρ…Ρƒ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈ Π²ΡŠΡ€Ρ…Ρƒ самата Π‘Π£Π‘Π”, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° β€žΡƒΠ±ΠΈΠ΅ΠΌβ€œ процСс, Π΄Π° освободим част ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ прослСдяванС, Π΄Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π² Ρ€Π΅ΠΆΠΈΠΌ β€žΡΠ°ΠΌΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅β€œ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° нарисувамС ΠΌΠ°Π»ΠΊΠΎ

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

Но Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅ΡˆΠ΅Π½ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-просто, ΠΏΠΎ-гъвкаво ΠΈ Π΅Π»Π΅Π³Π°Π½Ρ‚Π½ΠΎ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π° сС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠ΄. Π—Π° Π΄Π° създадСм Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΈ с всякаква слоТност, ΠΈΠΌΠ°ΠΌΠ΅ няколко спСциализирани Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ (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 шаблон Π·Π° PlantUML ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° истинска ER Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ°:

SQL заявката Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-слоТна

-- Π¨Π°ΠΏΠΊΠ°
select '@startuml
        !define Table(name,desc) class name as "desc" << (T,#FFAAAA) >>
        !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 information about %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" --> "0..N" ' || tc.table_name || format(' : "A %s may haven many %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 скриптовС, Ρ€Π°Π·Π΄Π΅Π» β€žΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³β€œ). Postgresql ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° цял ΠΊΡƒΠΏ систСмни ΠΈΠ·Π³Π»Π΅Π΄ΠΈ Π·Π° наблюдСниС Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΏΠΎ-спСциално Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΈ Π² Π΅ΠΆΠ΅Π΄Π½Π΅Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° всСки DBA, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ pg_stat_activity, pg_stat_Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, pg_stat_bgwriter. MySQL Π΄ΠΎΡ€ΠΈ ΠΈΠΌΠ° ΠΎΡ‚Π΄Π΅Π»Π½Π° схСма Π·Π° Ρ‚ΠΎΠ²Π°. схСма_Π·Π°_производитСлност. A Π’ Mongo Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»ΡŠΡ€ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈ Π·Π° СфСктивността Π² систСмна колСкция system.profile.

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

ΠžΠ±Ρ‰ΠΎ

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€