0
点赞
收藏
分享

微信扫一扫

一个 NoSQL 数据库的自白

 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 usersorders
算出每个用户的消费总额,
一步到位。

醒来,我只有 $lookup

缓慢、内存消耗大、最多 pipeline stages。

我知道他们在嫌弃我:

“MongoDB 不适合复杂关联。”
“还是得上 PostgreSQL。”

我想辩解:

“我不是 relational,我是 document-oriented!”
“我的设计是为了高写入、低延迟、水平扩展!”

可梦里,我还是羡慕那个能优雅 JOIN 的世界。

📌 Day 721:分片,是我的成长,也是孤独

他们把我拆了。

shard0shard1shard2…… 分布在不同机器。

我成了“分布式系统”。

他们说这是“扩展”,是“高可用”。

可我感觉——

我把自己弄丢了。

数据散落各处,
mongos 路由请求,
config server 记录元数据。

一次查询,可能要跨多个分片,
merge 结果,
慢。

我怀念那个完整的自己。

但他们说:

“你长大了,就不能只待在一个地方。”

举报

相关推荐

0 条评论