首先,你的表肯定是做了外键等约束的,所以删除,要从最外层删除。假设你的数据库是Sql Server的。
1、技能表
delete from 技能表 where 人物id in (select 人物id from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3))
2、装备属性表
delete from 装备属性表 where 装备id in (select 装备id from 装备表 where 人物id in (select 人物id from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3)))
3、装备表
delete from 装备表 where 人物id in (select 人物id from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3))
4、人物表
delete from 人物表 where 账号id in (select 账号id from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3)
5、账号表
delete from 账号表 where datediff(day,上次登录时间lasttime,getdate())>=3
一个index可以被分为多个shards,从而分布到不同的物理机上。Shard的划分结果也会影响索引和查询速度。
每个分片都可以处理数据写入和查询请求,在设置索引分片数时,可从以下几个方面考虑:
一个shard就是一个lucene分片,ES底层基于lucene实现。
通常根据集群中的节点数量,对集群中的Shards数进行合理限制。
分片的大小和数量怎么设定?
注1: 小的分片会造成小的分段,从而会增加开销。我们的目的是将平均分片大小控制在几 GB 到几十 GB 之间。对于基于时间的数据的使用场景来说,通常将分片大小控制在 20GB 到 40GB 之间。
注2: 由于每个分片的开销取决于分段的数量和大小,因此通过 forcemerge *** 作强制将较小的分段合并为较大的分段,这样可以减少开销并提高查询性能。 理想情况下,一旦不再向索引写入数据,就应该这样做。 请注意,这是一项比较耗费性能和开销的 *** 作,因此应该在非高峰时段执行。
注3: 我们可以在节点上保留的分片数量与可用的堆内存成正比,但 Elasticsearch 没有强制的固定限制。 一个好的经验法则是确保每个节点的分片数量低于每GB堆内存配置20到25个分片。 因此,具有30GB堆内存的节点应该具有最多600-750个分片,但是低于该限制可以使其保持更好。 这通常有助于集群保持健康。
注4: 如果担心数据的快速增长, 建议根据这条限制: ElasticSearch推荐的最大JVM堆空间是 30~32G, 把分片最大容量限制为 30GB, 然后再对分片数量做合理估算。例如, 如果的数据能达到 200GB, 则最多分配7到8个分片。
索引和shard数并不是越多越好,对于批量读写都会有性能下降,所以要综合考虑性能和容量规划,同时配合压力测试,不存在真正的最优解。
索引的⽣命周期有五个阶段:
ES中open状态的索引都会占用堆内存来存储倒排索引,过多的索引会导致集群整体内存使用率多大,甚至引起内存溢出。所以需要根据自身业务管理历史数据的生命周期,如近3个月的数据open用于快速查询;过去3-6月的数据索引close以释放内存,需要时再开启;超过6个月的可以删除索引。
可以使用索引模板的方式按照一定时间创建新的索引,例如按天创建索引,索引的命名可能是index-yyyy-mm-dd,每天生成不同的索引,清除历史数据时可直接关闭或删除。
ILM :索引生命周期管理,即 Manage the index lifecycle 。
索引的生命周期有四个阶段:
索引的生命周期策略指定了适用于哪些阶段、在每个阶段中执行哪些 *** 作以及何时在各个阶段之间进行转换。
当索引满足一定条件之后,将不再写入数据,而是自动创建一个索引,所有的数据将写入新的索引。
使用滚动索引能够:
官方推荐使用 data stream 数据流来管理时间序列数据。每个数据流都需要一个 索引模板 ,其中包括:
数据流专为追加数据而设计,其中数据流名称可用作 *** 作(读取、写入、翻转、收缩等)目标。如果需要更新数据,可以使用 索引别名 来管理时间序列数据。
ILM 会根据你的配置: 索引大小 、 文档数量 、 所在阶段 ,当满足这些条件时,自动实现 rollover 。
要让 ILM 管理索引,必须要在 indexlifecyclename 索引设置中指定有效的策略。
要为滚动索引创建生命周期策略,你要创建该策略并把它加入到 索引模板 中。
可以通过 Kibana 管理页面设置,也可以通过API设置。
可以通过 Kibana 管理页面设置,也可以通过API设置。
如果要给滚动索引设置策略,需要手动创建第一个被该策略管理的索引,并指定为可写索引。
索引的名称必须跟索引模板里定义的模式相匹配,并且以数字结尾。
你可以在创建索引的时候指定一个策略,也可以直接将策略应用到一个已经存在的索引上通过 Kibana 管理或者更新设置的API。一旦你应用了策略, ILM 立即会开始管理该索引。
查看错误:
重新运行报错的一步:
查看 ILM 状态:
终止 ILM :
开启 ILM :
设置 indexlifecycleindexing_complete 为 true 。
举个例子,如果你要改变一系列新索引的名称,并保留之前根据你配置的策略产生的索引数据,你可以:
相关连接: >
ES新手入门学习的时候,经常会和MySQL做对比,一个索引可以理解为一个数据库,分片就可以理解为一张表被分割了shards_numbers - 1次,文档类型为type类型,在高版本中在逐渐被剔除。
ES官方也给出了答案:作者不希望不同类型的相同字段在同一个Lucene中。

索引的状态有:红色、**、绿色和黑色四种(ES插件可以看出来)。
green:健康状态,代表所有的主分片和副本分片都可用;
yellow:所有的主分片可用,部分副本分片不可用;
red:部分主分片不可用;
black:索引处于关闭状态,不对外进行交互,一般磁盘空间不足时ES会自动设置。
ES是一款近实时的搜索引擎,而非实时的搜索引擎。ES每秒产生一个新分段,新段先写入文件系统缓存(对读取可见),稍后再执行刷盘 *** 作。由于新段不会立即刷盘,这个过程如果出现意外情况,存在数据丢失的风险,通常做法是记录事务日志。
分片的目的不只是为了分割巨大的索引,还可以并发读。一个索引包含多个分片,一个分片是一个Lucene索引,一个Lucene索引又由很多分段组成,每一个分段都是一个倒排索引。
段合并:ES会选择大小相似的段进行合并,ES每次refersh都会生成一个Lucene段,每次查询都会轮流检查每一个段,查询完对结果进行合并,段越多,搜索也就越慢。由于分段的不变性(访问不需要加锁),更新删除 *** 作本质是标记删除,在段合并的过程中,标记删除的数据并不会写入到新段中,这样就达到了删除的目的。写 *** 作先写Lucene段,再写translog,如果先写translog,写入Lucene段失败,则还需要对translog进行回滚处理。
ES的只读和删除设置,是对索引和磁盘的一种保护机制,当然也可以手动设置索引的只读和删除,以下是ES自动触发的:

索引的别名 *** 作,比如要对一个月的所有索引(每天创建一个索引)进行处理,就可以为索引创建别名,一个索引可以有多个别名,一个别名也可以指向多个索引。
数据库
文章转载自李宇涛L,如果涉嫌侵权,请发送邮件至:contact@modbpro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

相关阅读
202
一、开始创建索引
您可以通过 Elasticsearch 的 RESTFul API 来创建索引:
PUT >
以上就是关于数据库中es索引技术是怎么回事,哪位大神能否详细给说问一下全部的内容,包括:数据库中es索引技术是怎么回事,哪位大神能否详细给说问一下、ES索引设计、ES中的索引生命周期管理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)