ast

阅读 / 问答 / 标签

AQw和SAST是不是一个型号?

AQW和SAST都是指中国的某些装备型号,但它们不是同一个型号。AQW(Assault Rifle, Individual, Light, Modular)是中国自主研制的一种轻型模块化突击步枪,可根据任务需要更换枪管、枪托、握把等部件。AQW使用5.8毫米口径的子弹,采用气动式自动射击系统,具有较好的精度和射速。AQW已经在中国军队中广泛使用,并被出口到其他国家。SAST(Small Arms Sniping Tool)是中国自主研制的一种狙击步枪,也称为“小型武器狙击工具”。SAST使用7.62毫米口径的子弹,具有较长的射程和较高的精度,适合进行远距离射击。SAST还配备了光学瞄准镜等专业配件,提高了射手的射击精度和命中率。因此,AQW和SAST虽然都是中国的某些装备型号,但是是两种不同类型的枪械,分别用于不同的作战需求。

SAST先科节能热水器怎么样

SAST先科节能热水器拥有2000w双管加热功能,支持瞬间加热,可以根据不同场景来切换加热模式,从而减少加热风险。想要了解SAST先科节能热水器怎么样的朋友,快来跟着好物君看看吧。SAST先科节能热水器怎么样SAST先科节能热水器是一款储水式的电热水器,可以提供全家人安全的沐浴体验。SAST先科节能热水器拥有变频速热的功能,支持全家人畅快地沐浴。SAST先科节能热水器拥有可视化水温面板,方便我们实时了解水温,从此不用担心突然遇到冷水的问题,更不用担心洗到一般就没有热水了。SAST先科节能热水器好用吗SAST先科节能热水器好用。SAST先科节能热水器拥有双管高效速热功能,可以应变不同的用水时刻,其变频可调,还有3档可以选择的档位,支持我们按需加热,从而更加节能省电。

先科sast支持什么格式 先科sast怎么用

先科sast全格式网路影音DVD播放机是先科公司与2012年4月份5日针对广大家庭用户推出的又一款功能强大、性能稳定的高清网路全格式播放机+DTS5.1解码DVD。 先科sast支持什么格式 相容EVD、DVD、SVCD、VCD、CD、CD-R/RW、JPEG和MP3、MPEG4、DIVX等多种格式碟片。 没有主流的RMVB格式想要下载视频到U盘观看 ,转换成MPEG格式即可 ,转换大小720*480 ,码数1200左右 ,注意编码器选择为mpeg2video ,还支持AVI的格式(DIVX编码)。 先科sast怎么用 1.【FM 收音机】 FM数位身历声收音机,电台记忆播放。 2.【MP3 中断点记忆播放】 自动记忆,再次开机从上次退出时的“曲目. 3.长按关机或开机,在USB或者TF卡模式,短按播放或者暂停,;在FM模式下,短按可回圈选择已被记忆保存的电台。 先科sast怎么连接电脑 如果要和电脑连接,需要一条线,这条线的特征是连接电脑这头的插头是和普通耳机的插头一样,令一端连接功放的和功放机普通的连接插头一样,通常是一个红色的一个白色的,插入时和功放机的插口颜色对应就行, 先科sast售后 售后电话: 0755-82412945而且以人为本,追求卓越是先科产品技术领先的宗旨。纳百川而入海、聚群英于一堂,先科在其发展过程中,培养造就了一批高素质的科技人员队伍,有数十个科研成果荣获国家、省、市的奖励。所以其售后还是有保证的。 先科sast价格 先科V525-2 参考价格:66元 先科V626FM 参考价格:88元 先科sast故障 先科sast音箱出现故障:有时候正常播放音乐的时候,突然之间高音没有了,只有在主音量把音量调大一下,冲击一下高音,有时候要调好几下它才能恢复正常,这是什么原因呢?有两个办法可以试试,一个是电脑音讯驱动从安装一遍,在一个就是音响里面的电容有坏的了,建议去电脑城询问。

sast是什么牌子?

sast指先科集团。先科集团作为一家具有规模经济的高科技企业,其成功与发展得到了党中央、国务院、省市各级政府领导的高度重视和亲切关怀。先科商标包括中文先科字样、英文SAST以及立体三角激光图形等一系列标记,是“先进科技”的代表,在重塑先科产品链的进程中。特点:以人为本,追求卓越是先科产品技术领先的宗旨。纳百川而入海、聚群英于一堂,先科在其发展过程中,培养造就了一批高素质的科技人员队伍,有数十个科研成果荣获国家、省、市的奖励。曾参加第一届音乐天使音箱联合会,作为诚信自律的企业代表发言,会议取得良好效果。近些年,先科的科技人员队伍不断发展壮大,科技人员的地位也得到进一步提高,在企业上下形成了尊重知识,尊重科技人才的良好氛围。一批享有国务院政府津贴的教授,广东省有突出贡献的专家,深圳市优秀专家,在企业中发挥着重要的作用。

英语last semester怎么翻译?

last semester,这个英文词组的中文翻译是:上学期,或者是上个赛季。

ASTM E208和E436什么关系

ASTM E208 测定铁素体钢无塑性转变温度用坠重试验方法是用来测量5/8 inch(即15.9 mm)及以上厚度铁素体钢板的零塑性转变温度(简称NDT)。NDT温度是钢的断裂方式从塑性断裂方式转变成脆性的临界转变温度。在NDT以上温度,当钢的试样所受载荷超过其极限拉伸强度时,先发生塑性伸长或变形最后断裂。在NDT以下温度,同样的样品所受载荷超过其屈服强度(大约其极限拉伸强度的一半),将以脆性方式断裂。一旦开始脆性断裂,裂纹将连续扩展至到整个样品截面,释放其应力,或者裂纹扩展至碰到另一种塑性更好的钢而应力得到释放。ASTM E436 铁素体钢坠重破裂试验的方法本标准规定了铁素体钢落锤撕裂试验方法的原理、术语和定义、试样、试验设备、试验步骤、试验结果评定和试验报告。本标准适用于厚度3mm~20mm,屈服强度或规定非比例延伸强度低于825N/mm2(825MPa)的铁素体钢试样,在断裂模式由脆性转韧性的温度范围内一次冲断断口形貌特征的测定。

Pigs (Three Different Ones) [2011 - Remaster] 歌词

歌曲名:Pigs (Three Different Ones) [2011 - Remaster]歌手:Pink Floyd专辑:Animals (2011 - Remaster)Pink Floyd: Pigs (3 different ones )Big man, pig man, ha ha charade you are.You well heeled big wheel, ha ha charade you are.And when your hand is on your heart,You"re nearly a good laugh,Almost a joker,With your head down in the pig bin,Saying "Keep on digging."Pig stain on your fat chin.What do you hope to find.When you"re down in the pig mine.You"re nearly a laugh,But you"re really a cry.Bus stop rat bag, ha ha charade you are.You fucked up old hag, ha ha charade you are.You radiate cold shafts of broken glass.You"re nearly a good laugh,Almost worth a quick grin.You like the feel of steel,You"re hot stuff with a hatpin,And good fun with a hand gun.You"re nearly a laugh,You"re nearly a laughBut you"re really a cry.Hey you, Whitehouse, Ha ha charade you are.You house proud town mouse, Ha ha charade you areYou"re trying to keep our feelings off the street.You"re nearly a real treat,All tight lips and cold feetAnd do you feel abused?.....! .....! .....! .....!You gotta stem the evil tide,And keep it all on the inside.Mary you"re nearly a treat,Mary you"re nearly a treatBut you"re really a cry.http://music.baidu.com/song/10477585

英语谚语:Fire, water, and money are good servants, but bad masters 中文翻译是什么?

英语谚语: Fire water and money are good servants but bad masters 中文意思: 水火金钱是忠仆,使用不当是祸首。 随机推荐10条英文谚语: Every tide hath its ebb 兴盛之日必有衰退之时。 Every tree is known by its own fruit 观其言行,知其为人。 Every why has a wherefore 事出有因。 Evil es to us by ells and goes away by inches 罪恶来时,尺进寸退。 Evil munications corrupt good manners 交往恶劣,有损风度。 Evil gotten evil spent 悖入悖出。 Example is better than precept 言教不如身教。 Exchange is no robbery 公平交易并非强行夺取。 Exercise temperance fresh air and needful rest are the best of all physicians 锻链、节制、新鲜空气和必要的休息是最好的医生。 Experience is a school from which one can never graduate 经验无止境。 英语谚语: Fire water and money are good servants but bad masters 中文意思: 水火金钱是忠仆,使用不当是祸首。

a new study shows that regularly eating fast foo

A new study shows that regularly eating fast food isn"t just bad for your waistline, it can also damage your liver in ways that are surprisingly similar to hepatitis.The results were revealed on the television program, "The Doctors," where it was found that even just a month of eating fast food can cause significant changes to your liver.French fries in particular were dangerous because of the extra ingredients added."We know that they are adding salt, and cooking it in fat, but they"re also putting sugar on them too. Why sugar? Because it helps get them golden crispy," said Dr. Drew Ordon, who appears on the show.Foods like fried chicken and onion rings were especially bad for the liver."The amount of fat and saturated fats creates a condition called fatty liver," Ordon said.He said the changes in liver enzymes are in line with the effects of hepatitis. That disease can ultimately cause liver failure.The US has 160,000 fast food restaurants serving an estimated 50 million customers every day."We"re all guilty, and every now and then you have to splurge, but the problem is that so many people are getting into eating fast food, especially kids, as their staple, and I think that"s the point," Ordon said.Just ordering a salad won"t help as Ordon warned that any item marked healthy or fresh at a fast food restaurant likely has added chemicals, as there aren"t clear regulations for those foods."Some places actually put propylene glycol on the salads, which is anti-freeze, the reason behind that is that it prevents wilting," said Ordon. "And although they say a little anti-freeze isn"t going to hurt you, obviously given a choice you don"t want to be eating anti-freeze.

Stranded (2000 Digital Remaster) 歌词

歌曲名:Stranded (2000 Digital Remaster)歌手:Heart专辑:Greatest Hits 1985-1995Julien-K - StrandedA shadow in the child"s eye,before he ever hears a lieHe"s looking for something realYeah I knowJust stop all the music,the pollution in our livesWe"re looking for something realYeah I knowDoesn"t make a sound as I look insideImplode as I close my eyesTry to stay in the linesMaybe it"s a matter of timeBut what does it matterwhat does is matterThe shadows inside - controlling my lifeAs confusion blinds my eyesFacing the signs, I"m losing my mindAlways I"m stranded hereDrowning in pride, wasting my timeAs confusion blinds my eyesFacing the signs, I"m losing my mindAlways I"m stranded hereIn a place where the stalkers hideI try to clear out my mindI"m looking for something realYeah I knowI break for the exitAs I circle in my mindstill looking for something realYeah I know - I knowThe shadows inside - controlling my lifeAs confusion blinds my eyesFacing the signs, I"m losing my mindAlways I"m stranded hereDrowning in pride, wasting my timeAs confusion blinds my eyesFacing the signs, I"m losing my mindAlways I"m stranded hereI"m alone - so pleaseI keep running - I"m running awayThe shadows inside - controlling my lifeAs confusion blinds my eyesFacing the signs, I"m losing my mindAlways I"m stranded hereDrowning in pride, wasting my timeAs confusion blinds my eyesFacing the signs, I"m losing my mindAlways I"m stranded herehttp://music.baidu.com/song/2627468

铁拳7MasterRaven剧情介绍

铁拳7全部人物都有着各自的身世背景,系列到第7代剧情故事背景非常庞大,今天深空高玩为大家带来铁拳7MasterRaven剧情介绍,带你领略这位人物的精彩。更多精彩内容:铁拳7人物介绍大全铁拳7 Master Raven人物背景Master Raven隶属于联合国秘密情报部门,她的代号是“Master Raven”。她是一名情报部门的高级官员,负责处理各种危险任务。随着三岛平八夺回三岛财阀并对G公司宣战,她加入了监视三岛财阀的任务当中。铁拳7 Master Raven结局cg动画铁拳7(Tekken 7)PC豪华破解版

求Sleeping at Last的Saturn的中文歌词

你在离开之前带我见识了星星的胆魄即便死亡之后,星光依旧闪耀呼吸浅短间,你诠释了无限就连生命也变得如此珍稀美丽我忍不住问出声只为你能再说一遍我试着将它记下却找不到笔我愿倾尽一切去聆听你又重复了一遍那是宇宙的开始只为能被我看见我忍不住问出声只为你能再说一遍我试着将它记下却找不到笔你又重复了一遍那是宇宙的开始只为能被我看见呼吸浅短间,我将诠释无限我们的存在是如此珍稀美丽ps:DW 10TH : )

LD1117ASTR线性稳压器工作原理及特点

