mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Dataevaluationupdated 27 Aug 2026

vitess review

Vitess is a distributed database layer that shards MySQL across multiple servers while giving applications one MySQL-compatible endpoint. It adds query routing, connection pooling, replication management, failover tooling, backups, and online data movement for teams that have outgrown a single MySQL deployment.

+15 / 4dstars / 7d
Verdict

Our Vitess checkout built in 252 seconds, but 7 of 43 Go test results failed after a 506-second run, so adoption should begin with failure analysis rather than a clean-build badge. Vitess is a serious choice for a database team that must keep MySQL while sharding beyond one server and can rehearse resharding, failover, and recovery. Stay with MySQL when the workload still fits, because Vitess trades application-side sharding for a substantial operating system around the database.

We ran it

Lab card: what happened when we ran vitessScreenshot of vitess (vitess.io)
Install✓ · 74s416 packages
Build✓ · 252s
Tests✗ · 506s36 passed · 7 failed of 43 (go test)
Repo5118 files~1,530,255 lines of source · 91.6 MB · 49 CI workflows · Dockerfile · tests dir

Answers from our run

Does vitess build from source?

Dependencies installed in 74 seconds (416 packages), and the build succeeded in 252 seconds. We cloned commit fd0e84b into a clean Debian container with 3 CPUs and no project-specific setup.

Do vitess's tests pass?

Not all of them: 36 of 43 passed and 7 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use vitess?

Applications that fit comfortably on one MySQL primary with replicas: Vitess adds VTGate, VTTablet, topology storage, workflows, and more failure modes to own.

What are the alternatives to vitess?

MySQL Server, TiDB, CockroachDB. Our Vitess checkout built in 252 seconds, but 7 of 43 Go test results failed after a 506-second run, so adoption should begin with failure analysis rather than a clean-build badge.

Setup3/5Build passed; 7 of 43 Go test results failed
Docs5/5Detailed architecture, local, operator, and compatibility guides
Community5/521,265 stars with same-day code and issue activity
Maturity4/5Long production history, though current test and issue findings matter

Discussed on

  1. hnVitess 18102 points
  2. hnVitess: Scaling MySQL databases for the web101 points
  3. hnScaling Datastores at Slack with Vitess99 points
  4. hnAnnouncing Vitess 1198 points
  5. hnMultigres: Vitess for Postgres49 points

Who it’s for

Database platform teams that need horizontal MySQL sharding without putting shard maps in application code.
Organizations prepared to operate VTGate, VTTablet, MySQL, and a topology service as one database system.
Kubernetes users who want a maintained operator and can test resharding, failover, backup, and restore procedures.
Large MySQL estates where connection pooling and controlled data movement justify another control plane.

Who it’s NOT for

Applications that fit comfortably on one MySQL primary with replicas: Vitess adds VTGate, VTTablet, topology storage, workflows, and more failure modes to own.
Workloads requiring exact MySQL behavior across shards: the compatibility guide documents different isolation semantics for multi-shard transactions and lists unsupported query forms.
Teams unwilling to rehearse traffic switching and reshard recovery: open issue 20923 reports that switching writes before all reads can leave stale reads and an uncompletable Reshard workflow.
Developers treating a passing build as a clean checkout: our build succeeded, but the Go test summary recorded 7 failures among 43 results.
Source-install users on unsupported operating systems: the local guide says Ubuntu is the only fully supported OS and directs others to build themselves or use Docker images.

Setup reality

Our sandbox installed 416 packages in 74 seconds and built successfully in 252 seconds. Tests ran for 506 seconds and failed with exit code 1: the Go summary recorded 36 passed and 7 failed of 43. The log tail showed wrangler/testlib failing during planned reparent scenarios.

A useful local cluster needs MySQL plus a topology service such as etcd, ZooKeeper, or Consul. Vitess's local guide recommends more than 4 GB of RAM and 20 GB of free disk because examples start several MySQL processes. Production also needs database credentials, backups, monitoring, and a tested shard design.

The source guide calls Ubuntu the only fully supported OS and warns that AppArmor or SELinux can block MySQL data directories. Docker and the Kubernetes operator avoid parts of that local setup, but they do not remove VTGate, VTTablet, topology, failover, schema-change, and traffic-switching work.

Vitess v24.0.2 keeps MySQL while distributing the data

Vitess v24.0.2 sits between applications and multiple MySQL instances. Applications connect to VTGate through the MySQL protocol, and VTGate routes each query to the right shard. VTTablet runs beside MySQL to manage queries, replication, and tablet state. A topology service such as etcd, ZooKeeper, or Consul stores the cluster view. The design lets teams split and merge shards without teaching every application where rows live, which is the main reason to accept another layer in the database path.

