听课笔记(21讲——28讲)
第21讲
简单来说就是每次更新都要带上上一次的版本号。
第22讲
第23讲
第24讲
前边之前的版本是错误的,后边的是修改之后可执行的正确的。
第25讲
并发所的retry策略:当更新的时候,遇到冲突的时候,我们可以通过设置retry来设定重试几次,比如5次。
就是再次获取document的版本号,基于版本号再次去更新,如果成功就OK了,如果失败了那就重复重新获取版本号和更新的操作。
第26讲
批量查询的好处,节省了性能开销
查询命令:
GET /_mget
{
"docs":[
{
"_index": "test_index",
"_type": "test_type",
"_id": 1
},
{
"_index":"test_index",
"_type":"test_type",
"_id":2
}
]
}
结果显示:
{
"docs": [
{
"_index": "test_index",
"_type": "test_type",
"_id": "1",
"_version": 41,
"found": true,
"_source": {
"num": 12,
"tags": []
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "2",
"_version": 1,
"found": true,
"_source": {
"test field1": "test field1"
}
}
]
}
mget是很重要的是,如果一次查询的数据量很大的时候,使用mget可以减少网络开销,将性能提升数倍。
第27讲:批量的增删改
index操作可以使创建新文档,也可以是全量替换。
bulcket操作对json有严格的要求
bulcket操作中,任意一个操作是不会影响其他的操作的,各个操作都是独立进行的。
POST /_bulk
{"delete":{"_index":"test_index","_type":"test_type","_id":1}}
{"create":{"_index":"test_index","_type":"test_type","_id":5}}
{"test field":"test5"}
{"create":{"_index":"test_index","_type":"test_type","_id":2}}
{"test field":"test2"}
{"index":{"_index":"test_index","_type":"test_type","_id":6}}
{"test_field":"test6"}
{"index":{"_index":"test_index","_type":"test_type","_id":2}}
{"test_field":"replace test6"}
{"update":{"_index":"test_index","_type":"test_type","_id":2}}
{"doc":{"test_field121":"partial updated test121"}}
bulk的语法:
{“action”:{“metadata”}}
{"data"}
举例说明:比如你现在想要创建一个文档,放bulk里边,开起来是这个样子:
{“index”:{“_index”:“test_index”,"_type":"test_type","_id":1}}
{"test_field1":"test1","test_field2":"test2"}
有哪些类型可以执行呢?
(1)delete:删除一个文档
(2)create: put /index/type/id/_create,强制创建一个文档
(3)index:普通put操作,可以是创建文档,也可以是全量替换文档
(4)update:执行的partial update操作
第28讲
较为深入的是partial update
批量操作有两个:
(1):mget:批量查询
(2):bulk:批量更新
ES的分布式:
分布式的数据存储系统,可以存储和操作json格式的文档