LD1117ASTR 线性稳压器工作原理及特点: 线性稳压器(Linear Regulator)使用在其线性区域内运行的晶体管或 FET,从应用的输入电压中减去超额的电压,产生经过调节的输出电压。其产品均采用小型封装,具有出色的性能,并且提供热过载保护、安全限流等增值特性,关断模式还能大幅降低功耗。 线性稳压器的工作原理:   我们从一个简单的例子开始。在嵌入式系统中,可从前端电源提供一个12V总线电压轨。在系统板上,需要一个3.3V电压为一个运算放大器(运放)供电。产生3.3V电压最简单的方法是使用一个从12V总线引出的电阻分压器,如图1所示。这种做法效果好吗?回答常常是“否”。在不同的工作条件下,运放的VCC引脚电流可能会发生变化。假如采用一个固定的电阻分压器,则IC VCC电压将随负载而改变。此外,12V总线输入还有可能未得到良好的调节。在同一个系统中,也许有很多其他的负载共享12V电压轨。由于总线阻抗的原因,12V总线电压会随着总线负载情况的变化而改变。因此,电阻分压器不能为运放提供一个用于确保其正确操作的3.3V稳定电压。于是,需要一个专用的电压调节环路。如图2所示,反馈环路必需调整顶端电阻器R1的阻值以动态地调节VCC上的3.3V.  图1 电阻分压器采用12V总线输入产生3.3VDC  图2 反馈环路调整串联电阻器R1的阻值以调节3.3V   此类可变电阻器可利用一个线性稳压器来实现,如图3所示。线性稳压器使一个双极性或场效应功率晶体管(FET)在其线性模式中运作。这样,晶体管起的作用就是一个与输出负载相串联的可变电阻器。从概念上说,如需构建反馈环路,可由一个误差放大器利用一个采样电阻器网络(RA和RB)来检测DC输出电压,然后将反馈电压VFB与一个基准电压VREF进行比较。误差放大器输出电压通过一个电流放大器驱动串联功率晶体管的基极。当输入VBUS电压下降或负载电流增大时,VCC输出电压下降。反馈电压VFB也将下降。因此,反馈误差放大器和电流放大器产生更多的电流并输入晶体管Q1的基极。这将减小电压降 VCE,因而使VCC输出电压恢复,这样一来VFB=VREF.另一方面,如果VCC输出电压上升,则负反馈电路采取相似的方式增加VCE以确保3.3V 输出的准确调节。总之,VO的任何变化都被线性稳压器晶体管的VCE电压所消减。所以,输出电压VCC始终恒定并处于良好调节状态。  图3 线性稳压器可实现一个可变电阻器以调节输出电压  三、线性稳压器的特点:   所谓的抗短路能力要求,是指在相关材料的短路条件下,稳压器不损坏。稳压器的抗短路能力包括承受短路的耐热能力和承受短路的动稳定能力两个方面。   压差和接地电流值定了后就可确定稳压器适用的设备类型。五大主流线性稳压器每个都具有不同的旁路元件(passelement和独特性能,电压差和接地电流值主要由线性稳压器的旁路元件(passelement确定。分别适合不同的设备使用。   即使没有输出电容也相当稳定,它比较适合电压差较高的设备使用,规范NPN稳压器的优点是具有约等于PNP晶体管基极电流的稳定接地电流。但较高的压差使得这种稳压器不适合许多嵌入式 设备使用。   NPN旁路晶体管稳压器是一种不错的选择,对于嵌入式应用而言,因为它压差小,容易使用。不过这种稳压器仍不适合具有很低压差要求的电池供电设备使用,因为它压差不够低。高增益NPN旁路管可使接地电流稳定在几个毫安,而且它公共发射极结构具有很低的输出阻抗。   其中的旁路元件就是PNP晶体管。输入输出压差一般在0.30.7V之间。因为压差低,PNP旁路晶体管是一种低压差稳压器。因此这种PNP旁路晶体管稳压器非常适合电池供电的嵌入式设备使用。不过它大接地电流会缩短电池的寿另外,PNP晶体管增益较低,会形成数毫安的不稳定接地电流。因为采用公共发射极结构,因此它输出阻抗比较高,这意味着需要外接特定范围容量和等效串联电阻(ESR电容才干够稳定工作。

Runaround Sue (1991 - Remaster) 歌词

歌曲名:Runaround Sue (1991 - Remaster)歌手:Dion专辑:60s Summer PartyRun AroundBY:Blues Traveler -once upon a midnight deariei woke with something in my headi couldn"t escape the memoryof a phone call and of what you saidlike a game show contestant with a parting gifti could not believe my eyeswhen i saw through the voice of a trusted friendwho needs to humor me and tell me liesyeah humor me and tell me liesand i"ll lie too and say i don"t mindand as we seek so shall we findand when you"re feeling open i"ll still be herebut not without a certain degree of fearof what will be with you and mei still can see things hopefullybut youwhy you wanna give me a run-aroundis it a sure-fire way to speed things upwhen all it does is slow me downand shake me and my confidenceabout a great many thingsbut i"ve been there i can see it cowerlike a nervous magician waiting in the wingsof a bad play where the heroes are rightand nobody thinks or expects too muchand hollywood"s calling for the movie rightssinging hey babe let"s keep in touchhey baby let"s keep in touchbut i want more than a touch i want you to reach meand show me all the things no one else can seeso what you feel becomes mine as welland soon if we"re lucky we"d be unable to tellwhat"s yours and mine the fishing"s fineand it doesn"t have to rhyme so don"t feed me a linebut youwhy you wanna give me a run-aroundis it a sure-fire wa to speed things upwhen all it does is slow me downSOLO^_^tra la la la la bomba dear this is the pilot speakingand i"ve got some news for youit seems my ship still stands no matter what you dropand there ain"t a whole lot that you can dooh sure the banner may be torn and the wind"s gotten colderperhaps i"ve grown a little cynicalbut i know no matter what the waitress bringsi shall drink in and always be fulloh i like coffeeand i like teai"d like to be able to enter a final pleai still got this dream that you just can"t shakei love you to the point you can no longer takewell all right okayso be that wayi hope and praythat there"s something left to saybut youwhy you wanna give me a run-aroundis it a sure-fire way to speed things upwhen all it does is slow me downbut youwhy you wanna give me a run-aroundis it a sure-fire way to speed things upwhen all it does is slow me downhttp://music.baidu.com/song/10344622

pacificcoast是什么意思

太平洋海岸Pacific Coast[地名] [美国·加拿大] 太平洋海岸区;

LF2是什么材质 ASTM A350的标准。在国内用什么材质来代替呢?

低温低合金钢锻件,相当于16MnD LF2的温度标准请查下JB4726 及ASTM A350

>>> *first,middles,last=range(10) >>> first [0, 1, 2, 3, 4, 5, 6, 7] Python里的

first值为[0]middles值为[1,2,3,4,5,6,7,8]last值为[9]

ScrumMaster到底做什么工作?

ScrumMaster的职责简单的说可以总结为: 具体的来说,ScrumMaster的职责到底是什么呢? 1. ScrumMaster的首要职责就是教练,对该怎么踢负责的教练,不是为进几个球负责的教练。 比如PO如何梳理产品列表、团队如何做故事点的估算、Scrum的5个活动(迭代计划会、迭代回顾会、迭代评审会、每日站会、需求梳理会)该怎么做。 工作是否做的下来,TA说不上话,但是工作该如何遵守Scrum的流程,ScrumMaster说了算。 TA并不去要求团队们要做到什么(注意我是说的做到什么,而不是依照什么流程做)。TA应该去问团队,我怎样能帮助团队工作得更有效。 2. ScrumMaster要充当团队的保护伞。 3. ScrumMaster是清除障碍的人。 比如团队对外部的硬件或者软件依赖;需要其他团队的支持;需要工具的支持等。 4. ScrumMaster是沟通连接的桥梁。 5. ScrumMaster是变革代言人。 比如,改变项目经理过去安排任务的习惯;改变团队成员等着分配任务习惯;引进新的测试工具;推进更多的敏捷实践到团队,比如TDD。 这些变革的推动,更多的是靠TA的沟通技巧,比如探索式提问;耐心引导,让团队发现问题;勇敢对外部不合理的安排说不;等等这都对ScrumMaster提出更高的要求。TA是一个服务型的Leader。

Scrum Master 不仅仅是引导者

我们先来看看 引导者(Facilitator) 的定义: 该定义(和其它现有定义)的主要内容是: 我们通常将Scrum Master理解为会议的引导者,Scrum Master 是维护Scrum 框架和流程,负责支持和优化流程。 Scrum Master 除了引导者还需要开发其他的技能 帮助团队新成员解释或者展现他的知识,以便他们获得新的知识。Scrum Master是Scrum和相关敏捷实践的专家。Scrum大师在整个组织中传播这种知识,使人们能够更有效地参与工作。 例如: 成立新团队时候,我们要对队员进行 《敏捷基础知识培训》、《Scrum 培训》、《产品思维》等培训。 辅导是一种关系,在这种关系中,经验较丰富的人帮助指导经验较少的人开展工作。它包括知识、经验以及心理支持的非正式传递,以实现广泛的持续发展。当团队在日常使用Scrum时,Scrum Master帮助他们更有效地使用它。辅导的目标是帮助个人变得自给自足,帮助团队变成自组织团队。 例如: 在站会后,Scrum Master 要针对站会中的问题进行辅导,纠正。 根据团队的显示情况定制流程和看板。 在这项技能中,Scrum Master旨在提高个人或团队的绩效,以实现个人或团队设定的目标。虽然它可能包括教学或辅导的元素,但重点是帮助个人或团队提高他们自己的表现。换句话说,就是帮助他们自己。教练不同于辅导,它专注于具体的任务或目标,而不是更普遍的目标或整体发展。国际教练联合会(ICF)对教练的定义是:与客户合作,在一个发人深省和富有创造性的过程中,激发他们最大限度地发挥个人和职业潜力。 教练技能是 高级Scrum Master 的技能,需要不断的实践和练习。 Scrum Master是转型的先锋,他带领新的团队学习和实践敏捷,帮助团队树立信息。 所以Scrum Master 同样需要对敏捷转型的发展过程有一定了解,转型中遇到的障碍,过程,方法,工具等。

PMI-ACP与Certified Scrum Master认证有何区别

从内容上:两个学习主要是内容和适用环境的不同,CSM是两天课程学习scrum一种方法,适合5-9人团队,ACP学习是敏捷管理全流程,除了scrum还会重点学习看板/精益XP等多种常用敏捷方法。优点:适用环境上:CSM适合5-9人团队做迭代,但是一旦团队做大之后CSM就不适用了;ACP既能适用小团队,又能适用大团队/多团队迭代的敏捷项目管理。我们ACP课前两天课程内容是涵盖CSM两天学习的,课程体系更加完整,适用性和认可度更高。(针对PMP持证的同学)ACP换证更方便,PDU同步使用,CSM是两年续证一次,100美金。利益点:ACP是帮你实现知识+理念+实践的敏捷全景化系统思维的,不仅仅是某种学习方法应用,而是教如何借力敏捷工具及方法实现项目成果(价值)交付。学员案例:很多学完CSM的同学反馈说,企业现在需要的是scrum+工作模式,scrum很好但是单一的scrum流程套用很难满足当下复杂的项目环境的要求,匹配公司发展需求,实现价值创收。

项目经理和ScrumMaster的区别

面试中常常被问到项目经理和ScrumMaster究竟有什么区别,如果用一句话来概括他们的区别就是,项目经理是一个团队的领导者、决策者,在项目期间负责“管控”团队,从而实现项目的目标,ScrumMaster是一个团队的教练、引导者,负责“激励”团队,指导团队实施Scrum流程和规则。 1、传统的项目经理在组织中是经过授权的,而ScrumMaster在团队中没有授权,ScrumMaster在组织中最重要的职责是实践敏捷思想,确保Scrum流程的正确执行并使得Scrum的收益最大化。 2、传统的项目经理负责团队成员任务的分工,而Scrum中强调自管理,ScrumMaster很重要的任务是帮助团队得到能力的提升,不负责具体的任务。 3、ScrumMaster属于服务型领导,负责在自组织和跨职能方面提供指导

敏捷教练(scrum master)是什么?

敏捷教练管理信息交换的过程。 scrum模拟最初由Hirotaka Takeuchi和Ikujiro Nonaka在论文中应用于制造业,这个方法常用于敏捷软件开发(agile software development)和其它类型的项目管理。 在拉格比中,重新开始比赛并列争球的时候,对立的两对挤在一起。在产品开发中,每个早上团队成员都挤在一起开一个站立会议,会议中他们回顾进展,实质上也是重新开始这个项目。 在这个日常的会议中,有时候也叫做scrum,敏捷教练会向团队成员提出以下三个问题:你昨天做了什么?这个过程中有哪些阻碍?你今天要做什么? 尽管敏捷教练(scrum master)的头衔听起来很有权威,权威教练不是项目领导,也不用为后果负责,整个团队一起承担后果。但这并不意味着这个工作很简单。 敏捷教练(scrum master)负以下责任:帮助团队在特定时期要达到什么目的这一问题上达成一致意见。帮助团队在日常scrum中达成一致意见。帮助团队集中注意并遵循日常scrum中一致同意的规则。清除团队进步的阻碍。保护团队不受外部干扰来源不详;敬请注意使用!

elasticsearch 怎么修改score 计算算法

1 需要在accounts.json所在的目录运行curl命令。2 localhost:9200是ES得访问地址和端口3 bank是索引的名称4 account是类型的名称5 索引和类型的名称在文件中如果有定义,可以省略;如果没有则必须要指定6 _bulk是rest得命令,可以批量执行多个操作(操作是在json文件中定义的,原理可以参考之前的翻译)7 pretty是将返回的信息以可读的JSON形式返回。执行完上述的命令后,可以通过下面的命令查询:

Elasticsearch7.8.0 配置x-pack基础安全

X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 ES7.0+之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。 自6.8以及7.1+版本之后,基础级安全永久免费。 默认情况下,拥有安全免费许可证时,Elasticsearch安全功能被禁用。 要启用安全功能,需要设置xpack.security.enabled。 在每个节点的elasticsearch.yml配置文件中,新增: 使用范围:配置传输层安全性适用于具有多个节点的集群以及需要外网通信访问的单节点ES。 使用环回地址127.0.0.1的单节点ES可以不用配置。 Elasticsearch节点可能存储是机密的数据,而无处不在的网络攻击对这些数据垂涎欲滴。 网络攻击包括对数据的嗅探,对数据的操纵,以及试图获得对服务器的访问权限,进而访问存储数据的文件。 保护节点的安全有助于降低来自网络的攻击的风险 。 1、证书实现加密通信的原理 TLS需要X.509证书(X.509 证书是一个数字证书,它使用 X.509 公有密钥基础设施标准将公有密钥与证书中包含的身份相关联。X.509 证书由一家名为证书颁发机构 (CA) 的可信实体颁发。CA 持有一个或多个名为 CA 证书的特殊证书,它使用这种证书来颁发 X.509 证书。只有证书颁发机构才有权访问 CA 证书)才能对与之通信的应用程序执行加密和身份验证。 为了使节点之间的通信真正安全, 必须对证书进行验证 。 在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。 这样,只需要使用由同一CA签名的证书,即可自动允许该节点加入集群。 2、借助elasticsearch-certutil命令生成证书 启用安全功能后,必须使用TLS来确保节点之间的通信已加密。 在elasticsearch.yml中心新增配置如下: 借助:elasticsearch-setup-passwords 设置集群密码。 核心: auto - 随机生成密码。 interactive - 自定义不同用户的密码。 注意:必须配置好xpack之后,才能设置密码。否则会报错。 最简单的方法, 假定是初始部署集群阶段。 X-Pack安全配置的核心三步骤: 这些对于安全来说只是皮毛,更多的角色、权限、Space需要借助Kibana实现。 5.1 pom文件 5.2修改配置文件

怎么将更改elasticsearch服务端端口

elasticsearch的config文件夹里面有两个配置文 件:elasticsearch.yml和logging.yml,第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来记录日 志的,所以logging.yml里的设置按普通log4j配置文件来设置就行了。下面主要讲解下elasticsearch.yml这个文件中可配置的 东西。cluster.name: elasticsearch配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。node.name: "Franz Kafka"节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。node.master: true指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。

elasticsearch 把很多类型都放在一个索引下面 会不会导致查询慢

主要看数据量ES索引优化篇主要从两个方面解决问题,一是索引数据过程;二是检索过程。(本文主要介绍)索引数据过程我在上面几篇文章中有提到怎么创建索引和导入数据,但是大家可能会遇到索引数据比较慢的过程。其实明白索引的原理就可以有针对性的进行优化。ES索引的过程到相对Lucene的索引过程多了分布式数据的扩展,而这ES主要是用tranlog进行各节点之间的数据平衡。所以从上我可以通过索引的settings进行第一优化:“index.translog.flush_threshold_ops”: “100000″“index.refresh_interval”: “-1″,这两个参数第一是到tranlog数据达到多少条进行平衡,默认为5000,而这个过程相对而言是比较浪费时间和资源的。所以我们可以将这个值调大一些还是设为-1关闭,进而手动进行tranlog平衡。第二参数是刷新频率,默认为120s是指索引在生命周期内定时刷新,一但有数据进来能refresh像lucene里面commit,我们知道当数据addDoucment会,还不能检索到要commit之后才能行数据的检索所以可以将其关闭,在最初索引完后手动refresh一之,然后将索引setting里面的index.refresh_interval参数按需求进行修改,从而可以提高索引过程效率。另外的知道ES索引过程中如果有副本存在,数据也会马上同步到副本中去。我个人建议在索引过程中将副本数设为0,待索引完成后将副本数按需量改回来,这样也可以提高索引效率。“number_of_replicas”: 0上面聊了一次索引过程的优化之后,我们再来聊一下检索速度比较慢的问题,其实检索速度快度与索引质量有很大的关系。而索引质量的好坏与很多因素有关。一、分片数分片数,与检索速度非常相关的的指标,如果分片数过少或过多都会导致检索比较慢。分片数过多会导致检索时打开比较多的文件别外也会导致多台服务器之间通讯。而分片数过少为导至单个分片索引过大,所以检索速度慢。在确定分片数之前需要进行单服务单索引单分片的测试。比如我之前在IBM-3650的机器上,创建一个索引,该索引只有一个分片,分别在不同数据量的情况下进行检索速度测试。最后测出单个分片的内容为20G。所以索引分片数=数据总量/单分片数目前,我们数据量为4亿多条,索引大小为近1.5T左右。因为是文档数据所以单数据都中8K以前。现在检索速度保证在100ms 以下。特别情况在500ms以下,做200,400,800,1000,1000+用户长时间并发测试时最坏在750ms以下.二、副本数副本数与索引的稳定性有比较大的关系,怎么说,如果ES在非正常挂了,经常会导致分片丢失,为了保证这些数据的完整性,可以通过副本来解决这个问题。建议在建完索引后在执行Optimize后,马上将副本数调整过来。大家经常有一个误去副本越多,检索越快,这是不对的,副本对于检索速度其它是减无增的我曾做过实现,随副本数的增加检索速度会有微量的下降,所以大家在设置副本数时,需要找一个平衡值。另外设置副本后,大家有可能会出现两次相同检索,出现出现不同值的情况,这里可能是由于tranlog没有平衡、或是分片路由的问题,可以通过?preference=_primary 让检索在主片分上进行。三、分词其实分词对于索引的影响可大可小,看自己把握。大家越许认为词库的越多,分词效果越好,索引质量越好,其实不然。分词有很多算法,大部分基于词表进行分词。也就是说词表的大小决定索引大小。所以分词与索引膨涨率有直接链接。词表不应很多,而对文档相关特征性较强的即可。比如论文的数据进行建索引,分词的词表与论文的特征越相似,词表数量越小,在保证查全查准的情况下,索引的大小可以减少很多。索引大小减少了,那么检索速度也就提高了。四、索引段索引段即lucene中的segments概念,我们知道ES索引过程中会refresh和tranlog也就是说我们在索引过程中segments number不至一个。而segments number与检索是有直接联系的,segments number越多检索越慢,而将segments numbers 有可能的情况下保证为1这将可以提到将近一半的检索速度。$ curl -XPOST ‘http://localhost:9200/twitter/_optimize? max_num_segments =1′五、删除文档删除文档在Lucene中删除文档,数据不会马上进行硬盘上除去,而进在lucene索引中产生一个.del的文件,而在检索过程中这部分数据也会参与检索,lucene在检索过程会判断是否删除了,如果删除了在过滤掉。这样也会降低检索效率。所以可以执行清除删除文档。$ curl -XPOST ‘http://localhost:9200/twitter/_optimize? only_expunge_deletes =true

Far East Family Band的《Timeless》 歌词

歌曲名:Timeless歌手:Far East Family Band专辑:Nipponjin张力尹 - TIMELESS我不愿意 听你说放弃累的心 仿佛失去全部力气多想可以 继续拥抱你让爱情 用微笑一路走下去Timeless 这不是离别若爱不能倒回 这一刻会永远Hold tight babyTimeless 珍藏在我心扉像一场重感冒让人疲惫 慢慢的复原we both agreeThis is timeless love..没了呼吸 慢慢我远去但伤心 一直盘旋在那原地我用全力呼喊你 谁静静在听一颗心 还隐隐作痛在低泣停不了想念的泪滴还有什么领悟让我坚定再无法捉紧 难道一切注定Timeless 这不是离别若爱不能倒回 这一刻会永远Hold tight 、 babyTimeless 珍藏在我心扉像一场重感冒让人疲惫 慢慢的复原we both agreeThis is timeless love..yeah...baby It"s timeless..oh baby It"s timelessTimeless 回忆不断翻飞像一场重感冒让人疲惫 慢慢的复原http://music.baidu.com/song/52108164

elasticsearch索引主要实现方式

Elasticsearch是什么?Elasticsearch是位于ElasticStack核心的分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富您的数据并将其存储在Elasticsearch中。Kibana使您能够以交互方式探索、可视化和分享对数据的见解,并管理。Elasticsearch是一个分布式文档存储。Elasticsearch存储的是序列化为JSON文档的复杂数据结构,而不是以列行数据的形式存储信息。当集群中有多个Elasticsearch节点时,存储的文档分布在整个集群中,可以立即从任何节点访问。Elasticsearch是由ShayBanon发起的一个开源搜索服务器项目,2010年2月发布。迄今,该项目已发展成为搜索和数据分析解决方案领域的主要一员,广泛应用于声名卓著或鲜为人知的搜索应用程序。Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它可以在很短的时间内存储,搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。搜索引擎,不支持join表等操作。主要用于全文检索。不适合做数据库。如何选择合适的数据库解决方案?1、如果有强大的技术团队,关系型和非关系型数据库都可选择。一般来讲,非关系型数据库需要更多管理维护的时间。2、如果你要储存会话信息,用户配置信息,购物车数据,建议使用NoSQL数据库;不过90%的企业或个人,首选数据库都是MySQL数据库。3、(一)、Access(二)SQLServer(三)MySQL,Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。4、虽然把上面的架构全部组合在一起可以形成一个强大的高可用,高负载的数据库系统,但是架构选择合适才是最重要的。混合架构虽然能够解决所有的场景的问题,但是也会面临更多的挑战,你以为的完美架构,背后其实有着更多的坑。5、例如,如果你需要的是数据分析仓库,关系数据库可能不是一个适合的选择;如果你处理事务的应用要求严格的数据完整性和一致性,就不要考虑NoSQL了。不要重新发明轮子在过去的数十年,开源数据库技术迅速发展壮大。6、本文首先讨论了基于第三范式的数据库表的基本设计,着重论述了建立主键和索引的策略和方案,然后从数据库表的扩展设计和库表对象的放置等角度概述了数据库管理系统的优化方案。ElasticSearch倒排索引及其原理1、倒排索引采用ImmutableDesign,一旦生成,不可更改。Segment写入磁盘的过程相对耗时,所以借助文件系统缓存,Refresh时,先将Segment写入文件缓存中,以开放查询。2、之前我们已经了解过,Elasticsearch是一个基于Lucene实现的分布式全文检索引擎,其实Elasticsearch倒排索引就是Lucene的倒排索引。3、所谓的倒排索引,就是把你的数据内容先分词,每句话分成一个一个的关键词,然后记录好每一个关键词对应出现在了哪些id标识的数据。4、可以将对es的操作记录下来,来确保当出现故障的时候,已经落地到磁盘的数据不会丢失,并在重启的时候可以从操作记录中将数据恢复过来。5、Elasticsearch中使用一种称为倒排索引的结构,适用于快速的全文搜索。一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。elasticsearch-倒排索引原理1、倒排索引采用ImmutableDesign,一旦生成,不可更改。Segment写入磁盘的过程相对耗时,所以借助文件系统缓存,Refresh时,先将Segment写入文件缓存中,以开放查询。2、Elasticsearch中使用一种称为倒排索引的结构,适用于快速的全文搜索。一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。3、elasticsearch提供了translog来记录这些操作,结合oscachedsegments数据定时落盘来实现数据可靠性保证(flush)。文档被添加到buffer同时追加到translog:进行refresh操作,清空buffer,文档可被搜索但尚未flush到磁盘。4、如果Elasticsearch密钥库受密码保护,则必须先输入密钥库密码,然后才能为内置用户设置密码。为弹性用户设置密码后,引导密码不再有效,无法使用该命令。在某些情况下,分片副本的Lucene索引或事务日志可能会损坏。5、Elasticsearch的查询原理是将查询的关键词与倒排索引中的词条进行匹配,查询的关键词与倒排索引中的词条必须完全相同视为匹配,否则不匹配。这意味着在插入文档时是否进行分析和查询时是否进行分析将产生非常不同的结果。6、财务平台亿级数据量毫秒级查询优化之elasticsearch原理解析_wang123459的博客-CSDN博客_elasticsearch查询优化mysql底层B-tree支持矮胖,高胖的时候就很难受,说白了就是数据量多会增加IO操作。ES底层倒排索引。Elasticsearch一般情况下如果es服务正常启动,可以通过接口的方式获取elasticsearch版本信息:curlhttp://10.1:9200上述命令可以得到elasticsearch的服务状态和其他信息包括版本号。Elasticsearch是位于ElasticStack核心的分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富您的数据并将其存储在Elasticsearch中。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch架构简单介绍如下。索引索引(index)是Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。你可以把索引看成关系型数据库的表。然而,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。如何用elasticsearch5.2实现全文索引1、安装ik分词器到elasticsearch很简单,它有个插件目录analysis-ik,和一个配置目录ik,分别拷贝到plugins和conf目录就可以了。2、ES使用倒序索引来加速全文索引。一个倒序索引由两部分组成:如果我们想要搜索quickbrown,我们仅仅只需要找每一个term出现的文档即可。如下图:每一个文档都匹配到了,但是第一个比第二个要匹配的多。3、每次将文本类型数据插入Elasticsearch索引时,都会对其进行分析,然后存储在反向索引中。根据分析器的配置方式,这会影响您的搜索功能,因为分析器也适用于全文搜索。

Elasticsearch中Text和Keyword类型的区别

很多刚开始学习 Elasticsearch 的人经常会混淆Text 和Keyword数据类型。 它们之间的区别很简单,但非常关键。 它们之间的本质区别在于:对于 Text 类型,将文本存储到倒排索引之前,会使用分析器对其进行分析,而 Keyword 类型则不会分析。文档是否被分析过会影响其查询的结果。关于倒排索引和分析器的内容可以参考: https://www.jianshu.com/p/04d29098851a 如果将包含字符串的文档添加到 Elasticsearch,而之前没有定义字段的映射关系,那么 Elasticsearch 会自动创建一个包含 Text 和 Keyword 类型的动态映射。 即使它适用于动态映射,也建议在文档添加之前定义索引的映射关系,以节省空间并提高写入速度。 如:未定义mapping,直接添加文档内容,发现"message”的数据类型是 text ,“message.keyword"的数据类型是 keyword 。 返回mapping的结果 现在新建一个索引 text-vs-keyword ,并设置其mapping, keyword_field 字段设置为 keyword 类型, text_field 字段设置为 text 类型, text_and_keyword_mapping 为多字段类型,其本身为 text 类型,而 text_and_keyword_mapping.keyword 字段为 keyword 类型。 这两种字段类型在倒排索引中的存储方式不同,索引过程中的差异会影响Elasticsearch 进行查询的时间。 首先添加一条文档 添加后,索引中便会有一条文档 对于 keyword 类型,由于Elasticsearch不会使用分析器对其进行分析,所以你输入什么文本,索引就会按照原样进行保存。下图为文本在倒排索引中存储的样子。对于 text 类型,Elasticsearch会先使用分析器对文本进行分析,再存储到倒排索引中。Elasticsearch默认使用标准分析器(standard analyzer),先对文本分词再转化为小写。关于标准分析器可以参考先前文章: https://www.jianshu.com/p/04d29098851a 标准分析器对文本进行分析后的结果 根据分析后的结果,下图为分词存储在倒排索引中的样子。 现在已经知道了 Text 和 Keyword 存储在倒排索引中的区别,接下来学习他们在查询中的区别。 查询分为两种查询 Match Query 和 Term Query 的区别与 Text 和 Keyword 的区别类似, Match Query 在查询时会对输入的关键词进行分析,而 Term Query 不会。 Elasticsearch 的查询原理是将查询的关键词与倒排索引中的词条进行匹配,查询的关键词与倒排索引中的词条必须完全相同视为匹配,否则不匹配。 这意味着在插入文档时是否进行分析和查询时是否进行分析将产生非常不同的结果。 不同的字段和不同的查询一共可以产生4种情况:以X代表不分析,O代表分析,左侧代表插入文档时是否分析,右侧代表查询时是否分析,则OX代表插入时分析,查询时不分析。 由于插入文档的 keyword 字段和 Term Query 查询时都不会进行分析,因此只有当文本完全匹配才会返回结果。 如果尝试文档中的一些词,由于不能与整篇文档相匹配,也不会返回结果。 这里有个疑问,查询关键词分析后的各个分词与倒排索引中的“The quick brown fox jumps over the lazy dog”不完全匹配,但为什么会产生结果呢? 这是因为我们在 Match Query 查询时使用的分析器不是标准分析器,Elasticsearch使用了关键词分析器(Keyword Analyzer),因此 Elasticsearch 在查询中没有任何改变。更多分析器可以参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html 查看Keyword Analyzer分析后的结果,发现并没有对搜索关键词进行分词。 当选择标准分词器时进行 Match Query 查询时将不会得到任何结果。 text 字段在文档插入时会对文本进行分析,得到若干个分词。 尝试两条查询语句,一条查询关键词为完整的句子,另一条只有一个单词。 两条语句都返回空结果: 将查询单词转换为小写试下,由于查询关键字"the"与倒排索引中的"the"正好匹配,所以会返回该条记录。 text 字段和Match Query查询都会进行分析。 下面尝试两条查询语句 这两条查询语句都返回了结果: 以下情况推荐使用 keyword 类型: 掌握 text 和 keyword 数据类型的工作原理是学习Elasticsearch的内容之一,这两者的区别似乎很简单,但非常重要。如果需要两种数据类型,则可以在创建映射时使用多字段功能。 https://codecurated.com/blog/elasticsearch-text-vs-keyword/

ElasticSearch性能优化实践(JVM调优+ES调优)

近一年内对公司的 ELK 日志系统做过性能优化,也对 SkyWalking 使用的 ES 存储进行过性能优化,在此做一些总结。本篇主要是讲 ES 在 ELK 架构中作为日志存储时的性能优化方案。 随着接入ELK的应用越来越多, 每日新增索引约 230 个,新增 document 约 3000万到 5000万 。 每日上午和下午是日志上传高峰期,在 Kibana 上查看日志,发现问题: (1) 日志会有 5-40 分钟的延迟 (2) 有很多日志丢失,无法查到 数据先是存放在 ES 的内存 buffer,然后执行 refresh 操作写入到操作系统的内存缓存 os cache,此后数据就可以被搜索到。 所以,日志延迟可能是我们的数据积压在 buffer 中没有进入 os cache 。 查看日志发现很多 write 拒绝执行的情况 从日志中可以看出 ES 的 write 线程池已经满负荷,执行任务的线程已经达到最大16个线程,而200容量的队列也已经放不下新的task。 查看线程池的情况也可以看出 write 线程池有很多写入的任务 所以我们需要优化 ES 的 write 的性能。 ES 的优化分为很多方面,我们要根据使用场景考虑对 ES 的要求。 根据个人实践经验,列举三种不同场景下的特点 : 这三类场景的特点如下: 关于实时性 可以从三方面进行优化:JVM性能调优、ES性能调优、控制数据来源 可以从三方面进行优化:JVM 性能调优、ES 性能调优、控制数据来源 第一步是 JVM 调优。 因为 ES 是依赖于 JVM 运行,没有合理的设置 JVM 参数,将浪费资源,甚至导致 ES 很容易 OOM 而崩溃。 (1) 查看 GC 日志 (2) 使用 jstat 看下每秒的 GC 情况 用下面几种方式都可查看新、老年代内存大小 (1) 使用 jstat -gc pid 查看 Eden 区、老年代空间大小 (2) 使用 jmap -heap pid 查看 Eden 区、老年代空间大小 (3) 查看 GC 日志中的 GC 明细 上面的几种方式都查询出,新生代总内存约1081M,即1G左右;老年代总内存为19864000K,约19G。新、老比例约1:19,出乎意料。 这真是一个容易踩坑的地方。 如果没有显示设置新生代大小,JVM 在使用 CMS 收集器时会自动调参,新生代的大小在没有设置的情况下是通过计算得出的,其大小可能与 NewRatio 的默认配置没什么关系而与 ParallelGCThreads 的配置有一定的关系。 所以: 新生代大小有不确定性,最好配置 JVM 参数 -XX:NewSize、-XX:MaxNewSize 或者 -xmn ,免得遇到一些奇怪的 GC,让人措手不及。 新生代过小,老年代过大的影响 32G 的内存,分配 20G 给堆内存是不妥当的,所以调整为总内存的50%,即16G。 修改 elasticsearch 的 jvm.options 文件 设置要求: 因为指定新生代空间大小,导致 JVM 自动调参只分配了 1G 内存给新生代。 修改 elasticsearch 的 jvm.options 文件,加上 老年代则自动分配 16G-8G=8G 内存,新生代老年代的比例为 1:1。修改后每次 Young GC 频率更低,且每次 GC 后只有少数数据会进入老年代。 ES默认使用的垃圾回收器是:老年代(CMS)+ 新生代(ParNew)。如果是JDK1.9,ES 默认使用G1垃圾回收器。 因为使用的是 JDK1.8,所以并未切换垃圾回收器。后续如果再有性能问题再切换G1垃圾回收器,测试是否有更好的性能。 优化前 每秒打印一次 GC 数据。可以看出,年轻代增长速度很快,几秒钟年轻代就满了,导致 Young GC 触发很频繁,几秒钟就会触发一次。而每次 Young GC 很大可能有存活对象进入老年代,而且,存活对象多的时候(看上图中第一个红框中的old gc数据),有(51.44-51.08)/100 * 19000M = 约68M。每次进入老年代的对象较多,加上频繁的 Young GC,会导致新老年代的分代模式失去了作用,相当于老年代取代了新生代来存放近期内生成的对象。当老年代满了,触发 Full GC,存活的对象也会很多,因为这些对象很可能还是近期加入的,还存活着,所以一次 Full GC 回收对象不多。而这会恶性循环,老年代很快又满了,又 Full GC,又残留一大部分存活的,又很容易满了,所以导致一直频繁 Full GC。 优化后 每秒打印一次 GC 数据。可以看出,新生代增长速度慢了许多,至少要60秒才会满,如上图红框中数据,进入老年代的对象约(15.68-15.60)/100 * 10000 = 8M,非常的少。所以要很久才会触发一次 Full GC 。而且等到 Full GC 时,老年代里很多对象都是存活了很久的,一般都是不会被引用,所以很大一部分会被回收掉,留一个比较干净的老年代空间,可以继续放很多对象。 ES 启动后,运行14个小时 优化前 Young GC 每次的时间是不长的,从上面监控数据中可以看出每次GC时长 1467.995/27276 约等于 0.05秒。那一秒钟有多少时间实在处理Young GC ? 计算公式:1467秒/ (60秒×60分 14小时)= 约0.028秒,也就是100秒中就有2.8秒在Young GC,也就是有2.8S的停顿,这对性能还是有很大消耗的。同时也可以算出多久一次Young GC, 方程是: 60秒×60分*14小时/ 27276次 = 1次/X秒,计算得出X = 0.54,也就是0.54秒就会有一次Young GC,可见 Young GC 频率非常频繁。 优化后 Young GC 次数只有修改前的十分之一,Young GC 时间也是约八分之一。Full GC 的次数也是只有原来的八分之一,GC 时间大约是四分之一。 GC 对系统的影响大大降低,性能已经得到很大的提升。 上面已经分析过ES作为日志存储时的特性是:高并发写、读少、接受30秒内的延时、可容忍部分日志数据丢失。 下面我们针对这些特性对ES进行调优。 本人整理了一下数据写入的底层原理 refresh ES 接收数据请求时先存入 ES 的内存中,默认每隔一秒会从内存 buffer 中将数据写入操作系统缓存 os cache,这个过程叫做 refresh; 到了 os cache 数据就能被搜索到(所以我们才说 ES 是近实时的,因为1s 的延迟后执行 refresh 便可让数据被搜索到) fsync translog 会每隔5秒或者在一个变更请求完成之后执行一次 fsync 操作,将 translog 从缓存刷入磁盘,这个操作比较耗时,如果对数据一致性要求不是跟高时建议将索引改为异步,如果节点宕机时会有5秒数据丢失; flush ES 默认每隔30分钟会将 os cache 中的数据刷入磁盘同时清空 translog 日志文件,这个过程叫做 flush。 merge ES 的一个 index 由多个 shard 组成,而一个 shard 其实就是一个 Lucene 的 index ,它又由多个 segment 组成,且 Lucene 会不断地把一些小的 segment 合并成一个大的 segment ,这个过程被称为 段merge 。执行索引操作时, ES会先生成小的segment ,ES 有离线的逻辑对小的 segment 进行合并,优化查询性能。但是合并过程中会消耗较多磁盘 IO,会影响查询性能。 为了保证不丢失数据,就要保护 translog 文件的安全: 该方式提高数据安全性的同时, 降低了一点性能. ==> 频繁地执行 fsync 操作, 可能会产生阻塞导致部分操作耗时较久. 如果允许部分数据丢失, 可设置异步刷新 translog 来提高效率,还有降低 flush 的阀值,优化如下: 写入 Lucene 的数据,并不是实时可搜索的,ES 必须通过 refresh 的过程把内存中的数据转换成 Lucene 的完整 segment 后,才可以被搜索。 默认1秒后,写入的数据可以很快被查询到,但势必会产生大量的 segment,检索性能会受到影响。所以,加大时长可以降低系统开销。对于日志搜索来说,实时性要求不是那么高,设置为5秒或者10s;对于SkyWalking,实时性要求更低一些,我们可以设置为30s。 设置如下: index.merge.scheduler.max_thread_count 控制并发的 merge 线程数,如果存储是并发性能较好的 SSD,可以用系统默认的 max(1, min(4, availableProcessors / 2)),当节点配置的 cpu 核数较高时,merge 占用的资源可能会偏高,影响集群的性能,普通磁盘的话设为1,发生磁盘 IO 堵塞。设置max_thread_count 后,会有 max_thread_count + 2 个线程同时进行磁盘操作,也就是设置为 1 允许3个线程。 设置如下: 该方式可对已经生成的索引做修改,但是对于后续新建的索引不生效,所以我们可以制作 ES 模板,新建的索引按模板创建索引。 因为我们的业务日志是按天维度创建索引,索引名称示例:user-service-prod-2020.12.12,所以用通配符 202 ..*匹配对应要创建的业务日志索引。 前文已经提到过,write 线程池满负荷,导致拒绝任务,而有的数据无法写入。 而经过上面的优化后,拒绝的情况少了很多,但是还是有拒绝任务的情况。 所以我们还需要优化write线程池。 从 prometheus 监控中可以看到线程池的情况: 为了更直观看到ES线程池的运行情况,我们安装了 elasticsearch_exporter 收集 ES 的指标数据到 prometheus,再通过 grafana 进行查看。 经过上面的各种优化,拒绝的数据量少了很多,但是还是存在拒绝的情况,如下图: write 线程池如何设置: 参考: ElasticSearch线程池 write 线程池采用 fixed 类型的线程池,也就是核心线程数与最大线程数值相同。线程数默认等于 cpu 核数,可设置的最大值只能是 cpu 核数加1,也就是16核CPU,能设置的线程数最大值为17。 优化的方案: config/elasticsearch.yml文件增加配置 优化后效果 Swap 交换分区 : 参考: ElasticSearch官方解释为什么要禁用交换内存 有三种方式可以实现 ES 不使用Swap分区 执行命令 可以临时禁用 Swap 内存,但是操作系统重启后失效 执行下列命令 正常情况下不会使用 Swap,除非紧急情况下才会 Swap。 config/elasticsearch.yml 文件增加配置 分片 索引的大小取决于分片与段的大小,分片过小,可能导致段过小,进而导致开销增加;分片过大可能导致分片频繁 Merge,产生大量 IO 操作,影响写入性能。 因为我们每个索引的大小在15G以下,而默认是5个分片,没有必要这么多,所以调整为3个。 分片的设置我们也可以配置在索引模板。 副本数 减少集群副本分片数,过多副本会导致 ES 内部写扩大。副本数默认为1,如果某索引所在的1个节点宕机,拥有副本的另一台机器拥有索引备份数据,可以让索引数据正常使用。但是数据写入副本会影响写入性能。对于日志数据,有1个副本即可。对于大数据量的索引,可以设置副本数为0,减少对性能的影响。 分片的设置我们也可以配置在索引模板。 有的应用1天生成10G日志,而一般的应用只有几百到1G。一天生成10G日志一般是因为部分应用日志使用不当,很多大数量的日志可以不打,比如大数据量的列表查询接口、报表数据、debug 级别日志等数据是不用上传到日志服务器,这些 即影响日志存储的性能,更影响应用自身性能 。 优化后的两周内ELK性能良好,没有使用上的问题: 参考

如何用elasticsearch5.2实现全文索引

一、ElasticSearch是什么?ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装使用方便,零配置和完全免费。我们先说说ES的基本概念。1、索引(Index)ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。2、类型(Type)类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。3、文档(Document)文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。4、映射(Mapping)ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等。另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。5、集群(Cluster)ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群。如果不考虑冗余能力等特性,仅有一个节点的ES集群一样可以实现所有的存储及搜索功能。6、节点(Node)运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机Marvel字符名称。用户可以按需要自定义任何希望使用的名称,但出于管理的目的,此名称应该尽可能有较好的识别性。节点通过为其配置的ES集群名称确定其所要加入的集群。7、分片(Shard)和副本(Replica)ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。OK,上面把ES相关的基本概念及原理大致说明了下,那么ES到底是怎么实现全文检索的呢?Elasticsearch实现全文检索,首先要确定分词器,ES默认有很多分词器,可参考官方文档。了解分词器主要是怎么实现的。一般中文分词器使用第三方的ik分词器、mmsegf分词器和paoding分词器,最初可能构建于lucene,后来移植于ES。目前我们在最新版的ES中,使用的是IK分词。安装ik分词器到elasticsearch很简单,它有个插件目录analysis-ik,和一个配置目录ik, 分别拷贝到plugins和conf目录就可以了。当你有大量的文本数据时,ES均会将其进行分词并将这些词语保存在索引中,当输入关键词进行查询时,索引就会起到作用,查找对应的相同的查询词,从而实现全文检索。当然这个过程是很吃内存的哦。

深入研究查询Elasticsearch,过滤查询和全文搜索

或如何了解缺少哪些官方文件 如果我不得不用一个短语来描述Elasticsearch,我会说: 目前,Elasticsearch在十大最受欢迎的开源技术中。 公平地说,它结合了许多本身并不独特的关键功能,但是,当结合使用时,它可以成为最佳的搜索引擎/分析平台。 更准确地说,由于以下功能的结合,Elasticsearch变得如此流行: · 搜索相关性评分 · 全文搜索 · 分析(汇总) · 无模式(对数据模式无限制),NoSQL,面向文档 · 丰富的数据类型选择 · 水平可扩展 · 容错的 通过与Elasticsearch进行合作,我很快意识到,官方文档看起来更像是所谓文档的"挤压"。 我不得不在Google上四处搜寻,并且大量使用stackowerflow,所以我决定编译这篇文章中的所有信息。 在本文中,我将主要撰写有关查询/搜索Elasticsearch集群的文章。 您可以通过多种不同的方式来实现大致相同的结果,因此,我将尝试说明每种方法的利弊。 更重要的是,我将向您介绍两个重要的概念-查询和过滤器上下文-在文档中没有很好地解释。 我将为您提供一组规则,以决定何时使用哪种方法更好。 在阅读本文后,如果我只想让您记住一件事,那就是: 当我们谈论Elasticsearch时,总会有一个相关性分数。 相关性分数是严格的正浮点数,表示每个文档满足搜索标准的程度。 该分数是相对于分配的最高分数的,因此,分数越高,文档与搜索条件的相关性越好。 但是,过滤器和查询是您在编写查询之前应该能够理解的两个不同概念。 一般来说,过滤器上下文是一个"是/否"选项,其中每个文档都与查询匹配或不匹配。 一个很好的例子是SQL WHERE,后面是一些条件。 SQL查询总是返回严格符合条件的行。 SQL查询无法返回歧义结果。 另一方面,Elasticsearch查询上下文显示了每个文档与您的需求的匹配程度。 为此,查询使用分析器查找最佳匹配。 经验法则是将过滤器用于: · 是/否搜索 · 搜索精确值(数字,范围和关键字) 将查询用于: · 结果不明确(某些文档比其他文档更适合) · 全文搜索 此外,Elasticsearch将自动缓存过滤器的结果。 在第1部分和第2部分中,我将讨论查询(可以转换为过滤器)。 请不要将结构化和全文与查询和过滤器混淆-这是两件事。 结构化查询也称为术语级查询,是一组查询方法,用于检查是否应选择文档。 因此,在很多情况下,没有真正必要的相关性评分-文档匹配或不匹配(尤其是数字)。 术语级查询仍然是查询,因此它们将返回分数。 名词查询 Term Query 返回字段值与条件完全匹配的文档。 查询一词是SQL select * from table_name where column_name =...的替代方式 名词查询直接进入倒排索引,这可以使其快速进行。 在处理文本数据时,最好仅将term用于keyword字段。 名词查询默认情况下在查询上下文中运行,因此,它将计算分数。 即使所有返回的文档的分数相同,也将涉及其他计算能力。 带有过滤条件的 名词 查询 如果我们想加速名词查询并使其得到缓存,则应将其包装在constant_score过滤器中。 还记得经验法则吗? 如果您不关心相关性得分,请使用此方法。 现在,该查询没有计算任何相关性分数,因此,它更快。 而且,它是自动缓存的。 快速建议-对文本字段使用匹配而不是名词。 请记住,名词查询直接进入倒排索引。名词查询采用您提供的值并按原样搜索它,这就是为什么它非常适合查询未经任何转换存储的keyword字段。 多名词查询 Terms query 如您所料,多名词查询使您可以返回至少匹配一个确切名词的文档。 多名词查询在某种程度上是SQL select * from table_name where column_name is in...的替代方法 重要的是要了解,Elasticsearch中的查询字段可能是一个列表,例如{“ name”:[“ Odin”,“ Woden”,“ Wodan”]}。如果您执行的术语查询包含以下一个或多个,则该记录将被匹配-它不必匹配字段中的所有值,而只匹配一个。 与名词查询相同,但是这次您可以在查询字段中指定多少个确切术语。 您指定必须匹配的数量-一,二,三或全部。 但是,此数字是另一个数字字段。 因此,每个文档都应包含该编号(特定于该特定文档)。 返回查询字段值在定义范围内的文档。 等价于SQL select * from table_name where column_name is between... 范围查询具有自己的语法: · gt 大于 · gte 大于或等于 · lt 小于 · lte 小于或等于 一个示例,该字段的值应≥4且≤17 范围查询也可以很好地与日期配合使用。 正则表达式查询返回其中字段与您的正则表达式匹配的文档。 如果您从未使用过正则表达式,那么我强烈建议您至少了解一下它是什么以及何时可以使用它。 Elasticsearch的正则表达式是Lucene的正则表达式。 它具有标准的保留字符和运算符。 如果您已经使用过Python的re软件包,那么在这里使用它应该不是问题。 唯一的区别是Lucene的引擎不支持^和$等锚运算符。 您可以在官方文档中找到regexp的完整列表。 除正则表达式查询外,Elsticsearch还具有通配符和前缀查询。从逻辑上讲,这两个只是regexp的特殊情况。 不幸的是,我找不到关于这三个查询的性能的任何信息,因此,我决定自己对其进行测试,以查看是否发现任何重大差异。 在比较使用rehexp和通配符查询时,我找不到性能上的差异。如果您知道有什么不同,请给我发消息。 由于Elasticsearch是无模式的(或没有严格的模式限制),因此当不同的文档具有不同的字段时,这是一种很常见的情况。 结果,有很多用途来了解文档是否具有某些特定字段。 全文查询适用于非结构化文本数据。 全文查询利用了分析器。 因此,我将简要概述Elasticsearch的分析器,以便我们可以更好地分析全文查询。 每次将文本类型数据插入Elasticsearch索引时,都会对其进行分析,然后存储在反向索引中。根据分析器的配置方式,这会影响您的搜索功能,因为分析器也适用于全文搜索。 分析器管道包括三个阶段: 总有一个令牌生成器和零个或多个字符和令牌过滤器。 1)字符过滤器按原样接收文本数据,然后可能在对数据进行标记之前对其进行预处理。 字符过滤器用于: · 替换与给定正则表达式匹配的字符 · 替换与给定字符串匹配的字符 · 干净的HTML文字 2)令牌生成器将字符过滤器(如果有)之后接收到的文本数据分解为令牌。 例如,空白令牌生成器只是将文本分隔为空白(这不是标准的)。 因此,Wednesday is called after Woden, 将被拆分为[Wednesday, is, called, after, Woden.]。 有许多内置标记器可用于创建自定义分析器。 删除标点符号后,标准令牌生成器将使用空格分隔文本。 对于绝大多数语言来说,这是最中立的选择。 除标记化外,标记化器还执行以下操作: · 跟踪令牌顺序, · 注释每个单词的开头和结尾 · 定义令牌的类型 3)令牌过滤器对令牌进行一些转换。您可以选择将许多不同的令牌过滤器添加到分析器中。一些最受欢迎的是: · 小写 · 词干(存在多种语言!) · 删除重复 · 转换为等效的ASCII · 模式的解决方法 · 令牌数量限制 · 令牌的停止列表(从停止列表中删除令牌) 标准分析器是默认分析器。 它具有0个字符过滤器,标准令牌生成器,小写字母和停止令牌过滤器。 您可以根据需要组成自定义分析器,但是内置分析器也很少。 语言分析器是一些最有效的即用型分析器,它们利用每种语言的细节来进行更高级的转换。 因此,如果您事先知道数据的语言,建议您从标准分析器切换为数据的一种语言。 全文查询将使用与索引数据时使用的分析器相同的分析器。更准确地说,您查询的文本将与搜索字段中的文本数据进行相同的转换,因此两者处于同一级别。 匹配查询是用于查询文本字段的标准查询。 我们可以将匹配查询称为名词查询的等效项,但适用于文本类型字段(而在处理文本数据时,名词应仅用于关键字类型字段)。 默认情况下,传递给查询参数的字符串(必需的一个)将由与应用于搜索字段的分析器相同的分析器处理。 除非您自己使用analyzer参数指定分析器。 当您指定要搜索的短语时,将对其进行分析,并且结果始终是一组标记。默认情况下,Elasticsearch将在所有这些标记之间使用OR运算符。这意味着至少应该有一场比赛-更多的比赛虽然会得分更高。您可以在运算符参数中将其切换为AND。在这种情况下,必须在文档中找到所有令牌才能将其返回。 如果要在OR和AND之间输入某些内容,则可以指定minimum_should_match参数,该参数指定应匹配的子句数。 可以数字和百分比指定。 模糊参数(可选)可让您忽略错别字。 Levenshtein距离用于计算。 如果您将匹配查询应用于关键字keyword字段,则其效果与词条查询相同。 更有趣的是,如果将存储在反向索引中的令牌的确切值传递给term查询,则它将返回与匹配查询完全相同的结果,但是会更快地返回到反向索引。 与匹配相同,但顺序和接近度很重要。 匹配查询不了解序列和接近度,因此,只有通过其他类型的查询才能实现词组匹配。 match_phrase查询具有slop参数(默认值为0),该参数负责跳过术语。 因此,如果您指定斜率等于1,则短语中可能会省略一个单词。 多重比对查询的功能与比对相同,唯一的不同是多重比对适用于多个栏位 · 字段名称可以使用通配符指定 · 默认情况下,每个字段均加权 · 每个领域对得分的贡献都可以提高 · 如果没有在fields参数中指定任何字段,那么将搜索所有符合条件的字段 有多种类型的multi_match。 我不会在这篇文章中描述它们,但是我将解释最受欢迎的: best_fields类型(默认值)更喜欢在一个字段中找到来自搜索值的令牌的结果,而不是将搜索的令牌分配到不同字段中的结果。 most_fields与best_fields类型相反。 phrase类型的行为与best_fields相同,但会搜索与match_phrase类似的整个短语。 我强烈建议您查阅官方文档,以检查每个字段的得分计算准确度。 复合查询将其他查询包装在一起。 复合查询: · 结合分数 · 改变包装查询的行为 · 将查询上下文切换到过滤上下文 · 以上任意一项 布尔查询将其他查询组合在一起。 这是最重要的复合查询。 布尔查询使您可以将查询上下文中的搜索与过滤器上下文搜索结合在一起。 布尔查询具有四个可以组合在一起的出现(类型): · must或"必须满足该条款" · should或"如果满足条款,则对相关性得分加分" · 过滤器filter或"必须满足该条款,但不计算相关性得分" · must_not或“与必须相反”,不会有助于相关度得分 必须和应该→查询上下文 过滤器和must_not→过滤器上下文 对于那些熟悉SQL的人,必须为AND,而应为OR运算符。 因此,必须满足must子句中的每个查询。 对于大多数查询,提升查询与boost参数相似,但并不相同。 增强查询将返回与肯定子句匹配的文档,并降低与否定子句匹配的文档的得分。 如我们在术语查询示例中先前看到的,constant_score查询将任何查询转换为相关性得分等于boost参数(默认值为1)的过滤器上下文。 让我知道是否您想阅读另一篇文章,其中提供了所有查询的真实示例。 我计划在Elasticsearch上发布更多文章,所以不要错过。 你已经读了很长的内容,所以如果你阅读到这里: 综上所述,Elasticsearch符合当今的许多用途,有时很难理解什么是最佳工具。 如果不需要相关性分数来检索数据,请尝试切换到过滤器上下文。 另外,了解Elasticsearch的工作原理也至关重要,因此,我建议您始终了解分析器的功能。 Elasticsearch中还有许多其他查询类型。 我试图描述最常用的。 我希望你喜欢它。 (本文翻译自kotartemiy u2714ufe0f的文章《Deep Dive into Querying Elasticsearch. Filter vs Query. Full-text search》,参考:https://towardsdatascience.com/deep-pe-into-querying-elasticsearch-filter-vs-query-full-text-search-b861b06bd4c0)

全文搜索之MySQL与ElasticSearch搜索引擎

MySQL支持全文索引和搜索功能。在MySQL中可以在CHAR、VARCHAR或TEXT列使用FULLTETXT来创建全文索引。 FULLTEXT索引主要用MATCH()...AGAINST语法来实现搜索: MySQL的全文搜索存在以下局限: 通常来说MySQL自带的全文搜索使用起来局限性比较大,性能和功能都不太成熟,主要适用于小项目,大项目还是建议使用elasticsearch来做全文搜索。 ElasticSearch是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据,以下简称ES。 Elasticsearch 在 Apache Lucene 的基础上开发而成,Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件。Elastic Stack 是适用于数据采集、充实、存储、分析和可视化的一组开源工具。 Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据中心,再通过分词控制器去将对应的数据分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。 由于ES是基于RESTfull Web接口的,因此我们直接按照惯例传递JSON参数调用接口即可实现增删改查,并且不需要我们做额外的管理操作就可以直接索引文档,ES已经内置了所有的缺省操作,可以自动帮我们定义类型。 再次执行PUT,会对库中已有的id为1的数据进行覆盖,每修改一次_version字段的版本号就会加1。 默认搜索会返回前10个结果: 返回的几个关键词: 查询字符串搜索,可以像传递URL参数一样传递查询语句。 精确查询: 全文搜索: 以上两种方法都需要考虑数据更改后如何与ES进行同步。

ElasticSearch存储

使用ElasticSearch快一年了,自认为相关API使用的还比较6,产品提的一些搜索需求实现起来都从心应手;但是前几天同事的一个问题直接将我打回到小白,同事问了句:“ ElasticSearch的索引是怎么存储的?删除文档和更新文档是怎么实现的? ”,当时我就懵逼了,说了句得查一下,好尴尬...... 回想起来发现自己从来都没有深入了解过这些细节,于是便觉得非常有必要对ElasticSearch的文档存储做一次深入的了解,知其然不知其所以然对于我们来说是远远不够的,在ElasticSearch中,文档( Document )存储的介质分为内存和硬盘两种: 同时,ElasticSearch进程自身的运行也需要内存空间,必须保证ElasticSearch进程有充足的运行时内存。为了使ElasticSearch引擎达到最佳性能,必须合理分配有限的内存和硬盘资源。 ElasticSearch引擎把文档数据写入到倒排索引( Inverted Index )的数据结构中,倒排索引建立的是分词( Term )和文档( Document )之间的映射关系,在倒排索引中,数据是面向词( Term )而不是面向文档( Document )的。 举个栗子,假设我们有两个文档,每个文档的content域包含如下内容: 1. The quick brown fox jumped over the lazy dog 2. Quick brown foxes leap over lazy dogs in summer 文档和词之间的关系如下图: 字段值被分析之后,存储在倒排索引中,倒排索引存储的是分词( Term )和文档( Doc )之间的关系,简化版的倒排索引如下图: 从图中可以看出,倒排索引有一个词条的列表,每个分词在列表中是唯一的,记录着词条出现的次数,以及包含词条的文档。实际中ElasticSearch引擎创建的倒排索引比这个复杂得多。 段是倒排索引的组成部分,倒排索引是由段( Segment )组成的,段存储在硬盘( Disk )文件中。 索引段不是实时更新的,这意味着,段在写入硬盘之后,就不再被更新。在删除文档时,ElasticSearch引擎把已删除的文档的信息存储在一个单独的文件中,在搜索数据时,ElasticSearch引擎首先从段中执行查询,再从查询结果中过滤被删除的文档 。这意味着,段中存储着被删除的文档,这使得段中含有”正常文档“的密度降低。 多个段可以通过段合并(Segment Merge)操作把“已删除”的文档将从段中物理删除,把未删除的文档合并到一个新段中,新段中没有”已删除文档“,因此,段合并操作能够提高索引的查找速度 ;但是,段合并是IO密集型操作,需要消耗大量的硬盘IO。 在ElasticSearch中,大多数查询都需要从硬盘文件(索引的段数据存储在硬盘文件中)中获取数据;因此, 在全局配置文件elasticsearch.yml 中,把结点的路径(Path)配置为性能较高的硬盘,能够提高查询性能 。默认情况下,ElasticSearch使用基于安装目录的相对路径来配置结点的路径,安装目录由属性path.home显示,在home path下,ElasticSearch自动创建config,data,logs和plugins目录,一般情况下不需要对结点路径单独配置。结点的文件路径配置项: path.data:设置ElasticSearch结点的索引数据保存的目录,多个数据文件使用逗号隔开。 例如,path.data: /path/to/data1,/path/to/data2 ; path.work:设置ElasticSearch的临时文件保存的目录; 映射参数index决定ElasticSearch引擎是否对文本字段执行分析操作,也就是说分析操作把文本分割成一个一个的分词,也就是标记流( Token Stream ),把分词编入索引,使分词能够被搜索到: 1) 当index为analyzed时,该字段是分析字段,ElasticSearch引擎对该字段执行分析操作,把文本分割成分词流,存储在倒排索引中,使其支持全文搜索。 2)当index为not_analyzed时,该字段不会被分析,ElasticSearch引擎把原始文本作为单个分词存储在倒排索引中,不支持全文搜索,但是支持词条级别的搜索;也就是说,字段的原始文本不经过分析而存储在倒排索引中,把原始文本编入索引,在搜索的过程中,查询条件必须全部匹配整个原始文本。 3)当index为no时,该字段不会被存储到倒排索引中,不会被搜索到。 字段的原始值是否被存储到倒排索引,是由映射参数store决定的,默认值是false,也就是,原始值不存储到倒排索引中。 映射参数index和store的区别在于: store用于获取(Retrieve)字段的原始值,不支持查询,可以使用投影参数fields,对stroe属性为true的字段进行过滤,只获取(Retrieve)特定的字段,减少网络负载; index用于查询(Search)字段,当index为analyzed时,对字段的分词执行全文查询;当index为not_analyzed时,字段的原始值作为一个分词,只能对字段的原始文本执行词条查询; 如果设置字段的index属性为not_analyzed,原始文本将作为单个分词,其最大长度跟UTF8 编码有关,默认的最大长度是32766Bytes(约32KB),如果字段的文本超过该限制,那么ElasticSearch将跳过( Skip )该文档,并在Response中抛出异常消息: operation[607]: index returned 400 _index: ebrite _type: events _id: 76860 _version: 0 error: Type: illegal_argument_exception Reason: "Document contains at least one immense term in field="event_raw" (whose UTF8 encoding is longer than the max length 32766), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: "[112, 114,... 115]...", original message: bytes can be at most 32766 in length; got 35100" CausedBy:Type: max_bytes_length_exceeded_exception Reason: "bytes can be at most 32766 in length; got 35100" 可以在字段中设置ignore_above属性,该属性值指的是字符数量,而不是字节数量;由于一个UTF8字符最多占用3个字节,因此,可以设置 “ignore_above”:10000 这样,超过30000字节之后的字符将会被分析器忽略,单个分词( Term )的最大长度是30000Bytes。 The value for ignore_above is the character count, but Lucene counts bytes. If you use UTF-8 text with many non-ASCII characters, you may want to set the limit to 32766 / 3 = 10922 since UTF-8 characters may occupy at most 3 bytes. 默认情况下,大多数字段被索引之后,能够被搜索到。 倒排索引是由一个有序的词条列表构成的,每一个词条在列表中都是唯一存在的,通过这种数据存储模式,你可以很快查找到包含某一个词条的文档列表 。 但是,排序和聚合操作采用相反的数据访问模式,这两种操作不是查找词条以发现文档,而是查找文档,以发现字段中包含的词条。ElasticSearch使用列式存储实现排序和聚合查询。 文档值( doc_values )是存储在硬盘上的数据结构,在索引时( index time )根据文档的原始值创建,文档值是一个列式存储风格的数据结构,非常适合执行存储和聚合操作,除了字符类型的分析字段之外,其他字段类型都支持文档值存储。默认情况下,字段的文档值存储是启用的,除了字符类型的分析字段之外。如果不需要对字段执行排序或聚合操作,可以禁用字段的文档值,以节省硬盘空间。 字符类型的分析字段,不支持文档值(doc_values),但支持fielddata数据结构。fielddata数据结构存储在JVM的堆内存中。相比文档值(数据存储在硬盘上),fielddata字段(数据存储在内存中)的查询性能更高。默认情况下,ElasticSearch引擎在第一次对字段执行聚合或排序查询时(query-time),创建fielddata数据结构;在后续的查询请求中,ElasticSearch引擎使用fielddata数据结构以提高聚合和排序的查询性能。 在ElasticSearch中,倒排索引的各个段( segment )的数据存储在硬盘文件上,从整个倒排索引的段中读取字段数据之后,ElasticSearch引擎首先反转词条和文档之间的关系,创建文档和词条之间的关系,即创建顺排索引,然后把顺排索引存储在JVM的堆内存中。把倒排索引加载到fielddata结构是一个非常消耗硬盘IO资源的过程。因此,数据一旦被加载到内存,最好保持在内存中,直到索引段( segment )的生命周期结束。 默认情况下,倒排索引的每个段( segment ),都会创建相应的fielddata结构,以存储字符类型的分析字段值,但是,需要注意的是,分配的JVM堆内存是有限的,Fileddata把数据存储在内存中,会占用过多的JVM堆内存,甚至耗尽JVM赖以正常运行的内存空间,反而会降低ElasticSearch引擎的查询性能。 fielddata会消耗大量的JVM内存,因此,尽量为JVM设置大的内存,不要为不必要的字段启用fielddata存储。通过format参数控制是否启用字段的fielddata特性,字符类型的分析字段,fielddata的默认值是paged_bytes,这就意味着,默认情况下,字符类型的分析字段启用fielddata存储。一旦禁用fielddata存储,那么字符类型的分析字段将不再支持排序和聚合查询。 loading属性控制fielddata加载到内存的时机,可能的值是lazy,eager和eager_global_ordinals,默认值是lazy。 lazy:fielddata只在需要时加载到内存,默认情况下,在第一次搜索时,fielddata被加载到内存中;但是,如果查询一个非常大的索引段(Segment),lazy加载方式会产生较大的时间延迟。 eager:在倒排索引的段可用之前,其数据就被加载到内存,eager加载方式能够减少查询的时间延迟,但是,有些数据可能非常冷,以至于没有请求来查询这些数据,但是冷数据依然被加载到内存中,占用紧缺的内存资源。 eager_global_ordinals:按照global ordinals积极把fielddata加载到内存。 ElasticSearch使用 JAVA_OPTS 环境变量( Environment Variable )启动JVM进程,在 JAVA_OPTS 中,最重要的配置是: -Xmx参数控制分配给JVM进程的最大内存,-Xms参数控制分配给JVM进程的最小内存 。(在ElasticSearch启动命令后面可以通过参数方式配置,如: /usr/local/elasticsearch/bin/elasticsearch -d --Xmx=10g --Xms=10g )通常情况下,使用默认的配置就能满足工程需要。 ES_HEAP_SIZE 环境变量控制分配给JVM进程的堆内存( Heap Memory )大小,顺排索引( fielddata )的数据存储在堆内存( Heap Memory )中。 大多数应用程序尝试使用尽可能多的内存,并尽可能把未使用的内存换出,但是,内存换出会影响ElasticSearch引擎的查询性能,推荐启用内存锁定,禁用ElasticSearch内存的换进换出。 在全局配置文档 elasticsearch.yml 中,设置 bootstrap.memory_lock 为ture,这将锁定ElasticSearch进程的内存地址空间,阻止ElasticSearch内存被OS换出( Swap out )。 通过学习,算是对ElasticSearch索引存储及更新有了一个较深的了解,至少能让我从容去面对同事的提问,但与此同时给我敲响了警钟,在使用一门技术的同时,更应该去了解它具体的原理,而不仅仅是停留在使用级别;在学习的路上,我们仍需要更加努力......

