数据库种类
数据库种类
你手机里存着两千张照片,数据微信聊天记录占了十几个G,库种银行App里躺着半年流水。数据这些数据,库种其实都住在不同类型的数据数据库里。不是库种所有数据都适合塞进同一种容器——这就像搬家,衣服能卷进真空袋,数据但沙发必须拆了才能进门。库种
关系型数据库是数据老牌贵族。MySQL、库种PostgreSQL、数据Oracle,库种它们统治了世界三十年。数据数据被规规矩矩地塞进表格,库种行是数据记录,列是字段,表与表之间靠外键勾连。银行转账、订单系统、员工花名册,这些讲究“一致性”的活儿,非它们不可。但代价是死板。你想给用户表加个“个性签名”字段,得先锁表,万一表里有一亿行,业务就得停摆几小时。我见过某电商公司为加个字段,半夜三点做迁移,结果数据没对齐,第二天订单全串了。
后来出了NoSQL,意思是“不止SQL”。MongoDB带头冲锋,把数据存成JSON文档,像俄罗斯套娃一样层层嵌套。一个用户的所有信息——地址、订单、购物车——全塞进一个文档里,读取时一次到位,不用再“联表查询”绕弯子。代价是冗余,同一份数据可能重复存了十遍,改一处得全盘更新。可这换来了灵活。创业公司最爱的就是它,产品需求天天变,字段说加就加,没人管你结构乱不乱。
键值对数据库更极端。Redis把所有东西都当“钥匙-锁”的关系,你给一个字符串,它回你一个值。没有表,没有查询语言,只有简单的GET和SET。但快,快得离谱。微博的点赞数、淘宝的购物车、游戏里的在线状态,全是Redis在扛。数据放内存里,读写是微秒级。可它存不了复杂关系,你也别指望用它做报表分析——那就像拿跑车拉货,跑得是快,但装不下。
列式数据库则是给分析型数据准备的。HBase和Cassandra把数据按列存储,而不是按行。你要统计“过去一年所有用户的平均消费”,普通数据库得扫全表,列式数据库只管读“消费”那一列,速度差出上百倍。代价是写入慢,而且不适合频繁更新。大数据分析平台、日志系统、物联网传感器数据,这些“写多读少”的场景,是它们的主场。
还有图数据库,专门处理关系。Neo4j把人和人、人和物之间的关系画成节点和边,查“张三的朋友的朋友里谁买过茅台”这种问题,SQL得写五层嵌套子查询,图数据库一条语句瞬间出结果。社交网络、推荐系统、反欺诈风控,全靠它。我有个做征信的朋友说,他们用图数据库查关联交易,原来跑半天的SQL,换图数据库后三秒就出结果,把老板都吓着了。
最后是时序数据库,专门对付时间戳。InfluxDB、TimescaleDB,它们优化了按时间顺序写入和查询的速度。服务器监控指标、股票价格、智能电表读数,每秒产生几百万条带时间的数据,普通数据库早崩了,时序数据库却能边写边压缩,还能自动算平均值、峰值。你手机里的健康App,步数曲线就是它画的。
现实世界从不干净。一家公司通常混着用好几种:用户主数据放MySQL,实时会话用Redis,行为日志进HBase,关系图谱丢给Neo4j。选型不是技术崇拜,是看数据长什么样。就像工具箱里,扳手、螺丝刀、电钻各有各的用处,非拿扳手拧螺丝,手疼,活儿还糙。
