[{"data":1,"prerenderedAt":488},["ShallowReactive",2],{"content:\u002F10-databases\u002Fresources":3},{"title":4,"description":5,"path":6,"body":7},"Дополнительные материалы: базы данных","Русскоязычные материалы по SQL, PostgreSQL и интеграции с Go: от реляционной модели до MVCC, индексов, транзакций, production-фич и выбора типа хранилища.","\u002F10-databases\u002Fresources",{"type":8,"value":9,"toc":476},"minimark",[10,15,18,23,78,82,116,120,162,166,211,215,257,261,336,340,398,402],[11,12,14],"h1",{"id":13},"дополнительные-материалы","Дополнительные материалы",[16,17,5],"p",{},[19,20,22],"h2",{"id":21},"sql-и-реляционная-модель","SQL и реляционная модель",[24,25,26,37,45,53,70],"ul",{},[27,28,29,36],"li",{},[30,31,35],"a",{"href":32,"rel":33},"http:\u002F\u002F2sql.ru\u002F",[34],"nofollow","2SQL.ru"," — русскоязычный справочник по SQL с базовыми операторами и примерами.",[27,38,39,44],{},[30,40,43],{"href":41,"rel":42},"https:\u002F\u002Fsql-academy.org\u002Fru\u002Ftrainer",[34],"SQL Academy: тренажер"," — практика запросов, JOIN, группировок и подзапросов.",[27,46,47,52],{},[30,48,51],{"href":49,"rel":50},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fsql.html",[34],"PostgreSQL: SQL Commands"," — официальный справочник по SQL-командам PostgreSQL.",[27,54,55,60,61,65,66,69],{},[30,56,59],{"href":57,"rel":58},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fqueries-table-expressions.html",[34],"PostgreSQL: Table Expressions"," — ",[62,63,64],"code",{},"FROM",", ",[62,67,68],{},"JOIN",", подзапросы, группировка.",[27,71,72,77],{},[30,73,76],{"href":74,"rel":75},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fqueries-with.html",[34],"PostgreSQL: WITH Queries"," — CTE, рекурсивные запросы и материализация.",[19,79,81],{"id":80},"проектирование-схем-и-нормализация","Проектирование схем и нормализация",[24,83,84,92,100,108],{},[27,85,86,91],{},[30,87,90],{"href":88,"rel":89},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F254773\u002F",[34],"Нормализация отношений. Шесть нормальных форм | Хабр"," — классический русскоязычный материал по нормальным формам.",[27,93,94,99],{},[30,95,98],{"href":96,"rel":97},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl.html",[34],"PostgreSQL: Data Definition"," — таблицы, схемы, значения по умолчанию и ограничения.",[27,101,102,107],{},[30,103,106],{"href":104,"rel":105},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-constraints.html",[34],"PostgreSQL: Constraints"," — primary key, foreign key, unique, check и exclusion constraints.",[27,109,110,115],{},[30,111,114],{"href":112,"rel":113},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fsql-createtable.html",[34],"PostgreSQL: CREATE TABLE"," — точный справочник по DDL и ограничениям.",[19,117,119],{"id":118},"транзакции-изоляция-и-аномалии","Транзакции, изоляция и аномалии",[24,121,122,130,138,146,154],{},[27,123,124,129],{},[30,125,128],{"href":126,"rel":127},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=e9a4ESSHQ74",[34],"Транзакции и блокировки простым языком | vanyaio, YouTube"," — хороший вход в транзакции, блокировки и конкурентные обновления.",[27,131,132,137],{},[30,133,136],{"href":134,"rel":135},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F857486\u002F",[34],"Уровни изоляции транзакций с примерами на Go | Хабр"," — PostgreSQL, MySQL, SQL Server, Oracle и примеры конкурентной работы.",[27,139,140,145],{},[30,141,144],{"href":142,"rel":143},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F848596\u002F",[34],"Транзакции в БД на Go с использованием многослойной архитектуры | Хабр"," — как протащить транзакцию через application layer без утечки деталей.",[27,147,148,153],{},[30,149,152],{"href":150,"rel":151},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Ftransaction-iso.html",[34],"PostgreSQL: Transaction Isolation"," — уровни изоляции PostgreSQL и возможные аномалии.",[27,155,156,161],{},[30,157,160],{"href":158,"rel":159},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fexplicit-locking.html",[34],"PostgreSQL: Explicit Locking"," — блокировки таблиц, строк и advisory locks.",[19,163,165],{"id":164},"postgresql-архитектура-и-mvcc","PostgreSQL: архитектура и MVCC",[24,167,168,176,184,192,200],{},[27,169,170,175],{},[30,171,174],{"href":172,"rel":173},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F208400\u002F",[34],"Принципы работы СУБД: MVCC | Хабр"," — короткий фундамент про multiversion concurrency control.",[27,177,178,183],{},[30,179,182],{"href":180,"rel":181},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=mg70LYuRS3I",[34],"MySQL и PostgreSQL: что под капотом | YouTube"," — видео для сравнения архитектур СУБД.",[27,185,186,191],{},[30,187,190],{"href":188,"rel":189},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fmvcc.html",[34],"PostgreSQL: Multiversion Concurrency Control"," — официальная отправная точка по MVCC.",[27,193,194,199],{},[30,195,198],{"href":196,"rel":197},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fwal.html",[34],"PostgreSQL: Write-Ahead Logging"," — роль WAL в надежности, восстановлении и репликации.",[27,201,202,60,207,210],{},[30,203,206],{"href":204,"rel":205},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Froutine-vacuuming.html",[34],"PostgreSQL: Routine Vacuuming",[62,208,209],{},"VACUUM",", autovacuum, bloat и статистика.",[19,212,214],{"id":213},"postgresql-индексы-и-планировщик-запросов","PostgreSQL: индексы и планировщик запросов",[24,216,217,225,233,241,249],{},[27,218,219,224],{},[30,220,223],{"href":221,"rel":222},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=XoKNb7txd5c",[34],"EXPLAIN в базах данных за 10 минут | YouTube"," — быстрый вход в планы запросов.",[27,226,227,232],{},[30,228,231],{"href":229,"rel":230},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=DyqtBiDrz3g",[34],"Индексы в базах данных: собес в Ozon | YouTube"," — практический разговор про индексы и вопросы собеседований.",[27,234,235,240],{},[30,236,239],{"href":237,"rel":238},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=A_Ro0KFAPcg",[34],"Как устроен B-Tree индекс | YouTube"," — фундамент структуры, на которой держатся многие индексы.",[27,242,243,248],{},[30,244,247],{"href":245,"rel":246},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Findexes.html",[34],"PostgreSQL: Indexes"," — типы индексов, multi-column, partial и expression indexes.",[27,250,251,256],{},[30,252,255],{"href":253,"rel":254},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fusing-explain.html",[34],"PostgreSQL: Using EXPLAIN"," — чтение планов и проверка гипотез оптимизации.",[19,258,260],{"id":259},"postgresql-production-возможности","PostgreSQL: production-возможности",[24,262,263,271,279,287,295,303,314,325],{},[27,264,265,270],{},[30,266,269],{"href":267,"rel":268},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=dm_oid1HVfQ",[34],"PostgreSQL: практические примеры оптимизации SQL-запросов | Иван Фролков, YouTube"," — хороший production-разбор оптимизации.",[27,272,273,278],{},[30,274,277],{"href":275,"rel":276},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=aaecM4wKdhY",[34],"Вся правда об индексах в PostgreSQL | Бартунов, Коротков, YouTube"," — глубокий доклад по индексам PostgreSQL.",[27,280,281,286],{},[30,282,285],{"href":283,"rel":284},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fbackup.html",[34],"PostgreSQL: Backup and Restore"," — логические и физические бэкапы.",[27,288,289,294],{},[30,290,293],{"href":291,"rel":292},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fcontinuous-archiving.html",[34],"PostgreSQL: PITR"," — continuous archiving и point-in-time recovery.",[27,296,297,302],{},[30,298,301],{"href":299,"rel":300},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-partitioning.html",[34],"PostgreSQL: Declarative Partitioning"," — partitioning и ограничения подхода.",[27,304,305,60,310,313],{},[30,306,309],{"href":307,"rel":308},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fmonitoring-stats.html",[34],"PostgreSQL: Monitoring Database Activity",[62,311,312],{},"pg_stat_activity",", statistics views и диагностика активности.",[27,315,316,60,321,324],{},[30,317,320],{"href":318,"rel":319},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fclient-authentication.html",[34],"PostgreSQL: Client Authentication",[62,322,323],{},"pg_hba.conf",", методы authentication и правила доступа.",[27,326,327,60,332,335],{},[30,328,331],{"href":329,"rel":330},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fruntime-config-connection.html",[34],"PostgreSQL: Connections and Authentication Settings",[62,333,334],{},"max_connections",", reserved connections и TLS\u002FSSL-настройки.",[19,337,339],{"id":338},"go-и-postgresql-pgx-sqlc-squirrel","Go и PostgreSQL: pgx, sqlc, Squirrel",[24,341,342,352,358,366,374,382,390],{},[27,343,344,347,348,351],{},[30,345,144],{"href":142,"rel":346},[34]," — важный материал про ",[62,349,350],{},"Tx",", repository и application layer.",[27,353,354,357],{},[30,355,136],{"href":134,"rel":356},[34]," — удобно для проверки поведения кода под конкурентной нагрузкой.",[27,359,360,365],{},[30,361,364],{"href":362,"rel":363},"https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fjackc\u002Fpgx\u002Fv5",[34],"pgx v5"," — документация по популярному PostgreSQL-драйверу и toolkit для Go.",[27,367,368,373],{},[30,369,372],{"href":370,"rel":371},"https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fjackc\u002Fpgx\u002Fv5\u002Fpgxpool",[34],"pgxpool"," — настройки пула и runtime statistics.",[27,375,376,381],{},[30,377,380],{"href":378,"rel":379},"https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fjackc\u002Fpgx\u002Fv5\u002Ftracelog",[34],"pgx tracelog"," — hooks для логирования и трассировки запросов без ручного wrapper-а вокруг каждого query.",[27,383,384,389],{},[30,385,388],{"href":386,"rel":387},"https:\u002F\u002Fdocs.sqlc.dev\u002Fen\u002Fstable\u002F",[34],"sqlc Documentation"," — генерация type-safe Go-кода из SQL.",[27,391,392,397],{},[30,393,396],{"href":394,"rel":395},"https:\u002F\u002Fgithub.com\u002FMasterminds\u002Fsquirrel",[34],"Masterminds\u002Fsquirrel"," — builder SQL-запросов для динамических фильтров и сложной сборки условий.",[19,399,401],{"id":400},"другие-типы-бд","Другие типы БД",[24,403,404,412,420,428,436,444,452,460,468],{},[27,405,406,411],{},[30,407,410],{"href":408,"rel":409},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fwunderfund\u002Farticles\u002F685894\u002F",[34],"Разбираемся с Redis | Хабр"," — key-value\u002Fin-memory модель и сценарии кеширования.",[27,413,414,419],{},[30,415,418],{"href":416,"rel":417},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Finnotech\u002Farticles\u002F698838\u002F",[34],"Чем различаются Kafka и RabbitMQ | Хабр \u002F Innotech"," — помогает отделить БД от брокеров и event streaming.",[27,421,422,427],{},[30,423,426],{"href":424,"rel":425},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fitsumma\u002Farticles\u002F416629\u002F",[34],"RabbitMQ против Kafka | Хабр"," — полезно для выбора очереди\u002Fстрима вместо “положим все в БД”.",[27,429,430,435],{},[30,431,434],{"href":432,"rel":433},"https:\u002F\u002Fwww.mongodb.com\u002Fdocs\u002Fmanual\u002Fcore\u002Fdocument\u002F",[34],"MongoDB Documents"," — document model и вложенные структуры.",[27,437,438,443],{},[30,439,442],{"href":440,"rel":441},"https:\u002F\u002Fwww.mongodb.com\u002Fdocs\u002Fmanual\u002Fcore\u002Fread-isolation-consistency-recency\u002F",[34],"MongoDB Read Isolation, Consistency, and Recency"," — официальное описание read concern, write concern и causal consistency.",[27,445,446,451],{},[30,447,450],{"href":448,"rel":449},"https:\u002F\u002Fredis.io\u002Fdocs\u002Flatest\u002Foperate\u002Frs\u002Fdatabases\u002Fdurability-ha\u002Fconsistency\u002F",[34],"Redis Enterprise: Consistency"," — как Redis описывает consistency для clustered\u002Freplicated deployments.",[27,453,454,459],{},[30,455,458],{"href":456,"rel":457},"https:\u002F\u002Fwww.elastic.co\u002Fguide\u002Fen\u002Felasticsearch\u002Freference\u002Fcurrent\u002Fdocs-replication.html",[34],"Elasticsearch: Reading and writing documents"," — primary\u002Freplica write\u002Fread model и последствия для search index.",[27,461,462,467],{},[30,463,466],{"href":464,"rel":465},"https:\u002F\u002Fkafka.apache.org\u002Fdocumentation\u002F#design",[34],"Apache Kafka: Design"," — partitions, ordering, retention и log model.",[27,469,470,475],{},[30,471,474],{"href":472,"rel":473},"https:\u002F\u002Fclickhouse.com\u002Fdocs\u002Fintro",[34],"ClickHouse Introduction"," — колоночная OLAP-БД и типичные аналитические нагрузки.",{"title":477,"searchDepth":478,"depth":478,"links":479},"",2,[480,481,482,483,484,485,486,487],{"id":21,"depth":478,"text":22},{"id":80,"depth":478,"text":81},{"id":118,"depth":478,"text":119},{"id":164,"depth":478,"text":165},{"id":213,"depth":478,"text":214},{"id":259,"depth":478,"text":260},{"id":338,"depth":478,"text":339},{"id":400,"depth":478,"text":401},1781022065378]