Elasticsearch解决问题之道——请亮出你的DSL

0、引言 在业务开发中,我们往往会陷入开发的细枝末节之中,而忽略了事物的本源。 经常有同学问到: 等等等等….. 以上的看似复杂的问题,如果转换成DSL,清楚的写出来,梳理清楚问题的来龙去脉,问题就自然解决了一大半。 所以,请亮出你的dsl,不论什么语言的检索,转换到es查询都是sql查询,在es中对应dsl语法,es再拆解比如:分词match_phrase拆解成各term组合,最终传给lucene处理。 亮出你的dsl,确保编程里的实现和你的kibana或者head插件一致是非常重要、很容易被忽视的工作。 如果对dsl拆解不理解,那就再 加上 profile:true或者explain:true拆解结果一目了然。 维基百科定义:领域特定语言(英语:domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。 Elasticsearch提供基于JSON的完整查询DSL来定义查询。 将Query DSL视为查询的AST(抽象语法树),由两种类型的子句组成: 1、叶子查询子句 叶查询子句查找特定字段中的特定值,例如匹配,术语或范围查询。 这些查询可以单独使用。 2、复合查询子句 复合查询子句可以组合其他叶子或复合查询,用于以逻辑方式组合多个查询(例如bool或dis_max查询),或更改其行为(例如constant_score查询)。 给个例子,一看就明白。 看到这里,可能会有人着急了:“我X,这不是官网定义吗?再写一遍有意思吗?” 引用一句鸡汤话,“再显而易见的道理,在中国,至少有一亿人不知道”。同样的,再显而易见的问题,在Elasticsearch技术社区也会有N多人提问。 基础认知不怕重复,可怕的是对基础的专研、打磨、夯实。 Elasticsearch相关的核心操作,广义上可做如下解读,不一定涵盖全,仅抛砖引玉,说明DSL的重要性。 从大到小。 集群的管理,一般我们会使用Kibana或者第三方工具Head插件、cerebro工具、elastic-hq工具。 基本上硬件的(磁盘、cpu、内存)使用率、集群的 健康 状态都能一目了然。 但基础的DSL会更便捷,便于细粒度分析问题。 如:集群状态查询: 如:节点热点线程查看: 如:集群分片分配情况查看: 索引生命周期是一直强调的概念,主要指索引的“生、老、病、死”的全过程链条的管理。 创建索引我们优先使用较单纯index更灵活的template模板。 创建索引类似Mysql的创建表的操作,提前设计好表结构对应ES是提前设计好M app ing非常重要。 两个维度: 举例: 如:索引清理缓存。 如:某原因导致分片重新分配,_recovery查看分片分配状态。 高版本的索引生命周期管理推荐使用:ILM功能。 这个是大家再熟悉不过的了。 举例: 删除数据包括:指定id删除 delete和批量删除delete_by_query(满足给定条件)。 更新操作。包括:指定id的update/upsert或者批量更新update_by_query。 这是ES的重头戏。包含但不限于: 1、支持精确匹配查询的:term、range、exists、wildcard、prefix、fuzzy等。 2、支持全文检索的:match、match_phrase、query_string、multi_match等 1、Bucketing分桶聚合 举例:最常用的terms就类似Mysql group by功能。2、Metric计算聚合 举例:类比Mysql中的: MIN, MAX, SUM 操作。3、Pipeline针对聚合结果聚合 举例:bucket_script实现类似Mysql的group by 后having的操作。 留给大家 结合 业务场景思考添加。 这里把开头提到的几个问题逐一解答一下。 实际Mysql业务中,我们一般是先验证sql没有问题,再写业务代码。 实际ES业务中,也一样,先DSL确认没有问题,再写业务代码。 写完java或者python后,打印DSL,核对是否完全一致。 不一致的地方基本就是结果和预期不一致的原因所在。 第一步:借助analyzer API分析查询语句和待查询document分词结果。 这个API的重要性,再怎么强调都不为过。 第二步:可以借助profile:true查看细节。第三步:核对match_phrase词序的原理。 6.3版本后已经支持sql,如果不会写,可以借助translate 如下API翻译一下。 不够精确,但足够参考用了,需要根据业务细节微调。 当然,还是 建议 ,从业务出发,自己写DSL。 从大往小,逐步细化排解 END 公众号 ( zhisheng )里回复 面经、ES、Flink、 Spring、Java、Kafka、监控 等关键字可以查看更多关键字对应的文章 1、《从0到1学习Flink》—— Apache Flink 介绍 2、《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门 3、《从0到1学习Flink》—— Flink 配置文件详解 4、《从0到1学习Flink》—— Data Source 介绍 5、《从0到1学习Flink》—— 如何自定义 Data Source ? 6、《从0到1学习Flink》—— Data Sink 介绍 7、《从0到1学习Flink》—— 如何自定义 Data Sink ? 8、《从0到1学习Flink》—— Flink Data transformation(转换) 9、《从0到1学习Flink》—— 介绍 Flink 中的 Stream Windows 10、《从0到1学习Flink》—— Flink 中的几种 Time 详解 11、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 ElasticSearch 12、《从0到1学习Flink》—— Flink 项目如何运行? 13、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 Kafka 14、《从0到1学习Flink》—— Flink JobManager 高可用性配置 15、《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍 16、《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL 17、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ 18、《从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了 19、大数据“重磅炸弹”——实时计算框架 Flink 20、《Flink 源码解析》—— 源码编译运行 21、为什么说流处理即未来? 22、OPPO数据中台之基石:基于Flink SQL构建实数据仓库 23、流计算框架 Flink 与 Storm 的性能对比 24、Flink状态管理和容错机制介绍 25、原理解析 | Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理 26、Apache Flink 是如何管理好内存的? 27、《从0到1学习Flink》——Flink 中这样管理配置,你知道? 28、《从0到1学习Flink》——Flink 不可以连续 Split(分流)? 29、Flink 从0到1学习—— 分享四本 Flink 的书和二十多篇 Paper 论文 30 、360深度实践:Flink与Storm协议级对比 31、Apache Flink 1.9 重大特性提前解读 32、如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了 33、美团点评基于 Flink 的实时数仓建设实践 34、Flink 灵魂两百问,这谁顶得住? 35、一文搞懂 Flink 的 Exactly Once 和 At Least Once 36、你公司到底需不需要引入实时计算引擎?

京东面试题:ElasticSearch深度分页解决方案

Elasticsearch 是一个实时的分布式搜索与分析引擎,在使用过程中,有一些典型的使用场景,比如分页、遍历等。 在使用关系型数据库中,我们被告知要注意甚至被明确禁止使用深度分页,同理,在 Elasticsearch 中,也应该尽量避免使用深度分页。 这篇文章主要介绍 Elasticsearch 中分页相关内容! 在ES中,分页查询默认返回最顶端的10条匹配hits。 如果需要分页,需要使用from和size参数。 一个基本的ES查询语句是这样的: 上面的查询表示从搜索结果中取第100条开始的10条数据。 「那么,这个查询语句在ES集群内部是怎么执行的呢?」 在ES中,搜索一般包括两个阶段,query 和 fetch 阶段,可以简单的理解,query 阶段确定要取哪些doc,fetch 阶段取出具体的 doc。 如上图所示,描述了一次搜索请求的 query 阶段:· 在上面的例子中,coordinating node 拿到 (from + size) * 6 条数据,然后合并并排序后选择前面的 from + size 条数据存到优先级队列,以便 fetch 阶段使用。 另外,各个分片返回给 coordinating node 的数据用于选出前 from + size 条数据,所以,只需要返回唯一标记 doc 的 _id 以及用于排序的 _score 即可,这样也可以保证返回的数据量足够小。 coordinating node 计算好自己的优先级队列后,query 阶段结束,进入 fetch 阶段。 query 阶段知道了要取哪些数据,但是并没有取具体的数据,这就是 fetch 阶段要做的。 上图展示了 fetch 过程: coordinating node 的优先级队列里有 from + size 个 _doc _id ,但是,在 fetch 阶段,并不需要取回所有数据,在上面的例子中,前100条数据是不需要取的,只需要取优先级队列里的第101到110条数据即可。 需要取的数据可能在不同分片,也可能在同一分片,coordinating node 使用 「multi-get」 来避免多次去同一分片取数据,从而提高性能。 「这种方式请求深度分页是有问题的:」 我们可以假设在一个有 5 个主分片的索引中搜索。当我们请求结果的第一页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给 协调节点 ,协调节点对 50 个结果排序得到全部结果的前 10 个。 现在假设我们请求第 1000 页—结果从 10001 到 10010 。所有都以相同的方式工作除了每个分片不得不产生前10010个结果以外。然后协调节点对全部 50050 个结果排序最后丢弃掉这些结果中的 50040 个结果。 「对结果排序的成本随分页的深度成指数上升。」 「注意1:」 size的大小不能超过 index.max_result_window 这个参数的设置,默认为10000。 如果搜索size大于10000,需要设置 index.max_result_window 参数 「注意2:」 _doc 将在未来的版本移除,详见: Elasticsearch 的From/Size方式提供了分页的功能,同时,也有相应的限制。 举个例子,一个索引,有10亿数据,分10个 shards,然后,一个搜索请求,from=1000000,size=100,这时候,会带来严重的性能问题:CPU,内存,IO,网络带宽。 在 query 阶段,每个shards需要返回 1000100 条数据给 coordinating node,而 coordinating node 需要接收 10 * 1000 ,100 条数据,即使每条数据只有 _doc _id 和 _score ,这数据量也很大了? 「在另一方面,我们意识到,这种深度分页的请求并不合理,因为我们是很少人为的看很后面的请求的,在很多的业务场景中,都直接限制分页,比如只能看前100页。」 比如,有1千万粉丝的微信大V,要给所有粉丝群发消息,或者给某省粉丝群发,这时候就需要取得所有符合条件的粉丝,而最容易想到的就是利用 from + size 来实现,不过,这个是不现实的,这时,可以采用 Elasticsearch 提供的其他方式来实现遍历。 深度分页问题大致可以分为两类: 「下面介绍几个官方提供的深度分页方法」 我们可以把scroll理解为关系型数据库里的cursor,因此,scroll并不适合用来做实时搜索,而更适合用于后台批处理任务,比如群发。 这个分页的用法, 「不是为了实时查询数据」 ,而是为了 「一次性查询大量的数据(甚至是全部的数据」 )。 因为这个scroll相当于维护了一份当前索引段的快照信息,这个快照信息是你执行这个scroll查询时的快照。在这个查询后的任何新索引进来的数据,都不会在这个快照中查询到。 但是它相对于from和size,不是查询所有数据然后剔除不要的部分,而是记录一个读取的位置,保证下一次快速继续读取。 不考虑排序的时候,可以结合 SearchType.SCAN 使用。 scroll可以分为初始化和遍历两部,初始化时将 「所有符合搜索条件的搜索结果缓存起来(注意,这里只是缓存的doc_id,而并不是真的缓存了所有的文档数据,取数据是在fetch阶段完成的)」 ,可以想象成快照。 在遍历时,从这个快照里取数据,也就是说,在初始化后,对索引插入、删除、更新数据都不会影响遍历结果。 「基本使用」 初始化指明 index 和 type,然后,加上参数 scroll,表示暂存搜索结果的时间,其它就像一个普通的search请求一样。 会返回一个 _scroll_id , _scroll_id 用来下次取数据用。 「遍历」 这里的 scroll_id 即 上一次遍历取回的 _scroll_id 或者是初始化返回的 _scroll_id ,同样的,需要带 scroll 参数。 重复这一步骤,直到返回的数据为空,即遍历完成。 「注意,每次都要传参数 scroll,刷新搜索结果的缓存时间」 。另外, 「不需要指定 index 和 type」 。 设置scroll的时候,需要使搜索结果缓存到下一次遍历完成, 「同时,也不能太长,毕竟空间有限。」 「优缺点」 缺点: 「优点:」 适用于非实时处理大量数据的情况,比如要进行数据迁移或者索引变更之类的。 ES提供了scroll scan方式进一步提高遍历性能,但是scroll scan不支持排序,因此scroll scan适合不需要排序的场景 「基本使用」 Scroll Scan 的遍历与普通 Scroll 一样,初始化存在一点差别。 需要指明参数: 「Scroll Scan与Scroll的区别」 如果你数据量很大,用Scroll遍历数据那确实是接受不了,现在Scroll接口可以并发来进行数据遍历了。 每个Scroll请求,可以分成多个Slice请求,可以理解为切片,各Slice独立并行,比用Scroll遍历要快很多倍。 上边的示例可以单独请求两块数据,最终五块数据合并的结果与直接scroll scan相同。 其中max是分块数,id是第几块。 Search_after 是 ES 5 新引入的一种分页查询机制,其原理几乎就是和scroll一样,因此代码也几乎是一样的。 「基本使用:」 第一步: 返回出的结果信息 : 上面的请求会为每一个文档返回一个包含sort排序值的数组。 这些sort排序值可以被用于 search_after 参数里以便抓取下一页的数据。 比如,我们可以使用最后的一个文档的sort排序值,将它传递给 search_after 参数: 若我们想接着上次读取的结果进行读取下一页数据,第二次查询在第一次查询时的语句基础上添加 search_after ,并指明从哪个数据后开始读取。 「基本原理」 es维护一个实时游标,它以上一次查询的最后一条记录为游标,方便对下一页的查询,它是一个无状态的查询,因此每次查询的都是最新的数据。 由于它采用记录作为游标,因此 「SearchAfter要求doc中至少有一条全局唯一变量(每个文档具有一个唯一值的字段应该用作排序规范)」 「优缺点」 「优点:」 「缺点:」 SEARCH_AFTER 不是自由跳转到任意页面的解决方案,而是并行滚动多个查询的解决方案。 分页方式性能优点缺点场景 from + size低灵活性好,实现简单深度分页问题数据量比较小,能容忍深度分页问题 scroll中解决了深度分页问题无法反应数据的实时性(快照版本)维护成本高,需要维护一个 scroll_id海量数据的导出需要查询海量结果集的数据 search_after高性能最好不存在深度分页问题能够反映数据的实时变更实现复杂,需要有一个全局唯一的字段连续分页的实现会比较复杂,因为每一次查询都需要上次查询的结果,它不适用于大幅度跳页查询海量数据的分页 参照:https://www.elastic.co/guide/en/elasticsearch/reference/master/paginate-search-results.html#scroll-search-results 在 7.* 版本中,ES官方不再推荐使用Scroll方法来进行深分页,而是推荐使用带PIT的 search_after 来进行查询; 从 7.* 版本开始,您可以使用 SEARCH_AFTER 参数通过上一页中的一组排序值检索下一页命中。 使用 SEARCH_AFTER 需要多个具有相同查询和排序值的搜索请求。 如果这些请求之间发生刷新,则结果的顺序可能会更改,从而导致页面之间的结果不一致。 为防止出现这种情况,您可以创建一个时间点(PIT)来在搜索过程中保留当前索引状态。 在搜索请求中指定PIT: 分别分页获取 1 - 10 , 49000 - 49010 , 99000 - 99010 范围各10条数据(前提10w条),性能大致是这样: 对于向前翻页,ES中没有相应API,但是根据官方说法(https://github.com/elastic/elasticsearch/issues/29449),ES中的向前翻页问题可以通过翻转排序方式来实现即: Scroll和 search_after 原理基本相同,他们都采用了游标的方式来进行深分页。 这种方式虽然能够一定程度上解决深分页问题。但是,它们并不是深分页问题的终极解决方案,深分页问题 「必须避免!!」 。 对于Scroll,无可避免的要维护 scroll_id 和 历史 快照,并且,还必须保证 scroll_id 的存活时间,这对服务器是一个巨大的负荷。 对于 Search_After ,如果允许用户大幅度跳转页面,会导致短时间内频繁的搜索动作,这样的效率非常低下,这也会增加服务器的负荷,同时,在查询过程中,索引的增删改会导致查询数据不一致或者排序变化,造成结果不准确。 Search_After 本身就是一种业务折中方案,它不允许指定跳转到页面,而只提供下一页的功能。 Scroll默认你会在后续将所有符合条件的数据都取出来,所以,它只是搜索到了所有的符合条件的 doc_id (这也是为什么官方推荐用 doc_id 进行排序,因为本身缓存的就是 doc_id ,如果用其他字段排序会增加查询量),并将它们排序后保存在协调节点(coordinate node),但是并没有将所有数据进行fetch,而是每次scroll,读取size个文档,并返回此次读取的最后一个文档以及上下文状态,用以告知下一次需要从哪个shard的哪个文档之后开始读取。 这也是为什么官方不推荐scroll用来给用户进行实时的分页查询,而是适合于大批量的拉取数据,因为它从设计上就不是为了实时读取数据而设计的。

ElasticSearch分页方案

"浅"分页是最简单的分页方案。es会根据查询条件在每一个DataNode分片中取出from+size条文档,然后在MasterNode中聚合、排序,再截取size-from的文档返回给调用方。当页数越靠后,也就是from+size越大,es需要读取的数据也就是越大,聚合和排序的时候处理的数据量也越大,此时会加大服务器CPU和内存的消耗。 其中,from定义了目标数据的偏移值,size定义当前返回的数目。默认from为0,size为10,即所有的查询默认仅仅返回前10条数据。 在这里有必要了解一下from/size的原理: 因为es是基于分片的,假设有5个分片,from=100,size=10。则会根据排序规则从5个分片中各取回100条数据数据,然后汇总成500条数据后选择最后面的10条数据。 做过测试,越往后的分页,执行的效率越低。总体上会随着from的增加,消耗时间也会增加。而且数据量越大,就越明显! from+size查询在10000-50000条数据(1000到5000页)以内的时候还是可以的,但是如果数据过多的话,就会出现深分页问题。 为了解决上面的问题,elasticsearch提出了一个scroll滚动的方式。 scroll 类似于sql中的cursor,使用scroll,每次只能获取一页的内容,然后会返回一个scroll_id。根据返回的这个scroll_id可以不断地获取下一页的内容,所以scroll并不适用于有跳页的情景。 scroll=5m表示设置scroll_id保留5分钟可用。 使用scroll必须要将from设置为0。 size决定后面每次调用_search搜索返回的数量 然后我们可以通过数据返回的_scroll_id读取下一页内容,每次请求将会读取下10条数据,直到数据读取完毕或者scroll_id保留时间截止: 注意:请求的接口不再使用索引名了,而是 _search/scroll,其中GET和POST方法都可以使用。 scroll删除 根据官方文档的说法,scroll的搜索上下文会在scroll的保留时间截止后自动清除,但是我们知道scroll是非常消耗资源的,所以一个建议就是当不需要了scroll数据的时候,尽可能快的把scroll_id显式删除掉。 清除指定的scroll_id: DELETE _search/scroll/DnF1ZXJ5VGhlbkZldGNo..... 清除所有的scroll: DELETE _search/scroll/_all scroll 的方式,官方的建议不用于实时的请求(一般用于数据导出),因为每一个 scroll_id 不仅会占用大量的资源,而且会生成历史快照,对于数据的变更不会反映到快照上。 search_after 分页的方式是根据上一页的最后一条数据来确定下一页的位置,同时在分页请求的过程中,如果有索引数据的增删改查,这些变更也会实时的反映到游标上。但是需要注意,因为每一页的数据依赖于上一页最后一条数据,所以无法跳页请求。 为了找到每一页最后一条数据,每个文档必须有一个全局唯一值,官方推荐使用 _uid 作为全局唯一值,其实使用业务层的 id 也可以。 使用search_after必须要设置from=0。 这里我使用timestamp和_id作为唯一值排序。 我们在返回的最后一条数据里拿到sort属性的值传入到search_after。 使用sort返回的值搜索下一页: 4:修改默认分页限制值10000 可以使用下面的方式来改变ES默认深度分页的index.max_result_window 最大窗口值 curl -XPUT http://127.0.0.1:9200/my_index/_settings -d "{ "index" : { "max_result_window" : 500000}}" 其中my_index为要修改的index名,500000为要调整的新的窗口数。将该窗口调整后,便可以解决无法获取到10000条后数据的问题。 注意事项 通过上述的方式解决了我们的问题,但也引入了另一个需要我们注意的问题,窗口值调大了后,虽然请求到分页的数据条数更多了,但它是用牺牲更多的服务器的内存、CPU资源来换取的。要考虑业务场景中过大的分页请求,是否会造成集群服务的OutOfMemory问题。 修改最大限制值之后确实可以使from+size查询到更后面页的数据,但是每次查询得到的总数量最大任然是10000,要想获取大于1万的查询数据量,可以分两步查询,第一步使用scroll查询获取总数据量;第二部使用from+size查询每页的数据,并设置分页。这样即解决了from+size无法查询10000之后的数据,也解决了scroll无法跳页的问题。 使用scroll可能遇到的问题: Caused by: org.elasticsearch.ElasticsearchException: Trying to create too many scroll contexts. Must be less than or equal to: [500]. This limit can be set by changing the [search.max_open_scroll_context] setting. 这个报错是从es的日志文件中查出来的,大致意思是:尝试创建更多的scroll对象失败了,scroll对象总数量应该控制在500以内。可修改search.max_open_scroll_context的值来改变500这个阈值。 原因:通过scroll 深分页可知道,es服务端会在内存中生成一个scroll_id对象,并会为该值指定过期时间,翻页的时候使用scroll_id来获取下一页的数据。默认情况下,一个实例下面仅可以创建最多500个scroll上下文对象,也就是500个scroll_id。报此错误的原因就是创建scroll上下文对象失败,因为当前已经存在500个这样的对象了。 解决办法: 1:通过观察可以发现,即使不做任何的处理,过一会就又可以发起scroll请求了,这是因为时间超过了scroll生命周期时间,scroll对象自己死掉了一些。 2:按照提示说的,修改search.max_open_scroll_context的值 put http://{{es-host}}/_cluster/settings { } [图片上传失败...(image-4dc354-1583253824871)] 3:在使用完scroll_id之后立即调用删除接口,删除该scroll对象 删除单个scroll DELETE http://{{es-host}}/_search/scroll { } 删除所有scroll delete http://{{es-host}}/_search/scroll/_all

ElasticSearch查询流程详解

前面已经介绍了ElasticSearch的写入流程,了解了ElasticSearch写入时的分布式特性的相关原理。ElasticSearch作为一款具有强大搜索功能的存储引擎,它的读取是什么样的呢?读取相比写入简单的多,但是在使用过程中有哪些需要我们注意的呢?本篇文章会进行详细的分析。 在前面的文章我们已经知道ElasticSearch的读取分为两种GET和SEARCH。这两种操作是有一定的差异的,下面我们先对这两种核心的数据读取方式进行一一分析。 (图片来自官网) 以下是从主分片或者副本分片检索文档的步骤顺序: 注意: 在协调节点有个http_server_worker线程池。收到读请求后它的具体过程为: 数据节点上有一个get线程池。收到了请求后,处理过程为: 注意: get过程会加读锁。处理realtime选项,如果为true,则先判断是否有数据可以刷盘,然后调用Searcher进行读取。Searcher是对IndexSearcher的封装在早期realtime为true则会从tranlog中读取,后面只会从index的lucene读取了。即实时的数据只在lucene之中。 对于Search类请求,ElasticSearch请求是查询lucene的Segment,前面的写入详情流程也分析了,新增的文档会定时的refresh到磁盘中,所以搜索是属于近实时的。而且因为没有文档id,你不知道你要检索的文档在哪个分配上,需要将索引的所有的分片都去搜索下,然后汇总。ElasticSearch的search一般有两个搜索类型 所有的搜索系统一般都是两阶段查询: 第一阶段查询到匹配的docID,第二阶段再查询DocID对应的完整文档。这种在ElasticSearch中称为query_then_fetch,另一种就是一阶段查询的时候就返回完整Doc,在ElasticSearch中叫query_and_fetch,一般第二种适用于只需要查询一个Shard的请求。因为这种一次请求就能将数据请求到,减少交互次数,二阶段的原因是需要多个分片聚合汇总,如果数据量太大那么会影响网络传输效率,所以第一阶段会先返回id。 除了上述的这两种查询外,还有一种三阶段查询的情况。 搜索里面有一种算分逻辑是根据TF和DF来计算score的,而在普通的查询中,第一阶段去每个Shard中独立查询时携带条件算分都是独立的,即Shard中的TF和DF也是独立的。虽然从统计学的基础上数据量多的情况下,每一个分片的TF和DF在整体上会趋向于准确。但是总会有情况导致局部的TF和DF不准的情况出现。 ElasticSearch为了解决这个问题引入了DFS查询。 比如DFS_query_then_fetch,它在每次查询时会先收集所有Shard中的TF和DF值,然后将这些值带入请求中,再次执行query_then_fetch,这样算分的时候TF和DF就是准确的,类似的有DFS_query_and_fetch。这种查询的优势是算分更加精准,但是效率会变差。 另一种选择是用BM25代替TF/DF模型。 在ElasticSearch7.x,用户没法指定以下两种方式: DFS_query_and_fetch 和 query_and_fetch 。 注:这两种算分的算法模型在《ElasticSearch实战篇》有介绍: 这里query_then_fetch具体的搜索的流程图如下: (图片来自官网) 查询阶段包含以下四个步骤: 以上就是ElasticSearch的search的详细流程,下面会对每一步进行进一步的说明。 协调节点处理query请求的线程池为: http_server_work 负责该解析功能的类为: org.elasticsearch.rest.action.search.RestSearchAction 主要将restquest的参数封装成SearchRequest 这样SearchRequest请求发送给TransportSearchAction处理 将索引涉及到的shard列表或者有跨集群访问相关的shard列表合并 如果有多个分片位于同一个节点,仍然会发送多次请求 shardsIts为搜索涉及的所有分片,而shardRoutings.nextOrNull()会从分片的所有副本分片选出一个分片来请求。 onShardSuccess对收集到的结果进行合并,这里需要检查所有的请求是否都已经有了回复。 然后才会判断要不要进行executeNextPhase 当返回结果的分片数等于预期的总分片数时,协调节点会进入当前Phase的结束处理,启动下一个阶段Fetch Phase的执行。onPhaseDone()会executeNextPhase来执行下一个阶段。 当触发了executeNextPhase方法将触发fetch阶段 上一步的executeNextPhase方法触发Fetch阶段,Fetch阶段的起点为FetchSearchPhase#innerRun函数,从查询阶段的shard列表中遍历,跳过查询结果为空的 shard。其中也会封装一些分页信息的数据。 使用了countDown多线程工具,fetchResults存储某个分片的结果,每收到一个shard的数据就countDoun一下,当都完毕后,触发finishPhase。接着会进行下一步: CountedCollector: finishPhase: 执行字段折叠功能,有兴趣可以研究下。即ExpandSearchPhase模块。ES 5.3版本以后支持的Field Collapsing查询。通过该类查询可以轻松实现按Field值进行分类,每个分类获取排名前N的文档。如在菜单行为日志中按菜单名称(用户管理、角色管理等)分类,获取每个菜单排名点击数前十的员工。用户也可以按Field进行Aggregation实现类似功能,但Field Collapsing会更易用、高效。 ExpandSearchPhase执行完了,就返回给客户端结果了。 处理数据节点请求的线程池为:search 根据前面的两个阶段,数据节点主要处理协调节点的两类请求:query和fetch 这里响应的请求就是第一阶段的query请求 executeQueryPhase: executeQueryPhase会执行loadOrExecuteQueryPhase方法 这里判断是否从缓存查询,默认启用缓存,缓存的算法默认为LRU,即删除最近最少使用的数据。如果不启用缓存则会执行queryPhase.execute(context);底层调用lucene进行检索,并且进行聚合。 关键点: ElasticSearch查询分为两类,一类为GET,另一类为SEARCH。它们使用场景不同。 本文主要分析了ElasticSearch分布式查询主体流程,并未对lucene部分进行分析,有兴趣的可以自行查找相关资料。

elasticsearch的自动发现节点机制是怎么实现的,原理是怎样

1、Gossip 是一种去中心化、容错而又最终一致性的绝妙算法, 其收敛性不但得到证明还具有指数级的收敛速度。2、使用 Gossip 的系统可以很容易的把 Server 扩展到更多的节点, 满足弹性扩展轻而易举。3、唯一的缺点是收敛是最终一致性, 不适应那些强一致性的场景, 比如 2PC。

Elasticsearch 倒排索引

之前我们已经了解过,Elasticsearch 是一个基于 Lucene 实现的分布式全文检索引擎,其实 Elasticsearch 倒排索引就是 Lucene 的倒排索引。数据检索是 ES 的一项核心功能,它的底层实现也是离不开倒排索引的,通过倒排索引技术可以提高数据的检索效率,理解倒排索引的原理很重要。 那什么是倒排索引,我们该如何理解它呢? 我们能进行数据检索的前提条件是,已经创建好了索引库,并给里边添加了文档数据。所以我们可以按照 创建索引库 、 添加文档 、 数据检索 这个顺序来认识倒排索引。 首先是创建索引库,我们之前已经安装好了 IK 分词器,这里我们创建一个 test 索引,它只有一个 content 字段,添加文档时字段的分词模式是 ik_max_word ,检索时关键字的分词模式是 ik_smart : 字段的分词模式会影响最终生成的倒排索引。不了解分词器的可以参考 Elasticsearch 中文分词器插件 。 创建好了索引,我们来添加一条文档数据: 添加文档数据时,ES 会根据字段的分词模式将字段的值拆分成多个 词条 (Term)(或者称作词项),创建索引库时我们指定了 content 字段分词模式为 ik_max_word ,则会生成如下的词条: 接下来就是建立倒排索引了,在这之前我们先了解两个概念 词条字典 (Term Dictionary)、 倒排列表 (Posting List): ES 的倒排索引就是由 词条字典 和 倒排列表 两部分组成的。如下就是一个简易版的倒排索引,倒排列表项只有词条对应的文档 id: 一个词条对应一个倒排索引项。ES 会给每个字段都建立一个倒排索引。 我们再添加一条文档数据: 根据上边的原理,最终 content 字段的倒排索引会被更新成如下结构: 前边已经添加了文档数据,同时也生成了倒排索引,接下来就是检索数据了。在这之前还有一个知识点需要了解,那就是 词条索引 (Term Index),词条索引一般只存储各个 词条 的前缀(第一个字符),它和字条字典对应。之所以需要词条索引,是因为 词条字典 一般都很大,不适合保存在内存中而是存储在磁盘中,检索数据时根据关键字的前缀匹配到词条索引,再根据词条索引定位到关键字在倒排索引的词条字典中大致的位置,然后进一步在词条字典中通过二分查找定位到具体的词条,这样避免了直接遍历词条字典来点位词条,大幅减少了磁盘的读取,提高了效率。 定位到了词条,就能在倒排索引中找到对应的倒排列表项,进而就知道了对应的文档 id,有了文档 id 自然也就找到了文档,这也就是 ES 检索数据大致的原理。 如下我们查询包含 十二 的文档数据: 由于我们创建索引库时指定了检索时关键字的分词模式是 ik_smart ,所以 十二 被分词后还是 十二 ,再结合上边的原理,以 十二 为关键字最终可以查询到 id 为 1、2 的文档数据:这篇最好能结合 Elasticsearch 中文分词器插件 一起看,这样能更容易理解些。 新手上路,不合理的地方还望大佬指点。

elasticsearch索引主要实现方式

Elasticsearch是什么?Elasticsearch是位于ElasticStack核心的分布式搜索和分析引擎。Logstash和Beats有助于收集、聚合和丰富您的数据并将其存储在Elasticsearch中。Kibana使您能够以交互方式探索、可视化和分享对数据的见解,并管理。Elasticsearch是一个分布式文档存储。Elasticsearch存储的是序列化为JSON文档的复杂数据结构,而不是以列行数据的形式存储信息。当集群中有多个Elasticsearch节点时,存储的文档分布在整个集群中,可以立即从任何节点访问。Elasticsearch是由Shay Banon发起的一个开源搜索服务器项目,2010年2月发布。迄今,该项目已发展成为搜索和数据分析解决方案领域的主要一员,广泛应用于声名卓著或鲜为人知的搜索应用程序。Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它可以在很短的时间内存储,搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。搜索引擎,不支持join表等操作。主要用于全文检索。不适合做数据库。如何选择合适的数据库解决方案?1、如果有强大的技术团队,关系型和非关系型数据库都可选择。一般来讲,非关系型数据库需要更多管理维护的时间。2、如果你要储存会话信息,用户配置信息,购物车数据,建议使用NoSQL数据库; 不过90%的企业或个人,首选数据库都是MySQL数据库。3、(一)、Access (二)SQL Server (三)MySQL,Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。4、虽然把上面的架构全部组合在一起可以形成一个强大的高可用,高负载的数据库系统,但是架构选择合适才是最重要的。 混合架构虽然能够解决所有的场景的问题,但是也会面临更多的挑战,你以为的完美架构,背后其实有着更多的坑。5、例如,如果你需要的是数据分析仓库,关系数据库可能不是一个适合的选择;如果你处理事务的应用要求严格的数据完整性和一致性,就不要考虑NoSQL了。不要重新发明轮子 在过去的数十年,开源数据库技术迅速发展壮大。6、本文首先讨论了基于第三范式的数据库表的基本设计,着重论述了建立主键和索引的策略和方案,然后从数据库表的扩展设计和库表对象的放置等角度概述了数据库管理系统的优化方案。ElasticSearch倒排索引及其原理1、倒排索引采用Immutable Design,一旦生成,不可更改。Segment写入磁盘的过程相对耗时,所以借助文件系统缓存,Refresh时,先将Segment写入文件缓存中,以开放查询。2、之前我们已经了解过,Elasticsearch 是一个基于 Lucene 实现的分布式全文检索引擎,其实 Elasticsearch 倒排索引就是 Lucene 的倒排索引。3、所谓的倒排索引,就是把你的数据内容先分词,每句话分成一个一个的关键词,然后记录好每一个关键词对应出现在了哪些 id 标识的数据。4、可以将对es的操作记录下来,来确保当出现故障的时候,已经落地到磁盘的数据不会丢失,并在重启的时候可以从操作记录中将数据恢复过来。5、Elasticsearch中使用一种称为倒排索引的结构,适用于快速的全文搜索。一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。elasticsearch-倒排索引原理1、倒排索引采用Immutable Design,一旦生成,不可更改。Segment写入磁盘的过程相对耗时,所以借助文件系统缓存,Refresh时,先将Segment写入文件缓存中,以开放查询。2、Elasticsearch中使用一种称为倒排索引的结构,适用于快速的全文搜索。一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。3、elasticsearch提供了translog来记录这些操作,结合os cached segments数据定时落盘来实现数据可靠性保证(flush)。文档被添加到buffer同时追加到translog:进行 refresh 操作,清空buffer,文档可被搜索但尚未 flush 到磁盘。4、如果Elasticsearch密钥库受密码保护,则必须先输入密钥库密码,然后才能为内置用户设置密码。 为弹性用户设置密码后,引导密码不再有效,无法使用该命令。在某些情况下,分片副本的Lucene索引或事务日志可能会损坏。5、Elasticsearch 的查询原理是将查询的关键词与倒排索引中的词条进行匹配,查询的关键词与倒排索引中的词条必须完全相同视为匹配,否则不匹配。 这意味着在插入文档时是否进行分析和查询时是否进行分析将产生非常不同的结果。6、财务平台亿级数据量毫秒级查询优化之elasticsearch原理解析_wang123459的博客-CSDN博客_elasticsearch 查询优化 mysql底层B-tree 支持矮胖,高胖的时候就很难受,说白了就是数据量多会增加IO操作。ES底层倒排索引。Elasticsearch一般情况下如果es服务正常启动,可以通过接口的方式获取elasticsearch版本信息:curlhttp://10.1:9200 上述命令可以得到elasticsearch的服务状态和其他信息包括版本号。Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch架构简单介绍如下。索引 索引(index)是Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。你可以把索引看成关系型数据库的表。然而,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。如何用elasticsearch5.2实现全文索引1、安装ik分词器到elasticsearch很简单,它有个插件目录analysis-ik,和一个配置目录ik, 分别拷贝到plugins和conf目录就可以了。2、ES使用倒序索引来加速全文索引。一个倒序索引由两部分组成:如果我们想要搜索 quick brown,我们仅仅只需要找每一个term出现的文档即可。如下图:每一个文档都匹配到了,但是第一个比第二个要匹配的多。3、每次将文本类型数据插入Elasticsearch索引时,都会对其进行分析,然后存储在反向索引中。根据分析器的配置方式,这会影响您的搜索功能,因为分析器也适用于全文搜索。

Elasticsearch -- 集群内的原理

首先理解三个概念 1)集群内的节点共同承担数据和负载的压力。 2)当有节点加入或者移出集群时,集群会重新平均分配所有的数据。 1)主节点负责集群内的所有变更(如增加、删除节点,增加、删除索引等) 2)主节点并不需要涉及到文档级别的变更和搜索 3)任何节点都可以成为主节点 4)每个节点都知道任意文档所处的位置,当用户请求时无论请求哪个节点都能直接将请求转发给实际存储文档的节点 5)无论用户请求哪个节点,它都能负责从个个包含我们所需文档的各个节点收集回数据并发给客户端,对这一切都是透明的 1)一个分片是一个底层的 工作单元 2)它本身就是一个完整的搜索引擎 3)应用程序是直接与索引而不是与分片进行交互 4)Elasticsearch 是利用分片将数据分发到集群内各处的 5)分片是数据的容器,文档保存在分片内 6)分片又被分配到集群内的各个节点里 7) 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。 8)一个分片可以是 主分片 或者 副本分片 9)索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量 10)一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务 11)在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改 其中 status 字段表示当前集群的健康状态(是否正常工作),有三种颜色

