做后台开发、写小程序接口,或者搭个个人博客系统,现在绕不开Noref="/tag/143/" style="color:#3D6345;font-weight:bold;">SQL。它不像MySQL那样非得建表、写JOIN,但也不代表随便敲几行就能拿到想要的数据——用错语法,查半天没结果,是常事。
MongoDB:文档型,像查微信聊天记录一样找数据
假设你存了一堆用户行为日志,每条是这样的JSON:
{"user_id": "u1001", "action": "click", "page": "/home", "ts": 1715823490}
想查今天所有点击首页的用户?直接写:
db.logs.find({"action": "click", "page": "/home", "ts": {$gt: 1715737200}})
加个 .limit(10) 就只取前10条;用 .sort({"ts": -1}) 能按时间倒序排——比翻聊天记录还顺手。
Redis:键值对,快得像开抽屉
它不搞复杂查询,但“查得快”是真本事。比如缓存商品库存,key 是 stock:1024,value 是数字 86:
GET stock:1024
如果想批量查几个商品的库存?MGET stock:1024 stock:1025 stock:1026 一行搞定。再比如查某用户最近5次登录IP,用的是列表结构:
LRANGE user:login:uid777 0 4
没有WHERE,不走索引,靠的是结构选得对、命令记得准。
Cassandra:宽列族,适合查“某个用户的所有订单”
它不支持任意字段查询,但对“按用户ID查全部订单”这种场景极快。建表时就定好主键:
CREATE TABLE orders (user_id TEXT, order_time TIMESTAMP, order_id UUID, amount DECIMAL, PRIMARY KEY (user_id, order_time));
然后直接查:
SELECT * FROM orders WHERE user_id = 'u1001';
注意:不能只查 order_time > '2024-05-01',必须带上 user_id——这不是限制,是设计哲学:先锁定分区,再在分区内扫。
小提醒:别把NoSQL当万能钥匙
想查“上海地区、下单金额超200、且含赠品的订单”?MongoDB能做,但可能慢;Redis干不了;Cassandra基本不支持。这时候,该上Elasticsearch就上,该回MySQL就回——工具是为人服务的,不是反过来。