- Intro to Database Systems : Schema Refinement - Functional Dependencies
- Common DB schema change mistakes | Database Lab · Instant clones of PostgreSQL databases · Postgres.ai
- Keeping track of database schema changes - DEV Community
- A Tiny Intro to Database Systems
- 누구나 바로 이해할 수 있는 데이터베이스 기초지식
- How to work optimally with relational databases
- The Wide World of Databases
- In memory database plus traditional database combination back end architecture pattern
- DISTRIBUTED SQL DATABASE FOR THE AGE OF DOCKER
- Aven is a code generator, create an .aven scheme file and the generator will iterate over your Database, tables and columns
- An Improved Private Mechanism for Small Databases
- Simplify: move code into database functions
- PROBABILISTIC M2M RELATIONSHIPS USING BLOOM FILTERS
- New course: Learn SQL interactively on Khan Academy
- Top 5 SQL and Database Courses to Learn Online
- SQLBolt, a series of interactive lessons and exercises
- Effective Micro-caching in Relational Database
- Graphs in the database: SQL meets social networks
- sqlfiddle.com
- Solving Sudoku with SQL
- Practical Persistence in Go: SQL Databases
- Why your query language should be explicit
- Advanced Queries With SQL That Will Save Your Time
- How to Build Advanced SQL. Building more maintainable, readable… | by SeattleDataGuy | Better Programming | Jul, 2020 | Medium
- The Sequel to SQL
- Thoughts on Time-series Databases
- DB 102: Database Orientation - Row vs. Column
- NewSQL vs. NoSQL for New OLTP
- Database expert on why NoSQL mattered — and SQL still matters
- SQL Style Guide
- SQL Commands Cheat Sheet - Download in PDF & JPG Format - Intellipaat
- How does a relational database work
- Generating MoM, YoY and CMGR from SQL
- Crab adds SQL to your command lin
- PizzaHack - Project from Maghimim 2015 camp for teaching about the SQL Injection vulnerability, and about SQL
- free.codebashing.com/courses/python/lessons/sql_injection 파이썬으로 대화형 sql injection test
- How I bypassed Cloudflare's SQL Injection filter
- Error-Based SQL Injection.. : 네이버블로그
- 웹 개발자를 위한 SQL injection 웹 해킹 보안 가이드
- A Scientific Notation Bug in MySQL left AWS WAF Clients Vulnerable to SQL Injection - GoSecure
- 데이터베이스 보안을 향상시키는 11가지 기술 - ITWorld Korea
- Welcome to the π-Base - A community database of topological examples with automated deduction and powerful search
- Yesquel: scalable SQL storage for Web applications
- FreeGeoDB - Free database of geographic place names and corresponding geospatial data
- RDBMS Genealogy
- "Transactions: myths, surprises and opportunities" by Martin Kleppmann
- #WDILTW – To use a RDBMS is to use a transaction
- DBMS는 어떻게 트랜잭션을 관리할까?
- Enterprise Architecting Series: Transaction Service · Present
- DB 트랜잭션 격리 수준 그림과 예시로 쉽게 이해하기 - 1편 | by 10x 개발자 | Aug, 2022 | Medium
- GalaXQL - Interactive SQL tutorial
- Learn SQL - Free Interactive SQL Tutorial
- SQL Tutorial for Beginners – Learn SQL Programming Online -Intellipaat
- (즐겁게 배우는 SQL) 기획 소개
- 즐겁게 배우는 SQL - YouTube
- (즐겁게 배우는 SQL #1) 정말 간단한 질의부터 시작하자
- (즐겁게 배우는 SQL #2) 행을 정렬하자
- (즐겁게 배우는 SQL #3) 데이터를 필터링하자 - Select Distinct
- (즐겁게 배우는 SQL #4) 데이터를 필터링하자 - where
- (즐겁게 배우는 SQL #5) 데이터를 필터링하자 - limit
- (즐겁게 배우는 SQL #6) 데이터를 필터링하자 - between
- (즐겁게 배우는 SQL #7) 데이터를 필터링하자 - in
- (즐겁게 배우는 SQL #8) 데이터를 필터링하자 - like
- (즐겁게 배우는 SQL #9) 데이터를 필터링하자 - GLOB
- (즐겁게 배우는 SQL #10) 데이터를 필터링하자 - IS NULL
- (즐겁게 배우는 SQL #11) 테이블을 조인하자 - JOIN 설명
- (즐겁게 배우는 SQL #12) 테이블을 조인하자 - INNER JOIN
- (즐겁게 배우는 SQL #13) 테이블을 조인하자 - LEFT JOIN
- (즐겁게 배우는 SQL #14) 테이블을 조인하자 - CROSS JOIN
- (즐겁게 배우는 SQL #15) 테이블을 조인하자 - SELF JOIN
- (즐겁게 배우는 SQL #16) 테이블을 조인하자 - FULL OUTER JOIN
- (즐겁게 배우는 SQL #17) 데이터를 그룹으로 묶어보자 - Group By
- (즐겁게 배우는 SQL #18) 데이터를 그룹으로 묶어보자 - HAVING
- (즐겁게 배우는 SQL #19) 집합 연산자를 배우자 - Union
- (즐겁게 배우는 SQL #20) 집합 연산자를 배우자 - Except와 Intersect
- (즐겁게 배우는 SQL #21) 집합 연산자를 배우자 - MySQL에서 Intersect와 Except 흉내내기
- (즐겁게 배우는 SQL #22) 서브 질의를 배우자 - 서브 질의
- (즐겁게 배우는 SQL #23) 서브 질의를 배우자 - Exists
- (즐겁게 배우는 SQL #24) 서브 질의를 배우자 - Case
- (즐겁게 배우는 SQL #25) 보너스 - 지금까지 배운 내용 응용하기
- (즐겁게 배우는 SQL #26) CRUD 연산의 기본기를 배우자 - C(Create)를 위한 INSERT
- (즐겁게 배우는 SQL #27) CRUD 연산의 기본기를 배우자 - U(Update)를 위한 UPDATE
- (즐겁게 배우는 SQL #28) CRUD 연산의 기본기를 배우자 - D(Delete)를 위한 DELETE
- (즐겁게 배우는 SQL #29) CRUD 연산의 기본기를 배우자 - 삽입하거나 기존 행을 대체하는 REPLACE
- (즐겁게 배우는 SQL #30) 트랜잭션이 뭐지?
- (즐겁게 배우는 SQL #31) 데이터를 정의하자 - SQL 데이터 타입
- (즐겁게 배우는 SQL #32) 데이터를 정의하자 - 테이블 생성
- (즐겁게 배우는 SQL #33) 데이터를 정의하자 - 테이블 변경
- (즐겁게 배우는 SQL #34) 데이터를 정의하자 - 테이블 열 이름 변경
- (즐겁게 배우는 SQL #35) 데이터를 정의하자 - 테이블 제거
- (즐겁게 배우는 SQL #36) 데이터를 정의하자 - 청소(Vacuum)
- (즐겁게 배우는 SQL #37) 제약 조건 - 기본 키
- (즐겁게 배우는 SQL #38) 제약 조건 - 외래 키
- (즐겁게 배우는 SQL #39) 제약 조건 - NOT NULL 제약
- (즐겁게 배우는 SQL #40) 제약 조건 - UNIQUE 제약
- (즐겁게 배우는 SQL #41) 제약 조건 - CHECK 제약
- (즐겁게 배우는 SQL #42) 제약 조건 - AUTOINCREMENT 제약
- (즐겁게 배우는 SQL #43) 뷰 - 뷰 생성
- (즐겁게 배우는 SQL #44) 뷰 - 뷰 제거
- (즐겁게 배우는 SQL #45) 색인 - 색인
- (즐겁게 배우는 SQL #46) 색인 - 표현식 기반의 색인
- (즐겁게 배우는 SQL #47) 트리거 - 트리거
- (즐겁게 배우는 SQL #48) 트리거 - INSTEAD OF 트리거
- (즐겁게 배우는 SQL #49) 윈도우 함수 - 윈도우 함수(1)
- (즐겁게 배우는 SQL #50) 윈도우 함수 - 윈도우 함수(2)
- (즐겁게 배우는 SQL #51) (보충) where와 having 차이점 설명
- DB update set에서 주의할 점
- JOIN 조인 + 예시
- The difference between WHERE and HAVING – SQL Bits
- SQLrevisited: Difference between DELETE vs DROP vs TRUNCATE in SQL
- WHERE vs HAVING and GROUP BY vs PARTITION BY Clause in SQL - Tech Point Fundamentals
- DB에 하지 말아야 할 겪은 일들
- 고독쓰나미 - YouTube
- Torturing Databases for Fun and Profit
- EDB is a framework to make and manage backups of your database
- 클라우드 기반의 데이터베이스 백업 및 복구 플랫폼 | 쿠팡 엔지니어링 | Coupang Engineering Blog
- IntelliJ 0xDBE
- Chaos Tomb: Visualizing Gameplay with D3 and SQL
- Exploring the Wall Street Journal's Pulitzer-Winning Medicare Investigation with SQL
- Readings in Database Systems, 5th Edition
- aquerytool.com
- dbguide.net
- 코드카데미, SQL 중급 강의 무료 공개
- SQL,SELECT문처리순서/과정 parsing,optimization,execution,fetch,옵티마이저,파싱,실행,패치
- How to Optimize SQL Queries. This article sorts out some special… | by Pawan Jain | Jun, 2020 | Towards Data Science
- How to Optimize SQL Queries Part II | by Pawan Jain | Jul, 2020 | Towards Data Science
- SQL Query Optimization: Level Up Your SQL Performance Tuning | by Garvit Arya | Feb, 2022 | Better Programming
- Top 10 Tips to Improve SQL Query Performance | by Bigscal Technologies | Medium
- Valentina Cupać on Twitter: "What's the logical order of SQL query operations? SQL Query Execution Order (Visualized). #SQL #Databases https://t.co/PWgGe0SNbU" / Twitter
- SQL Query Order of Execution | Sisense
- SQL queries run in this order
- Parsing SQL - Federico Tomassetti - Software Architect
- (SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
- 초보자 확실히 기억해야 하는 SQL 가이드
- 제3회 스포카콘 SQL 쿼리 최적화 맛보기
- 비전공자를 위한 SQL
- 나만 모르고 있던 – Flyway (DB 마이그레이션 Tool)
- 예제로 배우는 SQL 프로그래밍
- DB-Engines Ranking - Trend Popularity
- Comparison of different SQL implementations
- DB 데이터를 Hadoop에 저장 시 삽질 두가지
- 혀로그래머 charsyam은 구라쟁이
- WebSanitizer ScanningVideotest acunetix com
- 패스트캠퍼스 SQL튜닝캠프 1일차 - 인덱스 구조와 스캔 방식
- 고치면서 배우는 즐거운 SQL
- SQL이란: 데이터 쿼리와 관리
- 데이터베이스 관리 도구: SQLGate 키보드 단축키
- Software engineer — from monolith to cloud: Auto Increment to UUID
- Reasons why SELECT * is bad for SQL performance | Tanel Poder Consulting
- UUIDs are Popular, but Bad for Performance — Let’s Discuss
- Generating UUIDs at scale on the Web | by Matthieu Wipliez | Teads Engineering | Jul, 2020 | Medium
- uuid-readable: Generate Easy to Remember, Readable UUIDs, that are Shakespearean and Grammatically Correct Sentences 🥳
- Understanding How UUIDs Are Generated - Digital Bunker
- Why Did We Shift Away From Database-Generated Ids?
- Don't Use Database Generated IDs | The Startup
- Instagram 에서 ID 샤딩하기
- Code Quality Comparison of Firebird, MySQL, and PostgreSQL
- SQL Best Practices — Designing An ETL Video
- RDB에서 데이터 ETL을 위한 최소한의 테이블 설계
- DBMS 버퍼 관리의 두 가지 흐름 가상 메모리 페이지 교체 알고리즘 활용…페이지 부재 발생 빈도 줄여 성능 향상
- DBMS의 탄생과 발전, 그리고 역사
- 01 - History of Databases (CMU Databases / Spring 2020)
- 중국의 어떤 서버 개발자의 디비 설계
- An explanation of the difference between Isolation levels vs. Consistency levels
- What every developer should know about database consistency | Roberto Vitillo's Blog
- A Better Way to Write SQL queries for Developers
- 관계형 데이터 모델링
- Database 모델링에 대해서 정리해 봅니다
- 데이터 모델링이란? (관계형 DB 편)
- 검색엔진과 DB Like 검색의 결과가 다른 이유
- 코호트 분석(Cohort Analysis)을 SQL로 구현하는 테스트 코드
- Write-Ahead Log for Dummies
- 번역 데이터 구조와 설계 — 튜토리얼
- Database basics: writing a SQL database from scratch in Go
- Choosing a Database Technology
- The Best Medium-Hard Data Analyst SQL Interview Questions
- Things I Wished More Developers Knew About Databases
- Understanding Database IOPS - Part 1 | Kloud DB
- 오라클12c 행제한구문 실습, MySQL의 top-N 쿼리, 페이징 쿼리 (Pagination Query) - YouTube
- How to Implement Cursor Pagination Like a Pro | by Megan Chang | The Startup | Medium
- A Snowflake deep dive 기술이야기는 아니고 snowflake 소개
- Database of Databases - Home
- How to use Indexing for SQL Query Optimization | Towards Data Science
- SERIES: 데이터베이스 인덱스 공부
- Using SQL to Estimate Customer Lifetime Value (LTV) without Machine Learning - Data Science Central
- Understanding Connections & Pools
- 내가 만든 서비스는 얼마나 많은 사용자가 이용할 수 있을까? - 3편(DB Connection Pool)
- ConnectionStrings.com - Forgot that connection string? Get it here! 각 DB별 connection string 모음
- Maximum number of database connections - Vlad Mihalcea
- What can we learn from SQL's 50 year reign? A story of 2 Turing Awards
- Running a bakery on Emacs and PostgreSQL // Just a Summary
- You might as well timestamp it |> Changelog flag보다 timestamp를 써야 한다는 주장
- The State of the Open Source Database Industry in 2020: Part Three - Percona Database Performance Blog
- Database Performance Secrets of the Stars! - YouTube
- Demystifying Database Performance for Developers
- Against SQL
- A beginner's guide to database multitenancy - Vlad Mihalcea
- 칼럼|데이터베이스의 '주류 교체', 숨막히게 더딜지라도... - CIO Korea
- 칼럼 | 개발자가 ‘데이터베이스’를 먼저 감안해야 할 이유 - CIO Korea
- 영상 : 초보자가 저지르기 쉬운 DB 코딩 실수 3가지 :: 자바캔(Java Can Do IT)
- A future for SQL on the web
- Stephen Colebourne's blog: Big problems at the timezone database
- 통계 서버를 구축하며!. 소개 | by Jason Kang | Uniquegood | Oct, 2021 | Medium 주제 분류가 좀 애매하지만 동시성 문제를 이야기하니 우선 여기에
- pubkey/client-side-databases: An implementation of the exact same app in Firestore, AWS Datastore, PouchDB, RxDB and WatermelonDB
- Database Replication Explained. Part 1 — Single Leader Replication | by Zixuan Zhang | Nov, 2021 | Towards Data Science
- Database Replication Explained 2. Part 2— Multi Leader Replication | by Zixuan Zhang | Nov, 2021 | Towards Data Science
- Database Replication Explained 3. Part 3 -Leaderless Replication | by Zixuan Zhang | Nov, 2021 | Towards Data Science
- How to optimize your SQL Database to handle millions of records — part 1 | by SianLoong | Medium
- Is Kubernetes slowing down my database? | DB Exam Study
- Goodbye etcd, Hello PostgreSQL: Running Kubernetes with an SQL Database | by Martin Heinz | Jul, 2023 | Better Programming
- Databases in 2021: A Year in Review - OtterTune
- 글로벌 칼럼 | ‘진화 혹은 변혁’ 클라우드 데이터 웨어하우스의 미래 - ITWorld Korea
- Thread by @ergestx on Thread Reader App – Thread Reader App
- Different Ways to Check and Delete Duplicate Records in SQL - Tech Point Fundamentals
- How to choose the right database for your project | by Anthony Papoutsis | Mar, 2022 | Medium
- How to choose the right database for your service | by Natan Silnitsky | Wix Engineering | Medium
- “데이터 계층을 위한 탄력적 컴퓨팅” 서버리스 데이터베이스의 이해 - ITWorld Korea
- A database for 2022 · Tailscale
- SQL 가독성을 높이는 다섯 가지 사소한 습관
- SQL 가독성을 높이는 다섯 가지 사소한 습관 | 요즘IT
- Alternative to MapReduce for search in distributed databases - DEV Community
- Building data-centric apps with a reactive relational database
- 아직도 DBA는 좋은 직업인가요? | GeekNews
- Why SQL Needs Software Libraries | Future
- Everything Is a Funnel, But SQL Doesn’t Get It | by Motif Analytics | Jun, 2022 | Medium
- DataBase
- Scan sharing - IBM Documentation
- 05 - Buffer Pools (CMU Intro to Database Systems / Fall 2021) - YouTube
- MVCC 구조와 이해
- 고가용성의 웹 서비스를 위한 데이터베이스 클러스터링 clustering
- 오래된 DB와 이별하는 방법 :: GS Retail Engineering
- DB migration 방법론 :: GS Retail Engineering
- Number와 boolean 은 최대한 Not Null로 선언하기
- 'is not NULL'과 '!= NULL'은 다르다?
- 디비 주문구조 설계 - 동시성 고려를 위한.. : 네이버블로그
- 디비 추적 가능한 테이블 설계 : 네이버 블로그
- 디비 게시판 구조 설계 - 게시글 관리 그.. : 네이버블로그
- BULK 처리 Write에 집중해서 개선해보기 - 컬리 기술 블로그
- Database Fundamentals
- Redesigning MySQL - AWS Tech Talk on the Aurora Database
- Now Available – Amazon Aurora
- 최소한의 다운타임으로 아마존 RDS Aurora DB로 이전하기
- MySQL에서 RDS(Aurora) 로 이관하기
- Amazon Aurora 내부 들여다보기 (1) – 쿼럼 및 상관 오류 해결 방법
- 20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
- Amazon Aurora – MySQL에서 DB 부하에 대한 최적화 방법
- 재해복구(DR)를 위한 오로라 데이터베이스 구성
- AWS Aurora DB Cluster & Instance Parameter 튜닝
- Aurora 로컬 스토리지 성능 테스트
- Amazon Aurora MySQL Database Administrator’s Handbook (요약 및 의역)
- Amazon Aurora Multi-Master를 통한 고가용성 MySQL 애플리케이션 만들기
- Aurora MySQL를 운영하면서 알면 좋을 것 같은 미세한 팁
- Aurora MySQL 스냅샷을 Parquet 로 S3 에 Export
- When Should I Use Amazon Aurora and When Should I use RDS MySQL? - Percona Database Performance Blog
- A First Glance at Amazon Aurora Serverless RDS - Percona Database Performance Blog
- AWS Announces New Database Service Babelfish for Aurora PostgreSQL in Preview
- Amazon Aurora PostgreSQL 에서 pg_bigm 모듈사용하기
- (AWS Aurora) PostgreSQL에서 Lock 쿼리 확인하고 원인 종료하기
- 입 개발 MariaDB Connector 와 AWS Aurora | Charsyam's Blog
- Planning I/O in Amazon Aurora | AWS Database Blog
- Leveraging AWS Aurora for Event Sourcing | by Lomig Mégard | SwissBorg Engineering | Feb, 2022 | Medium
- Aurora MySQL vs Aurora PostgreSQL | 우아한형제들 기술블로그
- Amazon Aurora Serverless v2 정식 출시 – 워크로드 요구 사항에 따른 즉각적인 DB 크기 조정 | Amazon Web Services 한국 블로그
- No, AWS, Aurora Serverless v2 Is Not Serverless - Last Week in AWS Blog
- Amazon RDS Custom에서 Oracle Database 재생성 하기 | AWS 기술 블로그
- Common pitfalls when migrating MySQL to Aurora using AWS DMS | EverSQL
- AWS Data Migration Service(DMS)를 활용하여 Amazon Aurora PostgreSQL 블루/그린 배포 환경 생성하기 | AWS 기술 블로그
- 블루/그린 배포를 이용한 Aurora MySQL 버전 무중단 업그레이드 경험 공유 | by Siheon Kim | Feb, 2023 | HBsmith
- Amazon RDS MySQL 블루/그린 배포환경에서 전환 작업 이후 복구 환경 구성을 위한 동기화 기법 | AWS 기술 블로그
- 우아한형제들에서 RDS를 모니터링 하는 방법 | AWS 기술 블로그
- AWS RDS Storage 성능 비교. AWS 서비스에 사용할 Storage에 대한 자료를 찾아보다가 AWS… | by Kimmatt | 직방 기술 블로그 | Apr, 2023 | Medium
- Amazon Aurora I/O-Optimized 클러스터 구성- I/O 집약적 애플리케이션을 위한 최대 40% 비용 절감할 수 있는 스토리지 옵션 | Amazon Web Services 한국 블로그
- 실시간 복제 데이터를 이관시키는 방법. 안녕하세요. 스테이지랩스(STAYGE Labs) Back-End 팀… | by Victor Kang | staygelabs | May, 2023 | Medium migration DynamoDB to Aurora PostgreSQL
- The growing pains of database architecture
- Amazon RDS에서 단일 Postgres 데이터베이스를 사용하고 있던 Figma가 더는 하나의 데이터베이스로 서비스하기 어려워서 점진적으로 개선해 나간 과정을 정리한 글
- Figma는 2022년까지 Amazon RDS Postgres 데이터베이스 사용, CPU 사용률 65%
- 이 문제를 완화하기 위해 일단 데이터베이스의 사용을 올리고 읽기 리플리카를 만든 뒤 PgBouncer를 추가해서 연결 수 제어
- 하지만 부하의 상당 부분이 쓰기와 관련되어 있었고 복제 지연시간 때문에 모든 읽기를 리플리카로 옮길 수 있는 상황도 아님
- 수평 확장이 되는 NoSQL이나 Vitess 등을 고려했지만
- 애플리케이션 수정도 많이 필요
- 직접 운영에 필요한 관련 경험이 없었기 때문에
- 매니지드 솔루션을 그대로 이용하고자 함
- 데이터베이스를 테이블별로 수직 분할하기로 결정
- 테이블 그룹을 자체 데이터베이스 베이스로 옮기기로 하고
- 이 수직 파티셔닝은 원본 데이터베이스에 부담을 줄이면서 향후 테이블의 하위 집합을 수평으로 샤딩할 수 있는 장점
- 문제는 파티셔닝이 쉬운지 여부
- 테이블을 이동하면 트랜잭션이나 조인 등의 기능을 잃게 되므로
- 애플리케이션 재작성하는 비용이 클 수 있음
- Ruby에서 ActiveRecord를 사용하고 있었으므로
- 런타임 유효성 검사기를 만들어서 같은 테이블 그룹을 참조하는 쿼리와 트랜잭션을 기록해서 파티셔닝의 후보로 만듦
- 마이그레이션 중 가용성 영향을 1분 미만이면서 반복할 수 있고 파티션을 취소할 수 있는 요구사항을 맞추려면 직접 만드는 수밖에 없었음
- 애플리케이션이 파티셔닝과 호환되도록 한 뒤 PgBouncer를 하나 더 추가해서 트래픽을 분할하여 호환성 검사를 하면서 서비스에 영향이 가게 하고 문제가 없으면 분리된 데이터베이스를 보게 함
- 첫 작업에서 2개의 테이블을 옮기고 2022년 10월에는 50개의 테이블을 옮기면서 CPU 사용률은 10%까지 감소
- 케이타운포유의 순간적인 스파이크 트래픽 대응을 위한 Amazon Aurora 오토스케일링 전략 | AWS 기술 블로그
- AWS RDS Aurora I/O-Optimized 적용 후기 – Lamanus' Archive
- Aurora DB 클러스터 역추적 - Amazon Aurora
- Amazon Aurora를 애플리케이션 개발자가 사용하기 위한 10가지 팁 – 1부 | AWS 기술 블로그
- Amazon Aurora를 어플리케이션 개발자가 사용하기 위한 10가지 팁 – 2부 | AWS 기술 블로그
- Amazon CloudWatch를 이용한 Amazon Aurora I/O Optimized 기능에 대한 비용 절감 예상하기 | AWS 기술 블로그
- Amazon RDS for MySQL의 Active/Active 복제를 위한 Group Replication 플러그인 소개 | AWS 기술 블로그
- Aurora MySQL 업그레이드엔 블루/그린 배포 어때? | by Rocket | Jan, 2024 | 여기어때 기술블로그
- Oracle to AWS Aurora PG 1탄 (Shareplex AWS 전환 여정)
- Oracle to AWS Aurora PG 2탄 !! (DB 이사가요~)
- Amazon Aurora MySQL 버전 3으로 업그레이드 (MySQL 8.0 호환) | AWS 기술 블로그
- 로컬 인스턴스 스토리지를 사용하여 SQL Server용 Amazon RDS Custom에서 TempDB 성능 최적화 | AWS 기술 블로그
- Amazon RDS: A Comprehensive Tutorial on AWS RDS with Hands-On Practice by Fanaticus - YouTube
- Amazon Aurora MySQL 버전 2(MySQL 5.7 호환)에서 버전 3(MySQL 8.0 호환)으로 업그레이드 체크리스트, 1부 | AWS 기술 블로그
- Amazon Aurora MySQL 버전 2(MySQL 5.7 호환)에서 버전 3(MySQL 8.0 호환)으로 업그레이드 체크리스트, 2부 | AWS 기술 블로그
- SQL 전문가 되어보기
- SQLite로 가볍게 배우는 데이터베이스
- 더북(TheBook): 오라클 SQL과 PL/SQL을 다루는 기술
- 더북(TheBook): SQL 코딩의 기술 1~3장만
- 더북(TheBook): 모두의 SQL
- 더북(TheBook): 누구나 쉽게 SQL
- Readings in Database Systems, 5th Edition
- SQL Indexing and Tuning e-Book for developers: Use The Index, Luke covers Oracle, MySQL, PostgreSQL, SQL Server, ...
- PostgreSQL 14 Internals : Postgres Professional
- PostgreSQL 14 Internals, Part II : Postgres Professional
- joinc
- A Database Model for Simple Board Games
- DB/분산 초보자를 위한 CAP 이론
- Paper: OLTP Through the Looking Glass, and What We Found There
- Paper: Main Memory Database Systems: An Overview
- Paper: Staring into the Abyss: An Evaluation of Concurrency Control with One Thousand Cores
- Paper: Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems – The Last Mind
- Foundations of Databases
- 1 ~ 4세대 DBMS로 보는 데이터베이스 발전 과정과 양상에 대해 정리하기 | by Ryan Kim | Jul, 2021 | Medium
- 15 futuristic databases you’ve never heard of - YouTube
- DuckDB is an in-process SQL OLAP Database Management System
- Eduardo Blancas - Using embedded SQL engines for plotting massive datasets on a laptop - YouTube sqlite
- FOSDEM 2023 - DuckDB In The Python Land - Pedro Holanda - YouTube
- DuckDB: Bringing analytical SQL directly to your Python shell — Pedro Holanda - YouTube
- Comparing SQLite, DuckDB and Arrow with UN Trade Data · Pachá
- DuckDBT: Not a database or a dbt adapter but a secret third thing – DuckCon #3 (San Francisco) - YouTube
- Gábor Szárnyas - DuckDB: The Power of a Data Warehouse in your Python Process - YouTube
- alasql.org
- Arctype | The fast and easy-to-use SQL client
- awesome-db-tools: Everything that makes working with databases easier
- bytebase: Web-based, zero-config, dependency-free database schema change and version control tool for teams. Public demo: https://demo.bytebase.com
- cozo: A general-purpose, transactional, relational database that uses Datalog and focuses on graph data and algorithms
- DBCore - Rapidly prototype applications powered by your database
- dbcrossbar - an open source tool that copies large, tabular datasets between many different databases and storage formats. Data can be copied from any source to any destination
- dbdb.io Home - Database of Databases
- DBeaver
- dblab: The database client every command line junkie deserves
- DBLog: A Generic Change-Data-Capture Framework | by Netflix Technology Blog | Netflix TechBlog
- db_seeder: Relational database data generator..
- Dolt – It's Git for Data
- dqlite: Embeddable, replicated and fault tolerant SQL engine
- dsq: Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more
- ERD
- falcon - Free, open-source SQL client for Windows and Mac
- Flyway - Version control for your database. Robust schema evolution across all your environments. With ease, pleasure and plain SQL
- goose Overview - pressly/goose
- ingestr: ingestr is a CLI tool to copy data between any databases with a single command seamlessly
- Instant SQL Formatter
- Jailer Open Jail - The Jailer Project Web Site
- Jetbrains
- malloy: Malloy is an experimental language for describing data relationships and transformations
- migration
- flyway - Evolve your Database Schema easily and reliably across all your instances plain SQL 사용
- liquibase.org - source control for your database xml 작성, rollback 지원
- orbit-db - Peer-to-Peer Databases for the Decentralized Web
- prql: PRQL is a modern language for transforming data — a simple, powerful, pipelined SQL replacement
- RadonDB: 대륙의 뉴타입 슈주쿠(Shùjùkù, 数据库, database) !? MySQL or PostgreSQL 기반의 분산 데이터베이스 이야기
- Readyset is a MySQL and Postgres wire-compatible caching layer that sits in front of existing databases to speed up queries and horizontally scale read throughput. Under the hood, ReadySet caches the results of cached select statements and incrementally updates these results over time as the underlying data changes
- Rel – The desktop relational database management system
- Replibyte - 개발DB를 실제 데이터로 채우는 도구 | GeekNews
- Rockset - a scalable, reliable search and analytics service in the cloud that makes it easy to build fast operational applications on TBs of data simply using SQL
- sequel fumpt - Type some SQL. Move the slider to set output width
- sq: swiss-army knife for data jq for relational data
- sqitch: Sensible database change management
- sqldef: Idempotent schema management for MySQL, PostgreSQL, and more
- sqlglot: Python SQL Parser and Transpiler
- sqlfluff The SQL Linter for humans
- SQLPad - A web app for writing and running SQL queries and visualizing the results. Supports Postgres, MySQL, SQL Server, ClickHouse, Crate, Vertica, Presto, SAP HANA, Snowflake, BigQuery, SQLite, and many others via ODBC
- SQL Translation - Translate your SQL from one dialect to another
- Teleport Introducing Database Access | Teleport NAT
- table_ddl mariadb mysql 특정 스키마 테이블 ddl 추출 프로그램 배포
- Trino | Distributed SQL query engine for big data
- Trino | Why leaving Facebook/Meta was the best thing we could do for the Trino Community
- 페이스북에서 만든 Presto의 초기 멤버들이 페이스북을 나와서 Trino로 리브랜딩하고 Trino 재단을 만들었는데 그게 왜 좋은 결정이었는지를 설명한 글
- Presto를 처음 오픈소스로 릴리스한 2012년은 Facebook이 IPO 하기 전, 오픈소스로 프로젝트를 오픈하는 데 문제가 없었음
- 사람들은 커뮤니티를 만들지 회사를 만드는 게 아니고 회사는 목표 자체가 커뮤니티와는 다름
- 오픈소스는 "누구도 특별하지 않다"는 엄격한 정책이 있지만
- Facebook 내에서 Prestor가 중요한 프로젝트가 되면서 승인/성과를 위해서 프로젝트의 커밋 권한을 받으려고 함
- 처음에 한 실수는 Presto라는 이름의 애정이 있어서 이름을 바꾸지 않으려고 했고
- 페이스북도 Presto가 커뮤니티 소속이라는 합의가 있다고 믿었지만 실제로는 커뮤니티가 나가자 페이스북의 소유가 됨
- 그래서 페이스북을 나와야 했고 Trino로 리브랜딩해서 홍보도 새로 해야 했지만 그래도 커뮤니티의 힘을 믿었고 빠르게 스타도 증가
- Trino | Why leaving Facebook/Meta was the best thing we could do for the Trino Community
- usql - Universal command-line interface for SQL databases
- UXSql Application Builder MSSQL, MySQL 가능
- VisualSQL We Made SQL Visual - Why and How
- Waltz: A Distributed Write-Ahead Log
- YDB — an open-source Distributed SQL Database
- Yugabyte Cloud - Yugabyte
- HowTo: Install ClusterControl to Provision, Monitor and Manage MariaDB/Percona MariaDB MySQL Cluster
- How to Install MariaDB on Ubuntu 18.04
- Call me Maybe: MariaDB Galera Cluster
- Spring 4 + MyBatis 3 + MariaDB (Maven) 기반 게시판 예제
- 빌링 시스템 장애, 이러지 말란 Maria~
- MariaDB에서 서브쿼리 인덱스 걸기
- Spider Storage Engine Overview with built-in sharding features
- How to migrate from Oracle Database with ease
- "SELECT COUNT(*)" 수행 속도 문제
- MariaDB 설치 및 설정
- MariaDB에서 root 암호 인증 방식이 먹히지 않는 이유(feat. unix_socket)
- Authentication from MariaDB 10.4
- Less passwords, more security: unix socket authentication and other MariaDB hardening tips
- Observability Differences Between MySQL 8 and MariaDB 10.4
- Streaming backups in parallel using tee | DBA Dojo
- 팁 MariaDB 사용자별 최대 쿼리 실행 시간 다르게 주기 :: 자바캔(Java Can Do IT)
- Logging all MariaDB and MySQL queries into the Slow Log - Vettabase
- 마리아DB 파티션 테이블+자동 증가 칼럼 대박 버그 :: 자바캔(Java Can Do IT)
- 미친 라이브 데모를 통해 보는Write-Scale Out MariaDB Xpand (10 node cluster)
- mariadb procedure exception 처리 예제
- MariaDB vs MySQL - 호환성/포크된 이유/주요 차이점 비교 | GeekNews
- mariadb instr 함수 커스트마이징 하기 (오라클 버전 파라미터 적용)
- #MariaDB - 데이터베이스(DB) 초기화
- 가난한 자의 MariaDB 프로시저 로깅 · 감자도스
- Authentication Plugin - Unix Socket
- CDC
- ClustrixDB distributed RDB
- Galera DIAMANTI Use Case : MariaDB with Galera Cluster | by Simon.kim | Mar, 2021 | Medium
- SkySQL Jacob's Cafe :: 수십억건 데이터 처리를 위한 MariaDB Analytics (SkySQL)
- Testcontainers로 Mariadb 연동 통합 테스트하기 :: 자바캔(Java Can Do IT)
- practice - case when
- practice - top 1 to read the latest row
- practice - troubleshooting
- User Defined Stored Procedures in SQL
- 저장 프로시저 (Stored Procedure) 란?
- Install SQL Server on Ubuntu
- SQL Server 에게 String 이란? (NVARCHAR 인가 VARCHAR 인가)
- SQL Server Tutorial
- Some Aspects of MS SQL Server Monitoring. Part 1
- 임시테이블, 테이블변수 간 성능이슈
- 토크ON세미나 47차. SQL 데이터분석 입문 | T아카데미
- 쿼리 수행시간 확인방법
- Docker + MSSQL 개발하기
- SQL서버 커밋할 수 없는 트랜잭션
- MSSQL Server Tutorial For beginners - Techringe
- SQL서버 VALUES의 다양한 용법(테이블 값 생성자) :: 전산이야기
- 맥북 docker 에 mssql 설치 하기
- 신입 개발자, DB를 최적화 하다! 1편. 소개 | by Jason Kang | Uniquegood | Sep, 2021 | Medium
- 신입 개발자, DB를 최적화 하다! 2편. 소개 | by Jason Kang | Uniquegood | Sep, 2021 | Medium
- Intro to SQL - YouTube
- Improving Database Development, CI/CD with Storage Snapshot | by Kittikun Chartmala | Agoda Engineering & Design | Feb, 2022 | Medium
- SQLServer JDBC의 이상한 동작
- 날짜 참조 테이블 만들기 (매월 월요일 구하기.. : 네이버블로그
- Architect a disaster recovery for SQL Server on AWS: Part 1 | AWS Database Blog
- Architect a disaster recovery for SQL Server on AWS: Part 2 | AWS Database Blog
- Architect a disaster recovery for SQL Server on AWS: Part 3 | AWS Database Blog
- Architect a disaster recovery for SQL Server on AWS: Part 4 | AWS Database Blog
-
practice
- 비개발자를 위한 MySQL
- 개발했더니 내 서재였던 건에 대하여 - 리디주식회사 RIDI Corporation
- queries 비밀번호 변경 등 기타 명령도 포함
- use case
- 분리된 table을 통합하는 과정에서의 경험
- unique constraint에서 null을 사용하는 경우의 핵심
- table에 존재하지 않는지 검사하고 입력하는 INSERT 구문
- 다른 table에 존재하는 record 삭제하는 DELETE 구문
- ON DUPLICATE KEY UPDATE와 IF를 사용한 입력
- MySQL: 테이블 이름 변경에 view 활용하기
- MySQL 중복 데이터 제거 트러블 슈팅 - 현구막 기술 블로그
date_trunc
함수를 구현하자- ALTER
- MySQL 테이블 수정
- MySQL ALTER 명령을 이용한 테이블 변경
ALTER TABLE [table name] RENAME [new table name]
ALTER TABLE [table name] ADD [column name] [type]
- Unexpected slow ALTER TABLE in MySQL 5.7
- practice - create insert alter
COALESCE(<column name>, 0)
column 값이 NULL인 경우 0 출력- CREATE
CREATE TABLE [table name] LIKE [org table name]; -- index까지 복사. 물론 데이터는 복사하지 않음
CREATE TABLE [table name] SELECT * FROM [org table name]; -- 데이터를 복사해서 만들지만 index를 복사하지는 않음
- INSERT
- 13.2.5.2 INSERT ... ON DUPLICATE KEY UPDATE Syntax
- Mysql 의 Insert .. On Duplicate Key Update 유의사항
- Insert multiple records into MySQL with a single query
- 여러 행 SELECT해서 INSERT 하기 :: Outsider's Dev Story
- sql 독학 강의 # mysql insert 사용 방법 17편 -sTricky
- MySQL 양방향 암호화 복호화 insert 및 select 예제
- MySQL은 '따닥'을 어떻게 방어할까
- LOAD, mysqlimport
- csv 파일을 직접 MySQL 테이블로 Import 하는 방법 (대용량 파일 import 팁)
- MySql: LOAD DATA INFILE 로 대용량 데이터 인서트하기
- load data infile; 속도가 느림
mysql -h xxx.yyy.zzz.www -u [user id] -p[password] [database] -N -e "LOAD DATA local infile \"./[data file]\" REPLACE INTO TABLE [table name] ([column1], [column2],...[columnN])"
- 13.2.7 LOAD DATA INFILE Syntax
- MySQL 파일을 이용하여 테이블에 값 삽입하기
- MySQL database 정보 import하기 mysqlimport
- MySQL: Import CSV, not using LOAD DATA | Die wunderbare Welt von Isotopp
- I loaded 100,000,000 rows into MySQL (fast) - YouTube
- LOAD_FILE() function
- RANK
- replace into & insert into 차이점, 주의할점이 무엇인지 쉽고 간단하게 확인하기
- SELECT
-
SELECT Email From Person GROUP BY Email HAVING COUNT(Id) > 1
-
SELECT Name AS 'Customers' FROM Customers WHERE Id NOT IN (SELECT CustomerId FROM Orders)
-
SELECT class FROM courses GROUP BY class HAVING COUNT(DISTINCT student) >= 5
-
SELECT * FROM cinema WHERE id % 2 = 1 AND description != 'boring' ORDER BY rating DESC
-
age가 '만 xx세'로 되어 있을 때 숫자만 뽑아 그 차이를 구하는 경우
$ mysql -h [x.y.z.w] -u [userid] -p[password] [database] -N -e "SELECT a.keyword, a.iage, b.keyword, b.iage, a.iage - b.iage FROM (SELECT \`key\`,keyword, age, CHAR_LENGTH(age), CONVERT(SUBSTRING(age, 2, CHAR_LENGTH(age)-2), UNSIGNED) iage, represent, family FROM [table] WHERE age IS NOT NULL) as a join (SELECT \`key\`,keyword, age, CHAR_LENGTH(age), CONVERT(SUBSTRING(age, 2, CHAR_LENGTH(age)-2), UNSIGNED) iage, represent, family FROM [table] WHERE age IS NOT NULL) as b on a.\`key\` != b.\`key\`"
-
MySQL IN절을 통한 성능 개선 방법 범위 조건에서는 인덱스 효과를 제대로 보지 못함 -> IN은 기존의 MySQL 이 가지고 있던 범위 조건의 비효율 회피
- practice - create insert recursive union
- SHOW
show [full] processlist
터미널에서 쿼리 전체 보기- Show Comment of Fields FROM Mysql Table
- mysql show 명령어 완벽 정리
UPDATE salary SET sex = CASE sex WHEN 'm' THEN 'f' ELSE 'm' END;
- mysql 실무에 유용한 sql 로직 모음 #01
- mysql 실무에 유용한 sql 로직 모음 #02
- 업그레이드 된 아이템 구하기
-
troubleshooting
- MySQL 에서 한글이 께어질때 수정을 하는 방법 UTF-8사용
- practice - Error: 1366
- practice - Error: 1467
- MySQL error 2006: mysql server has gone away e.g.
--max_allowed_packet=268435456
SHOW VARIABLES LIKE 'max_allowed_packet';
orSELECT @@max_allowed_packet;
set global max_allowed_packet=64*1024*1024;
to set (with privileged account such as root)~/.my.cnf
나/etc/my.cnf
등 여러 개의 cnf file이 있을 수 있으니 적절한 file에서 수정 후 mysql을 재시작(e.g.service mysql restart
)하는 방식으로 해야 할 수도 있음- python code with MySQLdb or mysqlclient;
cursor.execute('SET GLOBAL max_allowed_packet=67108864', ())
root 권한이 필요해서 안될 듯
- FULLTEXT 인덱스와 일반 인덱스 성능 차이
- max_execution_time 설정하기
- Online Alter에도 헛점은 있더구나 – gdb, mysqld-debug 활용 사례
- MySQL online alter부터 CPU 100% 장애까지
- MySQL Lock 상황 문제 해결
- #1071 - Specified key was too long
- Connect to MySQL after hitting ERROR 1040: Too many connections - Percona Database Performance Blog
- MySQL 8 root 비밀번호 분실, 초기화 방법 (DB관리자 필수로 알아둘 내용) How to reset MySQL root password - YouTube
- Access denied for user 'root@'@'localhost' 해결방법 :: oziguyo
-
How MySQL Is Able To Scale To 200 Million QPS - MySQL Cluster
-
- MySQL에서 데이터타입인 JSON과 TEXT 성능 비교
- 데이터베이스에서 JSON을 지원한 뒤로 유용한 기능이지만 언제 JSON을 쓰고 언제 TEXT를 써야 할 지 파악 가능
- 큰 데이터를 기준으로 비교한 결과 COUNT 쿼리는 JSON을 파싱하지 않아서 거의 비슷한 성능
- JSON 내부의 필드로 COUNT 쿼리를 하는 경우는 파싱하느라고 시간이 좀 더 소요
- 대신 데이터를 조회하는 경우는 JSON 처리에 TEXT보다 오래 걸리기 때문에 JSON이 TEXT보다 훨씬 오래 소요
- 대신 JSON은 내부의 특정 필드만 접근하거나 업데이트하는 경우나 특정 JSON 필드를 인덱스로 생성할 때는 그 효과를 볼 수 있음
- MySQL에서 데이터타입인 JSON과 TEXT 성능 비교
-
MySQL performance optimization: 50% more work with 60% less latency variance
-
MySQL Optimizer Error. 옵티마이저 에러 & 힌트 | by Sunguck Lee | 당근마켓 테크 블로그 | May, 2023 | Medium
-
mysql 커버링 인덱스란 무엇인가? | sTricky cover index
-
INSERT INTO list (code, name, address,) SELECT 'ABC', 'ABC name', 'Johannesburg' FROM list WHERE NOT EXISTS( SELECT code, name, address FROM list WHERE code = 'ABC' AND name = 'ABC name' AND address = 'Johannesburg' ) LIMIT 1
-
MySQL: id BETWEEN start AND end Instead of LIMIT start, step For Better Database Performance
-
Perfecting Lambda Architecture with Oracle Data Integrator (and Kafka / MapR Streams)
- MySQL 데이터베이스의 변경 내용을 스트림으로 캡처하기 위해 Oracle Data Integrator, Apache Kafka / MapR Stream를 구성하는 과정
-
Replicating Relational Databases with StreamSets Data Collector
- MySQL 데이터베이스의 변경 내용을 스트림으로 캡처하기 위해 StreamSets을 이용
- StreamSets은 JDBC를 이용하여 폴링 기반의 스트림 데이터 캡처가 가능
- 본문에서 MySQL 데이터베이스의 변경 사항을 캡처하고 HDFS/Hive/Impala로 streaming 하는 과정을 설명
-
부하 분산을 위해 MySQL을 Master/Slave로 이중화를 구성해 본 이야기 | Recoding Life
-
- 2010년 글 memcached 400,000/sec get vs. 100,000/sec select MySQL/InnoDB
- plugin을 통해 750,000/sec으로 성능 향상
-
utf8mb4
-
How to Install Only MySQL Client on CentOS, Redhat, Fedora and Ubuntu
yum install mysql
tried to installmariadb
&mariadb-libs
on Redhat 7.2(CentOS Linux release 7.2.1511 (Core)
)
-
primary key vs foreign key in mysql | Tutorial 8 in hindi - YouTube
-
Difference between Primary key and Unique key - GeeksforGeeks
-
Create foreign key in mysql | Create table with foreign key | Tutorial 9 in hindi - YouTube
-
오픈소스 데이터베이스, 흐르는 은행 데이터에 빨대를 꽂아보다 CDC, Uldraman 울드라맨
-
대용량 테이블 스키마 변경하기 alter table
-
MySQL binlog파서와 memcached plugin의 콜라보레이션! | gywndi's database
-
Streaming MySQL Binlogs to S3 (or Any Object Storage) - Percona Database Performance Blog
-
tcpdump
-
Managing Hierarchical Data in MySQL e.g. 게시판
-
Why SQL is beating NoSQL, and what this means for the future of data
-
MySQL High Availability Framework Explained ScaleGrid라는 MySQL service 회사에서 자사의 기술을 이용해 설명했지만, 일반적인 High Availability를 이해하기 위한 기초로 굉장히 좋은 글
-
Failed to read auto-increment value from storage engine 해결 방법
-
(MySQL) Auto Increment에서 TypeSafe Bulk Insert 진행하기 (feat.EntityQL, JPA)
-
MySQL 트랜잭션 Isolation Level로 인한 장애 사전 예방 법 – gywndi's database
-
Distributed Transactions & Two-phase Commit | by Animesh Gaitonde | Geek Culture | Medium
-
MySQL Gap Lock (두번째 이야기). Why ? | by Sunguck Lee | 당근 테크 블로그 | Oct, 2023 | Medium
-
MySQL 데이터베이스 한번에 끝내기 SQL Full Tutorial Course using MySQL Database
-
Setting up an InnoDB Cluster With a Few Lines of Code - Percona Database Performance Blog
-
How to create a user in MySQL/MariaDB and grant permissions on a specific database
-
Why Uber Engineering Switched from Postgres to MySQL | Uber Engineering Blog
-
이커머스 플랫폼의 주문 DB 마이그레이션 경험기 Oracle to MySQL
-
Replica 에 Write 가 된다고? MySQL Writable Replica 로 데이터 분석용 DB 만들기
-
MySQL의 다양한 실행 프로그램 mysqld_safe, mysql.server, mysqld_multi feat.mysqld
-
MySQL 5.6 EOL is February 2021 !! – lefred's blog: tribulations of a MySQL Evangelist 8.0
-
Upgrading MySQL (Percona Server) from 5.7 to 8.0 | by Flant staff | Flant | Medium
-
18 Things You Can Do to Remove MySQL Bottlenecks Caused by High Traffic (Part One)
-
Need to Connect to a Local MySQL Server? Use Unix Domain Socket!
-
median 값 구하기 SQL MySQL의와 계산의 중간에 간단한 방법
-
MySQL (Percona XtraDB) slave replication crash resilience settings
-
Best Practices for MySQL Backups - Percona Database Performance Blog
-
Charset and Collation Settings Impact on MySQL Performance - Percona Database Performance Blog
-
MySQL Deadlocks Are Our Friends - Percona Database Performance Blog
-
MySQL from a Developers Perspective | Die wunderbare Welt von Isotopp
-
MySQL Transactions - the physical side | Die wunderbare Welt von Isotopp
-
MySQL Challenge: 100k Connections - Percona Database Performance Blog
-
Sometimes they come back: exfiltration through MySQL and CVE-2020-11579 - Shielder
-
MySQL Query Performance Troubleshooting: Resource-Based Approach - Percona Database Performance Blog
-
Please stop using this UPSERT anti-pattern - SQLPerformance.com
-
Building HashTag M : N Relation with Node.js, Sequelize(MySQL) | by Ryan Kim | Oct, 2020 | Medium
-
Blog of (former?) MySQL Entomologist: Linux /proc Filesystem for MySQL DBAs - Part I, Basics
-
How to delete lots of rows from a MySQL database without indefinite locking – Bram.us
-
MySQL/MariaDB에서 유저에게 multiple host를 부여하는 방법 - Nephtyw’S Programming Stash
-
How to Connect A GraphQL API and A MySQL Database in Your GraphQL Layer | StepZen blog
-
MySQL/MariaDB character sets and collations explained – why utf8 is not UTF-8 | Hello DevOps
-
Login y Logout con NodeJS y MySQL usando jsonwebtokens - YouTube
-
Upgrading GitHub.com to MySQL 8.0 - The GitHub Blog
- GitHub.com이 성장하면서 단일 MySQL에서 아키텍처를 발전해 오고 있었는데 1,200개 이상의 MySQL 호스트를 8.0으로 업그레이드한 과정
- SLO에 영향을 주지 않으면서 업그레이드하기 위해 계획, 테스트, 업그레이드에 1년 넘게 소요
- MySQL 5.7의 수명이 거의 종료됨에 따라 8.0 으로 업그레이드 해야 했다.
- GitHub의 MySQL 인프라 구성
- 1,200개 이상의 호스트로 구성되어 있고 Azure와 베어 메탈 호스트의 조합
- 300TB 이상의 데이터를 저장하고 50개 이상의 데이터베이스 클러스터에서 초당 5,500만 건의 쿼리 처리
- 각 클러스터는 primary와 replicas를 이용한 고가용성 구성
- 수평/수직 샤딩을 모두 활용하여 데이터가 파티셔닝
- 대규모 도메인 영역을 위해 수평 샤딩 된 Vitess 클러스터도 존재
- SLO/SLA를 준수하면서 업그레이드해야 하지만 모든 장애를 미리 고려할 수는 없으므로 중단없이 MySQL 5.7로 롤백할 수 있어야 함. 다양한 워크로드가 있으므로 클러스터를 원자단위로 업그레이드 해야하고 혼합 버전을 오랫동안 운영해야 함
- 2022년 7월부터 업그레이드 준비 시작
- MySQL 8.0의 설정값을 결정하기 위해 벤치마크했고 두 버전을 운영해야 했기에 도구와 자동화가 두 버전 모두 처리 필요
- 모든 애플리케이션의 CI에 MySQL 8.0을 추가해서 CI에서 5.7과 8.0을 같이 실행
- 업그레이드 전략
- replicas를 먼저 업그레이드하고 트래픽을 받도록 한 뒤 모니터링하면서 교체해 나가고 5.7은 롤백을 위해 띄워두었지만, 트래픽은 안 가게 함
- Replica 토폴로지를 조정해서 8.0 primary가 5.7 primary를 복제하도록 구성, 8.0 replicas 아래에는 5.7 세트와 8.0 세트로 구성해서 8.0만 트래픽을 처리하도록 함
- Primary를 직접 업그레이드하지 않고 페일오버를 통해 MySQL 8.0 Replica가 Primary로 승격되도록 함
- 백업이나 비 프로덕션을 위한 MySQL도 모두 업그레이드
- 롤백할 필요가 없다는 걸 확인 후 5.7 서버 모두 제거
- GitHub Upgrades its MySQL Infrastructure from v5.7 to 8.0 - InfoQ
-
- MySQL client CLI가 다른 데이터베이스에 비해 기능이 부족해서 CLI를 직접 수정해서 편의 기능을 추가하는 방법 설명
- 프롬프트에 서버 정보 등을 표시하거나 PostgreSQL처럼 자주 쓰는 명령어의 단축 명령어를 추가해서
\\d
를 입력하면SHOW DATABSAES;
실행 가능 - 미리 파일에 저장해둔 SQL을 실행하거나 회사 정책에 따른 경고문을 표시할 수 있도록 수정한 client 코드 같이 제공
-
MySQL table lock / table mutex / 송장번호 가상계번호 발급 / 번호 중복 발급 방지 방법
-
How to Make a Simple CRUD Application using ReactJS, NodeJS and MySQL
-
입만 가지고 떠드는 개발자가 ChatGPT에게 외주줘서 만든 Mysql 복제지연 모니터링
-
MySQL 접속 장애 예방 및 해결 방법, How to prevent and solve MySQL connection failure - YouTube
-
MySQL DECIMAL vs DOUBLE(FLOAT): 뭘 선택해야 할까?(Feat. 고정 소수점 vs 부동 소수점)
-
MAMP의 MySQL 포트가 3306이 아닌데도 localhost라고만 적었을 때 접속이 되는 이유 – 형우의 웹개발
- MySQL 백업 mysqldump 사용법 정리
- 장애와 관련된 XtraBackup 적용기 mysqldump, mysqlbinlog, XtraBackup
- The MySQL Clone Wars: Plugin vs. Percona XtraBackup - Percona Database Performance Blog
- How to Migrate MySQL to AWS RDS Using mysqldump and DMS | by Phoebe Baek | Cloud Villains | Sep, 2022 | Medium
- NodeJS로 mysqldump하고 진행 상황 확인하기 · 감자도스
- mysqldump 표준 출력을 곧장 gpg 암호화해 파일로 저장하는 bash 명령 | 웹으로 말하기
- MySQL DB 백업 복원 mysqldump 명령어
- Xtrabackup으로 DB 복구하기
- MySQL/MariaDB의 inet_aton/ntoa 함수를 대체할 JPA 컨버터
- New Logical Backup and Restore Utilities in the MySQL Shell
- ADT - Almighty Data Trasmitter
- awesome-mysql-performance: 🔥 A curated list of awesome links related to MySQL / MariaDB / Percona performance tuning
- binlog2sql: Binlog to Raw SQL Conversion and Point In Time Recovery - Percona Database Performance Blog
- canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件
- Directus - Free and Open-Source MySQL Database GUI
- DocStore: Document Database for MySQL at Facebook
- dolphie: An intuitive feature-rich top tool for monitoring MySQL in real time
- fluent-plugin-mysql-replicator
- Galera Cluster
- Maxwell's daemon, an application that reads MySQL binlogs and writes row updates to Kafka, Kinesis, RabbitMQ, Google Cloud Pub/Sub, or Redis as JSON
- 실시간에 가깝게 mysql 데이터를 가져옴. 텅스텐CDC에 비해 안정적이며, 필요한 테이블/컬럼 단위로 필터링 처리 가능
- MySQL CDC, Streaming Binary Logs and Asynchronous Triggers
- Herb: Multi-DC Replication Engine for Uber’s Schemaless Datastore
- Uber가 2014년부터 진행했던 프로젝
- MySQL로 Schemaless를 구현한 사례, Herb라는 센터간 복제 기술로 고도화 실현
- Designing Schemaless, Uber Engineering’s Scalable Datastore Using MySQL
- The Architecture of Schemaless, Uber Engineering’s Trip Datastore Using MySQL
- Using Triggers On Schemaless, Uber Engineering’s Datastore Using MySQL
- mycli - Mycli is a command line interface for MySQL, MariaDB, and Percona with auto-completion and syntax highlighting
- mysos - MySQL on Mesos (moving to the Apache Incubator)
- mysql-5.6 - Facebook's branch of the Oracle MySQL v5.6 database. This includes MyRocks
- MyRocks: A space- and write-optimized MySQL database
- How Facebook Migrated a Database From InnoDB to MyRocks
- 페이스북은 InnoDB를 MyRocks로 스토리지 엔진을 전환하여 스토리지 사용량을 절반으로 감소
- InnoDB를 MyRocks로 마이그레이션하는 방법을 간단히 설명
- Migrating Messenger storage to optimize performance facebook messenger storage, migration from HBase to MyRocks
- How Facebook Accelerates SQL at Extreme Scale
- mysqlsh
- MySQLTuner-perl
- OSC - Facebook releases a new OnlineSchemaChange tool written in Python
- Planche - Javascript MySQL GUI Client Tool
- PlanetScale: The world’s most advanced database platform
- python-mysql-replication
- Sysbench How to Install and Use Sysbench - mortensi
- TiDB is a distributed SQL database compatible with MySQL protocol
- Yahoo MySQL Performance Analyzer
- vitess - A database clustering system for horizontal scaling of MySQL
- Sharding Pinterest: How we scaled our MySQL fleet
- MySQL Sharding에 관한 자료들
- Apache ShardingSphere를 이용한 DB Sharding
- LINE Manga 데이터베이스 샤딩 – 서버 엔지니어 편
- LINE Manga 데이터베이스 샤딩 – 데이터베이스 엔지니어 편
- ADT 활용 예제1: MySQL Shard 데이터 재분배
- The Next Evolution of the Database Sharding Architecture
- kingshard - A high-performance MySQL proxy
- proxysql.com
- 오라클 중복레코드삭제 다양한 방법들 - YouTube
- Oracle | 오라클 클라우드 ATP Database 생성과 DBeaver로 연결하기
- 10 Best Online Courses to Learn Oracle and PL/SQL for Beginners | HackerNoon
- Is Null, Not Null 왜 사용할까요? 당신의 조건문은 Null에 안전한가요?
- examples
- Pro*C
- SQL Query Formatting Tools Used At Percona
- The Steps Involved in Creating a Percona Product Release - Percona Database Performance Blog
- An Overview of Sharding in PostgreSQL and How it Relates to MongoDB's - Percona Database Performance Blog
- PMM
- pstress - Database concurrency and crash recovery testing tool
- pt-online-schema-change
- 한국 PostgreSQL
- Postgres Guide
- PostgreSQL Tutorial
- practice - unique index and null
- Scaling out PostgreSQL for CloudFlare Analytics using CitusDB
- Postgres CLI with autocompletion and syntax highlighting
- Managing big enough data in postgres
- Bottled Water: Real-time integration of PostgreSQL and Kafka
- Compressing PostgreSQL JSONB data 12x using cstore_fdw
- How to update objects inside JSONB arrays with PostgreSQL
- Using PostgreSQL JSONB with Go
- Migrating to JSON in PostgreSQL
- Unleash the Power of Storing JSON in Postgres
- Cut Out the Middle Tier: Generating JSON Directly from Postgres
- PostgreSQL vs. MS SQL Server
- A simple relational data access tool for NodeJS
- A proof of concept MongoDB clone built on Postgres
- Zero-downtime Postgres migrations - the hard parts
- Move fast and migrate things: how we automated migrations in Postgres | by Vineet Gopal | Benchling Engineering
- Upsert Lands in PostgreSQL 9.5 – a First Look
- Postgres UPSERT ON DUPLICATE and how other databases implement UPSERT
- Postgres Job Queues & Failure By MVCC
- PostgreSQL: the good, the bad, and the ugly
- Postgres pushes past MySQL in developer hearts
- Stopping Time In PostgreSQL
- POSTGIS 2.2 LEVERAGING POWER OF POSTGRESQL 9.5
- SQL MERGE is quite distinct from UPSERT
- Watch "Fashion Is Hard. PostgreSQL Is Easy"
- Discovering the Computer Science Behind Postgres Indexes
- Introducing HypoPG, hypothetical indexes for PostgreSQL
- How to scale PostgreSQL on Amazon RDS using pg_shard
- High Availability for PostgreSQL, Batteries Not Included
- High availability and scalable reads in PostgreSQL
- Making Postgres and Elasticsearch work together like it's 2015
- Documenting Your PostgreSQL Database
- Transaction ID Wraparound in Postgres
- Making Postgres Bloom
- POSTGRESQL: A FULL TEXT SEARCH ENGINE - PART 1
- Full-Text Search Battle: PostgreSQL vs Elasticsearch | sudo README
- Postgres Full-Text Search: A Search Engine in a Database
- PostgreSQL 9.5 New Features With Examples
- "Big data" features coming in PostgreSQL 9.5
- Scaling out PostgreSQL at CloudFlare with CitusDB
- Aquameta Layer 0: meta - Writable System Catalog for PostgreSQL
- PostgreSQL Magic
- PostgreSQL, pg_shard, and what we learned from our failures
- A few PostgreSQL tricks
- PostgreSQL replication with Londiste from Skytools 3
- Multi-Master Replication Solutions for PostgreSQL
- EXPLAIN - explained
- PostgreSQL EXPLAIN — pgMustard
- EXPLAIN ANALYZE in PostgreSQL and how to interpret it - Cybertec
- PostgreSQL Foreign Data Wrappers
- PostgreSQL Monitoring Cheatsheet
- PostgreSQL - A Platform for Multiple Sources Data Retrieval
- 다우기술, 포스트그레스 한국어 메뉴얼 공식 오픈
- PostgreSQL 업그레이드 이야기
- Getting PostgreSQL transactions under control with SQLAlchemy
- MySQL vs PostgreSQL - Why you shouldn't use MySQL
- PostgreSQL Schema를 MySQL로 마이그레이션 시켜보자
- PostgreSQL 9.6 Parallel Query & FDW
- Parallel queries in PostgreSQL - Percona Database Performance Blog
- PostgreSQL Exercises
- PostgreSQL에 실시간 기능 도입하기
- The Night the PostgreSQL IDs Ran Out
- 구식 포스트그레SQL이 다시 유행하는 이유
- Modern, native tool for relational database
- PostgreSQL 11 – Server-side Procedures
- PostgreSQL 파티션 테이블
- Five Things You Didn’t Know About PostgreSQL
- How to scale PostgreSQL 10 using table inheritance and declarative partitioning
- Postgres as the Substructure for IoT and the Next Wave of Computing
- PostgreSQL 11 Partitioning Improvements PostgreSQL 11에서 파티셔닝에 관련하여 향상된 기능 소개
- How to build a PostgreSQL database to store tweets - Learning how to stream from Twitter API
- Bye bye Mongo, Hello Postgres
- Guardian에서 MongoDB에서 Postgres로 마이그레이션한 스토리
- 데이터베이스 API Call을 복제하여 구 개의 데이터베이스서 실행하고 로깅을 하는 방법을 포함하여 데이터베이스 롤아웃 및 마이그레이션 작업 과정
- The Internals of PostgreSQL for database administrators and system developers
- Lessons learned scaling PostgreSQL database to 1.2bn records/month
- Parallelism in PostgreSQL
- Postgres Handles More Than You Think
- NoSQL과RDBMS 중 적합한 데이터베이스 선택하기(feat.인스타그램DB)
- Comparison of JOINS: MongoDB vs. PostgreSQL
- Oracle vs PostgreSQL: First Glance
- PostgreSQL vs. Oracle: Difference in Costs, Ease of Use & Functionality | by Kristi Anderson | Jul, 2020 | Medium
- How to Install Postgres 12
- 윈도우에 PostgreSQL 설치하기 - 로스카츠의 AI 머신러닝
- A multi-node, elastic, petabyte scale, time-series database on Postgres for free (and more ways we are investing in our community)
- How one word in PostgreSQL unlocked a 9x performance improvement
- How to Scale Postgres - Automation, Tuning & Sharding - Speaker Deck
- Herding elephants: Lessons learned from sharding Postgres at Notion
- Types of Indexes in PostgreSQL - Highgo Software Inc
- B-tree indexes - learn more about the heart of PostgreSQL - YouTube
- Why We Switched From MongoDB to PostgresSQL
- PSQL TIMESTAMP/AT TIME ZONE 바로 알기 · Billo Park
- psql command line tutorial and cheat sheet | postgres
- Handling NULL Values in PostgreSQL - Percona Database Performance Blog
- PostgreSQL의 슬로우 쿼리에 대처하기 | Hyperconnect Tech Blog
- Why PostgreSQL WAL Archival is Slow - Percona Database Performance Blog
- Lessons Learned from Running Postgres 13: Better Performance, Monitoring & More
- Mastering PostgreSQL Administration
- PostgreSQL 13 Features Distilled. Index optimization, incremental… | by Kovid Rathee | Sep, 2020 | Towards Data Science
- Improving Postgres Connection Scalability: Snapshots - Microsoft Tech Community
- Postgres Observability
- Stored Procedures as a backend. or “How we got rid of Django and whole… | by Oleg Zech | Oct, 2020 | Medium
- BLOB cleanup in PostgreSQL - CYBERTEC | Data Science & PostgreSQL
- PostgreSQL Database Security: What You Need To Know - Percona Database Performance Blog
- Removing PostgreSQL Bottlenecks Caused by High Traffic - Percona Database Performance Blog
- Five Easy to Miss PostgreSQL Query Performance Bottlenecks
- Migrating From Oracle to PostgreSQL - What You Should Know | Severalnines
- A Complete Guide to SQL Triggers in PostgreSQL - DB Tracking Example
- Talking to Postgres Through Java 16 Unix-Domain Socket Channels - Gunnar Morling
- Role of Foreign Data Wrappers in Migrations to PostgreSQL
- Change Data Capture in Postgres With Debezium
- Postgres regex search over 10,000 GitHub repositories (using only a Macbook)
- Faster data migrations in Postgres
- PostgreSQL on ARM-based AWS EC2 Instances: Is It Any Good? - Percona Database Performance Blog
- PostgreSQL: Asynchronous and "direct" IO support for PostgreSQL
- PostgreSQL 데이터 Client에서 KST로 확인하기 (feat. DataGrip)
- Setting up Streaming Replication in PostgreSQL 13 and Streaming Replication Internals - MigOps
- BRIN Index for PostgreSQL: Don't Forget the Benefits - Percona Database Performance Blog
- 10 Things I Hate About PostgreSQL | by Rick Branson | Medium
- PostgreSQL Security Hardening | Teleport
- PostgreSQL RDS Slow 쿼리 Slack으로 알람 보내기
- Using PostgreSQL as a Data Warehouse
- Mac에 PostgreSQL없이 PSQL만 설치하기
- large csv to postgresql 대용량 csv를 입력하는 예(문제가 있음)
- An early look at Postgres 14: Performance and Monitoring Improvements
- Hierarchical Structures in PostgreSQL
- Globally Distributed Postgres · Fly
- Let's build a distributed Postgres proof of concept | notes.eatonphil.com
- PostgreSQL, Memory and the Cloud™ · Alexander Sosna
- PostgreSQL에서 Order By가 선적용되는 슬로우 쿼리 해결책
- Five Things You Didn't Know About PostgreSQL | Kevin's Blog
- PostgreSQL 서버 관리자 지침서
- PostgreSQL 14 on Kubernetes (with examples!)
- Announcing Open Source Babelfish for PostgreSQL: An Accelerator for SQL Server Migration · Babelfish
- AWS Announces the General Availability and Open Sourcing of Babelfish for PostgreSQL
- Bringing Kafka based architecture to the next level using simple PostgreSQL tables | by Sixfold Tech Blog | Oct, 2021 | Medium
- 엔터프라이즈DB, ‘포스트그레SQL 14’ 발표··· "하이엔드 워크로드 지원" - CIO Korea
- Lesser Known PostgreSQL Features | Haki Benita
- Postgres HA: roles are dynamic
- Postgres is a great pub/sub & job server
- 여러컬럼으로 Join 맺어야할 경우의 인덱스
- 신입 개발자의 인덱스 장애 회고담 | Onepredict Engineering
- PostgreSQL (Aurora) 10 vs 11 버전 성능 비교
- PostgreSQL 11 에서의 add column not null & default 성능 개선
- NodeJS 와 PostgreSQL Query Timeout
- NOT IN 쿼리 성능 개선하기 (PostgreSQL)
- NodeJS 와 PostgreSQL Connection Pool
- Free Postgres Databases · Fly
- Five Tips For a Healthier Postgres Database in the New Year
- Slow Query 문제
- The Internals of PostgreSQL : Introduction
- How Postgres Stores Rows - Ketan Singh
- How we optimized PostgreSQL queries 100x | by Vadim Markovtsev | Mar, 2022 | Towards Data Science
- blog.md
- Transactional DDL, Locking, Table Operations, Column Operations, Index Operations, Constraints, Enum Types, Bonus: Library for Ruby on Rails
- Postgres everywhere | InfoWorld
- Faster Geospatial Enrichment
- How To Benchmark PostgreSQL Queries Well
- Speeding up sort performance in Postgres 15
- Postgres Handles More Than You Think
- PostgreSQL 14 Internals : Postgres Professional
- Postgres 15 improves UNIQUE and NULL - Blog @ RustProof Labs
- Money operations with Node.js and PostgreSQL | by Alex Vasilyev | Jul, 2022 | Medium
- Postgres Tutorials | Crunchy Data
- Multi-tenant application architecture with Node.js — Express, and PostgreSQL | by Larbi Sahli | Jul, 2022 | Medium
- Postgres System Columns Explained (ctid, xmin,xmax) - YouTube
- Postgres Architecture Explained - YouTube
- Open sourcing our fork of PgBouncer
- Just Use Postgres for Everything | Amazing CTO
- PostgreSQL14 Memoize 성능 비교 (feat. 13 vs 14 Nested Loop)
- PostgreSQL 소개 및 설정 방법 (Nest.js 기준) : 네이버 블로그
- 20x faster than pgvector: introducing pg_embedding extension for vector search in Postgres and LangChain - Neon
- Why we replaced Pinecone with PGVector | by Jeffrey Ip | Nov, 2023 | Medium
- LLM 평가 인프라를 만드는 ConfidentAI에서 벡터 데이터베이스인 Pinecone을 쓰다가 PostgreSQL에서 벡터 검색을 지원하는 PGVector로 갈아탄 이유 설명
- Pinecon은 PoC할 때는 편하지만 데이터 동기화 문제와 벡터랑 용량 제한으로 결국 확장성에 문제 발생
- PGVector의 경우 HNWS 도입으로 성능이 좋아져서 Pinecone 대체 가능
- PostgreSQL 11 에서의 add column not null & default 성능 개선
- postgres json 값 가져오기 방법으로 case 절을 리팩토링 해 봅시다. - Codingdog Blog
- PostgreSQL 모든 View 의 접근 기록 테이블에 적재하기 (애플리케이션 변경 없이)
- How Cloudflare Was Able to Support 55 Million Requests per Second With Only 15 Postgres Clusters
- Postgres is Enough
- Wait... PostgreSQL can do WHAT? - YouTube
- VidiGo Wait... PostgreSQL can do WHAT?
-
- PostgreSQL의 객체 관계형 데이터베이스로서의 특징
- Postgresql은 객체 지향 개념과 복잡한 데이터 구조를 관계형 데이터베이스 디자인과 결합하여 다양한 네이티브 데이터 타입과 사용자 정의 타입을 지원
- 게임 캐릭터와 같은 복잡한 데이터 구조를 저장하고 쿼리하는 데 필요한 기능 제공
- 테이블 상속과 저장 프로시저를 포함한 객체 지향 프로그래밍의 핵심 개념을 구현하여 백엔드 애플리케이션으로부터 데이터 로직을 분리 가능
-
- PostgreSQL 확장성과 백엔드 스택 대체 가능성
- Postgresql의 확장성 덕분에 캐싱, 메시지 큐, nosql 데이터베이스 등 백엔드 스택의 다양한 기술 대체 가능
- Json 웹 토큰 생성, html 랜더링 등 다양한 작업을 위한 postgresql 확장 기능을 사용하여 인프라를 단순화, 유지 보수 용이
- Rest api와 graphql 쿼리를 포함하여 거의 모든 백엔드 요구 사항을 충족시킬 수 있는 강력하고 신뢰할 수 있는 플랫폼으로서의 역할
-
- 잠깐만요... PostgreSQL은 무엇을 할 수 있나요? | 완벽한 영상요약, 릴리스에이아이 | Lilys AI
- 3.💻포스트그레SQL: 객체-관계형 데이터베이스 기능
- 포스트그레SQL은 객체-관계형 데이터베이스로, 객체지향 개념과 관계형 데이터베이스 디자인 융합
- 포스트그레SQL은 다양한 데이터 유형을 지원, 특히 날짜/시간, 네트워크 주소, 지오메트리 유형을 기본 제공
- 또한 사용자 정의 유형을 정의하고 시스템에 내장된 것처럼 사용할 수 있어 효율적이며 유연한 데이터 관리가 가능
- 예를 들어, 롤플레잉 게임의 캐릭터 데이터를 저장하기 위해 사용자 정의 유형을 만들어 테이블에 활용 가능
- 5.💻PostgreSQL의 프로시저와 패키지로 코드 실행이 가능함.
- 객체지향 프로그래밍은 코드와 데이터를 함께 묶는 것이라는 점을 간과해서는 안 됨
- PostgreSQL은 코드를 데이터베이스에서 실행할 때 경쟁 상대보다 더 많은 기능 제공
- 저장 프로시저에서 지원되는 프로그래밍 언어 목록을 확인하고 코드를 직접 실행하기 위해 언어 핸들러 활성화 필요
- 또한 이를 위해 패키지 매니저가 필요한데, PostgreSQL 확장을 위한 패키지 매니저 존재. 시작 프로시저의 코드는 이미 테스트 데이터를 삽입
- 6.💻PostgreSQL 기능과 저장 프로시저, 데이터베이스를 백엔드 응용프로그램에서 자유롭게 활용
- PostgreSQL의 객체지향 기능과 저장 프로시저 덕분에 데이터베이스는 단순한 저장소가 아니라 백엔드 응용프로그램을 데이터 로직으로부터 해방 가능
- 유저 관리와 같은 데이터 로직이 Posix 확장성의 도움으로 완전히 데이터베이스 내에서 자체 포함 가능
- 해시 비밀번호 생성, JSON 웹 토큰, QR 코드 생성, 개인 데이터 익명화, 템플릿에서 HTML 렌더링 등 가능
- PostgreSQL에 대해 배울수록 확장점이 어디에서나 있어 실제로 전체 백엔드로 대체할 수 있는 특징
- PostgreSQL로 키-값 저장소를 쉽게 구축할 수 있으며, Redis와 같이 만료되는 값들을 가질 수 있도록 PG 크롬 익스텐션 설치
- 포스티크, 데이터베이스에서 브로커 소프트웨어인 RabbitMQ를 단순하게 대체함으로써 사내 백엔드 작업 큐를 향상
- 7.💻 MongoDB와 NoSQL 데이터베이스의 장점 및 PostgreSQL의 활용
- PostgreSQL은 JSON 데이터 유형을 네이티브로 지원하며 SQL과 유사한 쿼리 언어 지원
- NoSQL 데이터베이스는 SQL과 유사한 언어로 적응, Guardian과 같은 기업이 JSON 문서를 PostgreSQL로 옮길 경우
- 디스크 공간이 더 많이 필요, 다른 기능들과의 통합 및 인프라 유지보수가 감소
- PostgreSQL은 Apache AG 프로젝트를 이용해 그래프 데이터베이스로 변환 가능
- 시계열 데이터에는 TimescaleDB를 활용하여 IoT 기기 메트릭을 모니터링하거나 사용자 활동 로그를 분석 가능
- 또한 TimescaleDB는 Grafana와 원활하게 작동한다.
- 8.💻텍스트 데이터 처리: Elasticsearch vs PostgreSQL Full-Text Search
- 텍스트 데이터 검색 시 'like' 문이 아닌 검색 엔진 사용 필요
- Elasticsearch는 불용어, 어간 추출 및 검색 결과 순위 매기기를 통해 유사 단어의 결과를 찾아 정렬
- 일반적 백엔드 설정에서는 Elasticsearch가 이 기능을 담당
- Elasticsearch는 다른 곳에서 데이터를 지속적으로 색인하고, PostgreSQL 데이터베이스와 통합하여 동일한 기능 제공 가능
- PostgreSQL의 전체 텍스트 검색 기능을 통합하면 데이터 동기화가 필요 없음. 항상 최신 색인을 제공, 인프라가 단순화, 유지보수가 더 용이
- 대부분의 프로젝트에서 Elasticsearch 클러스터를 실행하는 것은 과다하다고 생각하는 경우가 많음
- 텍스트 데이터 검색 시 'like' 문이 아닌 검색 엔진 사용 필요
- 9.💻PostgreSQL로 데이터 검색 및 머신러닝 모델 실행, 백엔드 단순화
- 텍스트 관련한 LLMs(대형 언어 모델)을 이용하여 open source LLM 모델을 쿼리하고, 데이터베이스 쪽에서 실행되는 챗봇을 상상
- PostgreSQL을 사용하면 데이터베이스 테이블 생성, PostgreSQL이 역할 기반의 액세스 제어 처리, 저장 프로시저를 사용하여 단순 CRUD 이상 제공
- PostgreSQL은 메시징, 메시지 대기열, 키-값 저장소, 객체 그래프 및 시계열 데이터 저장소, 전체 텍스트 검색 및 머신러닝 기능을 제공
- 또한, PostgreSQL에서는 저장 프로시저를 단위 테스트 가능, 이를 통해 웹 프레임워크와 같은 방식으로 코드를 테스트 가능
- 10.💻PostgreSQL과 GraphQL이 함께 동작하여 백엔드 인프라를 간소화
- PostgreSQL에서는 PG GraphQL 확장 기능으로 데이터와 GraphQL 엔티티 간 투명한 매핑을 제공하여 단일 함수 호출로 GraphQL 쿼리를 실행 가능
- PG GraphQL을 PostgREST와 결합하면 HTTP를 통해 GraphQL 쿼리를 실행 가능
- Omni 프로젝트는 컨테이너 관리, S3 파일 저장 및 결제 지원까지 모두 PostgreSQL 내에서 관리하는 아이디어 추구
- PostgreSQL은 ORM을 사용하여 백엔드 인프라를 더 간단하게 유지하고 이해하기 쉽게 만들거나 기업급 신뢰성 보장
- 다른 데이터베이스나 검색 클러스터 대신 PostgreSQL로 긴 여정을 함께하며 프로젝트에 장기적인 혜택을 창출 가능
- 3.💻포스트그레SQL: 객체-관계형 데이터베이스 기능
- VidiGo Wait... PostgreSQL can do WHAT?
- EC2에 PostgreSQL 설치 🐘 - YouTube
- Vacuum
- 베큠(VACUUM)을 실행해야되는 이유 그리고 성능 향상
- Visualizing PostgreSQL Vacuum Progress
- Speeding up recovery and VACUUM in Postgres 14 - Microsoft Tech Community
- PostgreSQL 튜닝 - Autovacuum 최적화에 대하여
- PostgreSQL Autovacuum 장애 대응기 (1). 29CM에서는 Amazon RDS for PostgreSQL를 사용하고… | by Jimin Lee | 29CM 기술블로그 | May, 2021 | Medium
- PostgreSQL Vacuum에 대한 거의 모든 것 | 우아한형제들 기술블로그
- How to Control Autovacuum Frequency in PostgreSQL - DEV Community
- Agg: Parallel aggregations for PostgreSQL
- AlloyDB versus PostgreSQL: a performance review - Vettabase
- What is AlloyDB? - YouTube
- asyncpg -- A fast PostgreSQL Database Client Library for Python/asyncio
- Bottled Water: Real-time integration of PostgreSQL and Kafka
- dms-psql-post-data: Ultimate Script to complete PostgreSQL-to-PostgreSQL Migration right after AWS DMS task done
- EdgeDB
- EdgeDB—The next generation database
- We Can Do Better Than SQL
- EdgeDB - 개발자를 위한 차세대 오픈소스 ORDB | GeekNews
- My experience with EdgeDB · divan's blog
- EdgeDB는 Postures 위에 만들어진 관계형/그래프 데이터베이스
- SQL이 없고 EdgeQL이라는 자체 쿼리 언어가 있는데 이게 엄청 좋아서 다시는 SQL로 돌아가지 않을 생각
- 요즘 추세대로 하나의 바이너리로 모든 걸 할 수 있어서 서버 설치, 데이터베이스 관리, 마이그레이션 모두 가능
- 1년 전부터 사용하기 시작했는데 지금은 회사의 프로젝트도 EdgeDB로 바꾸고 있고 대부분의 경우 "It just works"를 경험, 다양한 기능을 소개
- EdgeDB 1년 사용 후기 - "다시는 SQL로 돌아가지 않을꺼야" | GeekNews
- All You Need to Know about EdgeDB | AppSignal Blog
- Edge DB - 엘키의 주절 주절
- ElephantSQL - PostgreSQL as a Service
- Envelope - Introducing a new paradigm in web application development written specifically for PostgreSQL developers!
- Graphile | Powerful, Extensible and Performant GraphQL APIs Rapidly
- GraphpostgresQL
- Home - Full text search in milliseconds with PostgreSQL
- GraphpostgresQL
- Home - Full text search in milliseconds with PostgreSQL
- Hydra / Query Postgres, Route to any Database
- Kexi - an open source visual database applications creator, a long-awaited competitor for programs like MS Access or Filemaker
- krahodb: An open-source database designed to support multi-master replication. It is designed on the top of PostgreSQL, providing bidirectional replication, as well as row filtering
- Message DB - Microservice Native Event Store and Message Store for Postgres
- meteor-pg - Reactive PostgreSQL for Meteor
- metricflow: MetricFlow allows you to define, build, and maintain metrics in code
- neon: The serverless open source alternative to AWS Aurora Postgres
- odyssey: Scalable PostgreSQL connection pooler
- Ora2Pg : Migrates Oracle to PostgreSQL
- orioledb: OrioleDB – building a modern cloud-native storage engine (... and solving some PostgreSQL wicked problems) 🇺🇦
- pg2ch: Data streaming from postgresql to clickhouse via logical replication mechanism
- pgagroal - a high-performance protocol-native connection pool for PostgreSQL
- pgBackRest - The Best Postgres Backup Tool with a very active community
- pgcat - Enhanced PostgreSQL logical replication
- pgcat: Meow. PgBouncer rewritten in Rust, with sharding, load balancing and failover support
- pgcli - Postgres CLI with autocompletion and syntax highlighting
- pg_flame - A flamegraph generator for Postgres EXPLAIN ANALYZE output
- pgfutter - Import CSV and JSON into PostgreSQL the easy way
- pg_graphql - PostgreSQL용 GraphQL 확장 | GeekNews
- pglite: Lightweight Postgres packaged as WASM into a TypeScript library for the browser, Node.js, Bun and Deno
- pgmemcache is a set of PostgreSQL user-defined functions that provide an interface to memcached
- pg-migrator - PostgreSQL Migration Tool
- pg-osc: Zero downtime schema changes in PostgreSQL
- pg-shortkey: YouTube-like Short IDs as Postgres Primary Keys
- pgsql: Support GROUPING SETS, CUBE and ROLLUP
- pgsql: Create an infrastructure for parallel computation in PostgreSQL
- pg_stat_monitor: PostgreSQL Statistics Collector
- PG-Strom is an extension of PostgreSQL, works as custom-scan provider
- pgTAP - a suite of database functions that make it easy to write TAP-emitting unit tests in psql scripts or xUnit-style test functions
- PolarDB-for-PostgreSQL
- postgres: Unmodified Postgres with some useful plugins
- Postgres.app – the easiest way to get started with PostgreSQL on the Mac
- PostgresqlCO.NF: PostgreSQL configuration for humans
- PostgREST: REST API for any Postgres database
- Postico – a modern PostgreSQL client for the Mac
- postlite: Postgres wire compatible SQLite proxy
- Psycopg - PostgreSQL driver for Python
- realtime: Listen to your to PostgreSQL database in realtime via websockets. Built with Elixir
- reshape: An easy-to-use, zero-downtime schema migration tool for Postgres
- Slinky - The easiest way to query your PostgreSQL data
- sql_firewall - SQL Firewall Extension for PostgreSQL
- stolon - PostgreSQL cloud native HA replication manager
- teable: ✨ A Super fast, Real-time, Professional, Developer friendly, No code database
- ToroDB: A MongoDB-compatible, document-oriented database on top of PostgreSQL
- transqlate - 모든 SQL을 PostgreSQL Dialect로 변환(Transp | GeekNews
- Vitesse X - A Speed Extension for PostgreSQL
- Yoke - a Postgres redundancy/auto-failover solution that provides a high-availability PostgreSQL cluster that's simple to manage
- Why the SQL Standard does not need another way to do GROUP BY
- sql group by 응용 시험에 최소 1번 이상 통과한 사람과 그렇지 않은 사람 골라내기
- 최대값 및 최소값 조회 (MAX, MIN 함수 대체방법)
- MySQL에서 'a' = 'a '가 true로 평가된다?
- sql 기본 강좌# 개념 파악 및 공부법 안내
- sql 기본 강의 # select를 잘 이용하는 방법(1), 2편 -sTricky
- sql 기본 강의 # select를 잘 이용하는 방법(1), 3편 -sTricky
- sql 공부 강의 # 단일행 함수 잘 사용 하기(문자 함수) 4편 -sTricky
- sql 공부 강의 # 단일행 함수 잘 사용 하기(숫자 함수) 5편 -sTricky
- sql 공부 강의 # 단일행 함수 잘 사용 하기(날짜 함수) 6편 -sTricky
- sql 독학 강의 # 단일행 함수 잘 사용 하기(형 변환 함수) 7편 -sTricky
- sql 독학 강의 # 단일행 함수 잘 사용 하기(일반 함수) 8편 -sTricky
- sql 독학 강의 # 복수 행(window) 함수 잘 사용 하기(기본 사용법) 9편 -sTricky
- sql 독학 강의 # 복수 행(window) 함수 잘 사용 하기(group by) 10편 -sTricky
- sql 독학 강의 # mysql join (정의 및 종류) 11편 -sTricky
- sql 독학 강의 # Cartesian Product 카티션 곱 ansi SQL 문법 12편 -sTricky
- sql 독학 강의 # inner join with ansi SQL 13편 -sTricky
- sql 독학 강의 # 비등가 join with ansi SQL 14편 -sTricky
- sql 독학 강의 # outer join SQL 15편 -sTricky
- sql 독학 강의 # sub query 서브 쿼리 16편 -sTricky
- mysql update sql 독학 강의#17편 -sTricky
- mysql update sql 독학 강의#18편 -sTricky
- mysql delete sql 독학 강의#19편 -sTricky
- insert into on duplicate key MySQL merge SQL 독학 강의#20편 -sTricky
- MySQL DDL문 완전정복 SQL 독학 강의#21편 -sTricky
- MySQL data dictionary SQL 독학 강의#22편
- mysql 제약조건 알아보기 SQL 독학 강의#23편
- index 의 중요성과 이해 SQL 독학 강의#24편
- view 뷰에 대한 이해 SQL 독학 강의#25편
- 주문 고객 상품 테스트용 데이터 생성 및 다운로드
- 프로그래머스 SQL 코딩 테스트 select 문제 풀이
- 프로그래머스 SQL 코딩 테스트 select 문제 풀이 #2
- 프로그래머스 SQL 답 SUM, MAX, MIN 문제 풀이 #03
- SQL Correlated Subqueries - GeeksforGeeks
- Rain in Australia 캐글 날씨 데이터셋 다운로드 받아 mysql에 넣는 방법 DDL Datagrip
- 초보자도 준비하는 SQL 코딩 테스트 시리즈를 마치며...
- How to create a 1M record table with a single query | Anton Zhiyanov
with recursive
- (4) Asheq Reza's answer to What are some useful SQL queries you've found? - Quora
- Best practices for writing SQL queries
- Master the SQL QUALIFY Statement: A Comprehensive Tutorial | DataCamp
- Row number, rank 등으로 필터링 하기 위해 sub query 를 만들었던 부분에서 훨씬 간편하게 사용 가능할 것으로 예상
- SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,
- 다양한 조인(JOIN) 기법
- What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?
- All about SQL JOINs
- MSSQL JOIN의 종류설명 및 사용법 & 예제
- SQL Join
- Join 에 관해서 정리해 보겠습니다
- SQL의 핵심, 다양한 종류의 조인 : 네이버 블로그
- Say NO to Venn Diagrams When Explaining JOINs – Java, SQL and jOOQ
- What is Sharding?
- Database의 샤딩(Sharding)이란?
- NHN의 안과 밖: Sharding Platform Spock Proxy, Gizzard, Cubrid Shard 비교
- 샤딩은 쉬워요 샤딩하세요 실제로는 어렵다는 이야기
- Sharding(샤딩)
- 샤딩과 파티셔닝의 차이점
- How we scaled Freshdesk (Part II) – The Sharding and Rebalancing techniques we used
- Sharding: How Many Shards Are Safe?
- DB분산처리를 위한 sharding - 우아한형제들 기술 블로그
- Database의 샤딩(Sharding)이란?
- Understanding Database Sharding | DigitalOcean
- 글로벌 칼럼 | DB 분산 처리 기법 '샤딩', "웬만하면 하지 마라" - ITWorld Korea sharding
- practice - python sqlite
- Appropriate Uses For SQLite
- Finding bugs in SQLite, the easy way
- Don't test with SQLLite when you use Postgres in Production
- The SQLite Query Planner
- Code to transform Hillary's emails from raw PDF documents to a SQLite database
- Full Text Search with SQLite
- Install Python and Sqlite from Source
- 상황; virtualenv에서 pip3 install jupyter 성공 후 실행
- 오류;
ModuleNotFoundError: No module named '_sqlite3'
+ModuleNotFoundError: No module named 'pysqlite2'
- 원인; sqlite3가 제대로 설치되지 않음
- 해결
- 검색 결과 sqlite-devel or libsqlite3-dev를 설치 후 python3 재컴파일 혹은 setup.py의 path 수정
- jupyter에서 간단히 할 일이 있어서 하려고 했던 건데 너무 일이 커져서 귀찮아서 여기서 중지
- How To Corrupt An SQLite Database File
- SQLite Is Serverless
- Sharing an SQLite database across containers is surprisingly brilliant
- SQLite As An Application File Format
- How does SQLite work? Part 1: pages!
- How does SQLite work? Part 2: btrees! (or: disk seeks are slow don't do them!)
- LPC-2019: SQLite on Linux
- SQLite 개념/구조/멀티 DB 실사용기 :: 메모장
- SQLite as a document database
- Many Small Queries Are Efficient In SQLite
- SQLite에서는 작은 쿼리 수백개도 효율적 (sqlite.org)
- 웹페이지 하나 표시하는데 200개의 SQL문장을 쓴다면 MySQL,PostgreSQL 같은 기존 C/S DB에겐 과도함
- SQLite에서는 200개 이상의 쿼리도 별 문제 없음
- → 복잡하고 큰 쿼리도 잘 효율적으로 실행하지만, 작은 쿼리가 많아도 효율적
- → SQLite는 Client/Server 방식이 아니고 프로세스내에서 함수호출하는 방식이기에 N+1 Query Problem이 적용되지 않음
- SQLite의 소스 타임라인을 표시하는 동적 웹페이지에서 사용하는 실제 SQL 문장 240여개를 볼 수 있음
- SQLite is not a toy database | Anton Zhiyanov
- SQLite를 토이 데이터베이스로 보는 사람도 많지만, 개발자가 아니어도 SQLite 활용 부문 많음
- Console을 제공하므로 쉽게 조회 가능
- CSV 파일도 임포트해서 SQL 문으로 조회 가능
- 가상 테이블로 만들어서 조회하면 2배나 빠름
- JSON 파일로 SQLite로 읽어서 조회 가능
- 미디언, 퍼센타일 등의 값도 쉽게 조회 가능
- Full-text 검색 지원
- SQLite는 동시 엑세스를 지원하지 않는다는 오해도 있지만 write-ahead log 모드가 오래전에 추가되어 리더를 원하는 대로 추가 가능
- What’s new in SQLite 3.35 | Anton Zhiyanov
- Cross-database queries in SQLite (and weeknotes) Querying json data
- CG/SQL: Easy, accurate SQLite code generation - Facebook Engineering
- DB Browser for SQLite
- SQLite the only database you will ever need in most cases
- Exploring Tweets with SQLite + WASM - Divyendu's Blog
- Hosting SQLite databases on Github Pages - (or any static file hoster) - phiresky's blog
- SQLite in production with WAL
- The Untold Story of SQLite With Richard Hipp - CoRecursive Podcast
- Show HN: SQLite query inside a Bash function | Hacker News
- Using sqlite3 as a notekeeping document graph with automatic reference indexing
- 35% Faster Than The Filesystem
- Hosting SQLite databases on Github Pages - (or any static file hoster) - phiresky's blog
- MySQL을 SQLite로 변경 - 신현석(Hyeonseok Shin)
- Wesley Aptekar-Cassels | Consider SQLite
- Store SQLite in Cloudflare Durable Objects - Markus Ast
- JSON improvements in SQLite 3.38.0
- SQLite in Go, with and without cgo
- I'm All-In on Server-Side SQLite · Fly
- Go의 임베디드 키/밸류 데이터베이스인 BoltDB를 만든 Ben Johnson이 배포 서비스인 Fly.io에서 Litestream을 계속 작업
- Litestream은 SQLite를 리플리케이션을 이용해서 유지할 수 있게 하는 프로젝트
- BoltDB는 Go로 스키마를 작성해야 해서 마이그레이션이 어려운 등의 단점이 있었고 더 많은 프로그램에서 사용할 수 있도록 해야 할 작업을 고민하다가 SQLite이 이를 위해 존재한다는 결론
- SQLite를 기본으로 사용하지 않는 이유는 스토리지 오류에 대한 복원력이고 규모에 따른 동시성 때문인데 SQLite에는 우리가 필요로 하는 기능의 99.9%가 있고 애플리케이션 바로 옆에 배치할 수 있어서 속도 이점
- Why SQLite may become foundational for digital progress | VentureBeat
- Temporary tables in SQLite
- Cron-based backup - Litestream
- One-liner for running queries against CSV files with SQLite | Simon Willison’s TILs
- SQLite or PostgreSQL? It's Complicated!
- SQLite Internals: Pages & B-trees · Fly
- Turning SQLite into a distributed database
- Proceedings of the VLDB Endowment
- SQLite Forum: JSONB has landed
- Array columns in SQLite - DEV Community
- absurd-sql: sqlite3 in ur indexeddb (hopefully a better backend soon)
- cr-sqlite: Convergent, Replicated SQLite. Multi-writer and CRDT support for SQLite
- dbench: An unscientific benchmark of SQLite vs the file system (btrfs)
- edge-sql - A serverless edge worker embedding SQLite using Cloudflare Workers and WASM
- IceFireDB SQLite database - a decentralized SQLite database
- LiteFS Introducing LiteFS · Fly
- fly.io에서 Litestream의 아이디어를 확장한 LiteFS 공개
- Litestream이 SQLite WAL 파일을 복사한다면 LiteFS는 각 트랜잭션을 검사하고 전달하는 역할
- 이를 위해서 FUSE를 선택해서 앱과 데이터베이스 파일 사이에 파일 시스템 프락시 같은 걸 넣어서 트랜잭션을 리플리카에 복사 가능
- I Migrated from a Postgres Cluster to Distributed SQLite with LiteFS
- Kent C. Dodds가 자신의 사이트를 PostgreSQL을 이용해서 fly.io 이용중
- fly.io의 Litestream와 LiteFS를 알게 되어 SQLite로 이동
- 이전에는 멀티리전 데이터베이스를 위해 primary 리전에 직접 write
- SQLite는 로컬에 떠 있으므로 이 방법을 사용 불가
- fly.io에서 지원하는
fly-replay
응답 헤더를 통해 primary 리전에서 처리되도록 하는 방법 사용
- 단일 리전에서 동작하도록 마이그레이션 준비가 끝난 뒤에 LiteFS를 설정
fly-replay
응답 헤더를 통해 멀티 리전 처리 가능- 이 부분 외에는 멀티리전을 위한 코드의 영향은 없었음
- Kent C. Dodds가 자신의 사이트를 PostgreSQL을 이용해서 fly.io 이용중
- Litestream - Streaming SQLite Replication
- react-native-sqlite-storage - SQLite Native Plugin for React Native
- rqlite: The lightweight, distributed relational database built on SQLite
- simple-graph: This is a simple graph database in SQLite, inspired by "SQLite as a document database"
- soul: 🕉 A SQLite REST and realtime server
- SpatiaLite: SpatiaLite
- sqlean: All the missing SQLite functions
- SQLime - SQLite Playground
- sqlite3 fiddle
- sqlite3-to-mysql: Transfer data from SQLite to MySQL
- sqlite-http: A SQLite extension for making HTTP requests purely in SQL
- sqlite-lines: A SQLite extension for reading large files line-by-line (NDJSON, logs, txt, etc.)
- sqlitestudio.pl
- SQL OnLine IDE
- stanchion: A SQLite extension that brings column-oriented tables to SQLite
- wp-sqlite: WordPress running on an SQLite database
- ws4sqlite: Query sqlite via http
- A simple Python script to document the SQLite databases
- Do You Know Python Has A Built-In Database? | by Christopher Tao | Towards Data Science
- Towards Inserting One Billion Rows in SQLite Under A Minute - blag
- 파이썬 Python 코딩 - 전화번호부 만들기2 (SQLite DB 사용) - YouTube
- How to Use SQLite with Python
- Moving from Flat Files to SQLite in Python - YouTube
- SimpleSQLite - Python library to simplify the table creation and data insertion in SQLite database (Automatic table creation from data. Support various data type for insertion: dictionary/namedtuple/list/tuple) http://simplesqlite.readthedocs.org/en/stable/apis/simplesqlite.html
- SQLite-Image-Handler: Simple to use image handler for python sqlite3.
- sqlite-tutorial-pycon-2023
- sql-test-kit · GitLab
- SQL Test Kit, or how to unit test any SQL query by Victor Landeau - YouTube
- VidiGo SQL Test Kit, or how to unit test any SQL query by
- sql 쿼리 테스트를 위해 테이블의 구조와 스키마 정보 제공 필요
- 이후 실제 쿼리 실행 없이도 sql 쿼리의 정확성을 검증 가능
- 클라우드 서비스 제공업체의 변경 사항으로부터 독립적, 다양한 sql 방언에서 데이터 내부화 원칙을 사용하여 모든 select 쿼리를 테스트 가능
- 단점으로 인터넷 접속 필요성과 테스트 속도 저하
- sql 쿼리 테스트를 위해 테이블의 구조와 스키마 정보 제공 필요
- SQL 테스트 키트 또는 Victor Landeau의 모든 SQL 쿼리를 단위 테스트하는 방법 | 완벽한 영상요약, 릴리스에이아이 | Lilys AI
- 개발 중 발생할 수 있는 오류를 피하기 위해 개발 환경에서 단위 테스트 작성이 중요
- 데이터 과학자로서 BigQuery에서 SQL 코드를 테스트하려는 노력
- H2와 Testcontainers같은 도구 존재하나, BigQuery와 Amazon Redshift, Snowflake와 어울리지 않는다는 문제 직면
- 데이터 과학자로서 BigQuery에서 SQL 코드를 테스트하려는 노력
- GCP에는 BigQuery의 SQL 방언을 해석할 수 있는 도구가 없어 개인이 작성한 Tinyquery 필요
- BigQuery이 아닌 GCP에서 수행해야 하는 작업들이 Tinyquery에 의존
- TinyQuery를 사용하면 모든 SQL 쿼리를 테스트는 불가능, 현재 BigQuery에서만 테스트 가능
- 컴퓨터에서 실행할 수 있는 테스트를 작성하여 코드를 빠르게 확인하고, BigQuery에서 쿼리를 확인할 수 있는 방법인 'SQL Test Kit' 도입
- SQL Test Kit을 사용하기 위해서는 테이블에 대한 정보를 프로그램에 알려야 하며, 이 정보를 활용하여 적합한 테스트 작성 가능
- SQL Test Kit의 Qu interpolator를 사용하여 쿼리 내 데이터 보간 및 테스트 수행
- 임시 테이블 구축 없이 테이블을 사용하는 쿼리를 실행하여 결과를 얻고, 이를 원래 예상 결과와 비교하여 버그 여부 확인
- 최종적으로 데이터 보간을 통해 빠르게 쿼리 실행, Python 라이브러리를 활용하여 어떤 SELECT 쿼리든 테스트 가능, 클라우드 제공 업체의 변화에 독립적
- 인터넷 액세스가 필요하며 단위 테스트 속도 저하
- SQL로 인한 디버깅이 어렵지만, 단위 테스트를 통해 문제를 해결할 때 도움
- 개발 중 발생할 수 있는 오류를 피하기 위해 개발 환경에서 단위 테스트 작성이 중요
- VidiGo SQL Test Kit, or how to unit test any SQL query by
- SQL Test Kit, or how to unit test any SQL query by Victor Landeau - YouTube