Elasticsearch之存储原理

倒排索引被写入磁盘后是不可变的,ES解决不变性和更新索引的方式是使用多个索引,利用新增的索引来反映修改,在查询时从旧的到新的依次查询,最后来一个结果合并。 ES底层是基于Lucene,最核心的概念就是 Segment(段) ,每个段本身就是一个倒排索引。 ES中的Index由多个段的集合和 commit point(提交点) 文件组成。 提交点文件中有一个列表存放着所有已知的段,下面是一个带有1个提交点和3个段的Index示意图: Doc会先被搜集到内存中的Buffer内,这个时候还无法被搜索到,如下图所示: 每隔一段时间,会将buffer提交,在flush磁盘后打开新段使得搜索可见,详细过程如下: 下面展示了这个过程完成后的段和提交点的状态: 通过这种方式,可以使得新文档从被索引到可被搜索间的时间间隔在数分钟,但是还不够快。因为磁盘需要 fsync ,这个就成为性能瓶颈。我们前面提到过Doc会先被从buffer刷入段写入文件系统缓存(很快),那么就自然想到在这个阶段就让文档对搜索可见,随后再被刷入磁盘(较慢)。 Lucene支持对新段写入和打开,可以使文档在没有完全刷入硬盘的状态下就能对搜索可见,而且是一个开销较小的操作,可以频繁进行。 下面是一个已经将Docs刷入段,但还没有完全提交的示意图: 我们可以看到,新段虽然还没有被完全提交,但是已经对搜索可见了。 引入refresh操作的目的是提高ES的实时性,使添加文档尽可能快的被搜索到,同时又避免频繁fsync带来性能开销,依靠的就是文件系统缓存OS cache里缓存的文件可以被打开(open/reopen)和读取,而这个os cache实际是一块内存区域,而非磁盘,所以操作是很快的,这就是ES被称为近实时搜索的原因。 refresh默认执行的间隔是1秒,可以使用 refreshAPI 进行手动操作,但一般不建议这么做。还可以通过合理设置 refresh_interval 在近实时搜索和索引速度间做权衡。 index segment刷入到os cache后就可以打开供查询,这个操作是有潜在风险的,因为os cache中的数据有可能在意外的故障中丢失,而此时数据必备并未刷入到os disk,此时数据丢失将是不可逆的,这个时候就需要一种机制,可以将对es的操作记录下来,来确保当出现故障的时候,已经落地到磁盘的数据不会丢失,并在重启的时候可以从操作记录中将数据恢复过来。elasticsearch提供了translog来记录这些操作,结合os cached segments数据定时落盘来实现数据可靠性保证(flush)。 文档被添加到buffer同时追加到translog: 进行 refresh 操作,清空buffer,文档可被搜索但尚未 flush 到磁盘。translog不会清空: 每隔一段时间(例如translog变得太大),index会被flush到磁盘,新的translog文件被创建,commit执行结束后,会发生以下事件: 下面示意图展示了这个状态: translog记录的是已经 在内存生成(segments)并存储到os cache但是还没写到磁盘的那些索引操作 (注意,有一种解释说,添加到buffer中但是没有被存入segment中的数据没有被记录到translog中,这依赖于写translog的时机,不同版本可能有变化,不影响理解),此时这些新写入的数据可以被搜索到,但是当节点挂掉后这些未来得及落入磁盘的数据就会丢失,可以通过trangslog恢复。 当然translog本身也是磁盘文件,频繁的写入磁盘会带来巨大的IO开销,因此对translog的追加写入操作的同样操作的是os cache,因此也需要定时落盘(fsync)。translog落盘的时间间隔直接决定了ES的可靠性,因为宕机可能导致这个时间间隔内所有的ES操作既没有生成segment磁盘文件,又没有记录到Translog磁盘文件中,导致这期间的所有操作都丢失且无法恢复。 translog的fsync是ES在后台自动执行的,默认是每5秒钟主动进行一次translog fsync,或者当translog文件大小大于512MB主动进行一次fsync,对应的配置是 index.translog.flush_threshold_period 和 index.translog.flush_threshold_size 。 当 Elasticsearch 启动的时候, 它会从磁盘中使用最后一个提交点去恢复已知的段,并且会重放 translog 中所有在最后一次提交后发生的变更操作。 translog 也被用来提供实时 CRUD 。当你试着通过ID来RUD一个Doc,它会在从相关的段检索之前先检查 translog 中最新的变更。 默认 translog 是每5秒或是每次请求完成后被 fsync 到磁盘(在主分片和副本分片都会)。也就是说,如果你发起一个index, delete, update, bulk请求写入translog并被fsync到主分片和副本分片的磁盘前不会反回200状态。 这样会带来一些性能损失,可以通过设为异步fsync,但是必须接受由此带来的丢失少量数据的风险: flush 就是执行commit清空、干掉老translog的过程。默认每个分片30分钟或者是translog过于大的时候自动flush一次。可以通过flush API手动触发,但是只会在重启节点或关闭某个索引的时候这样做,因为这可以让未来ES恢复的速度更快(translog文件更小)。 满足下列条件之一就会触发冲刷操作: 整体流程: 删除一个ES文档不会立即从磁盘上移除,它只是被标记成已删除。因为段是不可变的,所以文档既不能从旧的段中移除,旧的段也不能更新以反映文档最新的版本。 ES的做法是,每一个提交点包括一个 .del 文件(还包括新段),包含了段上已经被标记为删除状态的文档。所以,当一个文档被做删除操作,实际上只是在 .del 文件中将该文档标记为删除,依然会在查询时被匹配到,只不过在最终返回结果之前会被从结果中删除。ES将会在用户之后添加更多索引的时候,在后台进行要删除内容的清理。 文档的更新操作和删除是类似的:当一个文档被更新,旧版本的文档被标记为删除,新版本的文档在新的段中索引。 该文档的不同版本都会匹配一个查询,但是较旧的版本会从结果中删除。 通过每秒自动刷新创建新的段,用不了多久段的数量就爆炸了,每个段消费大量文件句柄,内存,cpu资源。更重要的是,每次搜索请求都需要依次检查每个段。段越多,查询越慢。 ES通过后台合并段解决这个问题。ES利用段合并的时机来真正从文件系统删除那些version较老或者是被标记为删除的文档。被删除的文档(或者是version较老的)不会再被合并到新的更大的段中。 可见,段合并主要有两个目的: ES对一个不断有数据写入的索引处理流程如下: 合并过程如图: 从上图可以看到,段合并之前,旧有的Commit和没Commit的小段皆可被搜索。 段合并后的操作: 合并完成后新的段可被搜索,旧的段被删除,如下图所示: 注意 :段合并过程虽然看起来很爽,但是大段的合并可能会占用大量的IO和CPU,如果不加以控制,可能会大大降低搜索性能。段合并的optimize API 不是非常特殊的情况下千万不要使用,默认策略已经足够好了。不恰当的使用可能会将你机器的资源全部耗尽在段合并上,导致无法搜索、无法响应。

