Roadmap to becoming a developer in 2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
8.5 KiB

The intent of this guide is to give you an idea about the DBA landscape and to help guide your learning if you are confused. The roadmap is highly opinionated — neither, knowing everything listed in the roadmap, nor the order of items given in the roadmap is required to be followed in order to be a DBA.
## Learn basic RDBMS terms and concepts
Get basic understanding of Postgres key terms and basic RDBMS concepts.
- **Object model**: data types, columns, rows, tables, schemas, databases, queries.
- **Relational model**: domains, attributes, tuples, relations, constraints, NULL.
- **Databases high-level concepts**: ACID, MVCC, transactions, write-ahead log, query processing.
- **Links**:
- [Postgres Glossary](https://www.postgresql.org/docs/13/glossary.html)
- SQL and Relational Theory - Christopher J. Date, 2009
- Database Design and Relational Theory - Christopher J. Date, 2012
## Learn how to install and run PostgreSQL
Get practical skills of how to set up and run Postgres to get a working environment for further learning.
- Using package managers (APT, YUM, etc.)
- Using `docker`.
- Managing Postgres service using `systemd` (start, stop, restart, reload).
- Managing Postgres service using `pg_ctl`, or OS-specific tools (like `pg_ctlcluster`).
- Connect to Postgres using `psql`.
- Deploy database service in cloud environment (AWS, GCE, Azure, Heroku, DigitalOcean, etc...).
- **Links**:
- [Official download and install instructions](https://www.postgresql.org/download/)
- [Official Docker images](https://hub.docker.com/_/postgres)
## Learn SQL concepts
Get practical skills of how to create and manipulate database objects and how to execute queries using `psql` client.
- Understand basic data types.
- **DML queries**: querying data, modifying data, filtering data, joining tables.
- **Advanced topics**: transactions, CTE, subqueries, lateral join, grouping, set operations.
- **DDL queries**: managing tables and schemas (create, alter, drop).
- Import and export data using `COPY`.
- **Links**:
- [DB Fiddle](https://www.db-fiddle.com/)
- [PostgreSQL Tutorial](https://www.postgresqltutorial.com/)
- [PostgreSQL SQL Getting Started](https://www.postgresql.org/docs/current/tutorial-sql.html)
- [The SQL Language](https://www.postgresql.org/docs/current/sql.html)
## Learn how to configure Postgres
Get understanding of the main aspects of how Postgres could be configured. Deep understanding of Postgres internals is not yet necessary here.
- postgresql.conf:
- Resources usage
- Write-ahead Log
- Checkpoints and Background Writer
- Cost-based vacuum and auto-vacuum
- Replication
- Query planner
- Reporting, logging and statistics
- Adding extra extensions
- ...keep exploring other configuration options
- **Links**:
- [Postgresqlco.nf](http://postgresqlco.nf/)
## Learn Postgres security concepts
Get understanding about basic security concepts and common ways of how to deploy secure configurations.
- Authentication models, roles, pg_hba.conf, SSL settings.
- **Objects privileges**: grant/revoke, default privileges.
- **Advanced topics** - row-level security, selinux.
- **Links**:
- [Client authentication](https://www.postgresql.org/docs/current/client-authentication.html)
- [Roles and users managements](https://www.postgresql.org/docs/current/user-manag.html)
## Develop infrastructure DBA skills
Get practical skills of how to deploy, extend, maintain and support Postgres installations and 3rd-party Postgres ecosystem software.
- **Replication**: streaming replication, logical replication
- **Backup/recovery tools**:
- Built-in: `pg_dump`, `pg_dumpall`, `pg_restore`, `pg_basebackup`
- 3rd-party: `barman`, `pgbackrest`, `pg_probackup`, `WAL-G`
- Backup validation procedures
- **Upgrading procedures**
- Minor and major upgrades using `pg_upgrade`
- Upgrades using logical replication
- **Connection pooling**:
- `Pgbouncer`
- Alternatives: `Pgpool-II`, `Odyssey`, `Pgagroal`
- **Infrastructure monitoring**: `Prometheus`, `Zabbix`, other favourite monitoring solution
- **High availability and cluster management tools**:
- `Patroni`
- **Alternatives**: `Repmgr`, `Stolon`, `pg_auto_failover`, `PAF`
- **Applications Load Balancing and Service Discovery**: `Haproxy`, `Keepalived`, `Consul`, `Etcd`
- **Deploy Postgres on `Kubernetes`**: Simple `StatefulSet` setup, `HELM`, operators
- Resource usage and provisioning, capacity planning
## Learn how to automate routines
Get practical skills, learn automation tools and automate existing routine tasks.
- Automation using shell scripts or any other favourite language (`Bash`, `Python`, `Perl`, etc)
- Configuration management: `Ansible`, `Salt`, `Chef`, `Puppet`
## Develop application DBA skills
Learn theory and get practical skills of how applications should work with Postgres
- **Migrations**:
- practical patterns and antipatterns
- tools: `liquibase`, `sqitch`, language-specific tools
- Data import/export, bulk loading and processing
- **Queues**:
- practical patterns and anti-patterns
- `Skytools PGQ`
- Data partitioning and sharding patterns.
- Database normalization and normal forms.
- Books:
- The Art of PostgreSQL - Dimitri Fontaine, 2020
## Learn Postgres advanced topics
Here is important to continuously extend and develop existing knowledge about Postgres.
- **Low level internals**:
- Processes and memory architecture
- Vacuum processing
- Buffer management
- Lock management
- [Physical storage and file layout](https://www.postgresql.org/docs/current/storage.html)
- [System catalog](https://www.postgresql.org/docs/current/catalogs.html)
- **Fine-grained tuning**:
- Per-user, per-database settings
- [Storage parameters](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS)
- Workload-dependant tuning: OLTP, OLAP, HTAP
- **Advanced SQL topics**:
- PL/pgSQL, procedures and functions, triggers
- Aggregate and window functions
- Recursive CTE
- **Links**:
- [The Internals of PostgreSQL](http://www.interdb.jp/pg/index.html) for database administrators and system developers
- [PL/pgSQL Guide](https://www.postgresql.org/docs/current/plpgsql.html)
## Learn Postgres troubleshooting techniques
Get basic understanding about troubleshooting tools and get practical skills of how to detect and resolve problems.
- **Operating system tools**
- `top` (`htop`, `atop`)
- `sysstat`
- `iotop`
- **Postgres system views**
- `pg_stat_activity`
- `pg_stat_statements`
- **Postgres tools**
- `pgcenter` - *personal recommendation*
- **Query analyzing**:
- [EXPLAIN](https://www.postgresql.org/docs/current/sql-explain.html)
- [Depesz](https://explain.depesz.com/) online EXPLAIN visualization tool
- [PEV](https://tatiyants.com/pev/#/plans) online EXPLAIN visualization tool
- [Tensor](https://explain.tensor.ru/) online EXPLAIN visualization tool, RU language only
- **Log analyzing**:
- `pgBadger`
- Ad-hoc analyzing using `grep`, `awk`, `sed`, etc.
- **External tracing/profiling tools**: `gdb`, `strace`, `perf-tools`, `ebpf`, core dumps
- **Troubleshooting methods**: USE, RED, Golden signals
- **Links**:
- [Linux Performance](http://www.brendangregg.com/linuxperf.html) by Brendan Gregg
- [USE Method](http://www.brendangregg.com/usemethod.html)
## Learn SQL optimization technics
Get understanding and practical skills of how to optimize SQL queries.
- **Indexes, and their use cases**: B-tree, Hash, GiST, SP-GiST, GIN, BRIN
- SQL queries patterns and anti-patterns
- SQL schema design patterns and anti-patterns
- **Links**:
- [Use the Index, Luke](https://use-the-index-luke.com/) - a Guide to Database Performance for Developers
- **Books**:
- SQL Antipatterns: Avoiding the Pitfalls of Database Programming - Bill Karwin, 2010
## Develop architect skills
Get deeper understanding of Postgres use cases and where Postgres is suitable and where is not.
- **Postgres forks and extensions**: `Greenplum`, `Timescaledb`, `Citus`, `Postgres-XL`, etc.
- RDBMS in general, benefits and limitations
- Differences between Postgres and other RDBMS and NoSQL databases
## Develop Postgres hacker skills
Get involved to Postgres community and contribute to Postgres; be a useful member of Postgres, and the open source community; use personal experience to help other people.
- Daily reading and answering in [mailing lists](https://www.postgresql.org/list/)
- pgsql-general
- pgsql-admin
- pgsql-performance
- pgsql-hackers
- pgsql-bugs
- Reviewing patches
- Writing patches, attending in [Commitfests](https://commitfest.postgresql.org/)
<br />
<br />
<br />