
Backward compatible database changes
Learn about safely using the expand, migrate, and contract pattern to make database schema changes without downtime and data loss.


Why isn’t MySQL using my index?
There are several reasons why MySQL might not consider your index, and in this article we’ll explore some of the most common ones.


Serverless Laravel applications with AWS Lambda and PlanetScale
Learn how to create serverless Laravel applications by deploying them to AWS Lambda and using PlanetScale as the database.


Database branching: three-way merge for schema changes
Learn how PlanetScale uses Git-like three-way diff to resolve schema change conflicts across database branches.


Pagination in MySQL
An overview of the different ways to paginate in MySQL including limit/offset pagination and cursor pagination plus the pros and cons of each.


How does database sharding work?
Learn what sharding is, how sharding works, and some common sharding frameworks and tools.


Connection pooling in Vitess
Connection pooling reduces the overhead of establishing new database connections. Learn how connection pooling works and how it is handled in Vitess.


Zero downtime Rails migrations with the PlanetScale Rails gem
Learn about the Ruby on Rails workflow that protects your database and application from accidental downtime and data loss.


What are the disadvantages of database indexes?
Learn about some of the possible downsides of using database indexes and how to remove unused database indexes in MySQL.


Solving N+1’s with Rails `exists?` queries
Learn how to solve your Rails applications N+1’s caused by `exists?` queries.


Faster MySQL with HTTP/3
In this article, we explore how our HTTP/3 API compares to the latency of a traditional MySQL client.


What is a query planner?
Learn how query planning works and why query planners are important.


Temporal workflows at scale: Part 2 — Sharding in production
Learn how PlanetScale simplifies the process of running Temporal in production by looking at how our customer runs heavy production workloads.


Rails’ safety mechanisms
A comprehensive overview of Rails’ many safety features that can help you prevent painful mistakes.


Building a multi-region Rails application with PlanetScale
Learn how to configure your database in a multi-region Rails application to decrease latency across the globe.


How PlanetScale Boost serves your SQL queries instantly
Learn how we use a partial materialization engine for database caching alongside your database.


One million connections
Learn how to use PlanetScale to safely include your database in your serverless functions without hitting connection limits in MySQL.


MySQL Integers: INT, BIGINT, and more
Gain a deeper understanding of the MySQL integer types by exploring the different options (INT, BIGINT, MEDIUMINT, etc) and how they are stored.


Vitess for the rest of us
How Vitess can increase your database‘s resilience, scalability, and performance


Laravel’s safety mechanisms
A comprehensive overview of Laravel’s many safety features that can help you prevent painful mistakes.


Optimizing queries in arewefastyet
Learn how we detected and optimized two slow queries in arewefastyet using PlanetScale Insights.



Indexing JSON in MySQL
Learn how to index JSON in MySQL with generated columns and functional indexes.


MySQL data types: VARCHAR and CHAR
In this entry of the series, we explore using VARCHAR and CHAR data types in your database and give some pointers on which type is best to use and when.


The MySQL JSON data type
Learn what the MySQL JSON data type is, when to use MySQL JSON, and some caveats to using JSON documents in relational databases.


TAOBench: Running social media workloads on PlanetScale
Learn how we used TAOBench with PlanetScale to benchmark social media workloads


One million queries per second with MySQL
Discover how PlanetScale handles one million queries per second (QPS) with horizontal sharding in MySQL


Zero downtime Laravel migrations
Learn how to run no downtime non-blocking schema migrations in your production Laravel app with PlanetScale.


How product design works at PlanetScale
Learn about the lightweight and highly collaborative process our product design team follows to ship quickly at PlanetScale.


Introducing FastPage: Faster offset pagination for Rails apps
Introducing FastPage, a new gem for ActiveRecord that speeds up deep pagination queries.


How to kill Sidekiq jobs in Ruby on Rails
Learn how PlanetScale uses a custom middleware to kill our Sidekiq jobs in production without relying on deploys.


Database DevOps
Learn how PlanetScale enables databases to seamlessly fit into the DevOps lifecycle.


