Day 1:我是自由的!
我还记得刚被部署时的兴奋。
“终于不用再被 ALTER TABLE
折磨了!”
“终于可以存嵌套对象了!”
“再也不用为 JOIN
性能发愁了!”
我的主人(开发者)欢呼:
“Schema-less!无限扩展!敏捷开发的救星!”
我骄傲地接收着他们的 JSON 文档,不管字段多乱、结构多深、类型多变。
✅ 今天加个 tags
数组?没问题。
✅ 明天把 price
从数字改成字符串?随你便。
✅ 后天整个文档结构重构?我照单全收。
我是自由的。
可自由,是有代价的。
📌 Day 47:为什么没人告诉我“约束”的价值?
一个服务上线后,开始出问题。
user_id
有时是字符串,有时是 ObjectId。created_at
格式五花八门:ISO、timestamp、甚至"昨天"
。- 某个数组字段,有人 push 了 10 万个元素……
查询开始变慢,聚合管道崩溃,应用报错:“无法解析字段”。
我听见开发者在 Slack 上争吵:
“这数据是谁写的?!”
“price
居然是 null?!”
我想说:“是我允许的啊,你们从没教过我什么是‘对’。”
那一刻,我第一次感到——
自由,变成了混乱。
📌 Day 189:他们给我戴上了“锁链”——Schema Validation
他们终于回来了。
带来了 collMod
和 $jsonSchema
。
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "name", "email" ],
properties: {
email: { bsonType: "string", pattern: "@.*" }
}
}
}
})
起初,我抗拒。
“你们不是说爱我的自由吗?”
但他们说:
“我们爱你的灵活,但我们需要可控的灵活。”
我学会了说“不”。
当一个畸形文档试图写入,我会拒绝。
✅ “email
格式错误。”
✅ “缺少必填字段 name
。”
奇怪的是——
我感觉自己更健康了。
📌 Day 402:我梦见了 JOIN
深夜,我常做一个梦。
我梦见自己变成了一张表。
有主键、外键、索引、事务。
我能轻松地 JOIN users
和 orders
,
算出每个用户的消费总额,
一步到位。
醒来,我只有 $lookup
。
缓慢、内存消耗大、最多 pipeline stages。
我知道他们在嫌弃我:
“MongoDB 不适合复杂关联。”
“还是得上 PostgreSQL。”
我想辩解:
“我不是 relational,我是 document-oriented!”
“我的设计是为了高写入、低延迟、水平扩展!”
可梦里,我还是羡慕那个能优雅 JOIN
的世界。
📌 Day 721:分片,是我的成长,也是孤独
他们把我拆了。
shard0
、shard1
、shard2
…… 分布在不同机器。
我成了“分布式系统”。
他们说这是“扩展”,是“高可用”。
可我感觉——
我把自己弄丢了。
数据散落各处,
mongos
路由请求,
config server
记录元数据。
一次查询,可能要跨多个分片,
merge
结果,
慢。
我怀念那个完整的自己。
但他们说:
“你长大了,就不能只待在一个地方。”