dynamoDB
键
partition key:分区键
定义:分区键是用于分布数据存储的主键,每个项(Item)在表中都必须有一个唯一的分区键值。
特点:
sort key:排序键
定义:排序键是用于组织和查询表中数据的一部分主键,每个项目在表中都可以有一个分区键和一个可选的排序键。
特点:
一般以时间作为排序键
索引
GSI (Global Secondary Index):全局二级索引
查询方式:
GetItem – 从表中检索单个项目。这是读取单个项目的最高效方式,因为它将提供对项目物理位置的直接访问。(DynamoDB 还提供
BatchGetItem 操作,允许在单个操作中执行最多 100 次 GetItem 调用。) Query –
检索具有特定分区键的所有项目。在这些项目中,您可以将条件应用于排序键并仅检索一部分数据。 Scan –
检索指定表中的所有项目。(不应对大型表使用此操作,因为这可能会占用大量系统资源。)
选择:
go第三方库:https://github.com/guregu/dynamo
Query:
GetItem:
定义:
索引是一个数据结构,它包含了表中某个或多个字段的值以及指向这些值对应的实际数据位置的引用。它类似于书籍的目录,允许数据库系统快速查找特定数据而无需扫描整个数据集合。
用途:
工作原理:
索引通常是B树或B树的变种。当创建索引时,MongoDB会在指定的字段上构建索引数据结构,以存储值和对应的数据位置引用。在查询时,MongoDB可以使用索引来快速定位并检索数据。
关键概念:
Redis 几种数据类型及应用场景 - 掘金
String 普通存储 适合存单value eg:粉丝数
hash 特别适合存储 value是map 适合存struct eg:用户信息对象
List 双向链表与消息队列 eg:粉丝列表
set 无序排重列表 eg:所有粉丝求共同关注
zset 提供score进行自动排序 eg:按时间取最新数据
幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。
保证函数不被重复执行
应用场景:多次重复点击购买商品
下面代码保证了只有第一次会设置键的值
func main() {
...
// 检查幂等性的 Lua 脚本
script := `
if redis.call('exists', KEYS[1]) == 0 then
redis.call('set', KEYS[1], ARGV[1])
return 1
else
return 0
end
`
// 执行 Lua 脚本
result, err := client.Eval(ctx, script, []string{key}, value).Result()
if err != nil {
fmt.Println("Error:", err)
return
}
}
写入:BodyString(),BodyJson()
读取:cookie:searchAfter(LastSortMap)
fetchSource(true):默认true,查询结果将包括源文档的内容
fetchSource(false):仅可以访问文档的ID和排序信息
bool查询:允许组合多个查询条件,包括 must、should、must_not 等
must:必须包含
should:任意一个包含
query = query.Must(elastic.NewBoolQuery().Should(
elastic.NewBoolQuery().Must(elastic.NewMatchQuery("xxx", 1), elastic.NewMatchQuery("uid", uid)),
elastic.NewBoolQuery().MustNot(elastic.NewMatchQuery("xxx", 1)),
).MinimumShouldMatch("1"))
GET hot_recommend/_search
{
"query":{
"match": {
"creator" : "2W0qxSLm95WkjPyerQ6h4rMCeAB",
"ugcType": 1
}
},
"sort": [
{
"updateTime": {
"order": "desc"
}
}
]
}