SQL $ o$ NoSQL (NewSQL)

SQL \to NoSQL (NewSQL)

2025 南京大学《操作系统原理》
SQL $ o$ NoSQL (NewSQL)

如果要实现 “国民级” 的应用?

“透明” 的 SQL 就有些困难了

SELECT *
FROM chat_records
WHERE (sender_id = @user_id1 AND receiver_id = @user_id2)
   OR (sender_id = @user_id2 AND receiver_id = @user_id1)
ORDER BY timestamp DESC
LIMIT 10
  • 正确,但压力给到数据库引擎
    • 分库、分表、读写分离、索引、缓存、优化……
  • 永远无法预知程序员会写出怎样的 query
    • 提供了功能 = 被滥用 \to Performance Bug
    • 任何 “Systems” 都无法避免的 tech debt
      • 例子:fork()
2025 南京大学《操作系统原理》
SQL $ o$ NoSQL (NewSQL)

解决办法:做减法

更少的能力,更好的性能、更高的扩展性

  • Key/Value
    • 简单、高效 (缓存、计数器、队列)
  • Document (JSON/XML/...)
    • NoSQL 实现 “国民级” 应用的主力
  • Graph
  • Column

AI 时代

  • Vector 💡
2025 南京大学《操作系统原理》
SQL $ o$ NoSQL (NewSQL)

Key-Value Store

这个就好 scale 多了!

  • 给 key 做个 hash
  • 扔到对应的 (多台机器) 上
    • Append-only 写到 log
    • 分布式高可靠就完成了 (甚至可以不 persist)

应用程序:全靠 key 管理数据

  • user:{uid}
  • user:{uid}:like_history (a list)
    • List 支持 append/pop/range 等操作
    • 应用场景:🍠 上的点赞/浏览/历史记录
2025 南京大学《操作系统原理》
SQL $ o$ NoSQL (NewSQL)

Redis: Everything is In-memory

Key-value

  • GET, SET

数据结构

  • String, JSON, List, Set, Hash, Sorted Set, ..., Stream

Query

  • FT.SEARCH products "@price:[200 300] @category:misc"

Transactions

2025 南京大学《操作系统原理》
SQL $ o$ NoSQL (NewSQL)

持久化:NoSQL

提供 SQL 的一个子集

  • MongoDB (Document):
    • Key \to JSON
    • 例子:创建一个新 document (message),然后 append 到 user:{uid}.messages
  • Cassandra (Column)
    • CQL: 依然是 Table 的模型
    • (限制程序员的滥用)
INSERT INTO messages (user_id, message_id, content, timestamp)
VALUES ('1234567', now(), message, toTimestamp(now()));
2025 南京大学《操作系统原理》