键值型与图型NoSQL数据库的数据存储形式及样例咨询
不同类型数据存储的存储形态示例
我目前正在学习数据工程,正在了解不同数据存储中数据的存储形态,以下是整理的完整示例,补充了缺失的图数据库、键值数据库存储形态说明:
给定原始Bonuses表: ID Last First Bonus 1 Doe John 8000 2 Smith Jane 4000 3 Beck Sam 1000
行式数据库(以PostgreSQL为例)
按行存储,整行所有字段数据连续排布,适合需要同时查询整行多字段的场景:
1,Doe,John,8000;2,Smith,Jane,4000;3,Beck,Sam,1000;
列式数据库(典型代表为ClickHouse,原示例标注的MariaDB默认是行式存储)
按列存储,同一列的所有数据连续排布,适合统计分析类的单列聚合查询场景:
1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000;
列族数据库(以Cassandra为例)
以行键为核心,同一行的多个关联列组成列族集中存储,适合高并发的宽表查询场景:
"Bonuses" : { row1 : { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000}, row2 : { "ID":2, "Last":"Smith", "First":"Jane", "Bonus":4000}, row3 : { "ID":3, "Last":"Beck", "First":"Sam", "Bonus":1000} }
文档型数据库(以MongoDB为例)
每条数据为独立的BSON文档,支持灵活的字段结构,适合半结构化数据存储场景:
document1 { "ID": 1, "Last": "Doe", "First": "John", "Bonus": 8000 } document2 { "ID": 2, "Last": "Smith", "First": "Jane", "Bonus": 4000 } document3 { "ID": 3, "Last": "Beck", "First": "Sam", "Bonus": 1000 }
图数据库(以Neo4j为例)
以节点、关系、属性为核心存储单元,适合存储强关联数据,你给出的奖金表可存储为员工类型的节点,形态如下:
(:员工 {ID:1, Last:"Doe", First:"John", Bonus:8000}) (:员工 {ID:2, Last:"Smith", First:"Jane", Bonus:4000}) (:员工 {ID:3, Last:"Beck", First:"Sam", Bonus:1000})
后续如果需要关联员工的所属部门、上级、项目等数据,直接新增对应节点和关联关系即可,无需修改现有节点结构。
键值数据库(以Redis为例)
以唯一键映射对应值的形式存储,读写性能极高,适合热点数据缓存场景,针对该奖金表可使用哈希结构存储,形态如下:
# 键格式为 bonuses:员工ID,值为哈希结构存储的员工完整奖金信息 bonuses:1 = {ID:1, Last:"Doe", First:"John", Bonus:8000} bonuses:2 = {ID:2, Last:"Smith", First:"Jane", Bonus:4000} bonuses:3 = {ID:3, Last:"Beck", First:"Sam", Bonus:1000}
如果只需要高频查询员工奖金,也可以简化存储结构,键设为bonus:员工ID,值直接存奖金数值,查询效率更高。
内容的提问来源于stack exchange,提问作者Renz Carillo
相关产品推荐
相关产品推荐

