Fundamentals of Database Engineering
Database Engineering is a very interesting sector in software engineering. If you are interested in learning about database engineering you have come to the right place. I have curated this course carefully to discuss one of the main concepts of database engineering. This course will not teach you SQL or programming languages, however, it will teach you skillsets and patterns that you can apply in database engineering.
More
A few of the things that you will learn are Indexing, Partitioning, Sharding, Replication, b-trees in-depth indexing, Concurrency control, database engines and security, and much more.
I believe that learning the fundamentals of database engineering will equip you with the necessary means to tackle difficult and challenging problems yourself. I always compare engineering to math, you never memorize specific formulas and equations, you know the basic proves and derive and solve any equation one throws at you. Database engineering is similar, you can't possibly say MongoDB is better than MySQL or Postgres is better than Oracle. Instead, you learn your use case and by understanding how each database platform does its own trade-offs you will be able to make optimal decisions.
Database engines or storage engines or sometimes even called embedded databases is a software library that a database management software uses to store data on disk and do CRUD (create update delete) Embedded means move everything in one software no network client-server. In this video course, I want to go through the few popular database engines, explain the differences between them, and finally, I want to spin up a database and change its engine and show the different features of each engine.
Watch Online Fundamentals of Database Engineering
# | Title | Duration |
---|---|---|
1 | Welcome to the Course | 06:37 |
2 | Course Note 1 | 00:38 |
3 | Course Note 2 | 07:37 |
4 | Course Note 3 | 09:25 |
5 | Introduction to ACID | 03:55 |
6 | What is a Transaction? | 13:35 |
7 | Atomicity | 10:05 |
8 | Isolation | 31:54 |
9 | Consistency | 12:42 |
10 | Durability | 12:13 |
11 | ACID by Practical Examples | 21:22 |
12 | Phantom Reads | 07:36 |
13 | Serializable vs Repeatable Read | 08:18 |
14 | Eventual Consistency | 14:34 |
15 | How tables and indexes are stored on disk (MUST WATCH before continue) | 21:04 |
16 | Row-Based vs Column-Based Databases | 34:16 |
17 | Primary Key vs Secondary Key - What you probably didn't know | 10:57 |
18 | Create Postgres Table with a million Rows (from scratch) | 04:23 |
19 | Getting Started with Indexing | 18:19 |
20 | Understanding The SQL Query Planner and Optimizer with Explain | 10:17 |
21 | Bitmap Index Scan vs Index Scan vs Table Scan | 11:25 |
22 | Key vs Non-Key Column Database Indexing | 17:03 |
23 | Index Scan vs Index Only Scan | 08:09 |
24 | Combining Database Indexes for Better Performance | 14:08 |
25 | How Database Optimizers Decide to Use Indexes | 11:20 |
26 | Create Index Concurrently - Avoid Blocking Production Database Writes | 03:11 |
27 | Bloom Filters | 09:19 |
28 | Working with Billion-Row Table | 13:09 |
29 | B-Tree Section's Introduction & Agenda | 03:35 |
30 | Full Table Scans | 03:28 |
31 | Original B-Tree | 04:47 |
32 | How the Original B-Tree Helps Performance | 07:58 |
33 | Original B-Tree Limitations | 06:32 |
34 | B+Tree | 06:18 |
35 | B+Tree DBMS Considerations | 04:28 |
36 | B+Tree Storage Cost in MySQL vs Postgres | 04:46 |
37 | B-Tree Section's Summary | 01:08 |
38 | Introduction to Database Partitioning | 01:27 |
39 | What is Partitioning? | 03:29 |
40 | Vertical vs Horizontal Partitioning | 02:08 |
41 | Partitioning Types | 01:33 |
42 | The Difference Between Partitioning and Sharding | 02:44 |
43 | Preparing: Postgres, Database, Table, Indexes | 05:23 |
44 | Execute Multiple Queries on the Table | 01:19 |
45 | Create and Attach Partitioned Tables | 03:47 |
46 | Populate the Partitions and Create Indexes | 04:00 |
47 | Class Project - Querying and Checking the Size of Partitions | 05:33 |
48 | The Advantages of Partitioning | 04:42 |
49 | The Disadvantages of Partitioning | 02:49 |
50 | Section Summary - Partitioning | 01:11 |
51 | How to Automate Partitioning in Postgres | 10:07 |
52 | Introduction to Database Sharding | 01:07 |
53 | What is Database Sharding? | 03:32 |
54 | Consistent Hashing | 02:42 |
55 | Horizontal partitioning vs Sharding | 01:09 |
56 | Sharding with Postgres | 01:06 |
57 | Spin up Docker Postgres Shards | 07:24 |
58 | Writing to a Shard | 21:59 |
59 | Reading from a Shard | 11:20 |
60 | Advantages of Database Sharding | 02:00 |
61 | Disadvantages of Database Sharding | 03:34 |
62 | Database Sharding Section Summary | 00:46 |
63 | When Should you consider Sharding your Database? | 20:07 |
64 | Shared vs Exclusive Locks | 11:05 |
65 | Dead Locks | 05:32 |
66 | Two-phase Locking | 07:09 |
67 | Solving the Double Booking Problem (Code Example) | 13:43 |
68 | Double Booking Problem Part 2 ( Alternative Solution and explination) | 17:50 |
69 | SQL Pagination With Offset is Very Slow | 09:10 |
70 | Database Connection Pooling | 10:51 |
71 | Introduction to Database Replication | 01:20 |
72 | Master/Standby Replication | 03:46 |
73 | Multi-master Replication | 01:24 |
74 | Synchronous vs Asynchronous Replication | 03:07 |
75 | Replication Demo with Postgres 13 | 19:21 |
76 | Pros and Cons of Replication | 03:29 |
77 | Twitter System Design Database Design | 01:11:57 |
78 | Building a Short URL System Database Backend | 37:51 |
79 | Introduction | 02:45 |
80 | What is a Database Engine? | 06:42 |
81 | MyISAM | 06:50 |
82 | InnoDB | 06:46 |
83 | XtraDB | 02:07 |
84 | SQLite | 03:45 |
85 | Aria | 02:28 |
86 | BerkeleyDB | 02:41 |
87 | LevelDB | 06:21 |
88 | RocksDB | 04:06 |
89 | Popular Database Engines | 02:32 |
90 | Switching Database Engines with mySQL | 17:09 |
91 | What are Database Cursors? | 09:32 |
92 | Server Side vs Client Side Database Cursors | 01:45 |
93 | Inserting Million Rows with Python in Postgres using Client Side Cursor | 03:30 |
94 | Querying with Client Side Cursor | 04:43 |
95 | Querying with Server Side Cursor | 01:26 |
96 | Pros and Cons of Server vs Client Side Cursors | 04:39 |
97 | MongoDB Architecture | 43:25 |
98 | How to Secure Your Postgres Database by Enabling TLS/SSL | 12:02 |
99 | Deep Look into Postgres Wire Protocol with Wireshark | 14:08 |
100 | Deep Look Into MongoDB Wire Protocol with Wireshark | 24:05 |
101 | What is the Largest SQL Statement that You can Send to Your Database | 09:45 |
102 | Best Practices Working with REST & Databases | 06:54 |
103 | Database Permissions and Best Practices for Building REST API | 23:41 |
104 | Introduction to Homomorphic Encryption | 01:54 |
105 | What is Encryption? | 01:30 |
106 | Why Can't we always Encrypt? | 04:33 |
107 | What is Homomorphic Encryption | 05:01 |
108 | Homomorphic Encryption Demo | 00:36 |
109 | Clone and Build the Code | 02:36 |
110 | Going Through the Code and the Database | 01:06 |
111 | Searching The Encrypted Database | 03:12 |
112 | Is Homomorphic Encryption Ready? | 02:31 |
113 | Heap Index scan instead of Index only scan why? | 12:55 |
114 | What is the unit of the Cost in Postgres Planner? | 06:16 |
115 | All Isolation Levels - Explained Details | 26:08 |
116 | Snapshot and Repeatable Read Isolation difference? | 07:56 |
117 | I have an Index why is the database doing a full table scan? | 07:38 |
118 | Why Databases Read Pages instead of Rows? | 11:03 |
119 | How does Indexing a column with duplicate values work? | 10:54 |
120 | Should I drop unused indexes? | 08:46 |
121 | Why use serializable Isolation Level when we have SELECT FOR UPDATE? | 07:00 |
122 | Can I use the same database connection for multiple clients? | 07:01 |
123 | Do I need a transaction if I'm only reading? | 15:48 |
124 | Why does an update in Postgres touches all indexes? | 23:50 |
125 | What is the value of bitmap index scan? | 25:46 |
126 | What does Explain Analyze actually do? | 19:38 |
127 | Does Create Index block writes and Why? | 11:16 |
128 | WAL, Redo and Undo logs | 39:11 |
129 | SELECT COUNT (*) can impact your Backend Application performance, here is why | 10:38 |
130 | How Shopify Switched from UUID as Primary Key | 31:23 |
131 | How does the Database Store Data On Disk? | 18:56 |
132 | Postgres Architecture | 33:16 |
133 | Is QUIC a Good Protocol for Databases? | 12:16 |
134 | What is a Distributed Transaction? | 21:29 |
135 | Hash Tables and Consistent Hashing | 49:23 |
136 | Indexing in PostgreSQL vs MySQL | 13:02 |
137 | Why Uber Moved from Postgres to MySQL (Discussion) | 47:14 |
138 | Can NULLs Improve your Database Queries Performance? | 21:13 |
139 | Write Amplification Explained in Backend Apps, Database Systems and SSDs | 21:16 |
140 | Optimistic vs Pessmistic Concurrency Control | 17:37 |
141 | Introduction to ACID (Archived) | 01:40 |
142 | What is a Transaction? (Archived) | 02:32 |
143 | Atomicity (Archived) | 02:40 |
144 | Isolation (Archived) | 20:36 |
145 | Consistency (Archived) | 13:07 |
146 | Durability (Archived) | 01:45 |