Ruby on Rails: 3 tips for deleting data at scale
Learn how to delete data in large Rails apps with destroy_async, delete, destroy, and scheduled cron jobs.


The Slotted Counter Pattern
Handle MySQL increment counter bursts with the Slotted Counter Pattern


Behind the scenes: How we built Password Roles
Learn how we leveraged Vitess ACLs and VTTablet to build our password roles functionality


Temporal Workflows at scale with PlanetScale: Part 1
Learn how to create a more reliable workflow with Temporal and PlanetScale


How do database indexes work?
Learn how database indexes work under the hood and how they can be used to speed up queries


Consensus algorithms at scale: Part 8 - Closing thoughts
In the final installment of the consensus algorithm series, we pull everything together with some final thoughts.


Consensus algorithms at scale: Part 7 - Propagating requests
In part 7 of the Consensus algorithm series, we combine everything we’ve worked at to cover propagating requests


Identifying slow Rails queries with sqlcommenter
Learn how to use sqlcommenter with Rails



Consensus algorithms at scale: Part 6 - Completing requests
In part 6 of the Consensus algorithms series, we look at how to handle request completions


The operational relational schema paradigm
An exploration of the current landscape of schema change methodology and what the future should look like.


Feature storytelling with Framer Motion
Learn how we used Framer Motion to create our schema revert feature’s narrative animation.


Consensus algorithms at scale: Part 5 - Handling races
In part 5 of our consensus algorithms series, we discuss how we handle race conditions and forward progress requirements.


Consensus algorithms at scale: Part 4 - Establishment and revocation
In part 4 of the consensus algorithms series, we look at how algorithm leaders are established and revoked.


Generics can make your Go code slower
Go 1.18 is here, and with it, the first release of the long-awaited implementation of Generics is finally ready for production usage. Generics are a frequently requested feature that has been highly contentious throughout the Go community.


Why we chose NanoIDs for PlanetScale’s API
Learn why PlanetScale used NanoID to generate obscure and URL friendly identifiers.


Behind the scenes: How schema reverts work
Learn how we used VReplication to allow for migration reverts with data retention.



How we made PlanetScale’s background jobs self-healing
How to build self-healing background jobs into your application with background queueing systems, like Sidekiq.


Introduction to Laravel caching
Learn how to speed up your Laravel applications with caching.


Using entropy for user-friendly strong passwords
When implementing user authentication with passwords, throw out the password rules you know.


How our Rails test suite runs in 1 minute on Buildkite
Learn how we use minitest and FactoryBot with parallel tests to get our Rails test suite to run in 1 minute on Buildkite.


NoneSQL, All the DevEx
Databases will win based on superior developer experience, not what is under the hood.


Building PlanetScale with PlanetScale
How PlanetScale uses database branching and non-blocking schema changes to build PlanetScale.


The promises and realities of the relational database model
The relational model is one of the oldest surviving models in computer science but it has some drawbacks that need to be addressed.


Horizontal Sharding for MySQL Made Easy
For developers building out a web application, a transactional datastore is the obvious and proven choice, but with success comes scale limitations.


Pitfalls of isolation levels in distributed databases
The more loosely coupled components are in a distributed system, the better it scale


Consensus algorithms at scale: Part 3 - Use cases
Consensus Use Cases


Orchestrator failure detection and recovery: New Beginnings
how the new integration adds new failure detection and recovery scenarios, making orchestrator’s operation goal-oriented.


Consensus algorithms at scale: Part 2 - Rules of consensus
The Rules of Consensus


Consensus algorithms at scale: Part 1 - Introduction
This is a multi-part blog series and will be updated with links to the corresponding posts.


Learn Horizontal Scaling on PlanetScaleDB with Vitess — Rate Puppies in a Rust app with Sharded MySQL Database
Rate Puppies in a Rust app with Sharded MySQL Database


ACID Transactions are not just for banks - the Vitess approach
Build systems that do not lose data. Vitess prevents asynchronous failure in two ways: (1) ensuring that the changes are saved locally on storage, with the redo log and binary logs safely written to disk and (2) making use of semi-synchronous replication.
