db
MongoDB、DynamoDB、SQL 都必须有主键
SQL | Dynamo | Mongo | |
主键 | PRIMARY KEY | (PK+SK) | _id |
主键唯一性 | Y | Y | Y |
SQL:
Table(表) > Row(记录) > Column
SQL | NoSQL | |
强制Schema | Y | N |
记录可以不同 | N | Y |
Dynamo:
Dynamo 本质上是K-V键值对
存储+文档
。
- (pk+sk)为key,其余为value。
- 如果没有其余属性,value为空。
Table(表) > Item(项/记录) > Attribute(属性,支持嵌套 Map 和 List
)
Dynamo区别于Mongo:Map区别于Item,是字段值而不是完整item
,Map可嵌套,但不支持索引。
(Partition Key + Sort Key)主键,必须自定义。
(Partition Key + Sort Key)复合唯一。
GSI(Global Secondary Index)就是给表额外定义的一组 Partition Key + Sort Key,用于辅助查询。GSI逻辑上和Table平级。类似创建一个可以查询的View。
如果没有GSI,就只能根据(Partition Key + Sort Key)查询。
GSI 可以全局查询,不依赖PK,SK。
LSI 只能分区内查询,依赖PK。
Table
├── Item
│ ├── PK(Necessary)
│ ├── SK(Optional)
│ ├── Attribute 1
│ └── Attribute 2
└── Indexes
├── GSI (PK, SK)
└── LSI (SK)
KeyConditionExpression | FilterExpression | |
级数 | 最多两级(PK+SK) | 无限 |
搜索层级 | 物理分区 | 过滤 |
Mongo:
最接近原生JSON。
Collection(集合) > Document (文档)> Field(字段)
Redis:
基于内存,k-v结构DB。