![The MySQL JSON data type](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fmysql-json-data-type%2Fmysql-data-types-json-blog.jpg&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-stojan.jpg&w=256&q=75)
![TAOBench: Running social media workloads on PlanetScale](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Ftaobench%2Ftaobench-blog.jpg&w=3840&q=75)
TAOBench: Running social media workloads on PlanetScale
Learn how we used TAOBench with PlanetScale to benchmark social media workloads
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fliz-van-dijk.jpg&w=256&q=75)
![One million queries per second with MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fone-million-queries-per-second-with-mysql%2Fone-million-qps-blog.jpg&w=3840&q=75)
One million queries per second with MySQL
Discover how PlanetScale handles one million queries per second (QPS) with horizontal sharding in MySQL
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjonah-berquist.jpeg&w=256&q=75)
![Zero downtime Laravel migrations](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fzero-downtime-laravel-migrations%2F98e961f96dadedae3a9f31f9cbf7d0f8b35cd8f8-1552x872.jpg&w=3840&q=75)
Zero downtime Laravel migrations
Learn how to run no downtime non-blocking schema migrations in your production Laravel app with PlanetScale.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fholly-guevara.jpeg&w=256&q=75)
![How product design works at PlanetScale](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fhow-product-design-works-at-planetscale%2F8fb04b00407cb13937517fedd9cffd6bf85a40c2-1552x872.png&w=3840&q=75)
How product design works at PlanetScale
Learn about the lightweight and highly collaborative process our product design team follows to ship quickly at PlanetScale.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjason-long.jpeg&w=256&q=75)
![Introducing FastPage: Faster offset pagination for Rails apps](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Ffastpage-faster-offset-pagination-for-rails-apps%2F74a16ed1b23c01eb71a9135863cf921bbb2f8806-1552x872.jpg&w=3840&q=75)
Introducing FastPage: Faster offset pagination for Rails apps
Introducing FastPage a new gem for ActiveRecord that speeds up deep pagination queries.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![How to kill Sidekiq jobs in Ruby on Rails](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fhow-to-kill-sidekiq-jobs-in-ruby-on-rails%2F7a618608d3c6219431495b41a3f7b7d52f8b3b8c-1552x872.png&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Felom-gomez.jpeg&w=256&q=75)
![Database DevOps](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fdatabase-devops%2FDatabase-devops-blog.png&w=3840&q=75)
Database DevOps
Learn how PlanetScale enables databases to seamlessly fit into the DevOps lifecycle.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsam-lambert.jpeg&w=256&q=75)
![Ruby on Rails: 3 tips for deleting data at scale](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fruby-on-rails-3-tips-for-deleting-data-at-scale%2F9cdb8d64bc80038eb03a212e5d459f5ffddee73c-1552x872.jpg&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![The Slotted Counter Pattern](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fthe-slotted-counter-pattern%2Fc14e0c63745d9278b49ad6aca05b322ba6e8a66f-1552x872.png&w=3840&q=75)
The Slotted Counter Pattern
Handle MySQL increment counter bursts with the Slotted Counter Pattern
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsam-lambert.jpeg&w=256&q=75)
![Behind the scenes: How we built Password Roles](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fbehind-the-scenes-how-we-built-password-roles%2Fbbaaacd459acf4314fac1c3082ae93355ebcc663-2400x1348.jpg&w=3840&q=75)
Behind the scenes: How we built Password Roles
Learn how we leveraged Vitess ACLs and VTTablet to build our password roles functionality
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fphani-raju.jpeg&w=256&q=75)
![Temporal Workflows at scale with PlanetScale: Part 1](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Ftemporal-workflows-at-scale-with-planetscale-part-1%2F70f57a6451637b94a4207ef5e2db4a5151876b97-1552x872.png&w=3840&q=75)
Temporal Workflows at scale with PlanetScale: Part 1
Learn how to create a more reliable workflow with Temporal and PlanetScale
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsavannah-longoria.jpg&w=256&q=75)
![How do Database Indexes Work?](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fhow-do-database-indexes-work%2Fdb-indexes-blog.jpg&w=3840&q=75)
How do Database Indexes Work?
Learn how database indexes work under the hood and how they can be used to speed up queries
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjustin-gage.jpeg&w=256&q=75)
![Consensus algorithms at scale: Part 8 - Closing thoughts](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fconsensus-algorithms-at-scale-part-8%2F2e2cc482b30645aae12abc4aaa3d229fa2517d2d-1270x760.png&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsugu-sougoumarane.png&w=256&q=75)
![Consensus algorithms at scale: Part 7 - Propagating requests](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fconsensus-algorithms-at-scale-part-7%2Fe585055fc02dcf796918b72e71def245a32013a3-1270x760.png&w=3840&q=75)
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
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsugu-sougoumarane.png&w=256&q=75)
![Identifying slow Rails queries with sqlcommenter](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fidentifying-slow-rails-queries-with-sqlcommenter%2F904905466538bdf49133ba46a616c36b7fd84e78-1552x872.png&w=3840&q=75)
Identifying slow Rails queries with sqlcommenter
Learn how to use sqlcommenter with Rails
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fiheanyi-ekechukwu.jpeg&w=256&q=75)
![Consensus algorithms at scale: Part 6 - Completing requests](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fconsensus-algorithms-at-scale-part-6%2Fb9b8a1936d98227c2619fdd2952436a34b3aebc6-1270x760.png&w=3840&q=75)
Consensus algorithms at scale: Part 6 - Completing requests
In part 6 of the Consensus algorithms series we look at how to handle request completions
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsugu-sougoumarane.png&w=256&q=75)
![The operational relational schema paradigm](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fthe-operational-relational-schema-paradigm%2F584c8f9d46507b55d50c4d9ea2f67a2966ffa9cd-1270x760.png&w=3840&q=75)
The operational relational schema paradigm
An exploration of the current landscape of schema change methodology and what the future should look like.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fshlomi-noach.jpg&w=256&q=75)
![Feature storytelling with Framer Motion](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Ffeature-storytelling-with-framer-motion%2Fhero.jpg&w=3840&q=75)
Feature storytelling with Framer Motion
Learn how we used Framer Motion to create our schema revert feature’s narrative animation.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fderek-briggs.jpeg&w=256&q=75)
![Consensus algorithms at scale: Part 5 - Handling races](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fconsensus-algorithms-at-scale-part-5%2Fe01ca638698a27fd525223b87ea40fa3f6bae99c-1270x760.png&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsugu-sougoumarane.png&w=256&q=75)
![Consensus algorithms at scale: Part 4 - Establishment and revocation](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fconsensus-algorithms-at-scale-part-4%2F97546a2a7181eb70260f519e785bc2adec1e3991-1270x760.png&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsugu-sougoumarane.png&w=256&q=75)
![Why we chose NanoIDs for PlanetScale’s API](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fwhy-we-chose-nanoids-for-planetscales-api%2F84a4e6bb064aa59ef9f12cadb48e3c8ee81cde3b-1270x760.png&w=3840&q=75)
Why we chose NanoIDs for PlanetScale’s API
Learn why PlanetScale used NanoID to generate obscure and URL friendly identifiers.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![Behind the scenes: How schema reverts work](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fbehind-the-scenes-how-schema-reverts-work%2Fac4e2531351938410fc4a803d5ff3c736477ba8b-1270x760.jpg&w=3840&q=75)
Behind the scenes: How schema reverts work
Learn how we used VReplication to allow for migration reverts with data retention.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fholly-guevara.jpeg&w=256&q=75)
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fshlomi-noach.jpg&w=256&q=75)
![How we made PlanetScale’s background jobs self-healing](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fplaceholder%2Fplaceholder.jpg&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![Introduction to Laravel caching](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fintroduction-to-laravel-caching%2F19911cdb279edf08807741eab75b159f56a0b4f9-1552x872.png&w=3840&q=75)
Introduction to Laravel caching
Learn how to speed up your Laravel applications with caching.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fholly-guevara.jpeg&w=256&q=75)
![Using entropy for user-friendly strong passwords](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fusing-entropy-for-user-friendly-strong-passwords%2F0fcde7bf386a63f0bf7b80415f62c9f7ab164f2d-1552x872.png&w=3840&q=75)
Using entropy for user-friendly strong passwords
When implementing user authentication with passwords throw out the password rules you know.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![How our Rails test suite runs in 1 minute on Buildkite](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fhow-our-rails-test-suite-runs-in-1-minute-on-buildkite%2Fbb7a33e249ba68ee614ebd6b7370e56ce52f8229-1552x872.png&w=3840&q=75)
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.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![NoneSQL All the DevEx](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fnonesql-all-the-devex%2F00668009028e7b8965dcdc66d3990facae2ca245-1552x872.png&w=3840&q=75)
NoneSQL All the DevEx
Databases will win based on superior developer experience not what is under the hood.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjustin-gage.jpeg&w=256&q=75)
![Building PlanetScale with PlanetScale](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fbuilding-planetscale-with-planetscale%2Fd07dc02dd6374860e143feacedc5729a637b3487-1552x872.jpg&w=3840&q=75)
Building PlanetScale with PlanetScale
How PlanetScale uses database branching and non-blocking schema changes to build PlanetScale.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fiheanyi-ekechukwu.jpeg&w=256&q=75)