elasticsearch-倒排索引原理

1、倒排索引采用ImmutableDesign,一旦生成,不可更改。Segment写入磁盘的过程相对耗时,所以借助文件系统缓存,Refresh时,先将Segment写入文件缓存中,以开放查询。2、Elasticsearch中使用一种称为倒排索引的结构,适用于快速的全文搜索。一个倒排索引由文档中所有不能重复词的列表构成,对于其中每个词,有一个包含它的文档列表。3、elasticsearch提供了translog来记录这些操作,结合oscachedsegments数据定时落盘来实现数据可靠性保证(flush)。文档被添加到buffer同时追加到translog:进行refresh操作,清空buffer,文档可被搜索但尚未flush到磁盘。4、如果Elasticsearch密钥库受密码保护,则必须先输入密钥库密码,然后才能为内置用户设置密码。为弹性用户设置密码后,引导密码不再有效,无法使用该命令。在某些情况下,分片副本的Lucene索引或事务日志可能会损坏。5、Elasticsearch的查询原理是将查询的关键词与倒排索引中的词条进行匹配,查询的关键词与倒排索引中的词条必须完全相同视为匹配,否则不匹配。这意味着在插入文档时是否进行分析和查询时是否进行分析将产生非常不同的结果。6、财务平台亿级数据量毫秒级查询优化之elasticsearch原理解析_wang123459的博客-CSDN博客_elasticsearch查询优化mysql底层B-tree支持矮胖,高胖的时候就很难受,说白了就是数据量多会增加IO操作。ES底层倒排索引。