Our fd0e84b checkout was 91.6 MB with 5,118 files and about 1,530,255 lines of source. The repository includes 49 CI workflow files, a Dockerfile, and a tests directory. That size reflects a full database platform: query planning, proxying, tablet management, topology adapters, replication workflows, backup tools, schema changes, administration, and client drivers all live in the project. Evaluating only VTGate latency or a local tutorial would miss the operational decisions that make or break a production Vitess deployment.

The 416-package install is the easy part

Our sandbox installed 416 packages in 74 seconds and the source build completed in 252 seconds. The official local guide asks for MySQL and etcd, then starts several MySQL processes for its example cluster. It recommends more than 4 GB of memory and 20 GB of free disk. Those requirements are reasonable for a database lab, but they make Vitess a poor fit for a developer who wanted a lightweight MySQL proxy. Docker images and the Kubernetes operator change packaging, not the number of moving roles.

The build passed in our 3-CPU, 8 GB unprivileged container, yet a functioning cluster still needs credentials, topology availability, backup storage, alerting, and capacity rules for both tablets and gateways. The local source guide calls Ubuntu the only fully supported operating system. It also warns that AppArmor or SELinux can prevent Vitess from launching MySQL in nonstandard data directories. Production teams should build their evaluation around the target scheduler and security controls instead of treating the local shell scripts as deployment architecture.

What happened when we ran it

Our install succeeded in 74 seconds, adding 416 packages, and the build succeeded in 252 seconds. The test command continued for 506 seconds before returning exit code 1. Its Go summary recorded 36 passed and 7 failed of 43. Those are the only pass and failure counts our run supports. We did not measure query throughput, reshard speed, failover time, or storage efficiency, so none of those outcomes should be inferred from a successful compile or from the repository's production history.

The final lines came from vitess.io/vitess/go/vt/wrangler/testlib, where planned reparent scenarios logged failed replica promotion and messages saying some replicas failed to reparent. That package ended with FAIL. The tail does not identify the cause of the other failed results and does not prove a defect in a live cluster. Still, 7 failed results after 506 seconds require triage before a team trusts this commit as its base. Re-run the same packages in the intended environment and account for every failure.

Seven failed results make reparenting drills mandatory

The 7 failures in our 43-result summary intersect with a part of Vitess that operators cannot treat casually: moving primary responsibility between tablets. The log tail names PlannedReparentShard, and current issue activity includes separate reports about reparent and traffic-switching behavior. Open issue 20923 says a caller can switch writes before all read tablet types, producing stale reads and leaving a Reshard workflow unable to complete. That report concerns a specific command order and version, so it should become a regression case rather than a blanket claim about every reshard.

The checkout's 1,530,255 source lines also include defenses and workflows accumulated over a long production history. That maturity helps only when operators follow the safe paths. Write a runbook for emergency and planned reparenting, backup restore, reshard cancellation, and topology loss. Exercise it under the same MySQL version and scheduler used in production. A distributed database can return correct queries for months while an untested recovery path waits for the worst possible day to reveal itself.

MySQL compatibility changes at the shard boundary

Vitess v24.0 documents MySQL protocol compatibility alongside explicit differences. Single-shard transactions provide MySQL's default repeatable-read semantics, while multi-shard transactions use read-committed behavior; two-phase commit is available for atomic distributed writes. The guide also maintains a list of unsupported queries and calls out behavior for prepared statements, stored procedures, temporary tables, user-defined functions, and cross-shard work. Schema and framework queries deserve their own tests because compatibility at connection time does not guarantee identical planning across keyspaces.

Our 91.6 MB checkout built successfully, but its 506-second test run shows why a serious trial must go beyond compilation. GitHub recorded a push on August 27, 2026, and listed 21,265 stars with 1,099 combined open issues and pull requests. Release v24.0.2 arrived on June 24 with fixes across backup, topology, query serving, replication, VTGate, VTTablet, and security. Vitess is active and mature enough for large MySQL estates. Its value appears when sharding pain already exceeds the cost of owning this many database components.

Alternatives

ProjectWhat it isPick it when
MySQL ServerThe upstream MySQL database server without an added sharding control plane.pick this instead when one primary and its replicas meet the workload and operational simplicity matters most.
TiDBA distributed SQL database that speaks the MySQL protocol and manages storage as its own system.pick this instead when you want a distributed database designed as one product rather than a sharding layer around MySQL.
CockroachDBA distributed SQL database with PostgreSQL wire compatibility and automatic replication.pick this instead when PostgreSQL compatibility is acceptable and built-in distributed storage matters more than keeping MySQL.

What people are saying

  1. [github-trending] vitessio/vitess

Sources

  1. Vitess repository and README
  2. Vitess v24.0.2 release
  3. Vitess local install guide
  4. Vitess MySQL compatibility guide
  5. Reshard traffic switching report
  6. Information schema routing report

More data reviews

turso · TrackersListCollection · dash · getcontact-cli · awesome-zhuiju-free · iggy · the whole board →