For most product teams, relational databases (PostgreSQL, MySQL, SQLite) should remain the default system of record because they provide shared truth, constraints, transactions, and explicit schema that enables business reasoning across teams; NoSQL should only be adopted for specific workloads with proven needs for flexibility, scale, or specialized access patterns, not as a default choice to avoid schema discipline or hypothetical future scale.
深度探索
先修知识
- 暂无数据。
后续步骤
- 暂无数据。
深度探索
The NoSQL Lie That Keeps Developers Overbuilding本站添加:
[snorts] >> You probably don't need no sequel.
You probably need to stop using hypothetical scale as an excuse to avoid data discipline right now. That's the uncomfortable version of this argument. NoSQL isn't bad.
DynamoDB, MongoDB, Redis, Cassandra style systems, they're real tools for real workloads.
But a lot of teams don't choose them because they have a measured workload that demands them.
They choose them because they want to move fast.
They want to avoid schema or they want to prepare for some imagined future where SQL supposedly falls over.
And that's kind of backwards. For most product teams, the default should still be relational.
PostgreSQL, MySQL, SQLite, one of my favorites, MariaDB, systems like that.
They're boring for a reason. They give you relationships, constraints, transactions, indexes, migrations, joins, and ad hoc SQL in plain English.
They give the business a shared surface of truth.
And most products need that more than they need theoretical flexibility. The mainstream story says serious modern systems eventually outgrow SQL. It sounds sophisticated because it borrows language from companies operating at some enormous scale. Amazon Dynamo, for example, was built for highly available key-value workloads. The Dynamo paper describes incremental scalability, high availability, and eventual consistency under Amazon shopping cart and service workloads. That's a legitimate engineering context, but that context isn't the same as building a customer dashboard or a billing workflow or an audit trail, or an internal admin tool, or a reporting feature, or a permission system. Quick thanks to DevStats for sponsoring this video. Most dashboards are great at making charts that everybody sees and nobody actions.
DevStats is a lot more useful. It pulls together DORA, flow metrics, AI impact, and engineering investment, so everyone can see where the team is actually spending time, where delivery gets stuck, and what should be fixed. Check out DevStats. The link is up here and in the description. Back to the video. This is where teams get themselves into some serious trouble. They import the architectural language of scale without importing the actual scale problem. I mean, would you drive a train to work every day if you're not carrying anything or shipping anything? It's kind of overkill. A relational database asks some annoying questions very early.
What's a customer? What's an account?
What owns a subscription? What does active mean? What has to be unique? What can't be null? What changes together?
What needs to be queried later? Those questions, they feel slow when you're trying to ship fast, but they're not bureaucracy. They're the domain becoming explicit. No SQL feels faster because it lets you postpone those questions. You can store the document. You can add fields later. You can let each service interpret the shape. You can move validation into application code, but that doesn't remove schema. It relocates schema. Every serious system has a schema. The only question is, where does it live? Is it explicit, reviewed, migrated, constrained, and visible, or is it implicit, duplicated, scattered across customers, and discovered during incidents.
Schemaless usually doesn't mean there's no structure. It means the structure lives in application conventions, code paths, and tribal memory. That can be fine when records genuinely vary and the blast radius is kind of small. It becomes really painful when product, finance, support, security, leadership, and on-call engineers all need the same understanding of the same data. And that's the hidden tax. NoSQL can make writing data feel easy while making the business harder to reason about.
Relational databases aren't just storage engines. They're operational truth services. A support engineer can inspect customer state. An on-call engineer can join across entities during an incident.
Finance can reconcile subscriptions.
Security can investigate access. Product can ask cross-entity questions that weren't perfectly known 6 months ago.
With relational systems, joins, constraints, normalized data, and ad hoc SQL make those questions possible in a very direct way. With NoSQL, you may still answer those questions, but a lot of times you answer them by adding more machinery, streams, ETL, search indexes, warehouses, materialized views, duplicated read models, secondary indexes, custom repair jobs. Sometimes that architecture is necessary, but if you adopted NoSQL just to avoid modeling that data, you might spend the next year rebuilding the query flexibility that you just gave up. Now, the strongest case of NoSQL is not SQL is old. That's not a serious argument. I'm old. I still have some pretty serious advice and opinions. The serious argument is this.
This specific workload has a specific shape, scale, latency need, availability requirement, or data model that a specialized store serves better. That's real. DynamoDB is a good example. Its own design guidance emphasizes identifying access patterns before designing tables and keys. You start with the application's reads and writes, then design around them. That's powerful when you understand the workload really well. It's risky when the product is still discovering the domain. If your access patterns are stable and business critical, access pattern first design can be excellent. If your business logic is changing every sprint, it can become a cage. MongoDB has a real place, too.
Flexible schema and embedded related data can fit document-oriented use cases, especially when related data is usually retrieved as a whole aggregate.
In other words, if you're always going to basically fetch this whole block of data, you might as well make it a block of data. But, MongoDB also has transaction documentation for a reason.
Real applications might need atomicity across multiple documents, collections, or databases. When that happens, you're back in the world of consistency and transactions. Redis is also valuable, but mostly because it's specialized.
Caches, queues, counters, locks, rate limits, leaderboards, session stores, feature flags, and idempotency keys.
Ephemeral coordination.
Those are good uses.
They don't imply Redis should become the official system of record for your core business. Cassandra-style architectures emphasize distribution, replication, and high availability. That can matter. But again, those are tradeoffs. They're not free scale. Distributed systems force you to reason about partitions, consistency, and availability. Dynamo DB makes this visible with eventually consistent and strongly consistent reads. That's not a flaw. It's an explicit design choice, but it means engineers have to know when stale reads are acceptable and when they're not.
If you're building billing, permission, entitlement, audit trails, financial records, or cross-entity workflows, that question isn't academic. Google Spanner is also instructive. It provides externally consistent distributed transactions using sophisticated infrastructure and clock synchronization. That tells us something important. Teams want distribution and relational style correctness at the same time.
It also tells us that getting both is complex.
So, don't buy a distributed system problem before you have a measured distributed system need. Bad relational schemas can absolutely be rigid. They can be over normalized, prematurely abstracted, bureaucratic, and painful to change, but relational systems also support change. Migrations support change. Constraints preserve assumption while you change. Indexes adapt access patterns. Transactions protect shared state. PostgreSQL even supports JSON and JSONB, JSON-specific operators, and indexing options. That doesn't mean every document workload belongs in PostgreSQL. It means a lot of teams reach for a document database when their relational database already offers controlled flexibility. The market evidence also doesn't support the idea that SQL lost. DB database engines continue to show relation databases [clears throat] like Oracle, MySQL, MariaDB, Microsoft SQL Server, PostgreSQL, and SQLite. They're the most widely used systems. Stack Overflow's 2024 developer survey lists PostgreSQL, MySQL, SQLite, and Microsoft SQL Server.
They're among the most commonly used database technologies.
And MongoDB and Redis, they're pretty high up there in the list, too. That's the real world. Mixed persistence, not database religion. So, here's the practical CTO rule. Use relational for your system of record.
If the product has customers, accounts, permissions, subscriptions, invoices, approvals, audit trails, workflows, or reporting needs, start relational unless you have a concrete reason not to. Then add specialized stores. Redis for cache or coordination, search infrastructure for search, a warehouse for analytics, object storage for blobs, a document store for a specific aggregate, DynamoDB for a known access pattern-driven workload. That's a healthy polyglot persistence. There's one truth, which drives systems serving those specific needs. The only truth is derived systems serving specific needs. Before adopting NoSQL as a source of truth, you might require a simple document from the team. What are the exact reads and writes? What has to be strongly consistent? What can be stale?
What are the failure modes? How will support inspect state? How will analytics query it? How will migrations work? How will data be repaired? Oh, you never need to fix your data? Well, that's because you haven't had production systems yet. What happens when the original developers leave?
Scary one. If the team can't answer those questions, it's not ready for NoSQL. It's using a database choice to avoid domain clarity, and that's the leadership issue. NoSQL is dangerous when it becomes a way to call ambiguity flexibility. Schema is not the enemy of speed. Unexamined schema is. One way or another, you're going to pay the bill.
You can pay it now, or you can pay it later with interest. Use relational systems by default. Use no sequels for very specific purposes, very deliberate ones.
And after the workload proves it's worth the tax, because the database that makes version one easy can make year three miserable. And the boring database on day one might be the reason your team can still understand the business on day 1,000.
相关推荐
She Lost Her Car... But We Still Helped Her!
RecoveryBoyz
129 views•2026-05-30
SHOCKING! Leaked Photos Reveal Ding Yuxi’s Stunning Transformation Into a Warrior
BINGBONGMEDIA99
101 views•2026-05-30
Top 9 BEST New Gravel Bikes 2026 | LEAKED Bikes & The New Specialized Crux
cyclingweekly
2K views•2026-05-30
Norwegian Man Forced to Grow Up in India After Being Left There at Age 10 😳
VividVaulttt
176 views•2026-05-30
H&M try on haul. spring, summer fashion ideas.
VanityAndMe
222 views•2026-05-31
FIFA World Cup 2026 | Full Details, Teams, Matches & Everything You Need to Know
farooqkha-h5
108 views•2026-05-30
This Literally Is the Most Forgotten Thing in Fortnite History..
Clen-
4K views•2026-05-30
A Romantic Spring in 1950s Netherlands | Pavolira’s Vintage Songs | Soft Vintage Jazz
Golden1950sRadio
391 views•2026-05-30