为什么taste good,sells wells

taste是系动词 后面加adj 形容词做表语 sell是动词用well 副词修饰 不是wells

Last Visions 歌词

歌曲名:Last Visions歌手:Silent Cry专辑:Goddess of TearsLast VisionsThrough his eyesI could escape from myselfPlease, can you help me?In the infinitein my soul... so lonelyI feel his silenceIn serene harmonymy soul burnsLet me touch you, let to hear you.Let me dream in memory of this enigma.Let me remember foreverHis absence makes me feelthe wind screams of painAnd the sadness of traveled roadsin oceans of hope.A vision... the last desirein my heart.End.....................http://music.baidu.com/song/26332105

vision和taste什么意思

vision 英[u02c8vu026au0292n] 美[u02c8vu026au0292u0259n] n. 视力,视觉; 美景,绝妙的东西; 幻影; 想像力; vt. 在幻觉中看到; 幻想,想象; 梦见; [例句]It causes blindness or serious loss of vision.这能导致失明或视力严重受损。[其他] 复数:visions taste 英[teu026ast] 美[test] n. 滋味; 味觉; 体验; 风味; vt. 尝,品尝; vt. 吃; 喝; 浅尝; [例句]This voyage was his first taste of freedom.这次航行使他初次体验到了自由的滋味。[其他] 第三人称单数:tastes 复数:tastes 现在分词:tasting 过去式:tasted过去分词:tasted

