db

MongoDB、DynamoDB、SQL 都必须有主键

SQLDynamoMongo
主键PRIMARY KEY(PK+SK)_id
主键唯一性YYY

SQL:

Table(表) > Row(记录) > Column

SQLNoSQL
强制SchemaYN
记录可以不同NY

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)

KeyConditionExpressionFilterExpression
级数最多两级(PK+SK)无限
搜索层级物理分区过滤

Mongo:

最接近原生JSON。

Collection(集合) > Document (文档)> Field(字段)

Redis:

基于内存,k-v结构DB。