east west south north英文怎么读?

东西南北的英文分别是east,west,south,north。表示方向的英语单词还有northeast,northwest,southeast,southwest等等。1、东east读音:英[iu02d0st];美[iu02d0st]词义:adj.东方的;adv.向东方2、西west读音:英[west];美[west]词义:n.西;西方;西部;西方国家;adj.西方的;西部的3、南south读音:英[sau028aθ];美[sau028aθ]词义:n.南;南方;adj.南方的4、北north读音:英[nu0254u02d0θ];美[nu0254u02d0rθ]词义:adj.北方的;北的;adv.向北方例句1、游客到达时搞不清东西南北了。The tourists were very mixed up when they arrived.2、方位基点就是东西南北。The cardinal points of the compass are north,south,east and west.

用这些动词造句toast , bug , tattoo ,pierce , bolt , upset , appeal

How about toast and jelly? 烤面包和果酱怎么样?We can"t help you ,so bug off. 我们帮不了你,因此,你停止烦扰而走开吧。But his legs poked out, and I could see the crossed-rifles tattoo. 不过他的腿露在外面,我可以看到腿上的刺青。This week in our series, we talk about the presidency of Franklin Pierce. 本周,我们继续向你讲述富兰克林.皮尔斯的总统任期。I then quitted her again, and she drew the bolt in one of her worst, most peevish humours. 然后我又离开了她,她在一种最坏的、最乖张的心情中上了门闩。This tells your partner that, regardless of how upset you are with him or her, you still want to be in the relationship. 这样会告诉你的伴侣,不论今天和他或她在一起多么沮丧,你仍然希望继续与他相爱下去。The sentence of the court was quashed on appeal. 经过上诉,法院的判决被宣布无效。

everythinginthypastisaprelude中文是什么意思?

这句话引用的原文是错误的。原文出自英国剧作家莎士比亚的剧本。正确的句子应该是:What"s past is prologue. 一切过往皆为序章。

Martha Masters的《Prelude》 歌词

歌曲名:Prelude歌手:Martha Masters专辑:SerenadePreludeDream in your heartI feel in asleep nightBut there is only starsLike tears of the moonLike silent moonAnd on and onSo the sad will fall and fallBut I think all the dreamIs true anyday, for anyoneLove in your eyesI feel in clear skyBut there is only windsLike sighs of the earthLike weeping earthStill on and onSo the pain will blow and blowBut I wish all the loveIs free anyday, for anyonehttp://music.baidu.com/song/15077763

ldsgamemaster是什么文件夹

lds game master是LDS的游戏大师的源文件。源文件一般指用汇编语言或高级语言写出来的代码保存为文件后的结果,源文件是相对目标文件和可执行文件而言的。源文件就是用汇编语言或高级语言写出来的代码保存为文件后的结果。源文件是相对目标文件和可执行文件而言的。源文件就是用汇编语言或高级语言写出来的代码保存为文件后的结果。目标文件是指源文件经过编译程序产生的能被cpu直接识别二进制文件。可执行文件就是将目标文件连接后形成的可执行文件,当然也是二进制的。在这个网页上右键鼠标,选择查看源文件。出来一个记事本,里面的内容就是此网页的源代码。

LDSGameMaster是什么

你好。lds game assistantLDS游戏助手

ldsgamemaster怎么删除?

需要用360杀毒删除。ldsgamemaster是鲁大师的游戏大师源文件。源文件是用汇编语言或高级语言,写出来的代码保存为文件后的结果,目标文件是指源文件经过编译程序产生的,能被cpu直接识别的二进制文件。注意事项:文件夹打个比喻就是一个抽,文件夹名就是一个编号(或名称),文件名可以自已取,只要不包含下列字符就可以了 /:*?"<>|。

SheilaStodden是谁

SheilaStoddenSheilaStodden是一名演员,主要作品有《哄堂大笑》。外文名:SheilaStodden职业:演员代表作品:《哄堂大笑》合作人物:彼得·博格丹诺维奇

Squll Pasteboard,此歌罗马音,谢谢。

くだらない夜のことkudara nai yoruno koto终わらない日々のことowara nai hibino kotoうやむやに过ぎ去ってゆくuyamuyani sugisatte yuku眠れない夜のことnemure nai yoruno koto変わらない日々のことkawara nai hibino kotoそれぞれに折り合ってゆくsorezoreni oriatte yukuスピードもすべて超えて行ってsupidomo subete koete itteスタイルは直ぐに灰になってsutairuwa suguni haini nattesquallはいつもwaitsumo知らぬ间に远くなってくshiranu mani tooku natteku笑えない夜のことwarae nai yoruno koto终われない日々のことoware nai hibino kotoうやむやに过ぎ去ってゆくuyamuyani sugisatte yuku忘れたい夜のことwasure nai yoruno koto変われない日々のことkaware nai hibino kotoそれぞれに折り合ってゆくsorezoreni oriatte yukuスピードもすべて超えていてsupidomo subete koete iteスタイルは直ぐに灰になってsutairuwa suguni haini nattesquallはいつもwaitsumo知らぬ间に远くなってくshiranu mani tooku nattekuスピードもすべて超えていてsupidomo subete koete iteスタイルは直ぐに灰になってsutairuwa suguni haini nattesquallはいつもwaitsumo知らぬ间に远くなってくshiranu mani tooku natteku

英语What did yuo have for brekfast的回答是什么

早餐吃的是啥?

英语单项选择( )fantastic races they are!I enjoy them. A.How B.What C.What a D.How a

B D C B A A D B D A

汽车收音机上的这些标识:scn、set、snd、ast、bnd、src各是什么意思?

TRE高音提升,BAL左右喇叭平衡调节, BAS低音提升,FAD前后喇叭平衡调节,AST收音自动存台,SRC音源选择,SCN电台/CD10S 扫描播放 p1~p6 收音预制键

汽车收音机上的这些标识:scn、set、snd、ast、bnd、src各是什么意思呢,知道的请说下,谢谢!

TRE高音,FAD渐高/渐低,TAP磁带,AM调幅广播,SCN搜索bai电台,BAS低音,BAL均衡器,AST自动电台存台,FM调频广播。收音机在1844年,电报机被发明出来,可以在远地互相通讯,但是还是必须依赖「导线」来连接。而收音机讯号的收、发,却是「无线电通讯」;整个无线电通讯发明的历史,是多位科学家先后研究发明的结果。扩展资料:历史沿革美国奥斯本和中国的曾军成立了中国广播公司,通过自建电台在上海首次播出广播节目并销售收音机。那是上海地区最早的广播电台之一,有500多台接收到它的广播。此后,随着广播站的不断建立,收音机在上海地区逐渐兴起,都是进口产品,以美国生产最多,其类型是一种矿物收音机,二是阀门收音机,市民们喜欢使用矿物收音机。

MS计算castep出错,提示是我没有正版买MS的意思吗

最近进行第一性原理计算,应用的软件是MS中的castep模块,由于接触第一性原理时间不长,在结构优化过程中遇到了问题,自己无法解决,希望得到同行前辈的指点。在设置好几何优化的参数后,计算跑不了几步就会出现任务提示failed,下面贴上具体情况。我看不懂!:cat9:请大神们不吝赐教!!!!!在此先谢谢大家了:cat39:这是 *.castep 文件的提示*Warning* max. SCF cycles performed but system has not reached the groundstate.Current total energy, E = -7620.597334909 eVCurrent free energy (E-TS) = -7620.601878046 eV(energies not corrected for finite basis set)NB est. 0K energy (E-0.5TS) = -7620.599606478 eV

JUJU /BONNIE PINK 的Last Kiss歌词的罗马拼音

Last Kiss歌手:JUJU作词:BONNIE PINK作曲:BONNIE PINKakaku moeru kokoro kotoba ubaware sansetto(Sunset)tatazunda jikan to omoi no fukasa wa ikooru(Equal)tatta hitokoto de tabidatsu no?kare no inai asu waIt"s bitter like beer for kidsyaseta yubi ni kisu(Kiss) wo shitaanata wo zutto wasure nai yotatoe hanare banare demosaigo no kisu(Kiss) wo oboete iru yo oboete iru yo hajimari wa dare demo junshin mukuna beibii(Baby)nigai mi kajittemo kujikecha dame yo Walk straightsatta koto dakedo ame no naka zukizuki itamu yoI"m lonely as floating iceyaseta yubi ni kisu(Kiss)wo shitaano nukumori wo wasure nai yotatoe hanare banare demoanata no kisu(Kiss)wo oboete iru yodoushitemo wakari aenu nara mitodokeru yo kawa no younidare wo nani wo semetemo ii aishita koto dake wa kegasa nai deyaseta yubi ni kisu(Kiss)wo shitaanata wo zutto wasure nai yoitsuka aeru to shinjitesaigo no kisu(Kiss) wo kami shimeru yoyaseta yubi ni kisu(Kiss)wo shitenaita anata wo omoi dasu yokore de owari dato shitemosaigo no kisu(Kiss)wa wasure nai yowasure nai yowasure nai yokare no kisu(Kiss)wo wasure nai yo

Last Unicorn 歌词

歌曲名:Last Unicorn歌手:Groove Coverage专辑:CovergirlSEEDSEED Last UnicornGroove CoverageWhen the last eagle flies over the last crumbling mountainAnd the last lion roars at the last dusty fountainIn the shadow of the forest though she may be all and oneThey would stare unbelieving at the last unicornWhen the first breath of winter though their flowers it"s icingAnd you look to the north and the pale moon is risingAnd it seems like all is dying and would leave the world to moreIn the distance hear the laughter of the last unicornhttp://music.baidu.com/song/19088435

wears、sweater、bread、breakfast的发音一样吗?

不一样wears 不同,读[eə]sweater,bread,breakfast 读[e]

yeast和yearn是什么单词的缩写形式啊?

单词如下:1、yearn:英语单词,主要用作为动词,作动词时意为“渴望,向往;思念,想念;怀念”。2、yeast:英语单词,主要用作为名词,作名词时意为“酵母;泡沫;酵母片;引起骚动因素”。3、yoke:意为轭,牛轭;羁绊,枷锁;(女服的)上衣抵肩,裙腰;(挑东西用的)轭状扁担;轭门;同轭的一对动物;(强行)使结合,使联合;给……套上轭。4、yelp:英语单词,意为尖叫,大叫;狗吠;(因痛或害怕)叫喊。5、yielding:英语单词,主要用作形容词、名词、动词,作形容词时译为“易弯曲的;柔软的;顺从的;带来……收成(或利润等)的”。

yeast的中文是什么意思?

单词如下:1、yearn:英语单词,主要用作为动词,作动词时意为“渴望,向往;思念,想念;怀念”。2、yeast:英语单词,主要用作为名词,作名词时意为“酵母;泡沫;酵母片;引起骚动因素”。3、yoke:意为轭,牛轭;羁绊,枷锁;(女服的)上衣抵肩,裙腰;(挑东西用的)轭状扁担;轭门;同轭的一对动物;(强行)使结合,使联合;给……套上轭。4、yelp:英语单词,意为尖叫,大叫;狗吠;(因痛或害怕)叫喊。5、yielding:英语单词,主要用作形容词、名词、动词,作形容词时译为“易弯曲的;柔软的;顺从的;带来……收成(或利润等)的”。

yearn、 yeast、 yoke、 yelp各是什么意思

单词如下:1、yearn:英语单词,主要用作为动词,作动词时意为“渴望,向往;思念,想念;怀念”。2、yeast:英语单词,主要用作为名词,作名词时意为“酵母;泡沫;酵母片;引起骚动因素”。3、yoke:意为轭,牛轭;羁绊,枷锁;(女服的)上衣抵肩,裙腰;(挑东西用的)轭状扁担;轭门;同轭的一对动物;(强行)使结合,使联合;给……套上轭。4、yelp:英语单词,意为尖叫,大叫;狗吠;(因痛或害怕)叫喊。5、yielding:英语单词,主要用作形容词、名词、动词,作形容词时译为“易弯曲的;柔软的;顺从的;带来……收成(或利润等)的”。

请问yearn, yeast, yoke, yelp都是什么意思

1、yarn纱线2、yarrow西洋蓍草3、yaw(船,飞机等)偏航4、yawl船载小艇,舰载杂用船,一种小帆船5、yawn打呵欠n.呵欠6、yea肯定,赞成,赞成票7、yeah(口)(同)yes8、year年;年年9、yearbook年鉴10、yearling一岁崽11、yearly每年的ad.一年一度12、yearn想念,怀念,向往13、yeast酵母14、yell叫喊15、yellow黄色的16、yellowstone黄石公知陪冲园(美国)17、yelp狺吠乱茄;叫喊18、yeoman自耕农,乡下人19、yeomanry小地主们20、yes是,是搭歼的21、yesterday昨天,昨日

TheWorldis()vergfast

The world is changed very fast.世界瞬息万变。

Summertime (Live At Town Hall) (2004 Digital Remaster) 歌词

歌曲名:Summertime (Live At Town Hall) (2004 Digital Remaster)歌手:Nina Simone专辑:Nina Simone CollectionDo some people wind up with the one that they adorein a heart-shaped hotel room it"s what a heart is forthe bubble floats so madly will it stay sky-high?Hello partner, kiss your name bye-byeooh sometimes...romantic piscean seeks angel in disguisechinese-speaking girlfriend big brown eyesliverpudlian lady, sophisticated malehello partner, tell me love can"t fail& it"s you and me in the summertimewe"ll be hand in hand down in the parkwith a squeeze & a sigh & that twinkle in your eye& all the sunshine banishes the darkdo some people wind up with the one that they abhorin a distant hell-hole room, the third world warbut all I see is films where colourless despairmeant angry young men with immaculate hairooh sometimes...Get up a voice inside says there"s no time for looking downonly a pound a word & you"re talking to the townbut how do you coin the phrase though that will set your soul apartjust to touch a lonely heart& it"s you & me in the summertimewe"ll be hand down in the parkwith a squeeze & a sigh & that twinkle in your eye& all the sunshine banishes the dark& it"s you I need in the summertimeas I turn my white skin redtwo peas from the same pod yes we areor have I read too much fiction?Is this how it happens?How does it happen?Is this how it happens?Now, right nowhttp://music.baidu.com/song/2852814

废物用英语怎么说,废物的英语翻译是:waste

慌废的英文翻译_百度翻译慌废Waste. waste_百度翻译waste 英[weɪst] 美[west] n. 浪费,白费,挥霍钱财; 废料,废品,废物; 荒地,荒芜; 消耗(量),损耗; vt. 浪费; 徒劳; (使) 损耗; (使) 消瘦; vt. 破坏; 干掉; (游戏或比赛中) 大胜; [例句]There could be many reasons and he was not going to waste time speculating onthem

Webasto的加热器工作原理是什么?它会影响车本身的使用寿命吗?

我用了两年了,冬天对我来说没它不行,不觉得有什么不好的问题

英语浪费钱怎么说?是a waste of money吗

名词短语就是 a waste of money 动词短语就是 waste money希望可以帮到你

浪费水英文中waste 为什么用ing 形式?

不一定要用,要看具体的表达方式。只有现在进行时才要加ING。

FastZigBee协议怎么获取节点间的信号强度?

查询节点间的信号强度非常简单,直接发AT指令读取即可。如下:

真三国无双7游戏中显示的名字是 Dynasty Warriors 8为什么

因为《真·三国无双》里混入了一个《三国无双》,一款九十年代的格斗游戏。搞笑的是无双大蛇也是这样,魔王再临成了2,无双大蛇3成了WARRIORS OROCHI 4,我giao。

dynasty warriors4 是什么?

dynasty王朝warriors勇士是游戏《真 三国无双4》的英文名

at last sunday 还是in last sunday 还是on last sunday

on

Pro/E,MDT,Mastercam,CAPP,Inventer都是什么,有什么异同?

都说完了,我说什么?

时间来不及了,请快点走过去如果英语翻译一下句中的快用Fast还是quick

quick
 首页 上一页  3 4 5 6 7 8 9 10 11 12 13  下一页  尾页