- 小教板
-
HBase采用了类似Google Bigtable的数据模型,即一个稀疏的、分布式的、持久化的多维映射表,每个表都由行键、列族、列限定符和时间戳组成。
在底层实现上,HBase使用了基于Hadoop的分布式文件系统HDFS来存储数据,并且使用了一种称为LSM-Tree(Log-Structured Merge-Tree)的数据结构来管理数据。LSM-Tree是一种支持高写入吞吐量的数据结构,它把数据分成多个层,每层采用不同的策略来管理数据,包括内存中的缓存、写入磁盘的SSTable、和合并SSTable的操作。通过这种方式,HBase能够支持高并发、高吞吐量的数据写入,同时保证数据的一致性和可靠性。
另外,HBase还采用了Bloom Filter、MemStore和Compaction等技术来提高数据查询效率和存储效率。Bloom Filter是一种快速的数据过滤技术,可以帮助HBase快速地过滤掉无效的查询请求,提高查询效率。MemStore是一种缓存机制,可以帮助HBase加速数据写入,提高数据写入效率。Compaction则是一种数据压缩和合并技术,可以帮助HBase节省存储空间,提高存储效率。
综上所述,HBase采用了LSM-Tree、Bloom Filter、MemStore和Compaction等多种数据结构和技术,以实现高并发、高吞吐量的分布式存储和查询功能。
dna compaction 什么意思
dna compaction DNA压实的意思2023-07-29 04:33:281
Leveldb解析之四:Compaction
这一篇我们来解析leveldb的Compaction机制,要把这个讲清楚,需要回答下面的问题: 随着Put/Delete操作增多,sstable文件会越来越多,占用的磁盘空间也越来越大。删除无效的key( 被标记删除的key,被新版本覆盖的老版本的key ),然后重新生成sstable文件,可以有效减少sstable文件的数量,这个过程就是Compaction。 Compaction的入口函数是MaybeScheduleCompaction(),触发的时机: leveldb是在后台线程执行Compact,目前只允许单线程,也就是说Compact只能串行执行。 入口函数是DBImpl::BackgroundCompaction(),流程如下: leveldb通过VersionSet::PickCompaction()来选择要压缩的Layer和Table,怎么做到的呢? 原来,在每个Version生成的时候,会计算哪个Layer需要进行Compaction,方法是计算每个layer的compaction_score,选择得分最高的layer,这是由LogAndApply()函数完成的: 调用LogAndApply()生成Version的时机: 选择Layer和Table的过程头绪比较多,具体实施Compaction的过程相对比较好理解,用下面这张图表述Compaction的整个过程:2023-07-29 04:33:341
压缩的英文怎么拼写
compress2023-07-29 04:33:527
HBase合并storefile的原因是什么?在合并的过程中会做什么操作
合并storefile的过程称为Compaction过程,主要过程是合并由memStore的flush操作产生的部分或者所有StoreFile,主要有以下几个作用: 1)合并文件。由于flush的触发是针对所有memStore,所以缓存有些记录不多的memStore flush之后的结果是很多小文件。Compaction操作可以合并这些小文件,减小对StoreFile的维护成本。 2)清除删除、过期、多余版本的数据。由于HBase所有写入的数据都是不可修改的,所以对数据的修改操作就是添加一条新的记录,原数据仍保存在StoreFile中;而删除操作是添加一个删除的标识。Compaction操作可以整合这些信息,减少磁盘空间的占用。 3)提高读写数据的效率。2023-07-29 04:34:061
主要成岩作用及其作用特点
1.压实和压溶作用沉积物(主要是物理沉积作用和复合沉积作用形成的沉积物)在上覆沉积物的重压下将会排除水分、减少孔隙,结果是密度加大、体积缩小。原始沉积物的这种单纯机械压缩作用就称为压实作用(compaction)。在压力和作用时间相同的条件下,不同成分和结构的沉积物的压实效果是不同的。当埋深深度小于500m时,泥质沉积物的体积可随埋深加大而急剧减小;当深度大于500m以后其体积减小的幅度将很快减弱,表明它已向坚固的沉积岩转化。干净的陆源砂、砾沉积物在这一埋深段因压实导致的体积缩小却较弱,而且这种单纯的物理压实在更大埋深段也不能使之固结。一般而言,在埋深较浅时,沉积物中的泥质含量愈高,压实愈明显。由于这个缘故,原始沉积物中的基质含量在压实中就可能减少,同时较粗颗粒的含量则增加。如果原始沉积物是基质支撑,它就可能被改造而表现为过渡性支撑或颗粒支撑,同时基质中的片状矿物(如粘土矿物)也会趋向于平行颗粒表面定向排列(图14-1)。在颗粒支撑的情况下,压实效应将取决于支撑颗粒的相对机械强度。质地相对柔软、松脆的颗粒可能变形破碎,如云母片被压弯、泥质岩岩屑、鲕粒被压碎、粒状海绿石被压扁或呈乳头状被挤到相邻粒间孔内等等。若支撑颗粒机械强度相差不大(如石英、长石),压实将迫使它们在一定范围内位移或旋转以占据最小空间。颗粒这种相对位置和取向关系的改变将导致颗粒的定向排列或使一群大小和形状搭配合适的颗粒大体拼合起来形成一种似镶嵌结构(图14-1),这是在颗粒大小和形状基本保持不变情况下,整个沉积物体积和其中粒间孔可被压缩到的最低限度。但这样的嵌合通常是不完善的。就整个沉积物而言,其中颗粒圆度愈高、分选愈好,可能达到的嵌合程度愈低。埋藏砂岩粒间孔的多少与颗粒的分选磨圆常有正相关关系就是由于可达到的嵌合程度不同的缘故。图14-1 沉积物的整体压实效应压缩到似镶嵌以后,如果压力进一步加大,颗粒的大小和形状就难以继续保持不变,颗粒就可能出现裂纹、错动或波状消光(注意有些波状消光是继承性的),也可能被压溶。固态沉积物在高压诱导下的溶解作用称为压溶(pres-sure solution)。压溶的直接结果是改变颗粒相互接触部位的形状或接触类型。压溶开始之前,颗粒相互之间多为点接触,有时可为粗糙的面接触,压溶后则可能演变为光滑的面接触、凸凹接触或缝合线接触(图14-2)。压溶的成分全部进入到粒间水溶液中,它们可在邻近压力较低部位重新参与沉淀矿物的形成。在很高压力作用下,沉积颗粒可全部或主要呈压溶性接触形成压溶性镶嵌结构,如沉积石英岩就具有这样的结构。就作用机制而言,压溶应属化学变化过程,压力只是使矿物的溶解度加大。因此,压溶也称化学压实。图14-2 颗粒之间接触类型随压力增大的变化序列通常,物理或机械压实发生在浅埋成岩阶段并随沉积物的固结而减弱,而压溶则盛行于深埋成岩阶段并可一直向浅变质阶段延续(如形成压力影构造)。2.胶结作用彼此分立的颗粒被胶结物焊结在一起的作用称为胶结作用(cementation),它是使陆源碎屑和生物碎屑、内碎屑、鲕粒等颗粒性沉积物固结的主要作用。在胶结作用中,从粒间水溶液中沉淀出来的,对分立颗粒起焊结作用的化学沉淀物称为胶结物(cement),其沉淀空间可以是沉积物中的任何孔隙,如颗粒内部的孔洞,裂隙、解理缝,生物化石的房室、体腔、生物礁中的间隙等等,但最重要的沉淀空间还是粒间孔隙。实际上,只有沉淀在粒间孔中的胶结物才可将分立颗粒焊结起来。胶结物的沉淀除需要沉淀空间外,还需要有相关离子的补给,这只有通过孔隙水的流动才能实现。例如,每单位体积方解石胶结物就至少是5400个单位体积的过饱和孔隙水的沉淀结果。因此,胶结作用主要在早期成岩阶段进行。胶结物在同生作用阶段主要由环境底层水提供,在浅埋成岩阶段主要由埋藏沉积物中不稳定成分的分解提供。在陆源碎屑沉积物中,常见的胶结物有硅质矿物(如石英)、方解石、赤铁矿、粘土、海绿石、石膏等,其次是菱铁矿、绿泥石、重晶石、沸石等。同一陆源碎屑沉积物中的胶结物可以只有一种,也可以有多种。在碳酸盐或硅质沉积物中,常见的胶结物则分别是碳酸盐矿物(文石、方解石等,它们常被称为亮晶胶结物(sparry cement))和硅质矿物。胶结物属广义化学沉积物的范畴,其沉淀符合化学沉积作用的一般原理,对揭示胶结时的作用条件,如孔隙水的离子成分、盐度、pH值、Eh值等等具有指示性意义。当沉积物含有较多基质而缺少粒间孔时,胶结物很少形成,这时的基质在压实过程中对较大颗粒也具有焊结作用,也可看成是实际意义上的胶结物,但它们与真正意义上的胶结物具有完全不同的成因,决不能将它们等同看待。在无特殊说明的情况下,通常所说的胶结物指的都是真正意义上的胶结物。胶结作用对机械压实具有一定妨碍,尤其不利于似镶嵌结构的形成,但对化学压实似乎没有影响。胶结作用是一种重要的成岩作用,在成岩作用的研究中占有重要位置。除胶结物的成分以外,胶结物的分布、胶结物的结构、不同胶结物间的关系等也是反映胶结特征的几个重要方面。1)胶结类型由于胶结物的胶结对象是各自分立的颗粒,因而这些颗粒相互间的位置关系对胶结物的分布就有重要影响。在沉积学中,胶结物的不同分布特点被定义为胶结类型(cementation type)。主要胶结类型有以下几种(图14-3):图14-3 不同胶结类型示意图,画斜线者为胶结物基底式胶结(basal cementation)被胶结颗粒彼此相距较远,互不接触而“漂浮”在胶结物背景中。这时的胶结物只能形成在颗粒沉积的同时或在颗粒沉积之前,即不会晚于同生期。从支撑机制看,颗粒之所以“漂浮”,显然是由于基质支撑的缘故。所以这时起胶结作用的只是基质而已(粘土基质或泥晶等)。孔隙式胶结(porous cementation)沉积物为颗粒支撑,胶结物分布在粒间孔内,这时的胶结物可以是基质,但更典型的还是真正意义上的胶结物。若是基质,它形成于同生期或沉积期,或可能是原基质支撑经压实改造形成。若是真正意义上的胶结物,则多形成于浅埋成岩期,少数可形成于同生期或深埋成岩期。接触式胶结(contact cementation)沉积物也为颗粒支撑,但胶结物只分布在颗粒之间的接触点附近,粒间孔内部仍是未被充填的孔隙。这种胶结类型是某种特殊成岩条件的反映。有两类沉积物可能形成这种胶结类型,一是干旱地区处在地下潜水面以上的风成砂,那里地表蒸发量很大,当地下潜水顺毛细管上升弥补蒸发损失时,少量粒间水可能残留在粒间接触点周围,水中离子浓度也随之升高,最后就可沉淀出胶结物来。二是某些暴露在空气中的颗粒性碳酸盐沉积物因大气降水向下渗透也只有少量粒间水附着在粒间接触点周围,当其中溶解了较多CaCO3时也会有沉淀作用发生。这时胶结物的表面常向接触点方向凹进(这实际是附着水自由表面的形态),故又称新月型胶结(meniscus cementation)(Longman,1980)。接触式胶结虽然也可使沉积物固结,但固结程度一般不高。若潜水面抬升或沉积物进一步深埋,粒间孔将被水充盈,接触式胶结将发展成或被叠加上孔隙式胶结,这一演变史可由先后沉淀的胶结物的成分或结构差异显现出来,但当缺少这方面的差异时,原接触式胶结就会被掩盖或混淆。接触式胶结可看成是浅埋成岩作用的产物。有时候,在表生成岩阶段,原孔隙式胶结也可因大部分胶结物被溶解而形成溶蚀残余型接触式胶结。严格地讲,这不是接触式胶结而只是一种溶蚀结构而已。悬挂式胶结(pendant cementation)当胶结物和它附着(或胶结)的颗粒具有一致的相对方位时称为悬挂式胶结或重力式胶结(gravity cementation)(Longman,1980)。实际上,胶结物大都附着在颗粒的下部。在某些颗粒性碳酸盐沉积物中可以出现这种胶结类型(图14-4)。当松散沉积物处在地下潜水面以上时,大气降水可通畅地向下渗透,但部分渗透水可能会悬挂在颗粒下方。渗透水通常对上部沉积物中的文石、镁方解石有较强的溶解能力,到达下部时将逐渐趋于饱和,最后就可从悬挂水中沉淀出胶结物来形成悬挂式胶结。还需指出,大气降水在溶解文石、镁方解石的同时,原上部沉积物中混入的少量难溶成分如陆源粉砂、粘土、铁质、有机质等和还未溶解完毕的细小生物碎屑等也会随渗透水一道向下迁移。在渗流通道狭窄处(如通道已基本被胶结物堵塞的地方)它们将被过滤出来滞留在粒间孔内,有时还可发育隐约的水平或顺渗透水运动方向的纹理。这部分滞留的难溶细粒物质称为渗滤砂或渗滤粉砂(vadose silt),它们常常出现在粒间孔的下部或粒间狭缝处,或者粒间孔壁上沉淀有方解石胶结物,它们则充填在粒间孔的中央部位(图14-4)。在碳酸盐沉积物中,悬挂式胶结、新月型胶结和渗滤粉砂是大气渗流成岩作用(属特殊的浅埋成岩作用)的极好标志。图14-4 碳酸盐(鲕粒)沉积物中针状方解石的悬挂式胶结和渗滤粉砂镶嵌式胶结(mosaic cementation)这种胶结类型只出现在沉积石英岩中,石英碎屑之间因压溶而多呈面接触、凸凹接触或缝合线接触。残留的少量粒间孔内虽然也有胶结物,但胶结物与被胶结石英的成分一致,晶格也是连续的,看起来颗粒均镶嵌在一起而没有胶结物显示,故也称无胶结物式胶结。这种胶结类型常在似镶嵌结构的基础上发展而成,通常都是深埋成岩作用的产物。2)胶结物的结构胶结物的结晶程度、晶体大小、形态、排列等形貌特征称为胶结物的结构,它与胶结物的成分一样,也要取决于胶结时的物化条件。非晶质结构 胶结物为非晶质物质,在偏光显微镜下没有光性,通常是蛋白石、胶磷矿等胶体沉淀,大多为同生阶段形成。这种结构比较少见。隐晶质结构 胶结物为显微隐晶质,其晶体极其细微,没有固定边界或边界摸糊,在偏光显微镜下有光性反应,但干涉色很低。常见的是玉髓或隐晶磷酸盐,可从粒间水溶液中直接沉淀形成,也可由蛋白石、胶磷矿等失水转化形成。为同生或浅埋成岩阶段的产物。显晶质结构 胶结物结晶很好,晶体形态清楚,在偏光显微镜下光性特征典型。可形成于整个成岩作用阶段。进一步还可划分成如下几种结构:(1)微晶结构,胶结物晶体细小(<5μm),多个晶体叠置起来才能达到普遍岩石薄片的厚度,因而在偏光显微镜下见到的只是该晶体集合体的特征。常见的有微晶石英、粘土矿物、泥晶碳酸盐矿物等。微晶石英常由玉髓转化而来(这时常残留有玉髓的某些光性特征)。粘土矿物和泥晶碳酸盐矿物大多是基质,只是起胶结作用,但有时也可由粒间水的沉淀作用形成,是真正意义上的胶结物。这时的粘土晶体干净透明,常在被胶结颗粒表面呈放射状或薄膜状生长,晶体之间没有其他杂质(如有机质、铁质等)。泥晶碳酸盐却没有特殊的结构标志,与基质泥晶不易区分。(2)镶嵌粒状结构,胶结物晶体比较粗大,但小于粒间孔和被胶结颗粒,在一个粒间孔内有两个以上胶结物晶体彼此镶嵌,常见成分是方解石、白云石、石膏、重晶石或石英。(3)栉壳状结构(ctenoid texture),胶结物晶体呈针状、锥状、柱状或片状、板状垂直被胶结颗粒表面生长,在薄片中,它们的长轴彼此平行或大体平行,貌似梳齿或草丛,故又称丛生状结构。粘土、绿泥石等硅酸盐和文石、镁方解石、方解石等碳酸盐可形成这种结构,尤其是在颗粒碳酸盐沉积物中,方解石胶结物(许多可能都是由文石或镁方解石转化而来)更常具有这种结构。通常认为,针状方解石的前身是针状文石,叶片状方解石(断面中晶体延伸有弯曲)的前身是镁方解石,它们转变为方解石后仍保留了原始的结构特点,可视为高盐度条件下快速同生胶结或极浅埋藏胶结的证据。只有柱状或锥状(以及粒状)方解石胶结物才是由粒间淡水缓慢沉淀形成的(图14-5)。图14-5 胶结物的栉壳状结构,胶结物晶体切面形态(4)加大边结构(enlargement texture),又称共轴增生状(syntaxial over-growth)结构,即胶结物与被胶结颗粒的成分相同、晶格连续,就好像被胶结颗粒向着粒间孔隙长大了一样。这时的胶结物称为被胶结颗粒的自生加大边、共轴增生边或简称为加大边。当被胶结颗粒为单个晶体时,如陆源碎屑中的单晶石英、长石、生物碎屑中的海百合茎等常发育加大边。其他单晶重矿物碎屑,如电气石、锆石等偶而也可发育加大边。有些生物壳体如介形虫、有孔虫、三叶虫等是由大量垂直壳面的纤状方解石紧密平行排列构成的(即层纤结构或玻纤结构),各个方解石纤体可分别同时加大,共同构成一个“栉壳状”的集合体加大边(图14-6)。尽管看起来加大边与被胶结颗粒是一个光性连续的整体,但二者决不能混淆。有些加大边与被胶结颗粒之间的分界面上还残留有连续或断续分布的尘点状杂质或者加大边显得更加干净透明,可以清楚地将它们区别开来,这种加大称有痕加大。另外一些加大边与被胶结颗粒之间的分界面上没有杂质,二者也同样干净透明,这种加大称无痕加大。颗粒是否有无痕加大可用阴极发光技术判别,普通偏光显微镜对此是无能为力的,只是有时候可根据所见颗粒的不正常形态推测加大边的存在,如石英碎屑以局部的触角或尖角与相邻石英紧密镶嵌,该触角或尖角就可能是加大造成的;介形虫壳体大大超出了常规厚度可能指示有栉壳状加大等等(图14-6)。加大边可形成于同生阶段或浅埋成岩阶段,也可能延续到深埋成岩阶段才最后完成。图14-6 胶结物的加大边结构(5)嵌晶结构(poikilotopic texture),又称连晶结构,胶结物晶体粗大,一个晶体可占据或通过两个或两个以上相邻粒间孔,被胶结的某个或某几个颗粒看起来就像镶嵌在了这个晶体内部,该晶体还常常有向固有结晶形态发育的趋势(图14-7)。方解石、石膏、硬石膏、重晶石、沸石等胶结物易形成这种结构。它形成于深埋成岩阶段,是其他结构的重结晶产物。图14-7 硬石膏胶结物的嵌晶结构3)胶结物的世代性胶结是一个长期的作用过程,胶结物的成分和结构可因孔隙水物化条件的改变而改变,从而导致同一粒间孔内的胶结物在成分或结构上出现分带,这种现象称为胶结物的世代性(cement generation)(图14-8)。在无交代的情况下,同一粒间孔内愈早沉淀的胶结物愈靠近被胶结颗粒的表面,所以直接附着在颗粒表面的胶结物就是第一世代,以后的世代就逐渐远离颗粒而向粒间孔中心发展。在陆源碎屑岩(如砂岩)中,世代性通常表现为成分或结构不相同的2个世代,偶尔仅结构不同,如加大边石英—粒状硬石膏(或方解石)世代、栉壳状绿泥石—杂针状绿泥石世代等等。在颗粒碳酸盐岩中,世代性较发育,可形成2~3个世代,而且主要是由同种矿物(方解石)的不同结构表现出来的。通常第一世代为栉壳状或加大边状,第二世代为粒状,或者第一世代是相对细小的粒状,第二世代为相对粗大的粒状,其间可以有明显的分界,也可以是过渡的。在上述两个世代的基础上,有时还可在粒间孔中央出现更为粗大的第三世代,偶而第一、第二世代都是加大边,仅由杂质(有机质和泥晶)勾勒出它们之间的分界(图14-8)。当然,由相同成分和结构的胶结物填满整个粒间孔也可形成无世代的胶结物。图14-8 胶结物的世代性胶结物的世代性是推断成岩历史的重要依据之一,如由加大边石英和粒状硬石膏构成的世代就反映了粒间水的pH值由低到高的转变;针状、叶片状的栉壳状方解石和粒状方解石构成的世代反映了孔隙水由较高盐度向较低盐度或淡水的转变;细小和粗大粒状方解石的世代反映了粒间淡水离子浓度持续降低,沉淀速度持续减慢等等。3.溶蚀和交代作用1)溶蚀沉积物、胶结物或者任何已经存在的矿物被水局部溶解称为溶蚀(corrosion),剩下来的部分就具有溶蚀结构。溶蚀总是从颗粒表面和颗粒、基质内的裂缝等部位开始,并逐渐扩展开来的。通常情况下,溶蚀面都呈不规则的港湾或蚕食状,它可使形态一定的颗粒或矿物晶体变得残缺,或在基质、颗粒、矿物晶体内产生不规则的溶缝或溶孔(许多溶孔实际只是溶缝某个断面的形态)(图14-9)。随着溶蚀的持续进行,遭溶蚀的颗粒,矿物晶体或基质可能只会留下少量残余,甚至完全消失。当共存的矿物成分不相同时,溶蚀常有比较严格的选择性,即只有其中一种矿物受溶蚀而其他矿物不受影响。因此,在一定条件下相对易溶的颗粒被完全溶解后就会留下一个大小和形态等同于已溶颗粒的溶孔,这样的溶孔称铸模孔(mold pore)。有两种情况可形成极好的铸模孔,一是易溶的较大颗粒被大片难溶的细小矿物(如基质)包围,如泥质沉积物中的石盐晶体和方解石、白云石泥晶背景中的文石质鲕粒、生物碎屑、石膏晶体等,它们被溶解后就可形成相应形态的铸模孔。二是有些颗粒(如鲕粒、生物碎屑等)溶蚀时,内部含有的少量粘土、铁质、有机质等难溶杂质常残留在溶蚀面上,溶蚀完毕后就可形成一个具有由难溶物质构成的外壳的铸模孔。按铸模孔的大小和形态可称之为鲕粒铸模孔、生屑铸模孔、石膏铸模孔等等。无论是不规则的溶缝、溶孔还是规则的铸模孔对各种流体(石油、天然气、水)的运移和聚集都具有重要意义,也为后继矿物的沉淀提供了空间。实际上,许多溶孔确实已被以后的沉淀矿物充填。当新沉淀的矿物完全占据了铸模孔后,它就成了一个与被溶物大小和形态完全相同的实体,这个实体被称为铸型、假象(pseudomorph)或假晶(pseudocrystal)。同样,也可准确地称之为鲕粒铸型(也称充填鲕)、生屑铸型、石膏铸型(假象或假晶)等。铸型或假象的矿物成分(即新沉淀的矿物成分)可以与原来的被溶矿物相同,但大多数是不同的,如文石质鲕粒或生屑可变成方解石质鲕粒或生屑假象;石膏可变成方解石或白云石质的石膏假象(或假晶)等等(图14-10)。图14-9 一般溶蚀现象图14-10 铸型2)交代一种矿物直接置换另一种矿物的同时保持了被置换矿物的大小和形态的化学过程称为交代(replacement),能够显示这种置换关系的结构称为交代结构。就结构特征而言,如果溶蚀产生的孔洞又被后继矿物充填,那么交代同溶蚀就有些相似,这需要作具体分析。交代结构大致可分为以下4种类型:漂浮自形晶结构 交代矿物以其自由的结晶形态彼此分离地出现(或飘浮)在被交代矿物的背景中,晶体出现的密度可以比较均匀,也可受沉积成分或结构构造的控制,如有时只出现在基质或胶结物内或只出现在颗粒中,有时则沿某个裂隙系统(如压溶面)分布等等(图14-11)。石灰岩被石英或白云石较轻微交代时常常形成这种结构。图14-11 漂浮自形晶结构交代残余结构 也称蚕食结构,即颗粒、基质或胶结物矿物被交代矿物或矿物集合体部分置换,而另一部分仍残留着,在交代和被交代矿物之间形成一个不规则的蚕食状分界面(图14-12)。由于未被交代的部分还保留着原来的成分和结构,这样的结构也称正残余结构。图14-12是交代残余结构的几种常见表现形式,可根据结构自身的特征判别交代和被交代的关系。显然交代残余结构也可以通过溶蚀、充填两个分开的步骤形成,但是当被“蚕食”的部分还隐约显示出原有的轮廓或某些结构特征时则可肯定是交代形成的。图14-12 几种常见的交代残余结构及其交代关系的判别交代假象结构 这是交代残余结构的特殊表现形式,即交代矿物选择性地完全置换了被交代颗粒或矿物晶体形成了假象或假晶(图14-13),它与溶蚀-充填成因的假象或假晶有时也不易区分。但同样地,当假象或假晶中还保留有被交代颗粒或矿物的结构构造或解理、双晶特点时可肯定为交代成因,而周围聚集有明显不溶残余物的假象则很可能是溶解-充填的产物。图14-13 交代假象结构交代阴影状结构 当颗粒被同成分的基质或胶结物包围时,强烈的交代可能会突破交代假象的边界,并使边界消失,或者基质、胶结物同时被交代,仅因结构或所含杂质不同使原颗粒中的交代产物在晶体粒度、洁净度等方面与周围交代产物出现差异,结果原颗粒所在部位就变成了一个成分或结构都相对特殊,而边界模糊或呈过渡状的斑块(图14-14)。这种斑块就是原颗粒的阴影(ghost),具有阴影的结构就是交代阴影状结构。交代假象和交代阴影完全没有原始矿物成分残留,但或多或少还保留有原始的外形轮廓,这两种结构可统称为负残余结构。最常见的交代阴影状结构出现在由交代形成的白云岩中,偶尔也出现在交代形成的硅质岩中。陆源碎屑岩中的碎屑颗粒(主要是长石,其次是火山岩岩屑或火山碎屑等)被粘土矿物完全交代形成的假象如果与粘土基质混成一片,有时也可看出它的“阴影”。但严格地说,它仍属交代假象的范畴。图14-14 交代阴影状结构上述飘浮自形晶结构、交代残余结构、交代假象结构和交代阴影状结构大体上反映了交代由弱到强的顺序,虽然它们都使早先的矿物成分发生了改变,但至少还留下了交代前的结构残余,因而它们都可作为交代的证据。当交代十分彻底,尤其是还叠加有重结晶作用时,交代将不会留下任何痕迹,如成层的均匀泥晶CaCO3沉积物被白云石或硅质矿物完全交代就只显示结晶结构,这种结构常常会引起成因方面(原生化学沉淀或交代)的争议。溶蚀和交代都是化学作用过程,都要受整个作用体系的控制,其中的主要控制因素是被作用的矿物成分和它们赋存的结构状态、孔隙水的成分、pH值、Eh值、孔隙水的移动速度以及温度、压力、作用时间长短等。当然对具体的溶蚀或交代而言,常常只有一种或几种因素才是最主要的。4.重结晶作用一般重结晶作用(recrystallization)指矿物在不改变基本成分的同时为减小表面能而自然增大粒度的作用。但是,在沉积学中广义重结晶还包括玻璃质或非晶质向晶质的转化、晶格的调整等作用。前者如岩屑或火山碎屑中的酸性玻璃转变成隐晶的长英质矿物;蛋白石转变成玉髓或进一步转变成石英;胶磷矿转变成磷灰石等。后者如准稳定的斜方文石转变成稳定的三方方解石等(它也称为新生变形neomorphic作用)。有时候,粘土矿物转变成绢云母也被看成是一种重结晶。在成岩作用中,典型的硅酸盐矿物重结晶通常不发育,偶尔可见泥级高岭石重结晶成较粗大的蠕虫状或手风琴状高岭石,而非硅酸盐矿物,特别是碳酸盐矿物的重结晶则较普遍。碳酸盐矿物中较重要的重结晶是泥晶方解石重结晶成极细晶或细晶方解石。它之所以重要是因为在自生颗粒结构中,泥晶基质重结晶后也会成为“亮晶”(较为透明的意思),它与胶结物亮晶比较容易混淆,进而影响到对环境水动力的判别。过去曾提出过许多鉴别重结晶亮晶和胶结物亮晶的方法,但有些可能没有普遍意义。一般而言,若重结晶不强,重结晶亮晶常常会含较多杂质或者与重结晶更弱的亮晶及未重结晶的泥晶呈过渡状。若重结晶很强,杂质数量会减少,这时的共生颗粒也会开始重结晶。颗粒的重结晶则是比较容易识别的,其典型现象是颗粒内部出现较多较粗的方解石晶粒使结构遭到破坏,或者颗粒边界同时变得模糊。通常自生颗粒(以及亮晶胶结物)要比泥晶基质更难重结晶,当自生颗粒被重结晶彻底破坏时,岩石中所有原有结构特征也将不复存在,只有鲕粒强烈重结晶后(鲕核和包壳结构完全消失)仍然可完好地保留它的光滑球状形态。这种鲕称为变晶鲕(metacrystal ooid),分为多晶鲕(由多个镶嵌粒状方解石构成)和单晶鲕(只由一个方解石晶体构成)两种(图14-15)。成岩作用中的重结晶仍然有水的参与,仍是一种“湿”的过程,但水只是以晶体之间的薄层水膜形式存在的,它是离子从小晶体转移到大晶体的桥梁。当晶体之间被某种不能参与作用的杂质“绝缘”时,重结晶就会受到妨碍,如泥状镁方解石在淡水中溶出Mg2+变成泥状方解石后,这些Mg2+可能会滞留在方解石表面的水膜中而阻止泥状方解石继续重结晶。同样,当泥状方解石之间存在大量有机质时,重结晶也不容易顺利进行。这可能就是自生颗粒常常更难重结晶和许多古代泥晶方解石可一直保留到今天的一个重要原因。随着温压的升高,这些妨碍因素将被逐渐排除,因而从总的趋势看,深埋比浅埋对重结晶更有利,常常可形成晶体粗大的结晶灰岩,白云岩或连晶式胶结。进入变质阶段后,重结晶将更加强烈和广泛。图14-15 变晶鲕及周围的重结晶方解石晶体2023-07-29 04:34:171
夯实的短语扩展
分层夯实 tamping in layers; superficial compaction; compaction in layers; superficial compaction WESTBANK夯实混凝土 rammed concrete夯实道床 ballast ramming; ballast consolidating 泥土夯实 soilcompaction 夯实基础 Lay A Solid Foundation ; Solid Foundation;The Hang Solid Foundation ;Steady Base 夯实的 compacted 回填夯实 Backfill tamper 夯实系数 coefficient of compaction 夯实桩 compacting pile2023-07-29 04:34:271
Dynamic Compaction
Dynamic compaction is a technique that is beginning to gain popularity in the United States for densification of granular soil deposits. This process primarily involves dropping a heavy weight repeatedly on the ground at regular intervals. The weight of the hammer used varies from 8 to 35 metric tons,and the height of the hammer drop varies between 25 ft ( 7. 5 m) and 100 ft ( 30. 5 m) . The stress waves generated by the hammer drops help in the densification. The degree of compaction achieved depends on the ① weight of the hammer,② height of hammer drop,③ spacing of the locations at which the hammer is dropped.Leonards et al. suggested that the significant depth of influence for compaction is approximately勘查工程专业英语 where DI is significant depth of densification ( m) ; WHis dropping weight ( metric ton) ; h is height of drop ( m) .2023-07-29 04:34:401
WTable:RocksDB使用技巧之分布式存储扩容演进
RocksDB是由Facebook公司开源的一款高性能Key Value存储引擎,目前被广泛应用于业界各大公司的存储产品中,其中就包括58存储团队自研的分布式KV存储产品WTable。 RocksDB基于LSM Tree存储数据,它的写入都是采用即时写WAL + Memtable,后台Compaction的方式进行。当写入量大时,Compaction所占用的IO资源以及对其读写的影响不容忽视。而对于一个分布式存储系统来说,扩展性尤为重要,但是在扩展的过程中,又不可避免地会涉及到大量的数据迁移、写入。 本篇文章将会着重介绍WTable是如何利用RocksDB的特性对扩容流程进行设计以及迭代的。 WTable为了实现集群的可扩展性,将数据划分成了多个Slot,一个Slot既是数据迁移的最小单位。当集群的硬盘空间不足或写性能需要扩展时,运维人员就可以添加一些机器资源,并将部分Slot迁移到新机器上。这就实现了数据分片,也就是扩容。 具体哪些数据被分到哪个Slot上,这是通过对Key做Hash算法得到的,伪算法如下: SlotId = Hash(Key)/N 其中的N就是Slot的总量,这个是一个预设的固定值。 另外,为了让同一个Slot中所有Key的数据在物理上能够存储在一起,底层实际存储的Key都会在用户Key的前面加上一个前缀:该Key对应的SlotId。具体方式是将SlotId以大端法转换成2个字节,填充到Key字节数组的前面。 在RocksDB中,除了level 0外,其余level中的sst文件,以及sst文件内部都是有序存储的。这样一来,WTable也就实现了单个Slot内数据的连续存储,以及所有Slot整体的有序性。 WTable初始的扩容方式如下: 如上图所示,迁移一个Slot可以分成3个阶段:全量迁移、增量迁移、路由信息切换。 其中全量迁移会在该Slot所在的老节点上创建一个RocksDB的Iterator,它相当于创建了一份数据快照,同时Iterator提供了seek、next等方法,可以通过遍历Iterator有序地获取一定范围内的数据。对应到这里,就是一个Slot在某一时刻的全量快照数据。老节点通过遍历Slot数据,将每个Key,Value传输到新节点,新节点写入到自己的RocksDB中。 增量迁移则会利用老WTable节点记录的Binlog,将全量迁移过程中新的写入或更新,传输到新的节点,新节点将其应用到RocksDB。 最后,当发现新老节点上待迁移Slot的数据已经追平之后,则在ETCD上修改该Slot对应的节点信息,也就是路由信息切换。从此以后,该Slot中数据的线上服务就由新节点提供了。 然而,上述的扩容方式在线上运行过程中存在一个问题:当数据迁移速度较高(如30MB/s)时,会影响到新节点上的线上服务。 深究其具体原因,则是由于一次扩容会串行迁移多个Slot,率先迁移完成的Slot在新节点上已经提供线上服务,而迁移后续的Slot还是会进行全量数据、增量数据的迁移。 通过上个章节的描述,我们可以得知,全量数据是用RocksDB Iterator遍历产生,对于一个Slot来说,是一份有序的数据。而增量数据则是线上实时写入的数据,肯定是无序的数据。所以当新节点同时写入这两种数据时,从整体上就变成了无序的数据写入。 在RocksDB中,如果某一个level N中的文件总大小超过一定阈值,则会进行Compaction,Compaction所做的就是:将level N中的多个sst文件与这些文件在level N+1中Key范围有重叠的文件进行合并,最终生成多个新文件放入level N+1中。合并的方式可以简单表述为:如果多个文件中的Key确实有交集,则按照规则进行归并排序,去重,按大小生成多个新sst文件;如果Key没有交集(说明这次合并,就没有level N+1中的文件参与),则直接将level N中的文件move到levelN+1。 这样我们就可以看出,当大量的整体无序的数据写入迁移新节点时,各level之间的sst文件Key的范围难免会重叠,而其上的RocksDB则会频繁进行大量的,需要归并排序、去重的Compaction(而不是简单的move)。这势必会占用大量的IO,进而影响读、写性能。 另外,Compaction过多、过重造成level 0层的文件无法快速沉淀到level 1,而同时数据迁移使得新节点RocksDB的写入速度又很快,这就导致level 0中的文件个数很容易就超过阈值level0_stop_writes_trigger,这时则会发生write stall,也就是停写,这时就会严重影响写服务。 根据前面的问题描述,我们深入分析了RocksDB Compaction的特点,提出了两点改进思路: 根据以上分析,我们最终将扩容分为了3个大的阶段: 整体流程如下图所示: 经过上述扩容方式的改进,目前线上WTable集群已经可以进行较高速的扩容,比如50~100MB/s,并且在整个流程中不会对线上服务有任何影响。 在制定方案之初,我们也调研过其他的方案,比如老节点传输sst文件给新节点,后者通过IngestExternalFile的方式将sst文件导入RocksDB。 但是WTable的主备同步是通过Binlog进行的,而当主机通过IngestExternalFile的方式导入数据时,并不会有Binlog产生,也就无法通过正常流程同步数据给备机。因此如果以此方式实现数据迁移,需要增加新的主备同步方式,这对原有流程是一个破坏,另外也需要比较大的工作量,效率方面也无法保证。 因此我们最终利用RocksDB Compaction的特点设计了适合WTable的快速扩容方案,解决了这个痛点。2023-07-29 04:34:581
Linux 内核的内存管理 - 概念
Concepts overview — The Linux Kernel documentation Linux中的内存管理是一个复杂的系统,经过多年的发展,它包含越来越多的功能,以支持从 MMU-less microcontrollers 到 supercomputers 的各种系统。 没有MMU内存管理的系统被称为 nommu ,它值得写一份专门的文档进行描述。 尽管有些概念是相同的,这里我们假设MMU可用,CPU可以将虚拟地址转换为物理地址。 计算机系统中的物理内存是有限资源,即便支持内存热插拔,其可以安装的内存也有限的。物理内存不一定必须是连续的;它可以作为一组不同的地址范围被访问。此外,不同的CPU架构,甚至同架构的不同实现对如何定义这些地址范围都是不同的。 这使得直接处理物理内存异常复杂,为了避免这种复杂性,开发了 虚拟内存 (virtual memory) 的概念。 虚拟内存从应用软件中抽象出物理内存的细节,只允许在物理内存中保留需要的信息 (demand paging) ,并提供一种机制来保护和控制进程之间的数据共享。 通过虚拟内存,每次内存访问都访问一个 虚拟地址 。当CPU对从系统内存读取(或写入)的指令进行解码时,它将该指令中编码的虚拟地址转换为内存控制器可以理解的物理地址。 物理内存被切分为 页帧 page frames 或 页 pages 。页的大小是基于架构的。一些架构允许从几个支持的值中选择页大小;此选择在内核编译时设置到内核配置。 每个物理内存页都可以映射为一个或多个 虚拟页(virtual pages) 。映射关系描述在 页表(page tables) 中,页表将程序使用的虚拟地址转换为物理内存地址。页表以层次结构组织。 最底层的表包含软件使用的实际内存页的物理地址。较高层的表包含较低层表页的物理地址。顶层表的指针驻留在寄存器中。 当CPU进行地址转换的时候,它使用寄存器访问顶级页表。 虚拟地址的高位,用于顶级页表的条目索引。然后,通过该条目访问下级,下级的虚拟地址位又作为其下下级页表的索引。虚拟地址的最低位定义实际页内的偏移量。 地址转换需要多次内存访问,而内存访问相对于CPU速度来说比较慢。为了避免在地址转换上花费宝贵的处理器周期,CPU维护着一个称为 TLB (Translation Lookaside Buffer)的用于地址转换缓存(cache)。通常TLB是非常稀缺的资源,需要大内存工作应用程序会因为TLB未命中而影响性能。 很多现代CPU架构允许页表的高层直接映射到内存页。例如,x86架构,可以通过二级、三级页表的条目映射2M甚至1G内存页。在Linux中,这些内存页称为 大页 (Huge) 。大页的使用显著降低了TLB的压力,提高了TLB命中率,从而提高了系统的整体性能。 Linux提供两种机制开启使用大页映射物理内存。 第一个是 HugeTLB 文件系统,即 hugetlbfs 。它是一个伪文件系统,使用RAM作为其存储。在此文件系统中创建的文件,数据驻留在内存中,并使用大页进行映射。 关于 HugeTLB Pages 另一个被称为 THP (Transparent HugePages) ,后出的开启大页映射物理内存的机制。 与 hugetlbfs 不同,hugetlbfs要求用户和/或系统管理员配置系统内存的哪些部分应该并可以被大页映射;THP透明地管理这些映射并获取名称。 关于 Transparent Hugepage Support 通常,硬件对不同物理内存范围的访问方式有所限制。某些情况下,设备不能对所有可寻址内存执行DMA。在其他情况下,物理内存的大小超过虚拟内存的最大可寻址大小,需要采取特殊措施来访问部分内存。还有些情况,物理内存的尺寸超过了虚拟内存的最大可寻址尺寸,需要采取特殊措施来访问部分内存。 Linux根据内存页的使用情况,将其组合为多个 zones 。比如, ZONE_DMA 包含设备用于DMA的内存, ZONE_HIGHMEM 包含未永久映射到内核地址空间的内存, ZONE_NORMAL 包含正常寻址内存页。 内存zones的实际层次架构取决于硬件,因为并非所有架构都定义了所有的zones,不同平台对DMA的要求也不同。 多处理器机器很多基于 NUMA (Non-Uniform Memory Access system - 非统一内存访问系统 )架构。 在这样的系统中,根据与处理器的“距离”,内存被安排成具有不同访问延迟的 banks 。每个 bank 被称为一个 node ,Linux为每个 node 构造一个独立的内存管理子系统。 Node 有自己的zones集合、free&used页面列表,以及各种统计计数器。 What is NUMA? NUMA Memory Policy 物理内存易失,将数据放入内存的常见情况是读取文件。读取文件时,数据会放入 页面缓存(page cache) ,可以在再次读取时避免耗时的磁盘访问。同样,写文件时,数据也会被放入 页面缓存 ,并最终进入存储设备。被写入的页被标记为 脏页(dirty page) ,当Linux决定将其重用时,它会将更新的数据同步到设备上的文件。 匿名内存 anonymous memory 或 匿名映射 anonymous mappings 表示没有后置文件系统的内存。这些映射是为程序的stack和heap隐式创建的,或调用mmap(2)显式创建的。通常,匿名映射只定义允许程序访问的虚拟内存区域。读,会创建一个页表条目,该条目引用一个填充有零的特殊物理页。写,则分配一个常规物理页来保存写入数据。该页将被标记为脏页,如果内核决定重用该页,则脏页将被交换出去 swapped out 。 纵贯整个系统生命周期,物理页可用于存储不同类型的数据。它可以是内核内部数据结构、设备驱动DMA缓冲区、读取自文件系统的数据、用户空间进程分配的内存等。 根据内存页使用情况,Linux内存管理会区别处理。可以随时释放的页面称为 可回收(reclaimable) 页面,因为它们把数据缓存到了其他地方(比如,硬盘),或者被swap out到硬盘上。 可回收页最值得注意的是 页面缓存 和 匿名页面 。 在大多数情况下,存放内部内核数据的页,和用作DMA缓冲区的页无法重用,它们将保持现状直到用户释放。这样的被称为 不可回收页(unreclaimable) 。 然而,在特定情况下,即便是内核数据结构占用的页面也会被回收。 例如,文件系统元数据的缓存(in-memory)可以从存储设备中重新读取,因此,当系统存在内存压力时,可以从主内存中丢弃它们。 释放可回收物理内存页并重新调整其用途的过程称为 (surprise!) reclaim 。 Linux支持异步或同步回收页,取决于系统的状态。 当系统负载不高时,大部分内存是空闲的,可以立即从空闲页得到分配。 当系统负载提升后,空闲页减少,当达到某个阈值( low watermark )时,内存分配请求将唤醒 kswapd 守护进程。它将以异步的方式扫描内存页。如果内存页中的数据在其他地方也有,则释放这些内存页;或者退出内存到后置存储设备(关联 脏页 )。 随着内存使用量进一步增加,并达到另一个阈值- min watermark -将触发回收。这种情况下,分配将暂停,直到回收到足够的内存页。 当系统运行时,任务分配并释放内存,内存变得碎片化。 虽然使用虚拟内存可以将分散的物理页表示为虚拟连续范围,但有时需要分配大的连续的物理内存。这种需求可能会提升。例如,当设备驱动需要一个大的DMA缓冲区时,或当THP分配一个大页时。 内存地址压缩(compaction ) 解决了碎片问题。 该机制将占用的页从内存zone的下部移动到上部的空闲页。压缩扫描完成后,zone开始处的空闲页就并在一起了,分配较大的连续物理内存就可行了。 与 reclaim 类似, compaction 可以在 kcompactd守护进程中异步进行,也可以作为内存分配请求的结果同步进行。 在存在负载的机器上,内存可能会耗尽,内核无法回收到足够的内存以继续运行。 为了保障系统的其余部分,引入了 OOM killer 。 OOM killer 选择牺牲一个任务来保障系统的总体健康。选定的任务被killed,以期望在它退出后释放足够的内存以继续正常的操作。2023-07-29 04:35:051
对软件系统的一些理解
这篇文章是想表达我对系统软件的一些理解,风格跟之前的不太一样,整体偏“务虚”。我自己其实是不太擅长“务虚”的,甚至是有点排斥。就跟相比起看论文,我更喜欢看code,当然我也看论文,只不过相对来说少些。 毕业以来一直在数据库存储引擎领域工作,过去5年主要精力集中在阿里自研LSM-Tree存储引擎X-Engine研发上,并且在过去两年多时间我们完成了X-Engine的云原生架构升级和商业化,在公有云上承接一定规模的客户并稳定运行,在业界应该也是首个基于LSM-Tree架构实现云原生能力的TP存储引擎。完整经历一个TP存储引擎的架构规划、设计研发、落地上线,稳定性运维的全周期,并且得益于从我进入数据库领域一路以来经历的高水平团队、technology leader以及整个团队成员的出色工程能力和技术视野,加上我自己在此过程中的一些思考,阶段性的形成了一些自己的心得体会。 另外,跟业界一些优秀的架构师和工程师交流,发现对于系统工程的理解有很多的共鸣,也收到很多非常有价值的输入,当然也存在一些不同的观点。这也是促使我写这篇文章的主要原因,希望能将我自己的一些理解表达清楚,这些观点并不fashion,更谈不上创新,更多的是一些自己的思考和经验之谈。 观点1:软件的本质是对硬件资源的消耗。不同软件的区别在于,消耗硬件资源去解决什么问题以及如何分配硬件资源的消耗。软件架构设计中经常提到"抽象"和“trade-off”,抽象本质上的就是"解决什么问题","trade-off"其实就是"如何分配硬件资源"。 举个例子TP存储引擎和AP存储引擎,从实现上可以列举出一大堆不同的地方,行存 VS 列存、二级索引 VS ZoneMap索引、强事务 VS 弱事务等等。这些不同之处其实都是结果,导致这些的根本原因是: 1)两者解决的问题不同,TP场景主要是online实时业务,这些业务的特征是整体数据规模相对较小(真正需要online处理的数据, 历史 数据可能很多)、请求短平快、数据locality明显、高并发低时延等,而AP场景整体的数据规模大、计算密度高、高吞吐等。(解决什么问题) 2)TP引擎的完整事务支持使得业务的并发控制简化很多,其实就是把业务系统本来需要做的事情,TP引擎自己做了,当然也就意味着TP引擎需要为此消耗一部分硬件资源。而AP引擎为了加快数据入库的速度,事务的支持比较弱,这部分工作还是由业务系统来完成(比如ETL),也就不需要为此消耗硬件资源。(如何分配硬件资源) 观点2: 系统软件的重大变革,背后基本都是硬件发展所推动的。这跟观点1)是相呼应的,系统软件领域的理论在进入21世纪之前,学术界已经做了广泛深入的研究。从最开始计算机的出现,到大型机和小型机,再到家庭PC和廉价通用服务器,以及现在的云计算IAAS服务,基本上系统软件发展也是跟随这个脉络在发展。系统软件的再次火热,本质上也是因为IAAS这个“新硬件”所推动的。整个IAAS的on-demand获取,打破了系统软件之前在物理资源受限的背景下很多设计,这也就是为什么云原生系统软件会迎来新的机会。 观点3: 几乎不存在某一种系统架构全面领先另外一种架构。这跟观点1)2)是相呼应的,不同的架构选择背后都是不同的trade-off,所谓有得必有舍。经常听到一些说法,你看这篇论文、这篇文章,他们这种架构就没有某问题,我们这种架构就有这个问题。我听到这些观点的第一反应是质疑,这里边主要有三个原因: 1)很多论文和文章的实验结果是没法复现的,也就说很有可能他的结论就有问题; 2)很多时候只会强调“得”的部分,而“舍”的部分是没有讲的。 3)我们系统所存在的问题到底影响有多大,是不是可以解决的,这些需要量化的数据才能确定。轻易地被各种论文和文章的结论影响,很有可能会做出一个不伦不类的系统。就像习武之人各个门派的武功都学学,最终很容易走火入魔。 观点4:条条大路通罗马,最终系统对外呈现的区别,更多的是工程实现的原因,而非架构的原因。不同的系统架构需要解决的大部分问题本质上其实是一样的,并且组成一个系统的零部件都差不多,只是根据需要选择哪些零部件来构建系统。只有躬身入局,真正地去面对问题、分析问题、解决问题,才能认清楚其中的本质,否则很容易变成纸上谈兵。 举个例子:经常有人问我LSM-Tree架构中持续写入数据时,compaction问题对性能影响很大。这个问题我是这么看的,首先LSM-Tree架构上写入吞入优势的其中一个原因是,相比于innodb这种磁盘B+ Tree在写入的时候直接sort on write(page内有序,全局有序),LSM-Tree架构选择将一部分sort转移到sort on compaction、sort on read,本质上是将写入时排序的资源消耗,转移到了compaction或read。刷脏其实是包含两个动作:生成脏页,将脏页刷盘。innodb相当于是在写入的时候生成脏页,在刷脏的时候就是单纯的io操作。而compaction其实是同时做了生成“脏页”和“脏页”刷盘。innodb如果持续写入的话,也会有刷脏来不及时导致影响写入性能的问题。因为innodb刷脏和compaction之所以成为问题,本质上都是因为内存和磁盘写入速度的差异,导致生产者消费者模型失衡。所以innodb的刷脏和LSM-Tree的compaction本质上是相同的问题,只是通过不同的方法来将这个过程对系统的影响降到最低。 接下来的内容,主要是在进行详细设计的时候我认为比较重要的原则。这些原则的道理其实很容易理解,并且“软件工程”这门学科已经研究的很充分,但是实际操作的时候其实是蛮困难的,可能是 历史 包袱的原因,也有可能是外界环境的原因,需要根据实际情况做出不同的trade-off。值得注意的是,我们做出的trade-off一定是要经过仔细考虑的,而不是草率的,否则很容易出现“有舍没有得”。另外遵守这些原则设计实现出来的系统和不完全遵守这些原则设计实现出来的系统,结果其实是“好和更好的区别”,但是“好多少”这个量在系统做出来之前,其实很难衡量。这七个原则不是独立存在的,而是相辅相成的。 面向场景: 首先我们需要明确要解决什么问题,这是整个系统构建的出发点。one size fit all的系统在过去是不存在的,在未来也不一定存在。系统的完善,必然是要靠不断的迭代来完成的,那么如何迭代本质上就是我们在那些阶段解决哪些问题。一个系统可以有远大的目标去解决很多问题,但是所有问题的路标需要有相对清晰的规划,以达到既可以快速满足需求,同时保留向未来演进和扩展的基础。 实际研发过程中,可能发生的两类错误是: 1)想采用敏捷开发的方式来进行工程管理,以满足整个迭代的需求。敏捷开发本质上先定义最小功能集,也就是首先想清楚解决什么问题,然后快速的迭代扩充功能,有点像小步快走。在实操上,很容易把敏捷开发搞成了"快、糙、猛",有点大干30天赶英超美的味道。 2)问题定义不清楚,系统的“不变式”设置就容易草率。每个系统都有一些“不变式”,随后很多设计都是基于这些不变式进行展开的,比如在LSM-Tree系统中一个常见的“不变式”是更新版本的数据在更低的层次,同一行的数据的多个版本如果同时在memtable、level0、level1中存在,那么必然memtable中对应的版本是最新的,level0中的版本也比level1中的更新。如果在迭代的过程中发现之前设置的“不变式”不合理的,那么进行改动的代价是非常之大的。 面向解耦:无论是自上而下的去设计系统,还是自下而上的去设计系统,很重要的一个思考逻辑就是将各个模块间的耦合度降到最低。解耦做地比较好的系统,往往意味着: 1)每个模块的功能是考虑的比较清楚,方案的完整度是比较高的; 2)有利于专注的将某个模块实现的更加高效,避免其他模块的影响; 3)有利于之后的迭代,影响面可控; 4)出了问题好排查,单个模块的问题是比较好排查,真正那些难搞的问题往往是问题在各个模块间传导后才暴露出来,比如A模块出问题,经过模块B、C、D,最后在模块E暴露出来。 有些质疑的观点会说,面向解耦的思路去设计,有可能会牺牲系统的整体性能。其实这个跟不要一开始就为性能做过度的设计是一样的道理,真到了某些解耦的设计影响了性能,那么该耦合的就去耦合。把两个模块耦合在一起的难度往往是低于把耦合在一起的两个模块拆开。 面向防御:这个就是防御性编程的逻辑,要假设调用的函数都是有可能出错的, ,比如内存分配可能出错,io可能出错,基础库的调用可能出错等等,基于此来考虑如果出错,系统的行为是什么。有一个非常简单的原则就是"fail stop", 如果没有完整的防御,那么即使fail了也很难立即stop,最终造成一些很奇怪的表象。 通常的质疑是: 1)你看这个函数的逻辑肯定不会失败的。也许从当前来看这个函数确实不会失败,但是很难保证随着迭代增加逻辑,之后没有失败的可能性。 2)加了这么多防御,防御代码比实际逻辑的代码还多,会影响性能。首先,现在cpu的分支预测能力,基本上可以做到绝大部分情况下防御代码不会影响性能。另外跟对于面向耦合的质疑一样,真到某些防御代码成为了性能瓶颈,该优化就优化。优化一个防御,总比去解决一个因为没有防御而导致的问题代价更低吧。 面向测试:在测试阶段修复问题的代价是远低于在生产环境修复问题的代价,因此让系统变得可测试是非常重要的。系统可测试的标准就是,能方便的进行单元测试、集成测试,并覆盖绝大部分的代码路径。可测试的系统,随着不断的迭代,会累积越来越多的测试case,不断的夯实稳定性基础。面向测试跟面向解耦、面向防御是相辅相成的。只有模块间耦合度足够的低,才有可能做更多的测试,否则做一个模块的测试需要mock很多乱七八糟的东西。面向防御会使得测试的行为可以更好的预期,不然输入了一个异常的参数,具体怎么失败是不确定的,那测试case就很难写了。 面向运维:bug是一定会有的,对于复杂的系统,不管前期做多少准备都很难避免生产环境中遇到未知的问题。面向运维的主要目的是,遇到问题的时候,能用代价最低的手段去及时止损。遇到线上问题,动态调参数就能解决比需要重启才能解决的代价更低,重启能解决比需要发版才能解决的代价更低。面向运维不仅仅是加几个参数,加几个开关那么简单,而是需要把“面向运维”作为设计方案的重要组成部分来考虑,保证出了问题有运维手段,有运维手段敢用,用了以后有效果。 面向问题本质:当去解决一个问题的时候,一定要多思考这个问题的本质原因是什么,简单的问题复杂化和复杂的问题简单化,都是因为没有抓住本质。如果能思考清楚其背后的本质原因,从源头避免掉是更加彻底的解决方式,否则很容易陷入不断打补丁的状态,我一直有个观点:“没有抓住问题本质去解决问题,结果往往是在制造问题”。另外一个经验是,如果一个模块连续出了好几次问题,那么就要想想是不是在最开始的设计上就有需要改进的地方。 面向可视化:可视化的目标主要是以更加直观的形式,来展现系统运行状况,这对于系统调优和诊断是非常重要的。当系统异常时,可视化的方式可以帮助快速定位到系统哪里出了问题。另外一方面是,可以提供接口给监控系统做 历史 状态的追踪。比如oracle的诊断监控就是一个非常优秀的案例,而SnowFlake对于内部状态的打点监控也是近乎疯狂。 说了这么多,最终系统还是靠一行行的code实现出来的,保持匠心、严谨、较真的态度去打造系统是非常朴素正确,但又很难做到的事情,共勉! 原文链接: http://click.aliyun.com/m/1000349863/2023-07-29 04:35:201
求一篇毕业外文翻译,关于土木工程专业的,2000字左右
给你篇沥青方面的吧,不知道能否适合Segregation of Asphalt Pavement[Abstract] This paper describes the Weiwu highway construction, the analysis of asphalt pavement segregation. From raw materials to finished products into the plant"s appearance transport asphalt and paving mixture during the various factors that affect quality, and to all aspects of the various segregation of solutions put forward [Key words] segregation segregation Segregation of control 1. Project Overview Shandong Wei (Shanghai) to Ukraine (sea) highway segment second contract start and end mileage K11 +300 ~ K22 +700, full 11.4KM, according to two-way four-lane design. Mainline pavement structure: Upper layer: the top layer of asphalt Horseshoe fat (SMA-13A) 4CM In the surface layer: surface layer of asphalt concrete (AC-20B) 6CM The following layers: Asphalt Concrete (AC-25B) 8CM 2. Segregation Asphalt road surface segregation is a major area of asphalt mixture uneven nature, such as asphalt content, aggregate composition, additive content and the porosity and other surface. 3. Segregation of the hazard Segregation of the event, they changed the original design of the pavement with, the quality of asphalt pavement segregation great harm. In particular in: ○ 1 rolling process, easily crushed coarse aggregate ○ 2 aggregate surface area increases, resulting in rolling after molding loose, damaged road pavement structural strength of influence ○ 3 concentration of coarse aggregate to pavement deterioration of local density, high porosity, easily formed in the surface water, causing water damage to the road early ○ 4 disease have a lot of asphalt mixture segregation and closely related, such as: loose, net crack, holes, local severe Track Channel, local weeping, newly paved asphalt pavement structure of the depth of inequality. ○ 5 Segregation of Asphalt Pavement Compaction will produce differences in degree of compaction, smoothness impact damaged the car"s comfort 4. Segregation of species Segregation will affect the road surface appearance, asphalt mixture segregation can be broadly classified into two types: level and temperature segregation with segregation. Gradation segregation occurs, asphalt road coarse material concentrated in some regions, while others focus on regional fine materials, making become uneven mixture gradation and asphalt content and design are inconsistent, leading to poor road showing the structure and texture characteristics . Concentration of fine material in some regions, the porosity is small, there may be weeping, rutting; other coarse material concentrated in some regions, high porosity, surface water may cause damage. Temperature segregation is the mixture in the storage, transportation and spreading in the weather, construction machinery impact, because the temperature difference between heat loss and the situation there. Mixture temperature of segregation, will lead to uneven road surface compaction, low temperature region, the road porosity greater texture depth of greater road in these areas prone to early damage. Temperature of the consequences of segregation and isolation graded as severe, can lead to premature failure of asphalt pavement, greatly shorten the life of asphalt pavement. Research shows that serious segregation of the road life may be reduced by 50% or more. Present some early Asphalt Pavement damage, such as loose, net crack, holes, local severe Track Channel, local weeping, newly paved asphalt pavement structure of the depth of inequality, with the asphalt mixture segregation are closely related. 5. Segregation generation Asphalt Mixture Segregation affect the characteristics of the pavement, and segregation issue has been throughout the construction process, it is the construction unit has long been one of the urgent solution of the problem. 5.1 Segregation of raw materials In the raw materials transported from the quarry to the mixing station piling up, because a high degree of reason, a large aggregate rolled off the bottom of the heap in the material to form a coarse aggregate material the first focus, which will Segregation material mixing machine feeding in the cold difficult to control when different silos of the material ratio; 5.2 Segregation of mixing station mixing machine When using the scraper conveyor to unload mixture into the finished product hopper, the hopper must be located in the central discharge hopper, or the body in a barrel of vertical segregation, that crude is expected to roll it toward the side of hopper. When using the scraper conveyor to unload into the ingredient mixture into the bucket and then finished unloading hopper, the ingredients should be kept as part of each discharge mixture, so that all the material emptied, the scraper conveyor of the mixture directly into the hopper caused segregation within Product discharge from the hopper, the discharge should be quickly opened the door, do not allow mixture to flow slowly, so as to avoid segregation 5.3 Material Segregation Asphalt dump truck from the finished product warehouse discharge to the transport process, the same as drop-off, large aggregate will be rolling in the car on both sides to form a coarse aggregate of the second concentration; 5.4 Discharge segregation Transportation dump truck unloading in the mixture to the paver, the large aggregate in paver and a half car rolled near the formation of coarse aggregate the third concentration; 5.5 Segregation Feed Paver feeders in the feed process, the first intermediate aggregate device to send the cloth, the remaining coarse aggregate retained in the hopper, the paver hopper collection, the formation of coarse aggregate of the fourth concentration; construction process The temperature segregation. 5.6 The joint segregation Joint segregation in the upper layer construction is more common, especially in the section of pavement widening, the small number of paver or mixing plant capacity is low, thanks to two Paver, Road, the central vertical heat joints are often the weakest link. Seams paving mixture too much or too little will produce Segregation in the seams, will form a bridge over the effects of compaction on both sides of affected joints, seams less inadequate compaction. If the two are inconsistent paver paving thickness, the small thickness of the side seams are not easily compacted. Behind the paver two different rolling temperatures also cause excessive joint segregation. In addition, isolation joints are often the end of segregation in conjunction with trucks or other forms of segregation in the formation of combination effects. As the vertical seams in the lane, the number of multi-wheel loads, which often produces greater harm. 6. Segregation of control 6.1 Control of materials piling up approach Layered aggregates (especially coarse aggregate) can reduce the random segregation problem. Loader stacking up piles of material, the material on the particle size should be large changes in the slope layer by piling, slope less than 1:3. In the yard space to allow the case to minimize the height of the heap material. If the coarse aggregate in the stockpile segregation occurred in the bottom, front-end loader will be used to re-mixing material, the hopper can be sent to the cold. Unloading and loading to enhance stockpile management, the key is to reduce the random segregation. 6.2 Temperature Control Mixing Station Temperature to determine the factory by the paving temperature. Mixture temperature losses influenced by the weather, according to the distance of the mixture of time and storage, construction of the asphalt test section of the process to determine the temperature loss, to determine the temperature of asphalt factory. Aggregate level of the heating temperature is mainly affected by fluctuations in raw material moisture content, and thus affect the quality of asphalt and asphalt mixing plant productivity. Fine aggregate rain shelter structures can effectively control the water content and reduce the volatility of aggregate temperature, and can save heating oil and reduce costs. 6.3 Loading and Unloading vehicles Prevent the formation of vehicle loading and segregation, in the loading process, should be at least three times a load, the first near the front of the car, the second near the rear, the third time in the middle of the car by this method can basically eliminate the formation of the segregation load. If mixed with a material for each load, the top of the car by sliding movement of the vehicles can even load, it loads the effect of the score three times even better. In addition, when a car when the mixture into the paver, the first time from the top to fill the hopper once and should be so that the mixture as a whole into the paver hopper, so to avoid car unloading caused by segregation. 6.4 paver paving operation Paver paving process to maintain stable and continuous spiral fabric uniform rotation device, spreader feeders on both sides to maintain a high degree of not less than 2 / 3 of mixture to prevent the formation of the outer spiral fabric mixture accumulation device segregation. After each discharge as dump truck paver hopper scraper conveyor on both sides there will always be less than scraping the mixture, which is often coarse material after segregation. If every time close to the paver hopper mixture paving, road laws of segregation phenomena occur. Resolve this problem, close the hopper should be minimized, artificial accumulation not affect the leveling hopper dump truck dumping mainly to minimize the mixture segregation, and the paver in a car expected to be finished, close the feeder, so get off after the material uniformly into the feed and cloth. Unloading the car when the paver, uninstall the fast speed as far as possible, as far as possible to ensure continuous paver operation, do not stop. Adjust the speed of paver paving and mixing station to the feed rate is the same. 6.5 Joint Treatment In Weiwu highway paving, in the normal section, using two ABG-423-type paver simultaneously, paver to ensure two before six cars waiting for unloading transport material, and between pavers spacing not greater than 20 meters. The paving of the widened section to the Highway Bureau of Dongying City, the introduction of a Suge Le paver, three forward together in a section of paving. To avoid cold joints, to avoid temperature segregation. 6.6 Rolling Compaction is to ensure that an important part of the quality of road construction. To ensure compactness and flatness, rolling should follow the "high-frequency, low amplitude, followed, less water, slow pressure" principle, from low to high, full-rolling. Roller should be rolled slow even pace, according to initial pressure roller rolling speed, complex pressure, final pressure and the corresponding roller type.2023-07-29 04:35:511
Kafka offset管理
Kafka中的每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序号,用于partition唯一标识一条消息。 Offset记录着下一条将要发送给Consumer的消息的序号。 Offset从语义上来看拥有两种:Current Offset和Committed Offset。 Current Offset保存在Consumer客户端中,它表示Consumer希望收到的下一条消息的序号。它仅仅在poll()方法中使用。例如,Consumer第一次调用poll()方法后收到了20条消息,那么Current Offset就被设置为20。这样Consumer下一次调用poll()方法时,Kafka就知道应该从序号为21的消息开始读取。这样就能够保证每次Consumer poll消息时,都能够收到不重复的消息。 Committed Offset保存在Broker上,它表示Consumer已经确认消费过的消息的序号。主要通过 commitSync 和 commitAsync API来操作。举个例子,Consumer通过poll() 方法收到20条消息后,此时Current Offset就是20,经过一系列的逻辑处理后,并没有调用 consumer.commitAsync() 或 consumer.commitSync() 来提交Committed Offset,那么此时Committed Offset依旧是0。 Committed Offset主要用于Consumer Rebalance。在Consumer Rebalance的过程中,一个partition被分配给了一个Consumer,那么这个Consumer该从什么位置开始消费消息呢?答案就是Committed Offset。另外,如果一个Consumer消费了5条消息(poll并且成功commitSync)之后宕机了,重新启动之后它仍然能够从第6条消息开始消费,因为Committed Offset已经被Kafka记录为5。 总结一下,Current Offset是针对Consumer的poll过程的,它可以保证每次poll都返回不重复的消息;而Committed Offset是用于Consumer Rebalance过程的,它能够保证新的Consumer能够从正确的位置开始消费一个partition,从而避免重复消费。 在Kafka 0.9前,Committed Offset信息保存在zookeeper的[consumers/{group}/offsets/{topic}/{partition}]目录中(zookeeper其实并不适合进行大批量的读写操作,尤其是写操作)。而在0.9之后,所有的offset信息都保存在了Broker上的一个名为__consumer_offsets的topic中。 Kafka集群中offset的管理都是由Group Coordinator中的Offset Manager完成的。 Group Coordinator是运行在Kafka集群中每一个Broker内的一个进程。它主要负责Consumer Group的管理,Offset位移管理以及 Consumer Rebalance 。 对于每一个Consumer Group,Group Coordinator都会存储以下信息: Consumer Group如何确定自己的coordinator是谁呢? 简单来说分为两步: 由于一个partition只能固定的交给一个消费者组中的一个消费者消费,因此Kafka保存offset时并不直接为每个消费者保存,而是以groupid-topic-partition -> offset的方式保存。如图所示: Kafka在保存Offset的时候,实际上是将Consumer Group和partition对应的offset以消息的方式保存在__consumers_offsets这个topic中 。 __consumers_offsets默认拥有50个partition,可以通过 的方式来查询某个Consumer Group的offset信息保存在__consumers_offsets的哪个partition中。下图展示了__consumers_offsets中保存的offset消息的格式: 如图所示,一条offset消息的格式为groupid-topic-partition -> offset。因此consumer poll消息时,已知groupid和topic,又通过Coordinator分配partition的方式获得了对应的partition,自然能够通过Coordinator查找__consumers_offsets的方式获得最新的offset了。 前面我们已经描述过offset的存储模型,它是按照 groupid-topic-partition -> offset 的方式存储的。然而Kafka只提供了根据offset读取消息的模型,并不支持根据key读取消息的方式。那么Kafka是如何支持Offset的查询呢? 答案就是Offsets Cache!! 如图所示,Consumer提交offset时,Kafka Offset Manager会首先追加一条条新的commit消息到__consumers_offsets topic中,然后更新对应的缓存。读取offset时从缓存中读取,而不是直接读取__consumers_offsets这个topic。 我们已经知道,Kafka使用 groupid-topic-partition -> offset *的消息格式,将Offset信息存储在__consumers_offsets topic中。请看下面一个例子: 如图,对于audit-consumer这个Consumer Group来说,上面的存储了两条具有相同key的记录: PageViewEvent-0 -> 240 和 PageViewEvent-0 -> 323 。事实上,这就是一种无用的冗余。因为对于一个partition来说,我们实际上只需要它当前最新的Offsets。因此这条旧的 PageViewEvent-0 -> 240 记录事实上是无用的。 为了消除这样的过期数据,Kafka为__consumers_offsets topic设置了Log Compaction功能。Log Compaction意味着对于有相同key的的不同value值,只保留最后一个版本。如果应用只关心key对应的最新value值,可以开启Kafka的Log Compaction功能,Kafka会定期将相同key的消息进行合并,只保留最新的value值。 这张图片生动的阐述了Log Compaction的过程: 下图阐释了__consumers_offsets topic中的数据在Log Compaction下的变化: auto.offset.reset 表示如果Kafka中没有存储对应的offset信息的话(有可能offset信息被删除),消费者从何处开始消费消息。它拥有三个可选值: 看一下下面两个场景:2023-07-29 04:35:591
计算机操作系统里有紧凑的概念吗?
当系统欲把一个进程装入内存时, 当系统欲把一个进程装入内存时,它将为该进程分配 一个大小合适的分区.显然,这样做将消除分区内零 一个大小合适的分区.显然,这样做将消除分区内零 但是,这样做却会产生分区外零头 外零头. 头,但是,这样做却会产生分区外零头. 为了使外零头得到充分利用,系统可以把内存中的所 为了使外零头得到充分利用, 有进程移到内存的某一端;相应地, 有进程移到内存的某一端;相应地,内存中的所有空 闲分区将被移到内存的另一端. 闲分区将被移到内存的另一端.这样做将把内存中的 所有空闲分区拼接成一个较大的空闲分区. 所有空闲分区拼接成一个较大的空闲分区. 2010-4-29 38 上述解决外零头问题的方法被人们称为紧凑 上述解决外零头问题的方法被人们称为紧凑(Compaction) 紧凑 技术2023-07-29 04:36:391
Kafka总结
consumer 采用 pull(拉)模式从 broker 中读取数据。 push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。 pull 模式不足之处是,如果 kafka 没有数据,消费者可能会陷入循环中,一直返回空数 据。针对这一点,Kafka 的消费者在消费数据时会传入一个时长参数 timeout,如果当前没有 数据可供消费,consumer 会等待一段时间之后再返回,这段时长即为 timeout。 分区中的所有副本统称为 AR(Assigned Replicas)。所有与 leader 副本保持一定程度同步的副本(包括 leader 副本在内)组成ISR(In-Sync Replicas),ISR 集合是 AR 集合中的一个子集。 可以通过分区策略体现消息顺序性。分区策略有轮询策略、随机策略、按消息键保序策略。 处理顺序 :拦截器->序列化器->分区器 消息在通过 send() 方法发往 broker 的过程中,有可能需要经过拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)的一系列作用之后才能被真正地发往 broker。拦截器一般不是必需的,而序列化器是必需的。消息经过序列化之后就需要确定它发往的分区,如果消息 ProducerRecord 中指定了 partition 字段,那么就不需要分区器的作用,因为 partition 代表的就是所要发往的分区号。 整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和 Sender 线程(发送线程)。 一般来说如果消费者过多,出现了消费者的个数大于分区个数的情况,就会有消费者分配不到任何分区。开发者可以继承AbstractPartitionAssignor实现自定义消费策略,从而实现同一消费组内的任意消费者都可以消费订阅主题的所有分区。 当前消费者需要提交的消费位移是offset+1 在旧消费者客户端中,消费位移是存储在 ZooKeeper 中的。而在新消费者客户端中,消费位移存储在 Kafka 内部的主题__consumer_offsets 中。 Kafka 中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区。不考虑多副本的情况,一个分区对应一个日志(Log)。为了防止 Log 过大,Kafka 又引入了日志分段(LogSegment)的概念,将 Log 切分为多个 LogSegment,相当于一个巨型文件被平均分配为多个相对较小的文件。 Log 和 LogSegment 也不是纯粹物理意义上的概念,Log 在物理上只以文件夹的形式存储,而每个 LogSegment 对应于磁盘上的一个日志文件和两个索引文件,以及可能的其他文件。 每个日志分段文件对应了两个索引文件,主要用来提高查找消息的效率。 日志删除(Log Retention):按照一定的保留策略直接删除不符合条件的日志分段。 日志压缩(Log Compaction):针对每个消息的 key 进行整合,对于有相同 key 的不同 value 值,只保留最后一个版本。 在 Kafka 集群中会有一个或多个 broker,其中有一个 broker 会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。当某个分区的 leader 副本出现故障时,由控制器负责为该分区选举新的 leader 副本。当检测到某个分区的 ISR 集合发生变化时,由控制器负责通知所有broker更新其元数据信息。当使用 kafka-topics.sh 脚本为某个 topic 增加分区数量时,同样还是由控制器负责分区的重新分配。 Kafka 中有多种延时操作,比如延时生产,还有延时拉取(DelayedFetch)、延时数据删除(DelayedDeleteRecords)等。 延时操作创建之后会被加入延时操作管理器(DelayedOperationPurgatory)来做专门的处理。延时操作有可能会超时,每个延时操作管理器都会配备一个定时器(SystemTimer)来做超时管理,定时器的底层就是采用时间轮(TimingWheel)实现的。 为了实现生产者的幂等性,Kafka 为此引入了 producer id(以下简称 PID)和序列号(sequence number)这两个概念。 Kafka的幂等性实现其实就是将原来下游需要做的去重放在了数据上游。开启幂等性的 Producer 在 初始化的时候会被分配一个 PID,发往同一 Partition 的消息会附带 Sequence Number。而Broker 端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker 只会持久化一条。 Kafka中的事务可以使应用程序将消费消息、生产消息、提交消费位移当作原子操作来处理,同时成功或失败,即使该生产或消费会跨多个分区。 生产者必须提供唯一的transactionalId,启动后请求事务协调器获取一个PID,transactionalId与PID一一对应。 每次发送数据给<Topic, Partition>前,需要先向事务协调器发送AddPartitionsToTxnRequest,事务协调器会将该<Transaction, Topic, Partition>存于__transaction_state内,并将其状态置为BEGIN。 在处理完 AddOffsetsToTxnRequest 之后,生产者还会发送 TxnOffsetCommitRequest 请求给 GroupCoordinator,从而将本次事务中包含的消费位移信息 offsets 存储到主题 __consumer_offsets 中 一旦上述数据写入操作完成,应用程序必须调用KafkaProducer的commitTransaction方法或者abortTransaction方法以结束当前事务。 在发送延时消息的时候并不是先投递到要发送的真实主题(real_topic)中,而是先投递到一些 Kafka 内部的主题(delay_topic)中,这些内部主题对用户不可见,然后通过一个自定义的服务拉取这些内部主题中的消息,并将满足条件的消息再投递到要发送的真实的主题中,消费者所订阅的还是真实的主题。 Kafka 集群中有一个 broker 会被选举为 Controller,负责管理集群 broker 的上下线,所 有 topic 的分区副本分配和 leader 选举等工作。Controller 的管理工作都是依赖于 Zookeeper 的。2023-07-29 04:36:471
现在粉末冶金发展怎样
粉末冶金行业发展很快!竞争很激烈!2023-07-29 04:36:562
HBase探索篇 _ 单节点多RegionServer部署与性能测试
[toc] 随着集群中总的Region数持续增长,每个节点平均管理的Region数已达550左右,某些大表的写入流量一上来,Region Server就会不堪重负,相继挂掉。 在HBase中,Region的一个列族对应一个MemStore,通常一个MemStore的默认大小为128MB(我们设置的为256MB),见参数 hbase.hregion.memstore.flush.size 。当可用内存足够时,每个MemStore可以分配128MB的空间。 当表的写入流量上升时,假设每个Region的写入压力相同,则理论上每个MemStore会平均分配可用的内存空间。 因此,节点中Region过多时,每个MemStore分到的内存空间就会变小。此时,写入很小的数据量,就会被强制flush到磁盘,进而导致频繁刷写,会对集群HBase与HDFS造成很大的压力。 同时,Region过多导致的频繁刷写,又会在磁盘上产生非常多的HFile小文件,当小文件过多的时候,HBase为了优化查询性能就会做Compaction操作,合并HFile,减少文件数量。当小文件一直很多的时候,就会出现 “压缩风暴”。Compaction非常消耗系统的IO资源,还会降低数据的写入速度,严重时会影响正常业务的进行。 关于每个Region Server节点中,Region数量大致合理的范围,HBase官网上也给出了定义: 可见,通常情况下,每个节点拥有20-200个Region是比较正常的。 其实,每个Region Server的最大Region数量由总的MemStore内存大小决定。每个Region的每个列族会对应一个MemStore,假设HBase表都有一个列族,那么每个Region只包含一个MemStore。一个MemStore大小通常在128~256MB,见参数: hbase.hregion.memstore.flush.size 。默认情况下,RegionServer会将自身堆内存的40%(我们线上60%)(见参数: hbase.regionserver.global.memstore.size )提供给节点上的所有MemStore使用,如果所有MemStore的总大小达到该配置大小,新的更新将会被阻塞并且会强制刷写磁盘。因此,每个节点最理想的Region数量应该由以下公式计算(假设HBase表都有统一的列族配置): ((RS memory) * (total memstore fraction)) / ((memstore size)*(column families)) 其中: 以我们线上集群的配置举例,我们每个RegionServer的堆内存是32GB,那么节点上最理想的Region数量应该是: 32768*0.6/256 ≈ 76 (32768*0.6/128 ≈ 153) 上述最理想的情况是假设每个Region上的填充率都一样,包括数据写入的频次、写入数据的大小,但实际上每个Region的负载各不相同,有的Region可能特别活跃、负载特别高,有的Region则比较空闲。所以,通常我们认为2 3倍的理想Region数量也是比较合理的,针对上面举例来说,大概200 300个Region左右算是合理的。 针对上文所述的Region数过多的隐患,以下内容主要从两方面考虑来优化。 提高内存的目的是为了增加每个Region拥有的MemStore的空间,避免其写入压力上升时,MemStore频繁刷写,形成小的HFile过多,引起压缩风暴,占用大量IO。 但其实RS的堆内存并不是越大越好,我们开始使用HBase的时候,对CMS和G1相关的参数,进行了大量压测,测试指标数据表明,内存分配的越大,吞吐量和p99读写平均延时会有一定程度的变差(也有可能是我们的JVM相关参数,当时调配的不合理)。 在我们为集群集成jdk15,设置为ZGC之后,多次压测并分析JVM日志之后,得出结论,在牺牲一定吞吐量的基础上,集群的GC表现能力确实提升的较为明显,尤其是GC的平均停顿时间,99.9%能维持在10ms以下。 而且ZGC号称管理上T的大内存,停顿时间控制在10ms之内(JDK16把GC停顿时间控制在1ms内,期待JDK17 LTS),STW时间不会因为堆的变大而变长。 因此理论上,增加RS堆内存之后,GC一样不会成为瓶颈。 之所以考虑在单节点上部署多个Region Server的进程,是因为我们单个物理机的资源配置很高,内存充足(三百多G,RS堆内存只分了32G)、而HBase又是弱计算类型的服务,平时CPU的利用率低的可怜,网络方面亦未见瓶颈,唯一掉链子的也就属磁盘了,未上SSD,IO延迟较为严重。 当然,也曾考虑过虚拟机的方案,但之前YCSB压测的数据都不太理想;K8s的调研又是起步都不算,没有技术积累。因此,简单、直接、易操作的方案就是多RS部署了。 以下内容先叙述CDH中多RS进程部署的一些关键流程,后续将在多RS、单RS、单RS大堆环境中,对集群进行基准性能测试,并对比试验数据,分析上述两种优化方案的优劣。 我们使用的HBase版本是 2.1.0-cdh6.3.2 ,非商业版,未上Kerberos,CDH中HBase相关的jar包已替换为用JDK15编译的jar。 多Region Server的部署比较简单,最关键的是修改 hbase-site.xml 中region server的相关端口,避免端口冲突即可。可操作流程如下。 修改所需配置文件 hbase-site.xml 配置文件一定不要直接从 /etc/hbase/conf 中获取,这里的配置文件是给客户端用的。CDH管理的HBase,配置文件都是运行时加载的,所以,找到HBase最新启动时创建的进程相关的目录,即可获取到服务端最新的配置文件,如:/var/run/cloudera-scm-agent/process/5347-hbase-REGIONSERVER。需要准备的目录结构如下: 不需要HBase完整安装包中的内容(在自编译的完整安装包中运行RS进程时,依赖冲突或其他莫名其妙的报错会折磨的你抓狂),只需要bin、conf目录即可,pids文件夹是自定义的,RS进程对应pid文件的输出目录,start_rs.sh、stop_rs.sh是自定义的RS进程的启动和关闭脚本。 重点修改下图标注的配置文件, 还有日志文件名的一些输出细节,可以按需在 bin/hbase-daemon.sh 中修改。 运行或关闭RS进程 中间有异常,请查看相关日志输出。 集群Region数疯涨,当写入存在压力时,会导致RS节点异常退出。为了解决目前的这种窘境,本次优化主要从单节点多Region Server部署和提高单个Region Server节点的堆内存两方面着手。 那这两种优化方案对HBase的读写性能指标,又会产生什么样的影响呢?我们以YCSB基准测试的结果指标数据做为参考,大致评价下这两种应急方案的优劣。 用于此次测试的HBase集群的配置 此次测试使用的数据集大小 测试方法 压测时选择的读写负载尽量模拟线上的读写场景,分别为:读写3/7、读写7/3、读写5/5; 压测时唯一的变量条件是:多RS部署(32G堆,在每个节点上启动3个RS进程,相当于集群中一共有15个RS节点)、单RS部署(32G小堆)和单RS部署(100G大堆),并尽可能保证其他实验条件不变,每个YCSB的工作负载各自运行20分钟左右,并且重复完整地运行5次,两次运行之间没有重新启动,以测量YCSB的吞吐量等指标,收集的测试结果数据是5次运行中最后3次运行的平均值,为了避免第一轮和第二轮的偶然性,忽略了前两次的测试。 YCSB压测的命令是: 收集实验数据后,大致得出不同读写负载场景下、各个实验条件下的指标数据,如下图。 上述的测试数据比较粗糙,但大致也能得出些结论,提供一定程度上的参考。 多RS进程部署的模式,起到了一定程度上的进程间资源隔离的作用,分担了原先单台RS管理Region的压力,最大化利用了物理机的资源,但多出来的一些Region Server,需要单独的管理脚本和监控系统来维护,增加了维护成本。多个RS依赖同一台物理机,物理节点宕机便会影响多个RS进程,同时,某一个Region Server出现热点,压力过大,资源消耗过度,也许会引起同机其他进程的不良,在一定程度上,牺牲了稳定性和可靠性。 增加单个RS进程的堆内存,MemStore在一定程度上会被分配更充裕的内存空间,减小了flush的频次,势必会削弱写入的压力,但也可能会增加GC的负担,我们或许需要调整出合适的GC参数,甚至需要调优HBase本身的一些核心参数,才能兼顾稳定和性能。然而,这就又是一件漫长而繁琐的事情了,在此不过分探讨。 面对性能瓶颈的出现,我们不能盲目地扩充机器,在应急方案采取之后,我们需要做一些额外的、大量的优化工作,这或许才是上上之策。2023-07-29 04:37:031
Hbase的mjor compect和minor compect有什么区别?
Minor Compaction称为小合并,主要是选取一些小的、相邻的HFile将他们合并成较大的HFile,并删除HFile中的过期数据。Major Compaction称为大合并,会将一个列族下的所有HFile合并成一个大的HFile,同时删除过期数据、已删除数据(打了Delete标记的)、版本过大的数据等三类无效数据。2023-07-29 04:37:101
如何判断RocksDB中的文件是否过期
RocksDB底层存储结构是LSM,有很多Level的sst文件,sst文件需要定期compaction。那么,当一些文件参与compaction,生成新文件之后,旧文件会占用一定的存储空间,那么旧文件何时物理退场是一个问题,毕竟这些部分旧文件可能还在被使用。比较粗暴的方法就是这些文件保留特定时间之后,再进行物理退场。不过这种解决方法也存在一个问题,即若特定时间内积累的这些旧文件过多,会占用大量的存储空间。不过这种解决方案虽然存在问题,但是没有其他太多的副作用,实现起来也比较简单。那么RocksDB是如何管理这些旧文件的呢?对于RocksDB,底层基于LSM结构,由一系列sst文件组成。在每次compaction之后,新生成的文件会注册到数据库中,而参与过compaction的旧文件也需要物理删除。然而,这些旧文件不能被立即删除,因为旧文件中的部分文件可能因为RocksDB中操作被占用,直到这些文件被占用结束。sst文件列表存储在version数据结构中。每次compaction之后或者内存数据刷新落盘后,就会产生一个新version。同一时间,只有一个“当前”版本。它表示LSM树中最新的文件。任何新的操作或迭代器在整个读过程或者生命周期中都会使用最新版本对应的文件。而所有被占用的版本对应的文件都要被保留。而所有那些没有在version中的文件就应该被删除了。如下举一个例子:v1={f1,f2,f3} (当前版本对应的文件列表)存储在磁盘上的文件:f1, f2, f3这个时候创建了一个新的迭代器1,会使用v1版本此时,存储在磁盘上的文件依旧是f1, f2, f3这个时候,发生一次刷新落盘,新增文件f4,此时会创建一个新version:v2={f1,f2,f3,f4}(当前版本)v1={f1,f2,f3}(该版本被迭代器1使用)此时,存储在磁盘上的文件是f1, f2, f3, f4又发生一次compaction,将f2,f3,f4合并成f5,形成一个新版本v3:v3={f1,f5}(当前版本)v2={f1,f2,f3,f4}v1={f1,f2,f3}(该版本被迭代器1使用)此时,存储在磁盘上的文件是f1, f2, f3, f4, f5然而,此时v2既不是最新版本,也没有被任何操作、迭代器使用,那么这个版本理应被删除,包括f4。而v1依旧不能被删除,因为它仍然被迭代器1使用。此时,版本状态如下:v3={f1,f5}(当前版本)v1={f1, f2, f3}(该版本被迭代器1使用)此时,存储在磁盘上的文件为:f1, f2, f3, f5当迭代器1销毁后,v3={f1,f5}(当前版本)v1={f1,f2,f3}此时,存储在磁盘上的文件为:f1, f2, f3, f5现在,v1既不是最新版本,也没有被占用,v1理应被删除,包括文件f2,f3。此时,有效版本如下:v3={f1,f5}(当前版本)此时,存储在磁盘上的文件为:f1, f5可以通过引用技术实现以上逻辑。每一个sst文件以及每一个版本都有引用技术。sst引用计数变化:1.当我们创建一个新版本时,我们会对所有文件增加引用计数。2.当一个版本没有被占用时,这个版本对应的所有文件引用计数都要减1。3.当一个文件的引用技术降至0时,该文件就可以被物理删除了。版本引用计数变化:1.当创建一个版本时,它是最新的版本,此时该版本引用计数为12.当一个版本不再是最新的版本时,此时该版本引用计数减13.任何人使用某版本时,该版本引用计数加1,使用结束,该版本引用计数减14.当一个版本引用计数为0时,该版本应该被删除5.当一个版本为最新版本或者被使用时,此时该版本引用计数不为0,因为需要保留有时,对版本的引用计数会直接维护,比如对文件做compaction时。然而,更多情况下,是通过super version数据结构来间接维护引用计数,super version维护内存表以及版本的引用计数。每次阅读过程只需要增加以及减少一次引用计数,而super version会维护版本的引用技术。这种机制能够避免引用技术被锁住较长时间。RocksDB将所有版本信息维护在VersionSet数据结构中,同时记录“最新”版本。因为每个column family都有各自的LSM,它们有自己的版本列表,有对应的最新版本。但是在整个数据库中,只有一个VersionSet维护所有column failies的版本信息。2023-07-29 04:37:201
压 实 度
压实度(degree of compaction) (原:指的是土或其他筑路材料压实后的干密度与标准最大干密度之比,以百分率表示。) 压实度是路基路面施工质量检测的关键指标之一,表征现场压实后的密度状况,压实度越高,密度越大,材料整体性能越好。对于路基本、路面半刚性基层及粒料类柔性基层而言,压实度是指工地上实际达到的干密度与室内标准击实实验所得最大干密度的比值;对沥青面层、沥青稳定基层而言,压实度是指现场达到的密度与室内标准密度的比值。压实度的测定主要包括室内标准密度(最大干密度)确定和现场密度试验。(选于《路基路面试验检测技术》交通部基本建设质量监督总站组织编写) 压实度是填土工程的质量控制指标。先取压实前的土样送试验室测定其最佳含水量时的干密度,此为试样干密度。再取由实试验后所得的试样最大干密度,用实际干密度除以最大干密度即是土的实际压实度。用此数与标准规定的压实度比较,即可知道土的压实程度是否达到了质量标准。 影响路基压实度的主要因素包括:填料(填料的粒径)、含水量、每层压实厚度、压实机具、碾压遍数等。压实度是路基路面工程检测的重要指标之一。压实度是指工地上实际达到的干密度与室内标准击实实验所得最大干密度的比值。四川瞭望自主研发生产的压实度、密实度检测仪,有称BR-ICCC智能压实质量检测仪,是最新研发的压实度的检测仪器,从根本上解决了漏压、欠压、过压等问题,被广泛应用于公路、铁路及压实质量控制中。被评为“达到国际领先水平”的压实控制设备。在目前压实度检测中占主导地位。2023-07-29 04:37:282
相对密实度与压实度有什么区别
压实度是填土工程的质量控制指标,土的压实度等于土的实际干密度与最大干密度的比值,用百分比表示。先取压实前的土样送试验室测定其最佳含水量时的干密度,此为最大干密度。再取压实后的土样送试验室测定其实际干密度,用实际干密度除以最大干密度即是土的实际压实度。用此数与标准规定的压实度比较,即可知道土的压实程度是否达到了质量标准。压实度=试件干密度/标准干密度(100%) 密实度试验是指回填施工时用环刀取样后经试验测得的土的干容重及含水率2023-07-29 04:37:372
Hbase读写原理
不同列族分别存在不同的文件夹里。 与MySQL比较 首先Hbase是依赖于HDFS和zookeeper的。 Zookeeper分担了Hmaster的一部分功能,客户端进行DML语句的时候,都是先跟ZK交互。 RegionServer管理了很多的Region(表),RegionServer里面的WAL(HLog)是预写入日志,功能是防止内存中的数据没有来的及落盘时丢失。在Region里面管理的Store管理的是列族,Store里面有Mem Store(内存),Flush之后,删除内存中的数据,同时写入文件StoreFile Hfile,Hfile 其实是在DataNode里面的。 Hbase的读比写慢。 Hbase命名空间下有一张元数据表meta表和namespace表。meta表里面保存了要操作的表所在的位置等元数据。 (1)首先客户端向zk请求元数据表所在的RegionServer,zk返回给客户端meta表所在的regionServer。 (2)然后客户端再去对应的RegionServer查找meta表,找到真正要操作的表所在的regionServer,同时把meta表的信息缓存下来,加快后续的查询。 (3)然后客户端再向目标表所在的RegionServer发送put请求。先把数据写到Hlog里面,再写到内存MemStore,数据会在内存排序,然后向客户端发送ack,到这里对于客户端来说写数据已经结束了。再等到MemStore的刷写时机后,将数据刷写到Hfile. 注:meta表所在的位置信息保存在zk的meta-region-server节点上,客户端首先就是在这个节点上差询meta表所在的RegionServer。meta表里面的信息就是表与其对应的RegionServer的信息 这个stu表可能不止一条,因为stu表可能数据量大了之后根据RowKey进行了切分,并且可能会在不同的机器上。 不同的列族是在不同的文件夹。 MemStore刷写时机: 全局的MemStore的容量,默认是堆内存的40%。这个容量值会触发flush操作,所有的MemStore都要刷写,flush操作会阻塞读写操作。 会刷写并阻塞到到MemStore大小降到它的最大容量的95% WAL日志的刷写时机: 可以设置日志的大小和数量,当达到一定数量,刷写到HDFS (1)从zk找meta表所在的RegionServer (2)从上述RegionServer里的meta表里找目标表所在的RegionServer,同时把meta表缓存,加速后面的查询。 (3)向目标表所在的RegionServer发送get请求。可以从block Cache,MemStore还有StoreFile里面查,具体从哪查根据时间戳,查时间戳大的,具体就都查然后merge取最新。 RegionServer里面有block Cache可以缓存磁盘的数据,加速查询。如果block Cache里面有,就将缓存和MemStore的数据merge然后取最新时间戳,没有就是把磁盘读的和MemStore里面的合并。所以hbase大多数读要走磁盘,所以读很慢。 每次刷写会生成新的Hfile,Hfile很小并且数量多的时候会影响查询的速度。所以要进行合并。合并分为minor Compaction和major Compaction minor Compaction将临近的若干较小的Hfile合并成一个较大的Hfile,不会清理过期和删除的数据,major Compaction会将一个Store里面的所有Hfile合并成一个大的Hfile,并且会清理掉过期和删除的数据。 数据的读写可以不依赖Hmaster,只需要指定zookeeper,但是Hmaster负责region调度的元数据 但是DDL语言是要有Hmaster的 Flush和major Compact (1)flush在同一个内存中清除过期或删除(删除标记也是一行数据)的数据,但是如果数据不同的版本分布在不同的memStroe,就不能清除。删除的标记在flush之后不会被删,但在后面的major compaction会把删除标记删除掉。 (2)major compaction 会清除过期或删除的数据。 默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动拆分,两个子Region开始都会在一个Regionserver里面,但是出于负载均衡的考虑,Hmaster有可能会将某个Region传给其他的RegionServer。 Split的时机: (1)当一个Region中的某个Store下的StoreFile的总大小查过某个值,由参数hbase.hregion.max.filesize设定(默认10g),该Region就会按照RowKey进行拆分。 (2)在新版本中这个值是Min(R^2*"hbase.hregion.memStore.flush.size(128M)","hbase.hregion.max.filesize"),R是当前RegionServer中属于该Table的Region个数。分region是按照RowKey切分的。这会导致数据倾斜,就是因为切分的阈值在变化,导致切分之后的region数据量不均匀,导致热点的问题。所以在建表的时候要做预分区,就是用RowKey规划好多少个region,不让hbase自己的切分逻辑切分。 官方建议只用一个列族,防止不同的列族之间数据不均匀,单一列族数据量增多,导致全局的flush,数据量小的列族也要flush,这样会形成很多小的storeFile。 delete操作: (1)设置RowKey:打的删除标记是deleteFamily,删除多个版本 (2)设置RowKey+Family:打的标记是deleteFamily,删除多个版本 (3)设置RowKey+family+column:有addColumn()和addColumns().addColumn是删除最新的版本或者删除指定时间戳的版本,删除标记是delete标记。addColumns是删除所有的版本或者删除指定时间戳或之前的版本,删除标记是deleteColumn Delete的操作其实也是put操作,put的是删除的标记。 在Hbase中HMaster负责监控HRegionServer的生命周期,均衡RegionServer的负载,如果HMaster挂掉了,那个整个Hbase集群将处于不健康的状态,并且此时的工作状态不会维持太久。所以Hbase支持对HMaster的高可用配置。 在Hbase的conf目录下新建backup-masters文件,vim加入备份Master,比如slave01,slave02.在把文件分发到各个slave里,然后再启动hbase 就能实现HMaster的高可用了。 每一个region维护着StartRow和EndRow,如果加入的数据符合某个region维护的RowKey范围,则该数据交给这个region维护。那么依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高Hbase性能。 (1)手动设定预分区 手动设置RowKey分了5个region (2)生成16进制序列预分区 (3)按照文件中设置的规则预分区 创建split.txt 然后执行 这里如果文件里面给的分区键不是按照顺序的,hbase会先帮我们把键排序,然后按照键来分区。 (4)使用JavaAPI预分区 admin的创建表的方法有多个重载,可以只传表的描述,也可以加入分区的信息。admin.createTable 规划分区要考虑未来数据量和机器的规模。虽然提前做了分区,但是最后如果分区大于了10G,还是会触发split。假设一台机器有100G磁盘,那么预分区尽量大于10个,这样就能避免预分区之后又触发了大于10G的split。 (1)希望数据能够尽量均匀的分配在多个分区里面(散列性)。 (2)唯一性 (3)长度原则(生产环境70到100位) 常见的设计方案: (1)生产随机数、hash、散列值 (2)字符串反转 (3)字符串拼接 电信项目: 一次通话的记录:13112341233->18998768771 2018-12-12 12:12:21 568 假设分300个区 分区键怎么设计: (299个键) 000| 001| ... 298| RowKey的前面一般会拼上000_,001_,...,298_ 这样做的好处是,根据前三位就能知道哪个分区。 (1)我们希望手机号尽量分布在不同的分区,但是相同的手机号数据集中在同一个分区,这样方便查询某个用户的通话信息。000_13112341233 (2)因为每个人通话的需求不同,也希望把同一个人的通话记录也分布在不同的分区里面。000_13112341233_2019-12-12 哈希取余:[(13112341234^201912).hash]%299 假设要查询某用户2019年2月的通话记录,可以用13112341234 201902做startRowkey,13112341234 201903做endRowKey 微博。 1、需求 (1)微博内容的浏览 (2)用户社交:关注用户,取关用户 (3)拉取关注人的微博用户 2、设计表 (1)微博内容表Content 行键:用户id+时间戳 (2)用户关系表 因为正常情况一个用户的粉丝和关注都不多,可以用一行存储关注和粉丝的情况。 行键:用户id (3)初始化页面的表(显示关注的人的最近三条微博)2023-07-29 04:37:511
沉积期后变化及其作用
1.沉积期后变化的阶段划分原始物质经过搬运和沉积作用之后,变成了沉积物,此过程属于沉积物的形成阶段。在沉积物转化为沉积岩的过程中,它要经受一系列的变化,而且在沉积物变成沉积岩之后,也还要遭受长期的改造,这种改造作用一直要持续到变质作用或风化作用之前。一般把这些变化作用分为四个阶段,分别为同生阶段(或称海解阶段)、成岩阶段、后生阶段、退后生阶段,各阶段作用特征和过程如下:同生阶段 指沉积物刚刚沉积于水底,与水体的底层水之间所发生的反应和变化过程。成岩阶段 指原沉积物上面被新的沉积物覆盖后,它所遭受的物理和化学的变化,并使松散的沉积物固结成岩的过程。后生阶段 是指沉积物固结成岩石之后,至变质作用或风化作用之前所发生的过程,称为后生阶段。退后生阶 段是指埋藏较深的岩层被抬升到潜水面以下的近地表处,在常温常压条件下,在渗透水和浅部地下水的影响下所发生变化的时期。如被抬升到潜水面以上的近地表处,则进入有强烈大气水溶解作用有关的、已脱离退后生阶段的风化作用阶段。2.沉积期后的变化的控制因素沉积物脱离沉积环境进入沉积期后的变化阶段之后,由于所处的环境已与原环境不同,沉积物或岩石会发生成分、结构、构造的变化,以适应新的环境,在新的条件下建立新的物质和化学平衡。引起沉积期后各阶段沉积物或沉积岩变化的控制因素可归纳为内因和外因两个方面:内因 指影响沉积物或沉积岩变化的内在控制因素,包括:①沉积物或沉积岩的物质成分及结构构造特征;②组成沉积物或沉积岩的物质本身的地球化学性质,如溶解度、溶度积、自由能、化学位等;③岩石的物性特征,如孔隙度、渗透率和气水饱和度等;④沉积物或沉积岩的岩相特征等。外因 指影响沉积物或沉积岩变化的外部控制因素,包括:①沉积物或沉积岩所处的地球化学环境,如水的类型和性质,pH、Eh、活度(a)、逸度(f)等;②沉积物或沉积岩所处的地球物理环境,如温度、压力;③地质构造环境、沉积层围岩的性质、沉积期后变化延续时间的长短等;④有机地球化学环境,如细菌的作用、有机质的作用及转化环境等。这些因素均影响着沉积期后变化的作用性质和产物特征,详见表4-2。表4-2 沉积及沉积期后各阶段环境特征与沉积物特征3.主要的沉积期后变化沉积期后变化归纳起来主要有以下几个方面:(1)压实作用(compaction)在上覆沉积物不断加厚情况下,重荷压力使松散的、非颗粒状沉积物(软泥、灰泥)的含水量减少,体积缩小,并使其致密化和固结的过程称为压实作用,而对颗粒状的沉积物紧密化的过程称压固作用。两者也可统称为压实作用,主要发生在成岩阶段。影响压实作用的因素主要是:负荷力的大小(与埋深有关)、沉积物的粒度及成分、溶液的性质、温度和压实的时间等。泥质沉积物的压实作用最为强烈,表现为含水量减少、孔隙度渐小、并可出现定向性,如瑞士楚格湖中现代沉积的粘土,在埋深0m时,含水量83.6%,孔隙度为92%;当上覆有3.6m厚的沉积物覆盖物后,粘土含水量减为70.6%,孔隙度减至85%。压实作用强时还发生粘土矿物成分的转化。砂质沉积物的压实作用,初期也表现为含水量减少、孔隙度缩小,后期对碎屑矿物产生压裂、压碎、压溶及石英和长石碎屑的次生加大等现象。颗粒碳酸盐的压固也有相似的表现特征。(2)压溶作用(pressure-solution)在压力(静水压力或构造应力)作用下,沉积物或沉积岩内发生的溶解作用,称为压溶作用,其产物为缝合线(图4-6)。压溶作用既有物理作用,也有化学作用。在上覆沉积物的静压力作用下,孔隙溶液经常会发生迁移。随着压力的增加,溶解作用加强,在颗粒(或两种岩性)接触处发生溶解作用,由于各部分溶解速度不一致,故其接触线(缝合线)常呈锯齿状。压溶作用主要发生在后生阶段,但可从成岩阶段就开始有表现,沉积岩(主要是碳酸盐岩)中的缝合线构造和砂砾间的缝合接触即为压溶作用的证据。图4-6 碳酸盐岩中的缝合线(3)胶体的陈化及重结晶作用(recrystallization)沉积物的矿物成分伴随溶解、局部溶解和固体扩散等作用方式,使组成矿物的物质质点发生重新排列组合的现象,称为重结晶作用。重结晶作用的强弱取决于物质成分、质点大小、均一性及密度等因素。一般而言,颗粒愈小表面积愈大,溶解度也愈大,愈易被溶解而向大颗粒集中,即愈易发生重结晶作用。重结晶作用也与物质成分有关,易溶的物质,如碳酸盐、盐类等矿物在成岩后生过程中很容易发生重结晶,形成粗大的晶体,温度及压力的增加,也能促进重结晶作用。重结晶的先后与矿物密度和结晶能力有关,一般是密度大而分子体积小和结晶能力大的矿物先发生重结晶。因此,在沉积岩中成为单独晶体或结核出现的往往是密度较大的矿物(如黄铁矿、菱铁矿),在白云质灰岩中白云石的自形程度常较方解石好。重结晶作用不仅使细粒、松散沉积物逐渐固结变粗、变硬,而且还可破坏沉积物的原始结构构造。如沉积物的颗粒大小、形状及排列方向等均可因重结晶作用而受到破坏,微细薄层理也可因重结晶作用而消失。胶体的陈化是一种特殊的重结晶现象,即由非晶质物质变为半晶质-结晶质的现象。胶体陈化常伴有脱水、固结、裂隙化及角砾化现象,还可产生一些特殊的结构,如球粒结构。在硅质岩中有时可见到蛋白石转变成球粒状的玉髓。胶体的陈化在硅质岩、碳酸盐岩、粘土岩和菱铁岩中常可见到。(4)交代作用(replacement)交代作用发生在沉积物和沉积岩中,是对已存矿物的一种化学替换作用,作用过程中有物质的带出及带入,它可发生于沉积岩形成作用的各个阶段。交代顺序与元素活动性和浓度有关,一般规律为活动性元素易被相对惰性的元素交代,低浓度的元素易被高浓度的元素替换。交代作用是一种极为常见的作用,将在有关岩石中介绍。图4-7 结核的成因类型(5)结核的形成作用结核是在矿物岩石学特征上(成分、结构、构造及颜色等)与周围沉积物/岩不同的、规模不大的包体。常是化学或生物化学作用的产物,它可产生于沉积岩形成作用的各个阶段,可划分为4种不同成岩阶段的类型(图4-7):同生结核 如现代大洋底的铁锰结核、硅质结构等,它们可以是胶体物质围绕某些质点中心进行聚集,形成具同心结构的结核;也可以是胶体物质呈凝块状析出的结核,其成分与同时沉积的沉积物不同。成岩结核 是已沉积的沉积物在转变成岩石的过程中,相同物质相对集中而成。后生结核 常是交代作用的产物。假结核 是风化作用的产物。岩石中常见的结核就其成分来说有:碳酸盐质的、硅质的、铁锰质的等(有关各种结核的特征在“沉积构造”一节中介绍)。(6)自生矿物的形成作用实际上重结晶作用、胶体陈化、氧化与还原、溶解与交代、结核的形成及胶结作用等,都可产生一些新的、在某个阶段稳定的矿物,即广义的自生矿物,如表4-2所示。(7)胶结作用(cementation)胶结作用是指松散的沉积颗粒,被化学沉淀物质或其他物质充填联接的作用,其结果使沉积物变为坚固的岩石,并减少孔隙度。胶结作用可发生于各个成岩阶段:①在同生及成岩阶段形成的胶结作用称之为原生胶结作用,主要是通过沉淀稳定矿物、重结晶、胶体脱水与陈化等形成等方式,对松散沉积物进行胶结和固结成岩;②在后生及表生成岩阶段形成的胶结作用称之为次生胶结作用,其中后生期主要通过交代作用及次生加大作用使岩石进一步固结,表生期的胶结作用主要是在大气水条件下形成的新生矿物对已进入风化阶段的沉积岩进行的胶结作用。2023-07-29 04:38:131
胶结的英文,胶结的翻译,怎么用英语翻译胶结,胶结用
你好!胶结cementation 英[u02ccsi:menu02c8teu026au0283n] 美[u02ccsimu025bnu02c8teu0283u0259n] n. 黏固; 烧结; [例句]Other factors that affect porosity are compaction, consolidation and cementation.影响孔隙率的其它因素是压缩,固结和胶结。2023-07-29 04:38:201
ramcloud 解决什么问题
RAMCloud 是斯坦福的 Ousterhout 教授(log-structure filesystem 的作者)领导的项目,这是一个完全放在内存中的分布式 key-value store。与 memcached 和 redis 的区别是,memcached 只是个易失的cache,不能说是 storage;redis 对可靠性的保障也不高(据我所知,包括一种定期 dump 到磁盘的方式,称为 rdb;还有 Append Only方式。不管怎样,redis 可能会丢失1秒的数据)。而 RAMCloud 的定位是 storage,不允许丢失数据(“不丢失数据”并不是说可以满足用户的每一次写请求,而是每个满足的写请求,都必须是持久化的)。关键特性:为了支撑大容量,RAMCloud 需要上千台物理结点;RAMCloud 将所有数据放在内存,读写请求完全靠内存响应,因此延迟很低;为了避免网络成为瓶颈,RAMCloud推荐使用 Infiniband;每个结点的磁盘只作为备份使用,只有在结点失效时,才需要访问磁盘恢复数据。RAMCloud 面临一些挑战和解决方案:1)结点失效后,如何快速重建该结点的数据,他们在 SOSP"11的论文利用集群的并发能力解决这个问题;2)提高内存的使用率而不降低性能的问题,他们在 FAST"14的文章使用log-structure 的内存分配器解决这个问题;3)单点故障的问题,RAMCloud 有一个 coordinater负责协调整个集群,包括重建等操作,他们使用了 Zookeeper,并且在 ATC"14的论文提出 raft解决这个问题。下面就谈谈为什么需要 log-structure 的内存分配。传统的内存分配器不能应对变化的负载(key-value pair 的长度不定,从 KB 到 MB),non-copying 的分配器有大量碎片,几乎浪费一半的内存资源(比如,需要1GB,却分配了2GB);copying 的分配器没有碎片,但是当内存利用率很高时性能下降,因为它们的 copying 和数据量成正比,不是增量式的。那么其实 RAMCloud 的解决方案也很简单,使用了常见的技巧,将变长的小对象(key-value pair)打包成定长的大对象(10MB 的 segment),segment 是存储的基本单元。10GB 内存有大约1000个 segment。新的数据会被写到处于 log head 的 segment 中,并已 segment 为单元分发到其它(三个)结点的磁盘上做备份。为了快速检索数据,需要一个全局哈希表定位每个 key-value pair 的位置。 当删除和更新数据时,旧的 segment 上会出现很多失效的数据,这时有两个问题:1)如何区分失效和有效的数据;2)如何垃圾回收。区分失效数据:内存中的失效数据很好识别,因为哈希表有指向有效数据的指针。但是,磁盘上的备份呢?如果结点失效,如何防止一个失效的数据“复活”呢?RAMCloud 引入了一种特殊的对象,叫 tombstone,当删除或更新时,一个指向失效数据的 tombstone 被添加到 log head的 segment 中。一个疑惑是,更新操作为什么也需要 tombstone,新数据不能作为旧数据的 tombstone 吗?这是因为RAMCloud 的垃圾回收不能保证较新的失效对象比较旧的失效对象更晚被回收(好像有点拗口,比如我们随后删除了刚刚更新的对象,这样就有两个失效对象,它们有相同的 key,它们被回收的顺序是不能保证,如果较新的对象所在的 segment 先被回收,较旧的对象将在数据恢复时“重生”)。所以更新操作和删除操作一样,需要一个 tombstone。而且 tombstone 在它所指向的对象所在的 segment 被回收之前,是不能被回收的,它将一直占据内存和磁盘的空间。垃圾回收:当一个 segment 中有很多失效的数据时,我们应该将其中的有效数据复制到更紧凑的 segment 中(数据迁移或者 segment 合并),并回收这个 segment 的空间。这有点像 SSD 的垃圾回收,其实垃圾回收大抵都这样。但是这种操作很耗资源,因此 RAMCloud 采用了二级垃圾回收策略。首先,我们必须明白,过早做垃圾回收没有好处,等我们确实需要更多空间并且有很多垃圾存在时,做垃圾回收才是划算的(benefit/cost 最高)。二级垃圾回收包括 segment compaction 和 segment combination。在一般的情况下,只将垃圾数据较多的 segment 做 compaction 操作,就是在内存中将失效数据剔除,缩小的 segment 被写到新的位置,ID 不变,磁盘上的数据不变,所以 segment 的总数没有变化,没有任何 IO 操作。segment combination 操作要耗时的多,它就是合并 segment,多个旧 segment 合成新的 segment,并且需要同步到磁盘上。combination 无疑耗时的多,问题是何时做 combination。RAMCloud 当遇到下面情况时才做 combination:1. 磁盘的空间是内存的2倍,这时我们需要回收磁盘的空间;2. tombstone 太多,占了理论剩余空间(空间 – 有效数据占据的空间)的40%以上。必须指出的是单纯 compaction 是无法回收 tombstone 的,因为 segment 并没有真正被回收,一旦结点失效,完整的 segment 会被恢复出来。因此只有使用 combination,旧的 segment 被回收后,那些指向旧 segment 的 tombstone 就可以在下次 compaction 时删除了。待解决的问题:1. 哈希表的问题,当对象很小时,哈希表可能占10-20%的内存;(优化小对象)2. tombstone 的问题,tombstone 只有在数据恢复时才有用,但我们从不会从内存中恢复数据,因此放在内存十分浪费;(优化小对象)3. 内存压缩,当对象很大时,可否使用压缩技术提高利用率。2023-07-29 04:38:591
梅花碾是什么?
梅花碾又名冲击压实机,是隶属于压路机的一种新型的拖式压路机。冲击式压路机通过装载机牵引,带动一个冲击轮,利用冲击轮自身的重量和前进时的冲击力,对水泥路面、路基进行破碎和压实。冲击压路机设备适用于压实碎石,特别适用于填方压实、煤场压实、干旱地区黄土、湿陷性黄土、大孔隙土等压实施工。还适用于铁路、公路基础土方的压实施工,对机场跑道,水力发电站大坝、港口市政广场、矿山矿石场等高填方深度的压实作业效果尤为明显。望采纳2023-07-29 04:39:222
解释“夯实基础”一词是什么意思?
夯实hāngshí1、[tamp;pun] 捣实,利用重物使其反复自由坠落 对地基或填筑土石料进行夯击,以提高其密实度的施工作业。把土夯实是打地基的重要一环,就是加固、巩固的意思。例:~地基。2、在摸清底子的基础上做扎实,多用于公文写作。说的简单点就是把基础打牢。例:~工作基础;~计划生育底子。词典释义夯实(compacter),夯,或打夯,原为建住宅时对地基以人力方式用石头等硬物进行夯实,通常2人以上合作完成工作。当代夯实地基的工作以改为机械夯实,也称打电夯。夯实基础,指采取一些措施,为其打下扎实的基础。例:~学习基础。网络释义夯实( compacter), 此释义来源于 网络辞典。[建] compaction香港建造业常用英文词汇一 ...compacted concrete 压实混凝土 compaction 压实; 夯实compaction pile 压实桩 ...tamping[推荐3][名词委审定]汉英公路科技名词(1997)共有 0 条回复件 ...焊接钢桥||welded steel bridge 夯实|| tamping航空摄影测量||aerial photogrametry ..2023-07-29 04:41:441
夯实的名词解释
夯实hāngshí[1][tamp;pun] 捣实,利用重物使其反复自由坠落 对地基或填筑土石料进行夯击,以提高其密实度的施工作业。把土夯实是打地基的重要一环,就是加固、巩固的意思。例:~地基。[2]在摸清底子的基础上做扎实,多用于公文写作。说的简单点就是把基础打牢。例:~工作基础;~计划生育底子。 夯实(compactor),夯,或打夯,原为建住宅时对地基以人力方式用石头等硬物进行夯实,通常2人以上合作完成工作。当代夯实地基的工作以改为机械夯实,也称打电夯。夯实就是要做的很扎实,一般指做基础工作。夯实基础,指采取一些措施,为其打下扎实的基础。例:~学习基础。 夯实( compacter), 此释义来源于 网络辞典。[建] compaction 香港建造业常用英文词汇一 ...compacted concrete 压实混凝土 compaction 压实; 夯实compaction pile 压实桩 ... tamping [推荐3][名词委审定]汉英公路科技名词(1997)共有 0 条回复件 ...焊接钢桥||welded steel bridge 夯实|| tamping 航空摄影测量||aerial photogrametry ..2023-07-29 04:41:511
“夯实基础”是什么意思?
老老实实,一步一个脚印的去做好落实事情.2023-07-29 04:42:062
密实度和压实度的区别
压实度指的是土或其他筑路材料压实后的干密度与标准最大干密度之比,以百分率表示,试验方法通常有灌砂法,环刀法,核子仪测定法等;密实度指的是材料体积内固体所充实的程度。试验方法有标准贯入试验,动力触探试验等。点位数量按公路路基路面现场测试随机选点方法确定2023-07-29 04:42:176
Hbase 的小合并大合并
compaction从store上面,选取一些HFile进行合并。把key-value按顺序排列写入到新的文件下面,取代之前的文件提供数据。分为minorcompaction和majorcompaction。 1.minorcompaction 较小的,相邻的HFile的合并 2.majorcompaction 一个store里面的所有HFile的合并,合并成一个,会清理三类数据: 1.已经删除的数据 2.ttl过期的数据 3.版本超过限定的数据2023-07-29 04:43:161
压实度和压实系数有何区别?
你的理解我表示赞同2023-07-29 04:43:387
java的gc为什么要分代?
为什么要分新生代和老年代,因为如果要对所有存活对象一次GC是非常耗时的,早期的垃圾收集器是单线程的(后来才出现的并行收集器),在进行GC是会产生STW现象,即在进行垃圾收集时你的其他线程全部得停下来,为了避免用户线程长时间停顿,就得尽量减少GC时间,通过分代就可以达到这个目标。小对象最开始是分配在新生代的,这些对象每“幸存”一次,每躲过一次GC,它的年龄就加1,直到达到设定的阈值,就进入可以老年代,由于新生代区域比较小,有的大对象放不下,可以直接进入老年代。相应的,GC也分为Minor GC和Major GC,后者比前者更耗时,前者针对新生代,后者针对老年代,通常情况下都是进行Minor GC,只有当越来越多的对象进入老年代导致老年代区域空间不足时才会触发Major GC。2023-07-29 04:44:102
rear shocks 什么意思
rear shocks后方的冲击双语对照例句:1.Front and rear shocks and springs are tuned for optimum ride qualityand capability.2023-07-29 04:44:362
地基处理里的DDC是什么意思?
孔内深层强夯法(down-hole dynamic compaction)是在强夯技术基础上发展的地基加固技术,是根据“动力固结”的机理与现代科学技术为一体的地基处理技术。它的施工是先成孔,再向孔内填料,以高动能、超压强特异重锤在孔内深层领域进行冲砸挤压,使填料在强力的推动下向孔周和底部挤压。其强夯重锤作业是在孔内自下而上完成。夯击能量可达20000KN.m/m2。深度可达30m或更深。2023-07-29 04:44:463
如何减少major compact
major compact 只是一个HBase自我优化的操作。可以通过 hbase.hregion.majorcompaction 这个参数来设置自动major 的周期,也可以设置为0 取消掉自动 major,通过手动 major 进行调节。2023-07-29 04:44:531
「相聚有时,后会无期」如何翻译成英文 ?
相聚有时,后会无期英文Sometimes we get together, but never after.重点词汇 相聚meet (together); gather; assemble; phase compaction 有时sometimes; at times; now and then1.Sometimes有时候It was a stretch for me sometimes to come up with the rent.交租金对我有时是一件难事。2.togetheradv. 在一起;一块儿;共同;同时;一齐;不间断地;接连地;靠在一起;一致地;合作地adj. 自信的;头脑清醒的;稳健的;有条理的例句The comradeship that had bound such a disparate bunch of lads together .把这样一群各不相同的小伙子团结在一起的同志情谊。短语together with同…一起, 和, 连同, 加之get together聚集;集合all together全体都在;突然2023-07-29 04:45:032
普通砂土的压实系数是多少!
1*0.87=0.87立方2023-07-29 04:45:242
用英语翻译下这个报告,奖赏多多
这么重要的质量测试的报告,最好是找我们沈阳美东旭翻译一下好了。我们的介绍你可以到网上去找一下我们公司的网站,保证翻译完让你满意。2023-07-29 04:45:332
shallow是什么意思?又是用在什么地方的?
影子 名字2023-07-29 04:45:532
英文翻译中文
地形行为的理解是很重要的,机动车负荷下的研究 vehicle-terrain互动。在这一章中,各种方法的造型地形的行为 进行了综述。 在过去,造型地形作为弹性介质或作为刚性,完美塑胶材料 已被广泛使用。造型地形作为弹性介质,连同理论 弹性,得到了很好的应用,在这项研究的土壤压实和地形伤害因 不准通车。地形作为刚性造型,完美塑胶材料,走到一起的感觉 平衡理论,得到了很好的应用塑料在预测最大牵引力 越野车辆的开发和研制开发的推力(grousers)的凸耳一辆车 运用齿轮。它也被用于预测电阻的一辆推土机 刀片。当ide...2023-07-29 04:46:082
污水管道砂砾垫层如何测压实度
灌砂法 如果粗粒径很多就用灌水撒2023-07-29 04:46:183
常见的JVM参数
-XX:MaxTenuringThreshold :对象晋升老年代的阈值, 默认值15(并不是绝对的,如果在Survivor空间中相同年龄所有对象大小的综合大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代) <br /> -XX:MaxPermSize~~ :永久代大小<br /> -XX:MaxDirectMemorySize :直接内存大小, 默认与-Xmx一致 <br /> -XX:+/-UseTLAB :是否开启TLAB<br /> -XX:MaxMetaspace =256m:元数据区, 默认为无限大,受Java进程所使用的内存影响 <br /> -XX:FieldsAllocationStyle :对象内存分布中的实例数据区域的存储顺序<br /> -XX:CompactFields=true :由于HotSpot在分配对象实例数据时相同大小的字段总是被分配到一起存储,在满足这个条件下因此父类中定义的变量会出现在子类之前,开启此参数那子类中较小的变量也允许插入父类变量的空隙中,以节省一点空间<br /> -XX:+UseCondCardMark :是否开启JVM卡表条件判断,尽量减少伪共享带来的性能损耗<br /> -XX:MaxGCPauseMillis (毫秒 >0) :控制最大垃圾收集停顿时间, 默认值200 <br /> -XX:ParallelGCThreads=NUM :垃圾收集并行执行线程数,默认为CPU的核数<br /> -XX:+UseAdaptiveSizePolicy :是否开启自适应调节策略, JDK8默认开启 <br /> -XX:SurvivorRatio :Eden和Survivor区的比例<br /> -XX:PretenureSizeThreshold :晋升老年代对象大小,超过指定大小直接在老年代分配, 默认为0 <br /> -XX:+PrintGCDetails :打印GC详细日志<br /> -XX:+PrintHeapAtGC :打印每次GC前后堆、方法区可用容量变化<br /> -XX:+PrintGCApplicationConcurrentTime :查看GC过程中用户线程并发时间<br /> -XX:+PrintGCApplicationStoppedTime :查看GC过程中用户线程停顿时间<br /> -XX:+PrintFlagsFinal :查看JVM参数的默认值 <a name="nkixU"></a> CMS相关见文章 <br />- XX:+UseConMarkSweepGC :开启使用CMS垃圾收集器,新生代使用ParNew 老年代使用CMS<br /> -XX:CMSInitiatingOccupancyFraction=70 :CMS垃圾收集器的回收阈值(老年代),JDK5及之前默认为68%,JDK6之后调整为92%。<br /> -XX:+UseCMSInitiatingOccupancyOnly :与XX:CMSInitiatingOccupancyFraction配合使用,只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整。<br /> -XX:+/-CMSPrecleaningEnabled :开启/关闭CMS并发预清理。<br /> <br /> -XX:CMSScheduleRemarkEdenSizeThreshold :CMS可取消并发预处理阶段开启条件-->默认为2M<br /> -XX:CMSMaxAbortablePrecleanLoops :CMS可取消并发预处理阶段取消条件-->循环次数, 默认为0 <br /> -XX:CMSMaxAbortablePrecleanTime :CMS可取消并发预处理阶段取消条件-->最长执行时间, 默认为5000毫秒 <br /> -XX:CMSScheduleRemarkEdenPenetration :CMS可取消并发预处理阶段取消条件-->Eden区的内存使用率大于此配置后取消, 默认值为50 <br /> -XX:+UseCMSCompactAtFullCollection :在进行Full GC之前进行一次内存整理, 默认开启 <br /> -XX:CMSFullGCBeforeCompaction=N :当执行过N此无碎片整理Full GC后,下次Full GC之前进行一次内存整理, 默认为0,表示每次都进内存整理 <br /> -XX:+CMSScavengeBeforeRemark :强制在CMS最终/重标记阶段前进行一次Minor GC, 防止可中断预清理一直没有等到年轻代Minor GC而导致年轻代对象太多而导致最终标记时间过长,导致停顿时间过长 <br /> -XX:+CMSPermGenSweepingEnabled :开启CMS对永久代(元空间)的垃圾收集, 默认不开启 <br />-XX: +CMSClassUnloadingEnabled :与-XX: +CMSPermGenSweepingEnabled 配合使用,收集永久代时卸载不用的类<br /> G1l垃圾收集器 <br /> -XX:G1HeapRegionSize=8 :设置G1垃圾收集器Region大小,取值范围应为1MB ~ 32MB,且应为2的N次幂。<br /> -XX:G1NewSizePercent :新生代最小值, 默认值5% <br /> -XX:G1MaxNewSizePercent :新生代最大值, 默认值60% <br /> -XX:ParallelGCThreads :STW期间,并行GC线程数<br /> -XX:ConcGCThreads=n :并发标记期间,GC线程数<br /> -XX:InitiatingHeapOccupancyPercent :设置触发标记周期的 Java 堆占用率阈值。默认值是45%。这里的java堆占比指的是nonyoungcapacitybytes,包括old+humongous<br /> -XX:G1HeapWastePercent :G1停止回收的最小内存,默认是堆的5%,就是说不必要每次回收就把所有的垃圾的处理完,可遗留少量的下次处理,这样也降低了单次GC消耗的时间<br /> -XX:+GCTimeRatio :计算花在Java应用线程上和花在GC线程上时间比率,默认是9,跟新生代内存的分配比例一样。 参数的主要目的是让用户可以控制花在应用上的时间,G1的计算公式是100/(1+GCTimeRatio)。 如果参数设置为9,则最多花10%的时间在GC上面,Parallel GC默认值是99,表示1%的时间被用在GC上面,这是因为Parallel GC贯穿整个GC,而G1则根据Region来进行划分,不需要全局性扫描整个内存<br /> -XX:G1ReserverPercent :G1为分配担保预留的空间比例, 默认10% ,也就是老年代会预留10%的空间来给新生代对象晋升,如果经常由于新生代对象晋升失败导致FullGC,可以适当调大此参数(调大此参数同时意味着老年代可使用的空间减少) <a name="DvDjB"></a> -XX:+-HeapDumpOnOutOfMemoryError :当OOMError产生时,自动Dump堆内存<br /> -XX:HeapDumpPath :与HeapDumpOnOutOfMemoryError搭配使用,指定内存溢出时Dump文件的目录, 默认为启动Java程序的工作目录下 <br /> -XX:OnError :发生致命错误时执行的脚本<br /> -XX:OnOutOfMemoryError :抛出OOMError错误是执行的脚本<br /> -XX:ErrorFile=fileName :致命错误的日志文件名,绝对路径或者相对路径<br /> -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1506 :开启远程调试<br /><br /> <a name="YJpQl"></a> <a name="FxWab"></a> -XX:+DoEscapeAnalysis :开启逃逸分析<br /> -XX:+EliminateAllocations :开启标量替换<br /> -XX:+EliminateLocks :开启同步消除<br />相关文章见: 编译优化技术 <br /> 参考资料 :2023-07-29 04:46:311
压实系数的计算公式是什么?
运土量=挖土量-回填体积×1.15压实系数(coefficient of compaction):指路基经压实实际达到的干密度与由击实试验得到的试样的最大干密度的比值K。路基的压实质量以施工压实度K(%)表示。压实系数愈接近1,表明压实质量要求越高。还有就是最大干密度相对应的含水量是最佳含水量,而不是最小含水量。压实系数为土的控制干密度ρd与最大干密度ρdmax的比值。压实度是一个干密度比较值。先在实验中测定标准干密度,再计算工地取样的干密度,进行比较。压实度=工地试件干密度/标准干密度(100%)。2023-07-29 04:47:001
为什么CMS GC时出现Concurrent Mode Failure
并发收集器(concurrentcollector)指的是回收年老代和持久代时,采用多个线程和应用线程并发执行,减少应用停顿时间,但如果参数设置不当,容易出现Concurrent ModeFailure现象,此时JVM将采用停顿的方式进行full gc,整个gc时间相当可观,完全违背了采用CMS GC的初衷。出现此现象的原因主要有两个:一个是在年老代被用完之前不能完成对无引用对象的回收;一个是当新空间分配请求在年老代的剩余空间中得到满足。原文如(if theconcurrent collector is unable to finish reclaiming the unreachable objectsbefore the tenured generation fills up, or if an allocation cannot be satisfiedwith the available free space blocks in the tenured generation, then theapplication is paused and the collection is completed with all the applicationthreads stopped)。出现此现象的具体gc日志如下:90003.167: [GC 90003.167: [ParNew: 261760K->0K(261952K), 0.0204310secs] 778897K->520196K(1310528K), 0.0207190 secs]90006.049: [GC 90006.050: [ParNew: 261760K->0K(261952K), 0.0136380 secs]781956K->521446K(1310528K), 0.0138720 secs]90010.628: [GC 90010.628: [ParNew: 261760K->261760K(261952K), 0.0000350secs]90010.628: [CMS (concurrent mode failure)[Unloadingclass sun.reflect.GeneratedSerializationConstructorAccessor1818][Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1816][Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1819][Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1821][Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1817][Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1822][Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1820]: 521446K->415777K(1048576K), 2.2550270 secs] 783206K->415777K(1310528K),2.2553820 secs]90015.099: [GC 90015.099: [ParNew: 261760K->0K(261952K), 0.0198180 secs]677537K->418003K(1310528K), 0.0200650 secs]90018.670: [GC 90018.670: [ParNew: 261760K->0K(261952K), 0.0131610 secs]679763K->419115K(1310528K), 0.0133750 secs]90022.254: [GC 90022.254: [ParNew: 261760K->0K(261952K), 0.0151240 secs]680875K->420505K(1310528K), 0.0154180 secs]当时的JVM参数如下:-server -Xms1280m -Xmx1280m -Xmn256m -Xss256k -XX:PermSize=128m-XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC-XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled-XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps因为配置了+CMSClassUnloadingEnabled参数,所以出现Unloading classsun.reflect.GeneratedSerializationConstructorAccessor的日志,这是个好习惯,如果空间不够时可以卸载类来释放空间,以进行FULL GC,相反,如果gc日志中出现了此日志,应该检查各代的大小设置是否合理。这里应用从启动到上述现象出现时还没有进行过CMS GC,出现concurrent modefailure现象的原因是年轻代GC(ParNew),年老代所剩下的空间不足以满足年轻代,也就是开头提到的原因二。要避免此现象,方法一是降低触发CMS的阀值,即参数-XX:CMSInitiatingOccupancyFraction的值,默认值是68,所以这里调低到50,让CMS GC尽早执行,以保证有足够的空间,如下:-server -Xms1280m -Xmx1280m -Xmn256m -Xss256k -XX:PermSize=128m-XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC-XX:CMSFullGCsBeforeCompaction=1 -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=50-XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -verbose:gc-XX:+PrintGCDetails -XX:+PrintGCTimeStamps调完之后发现还是一样的现象(这里有点不是很明白,年老代空间为1024m(1280m-256m),50%时触发CMS GC,也就是在年老代512m的时候,剩下的堆空间有512m,就算年轻代全部装进去应该也是够的),所以怀疑是年轻代太大,有大的对象,在年老代有碎片的情况下将很难分配,所以有了第二个解决办法,即减少年轻代大小,避免放入年老代时需要分配大的空间,同时调整full gc时压缩碎片的频次,减少持久代大小,以及将触发CMS GC的阀值适当增大(因为年轻代小了,这个调大点没关系,后面可以再调试这个参数),参数如下:-server -Xms1280m -Xmx1280m -Xmn128m -Xss256k -XX:PermSize=96m -XX:MaxPermSize=96m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=1 -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps调整完后没有那个现象了,这里主要起作用的就是调小年轻代大小。在年老代到达826m(触发CMS阀值(1280-128)*0.7=806m)时出现了CMS GC,用时27ms,日志如下:705.444: [GC 705.445: [ParNew: 130944K->0K(131008K), 0.0197680 secs]954628K->826284K(1310656K), 0.0199720 secs]705.467:[GC [1 CMS-initial-mark: 826284K(1179648K)] 826744K(1310656K), 0.0271540 secs]705.494:[CMS-concurrent-mark-start]706.717:[CMS-concurrent-mark: 1.223/1.223 secs]706.717:[CMS-concurrent-preclean-start]706.717:[CMS-concurrent-preclean: 0.000/0.000 secs]706.742:[CMS-concurrent-abortable-preclean-start]706.742:[CMS-concurrent-abortable-preclean: 0.000/0.000 secs]707.067: [GC 707.067: [ParNew: 130944K->0K(131008K), 0.0160200 secs]957228K->827348K(1310656K), 0.0162110 secs]707.796: [GC[YG occupancy: 66671 K (131008 K)]707.796: [Rescan (parallel) ,0.0278280 secs]707.824: [weak refs processing, 0.0420770 secs] [1 CMS-remark:827348K(1179648K)] 894019K(1310656K), 0.0711970 secs]707.877: [CMS-concurrent-sweep-start]708.453: [GC 708.454: [ParNew: 130944K->0K(131008K), 0.0203760 secs]848439K->718796K(1310656K), 0.0205780 secs]709.833: [GC 709.833: [ParNew: 130944K->0K(131008K), 0.0160170 secs]430484K->301411K(1310656K), 0.0161840 secs]709.916: [CMS-concurrent-sweep: 1.974/2.040 secs]709.916: [CMS-concurrent-reset-start]709.951: [CMS-concurrent-reset: 0.034/0.034 secs]711.187: [GC 711.187: [ParNew: 130944K->0K(131008K), 0.0130890 secs]413136K->283326K(1310656K), 0.0132600 secs]观察一段时间的gc情况,gc效率也很高,单次YGCT<20ms,FGCT <40ms:$ jstat -gcutil 31935 1000S0 S1 E O P YGC YGCT FGC FGCT GCT0.00 0.00 64.29 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.33 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.41 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.45 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.49 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.58 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.63 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.69 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.72 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.75 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.79 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.84 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.90 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.95 36.47 73.15 1293 19.514 6 0.211 19.7250.00 0.00 64.99 36.47 73.15 1293 19.514 6 0.211 19.725这时,想再测试下-XX:CMSInitiatingOccupancyFraction的值,调到80时又出现了上述现象Concurrent ModeFailure,启动后还没进行过CMS GC,在年老代914m时就出现了:759.994: [GC 759.994: [ParNew: 130944K->0K(131008K), 0.0172910 secs]1040896K->911480K(1310656K), 0.0174730 secs]760.879: [GC 760.879: [ParNew: 130944K->0K(131008K), 0.0300920 secs]1042424K->914190K(1310656K), 0.0302950 secs]761.768: [GC 761.769: [ParNew: 130944K->130944K(131008K), 0.0000340secs]761.769: [CMS (concurrent mode failure)[Unloading classsun.reflect.GeneratedMethodAccessor342]edMethodAccessor348][Unloading class sun.reflect.GeneratedMethodAccessor411][Unloading class sun.reflect.GeneratedMethodAccessor407][Unloading class sun.reflect.GeneratedMethodAccessor541]最后总结下,出现Concurrent ModeFailure现象时,解决办法就是要让年老代留有足够的空间,以保证新对象空间的分配。另外在JVM BUG中有提到,JDK1.5_09版本之前,JVM参数-XX:CMSInitiatingOccupancyFraction是无效的,我这里应用环境的版本是JDK1.5_08,从gc日志来看是可以生效的。GC时还有一个常见的错误PromotionFailed,解决办法类似,也是调整年轻代和年老代的比例,还有CMSGC的时机。2023-07-29 04:47:151
公路工程中监理对路基压实度的抽检频率是怎么规定的?
《公路工程施工监理规范》规定:监理工程师对工序项目抽检频率不低于10~20%,是相对每一个分项及其单元工程的每个检查项目,而并非抽检的工程项目。即应涉及到工程所包含的所有工程项目、每一构件、每道工序的每一检测指标,即工程覆盖面应达到100%,而不能简单的理解为按工程项目或构件数量的10~20%。10~20%的规定抽检频率仅仅是一个低限,在具体操作时,还应根据具体检测指标的实际和质量检验评定的要求加大抽检频率。路基压实度【degree of compaction】(原:指的是土或其他筑路材料压实后的干密度与标准最大干密度之比,以百分率表示。)路基压实度是路基路面施工质量检测的关键指标之一,表征现场压实后的密度状况,压实度越高,密度越大,材料整体性能越好。检验方法:传统检验通常采用环刀法,灌砂法和核子密度仪法等。①环刀法,是一种破坏性的检测方法,适用于不含骨料的细粒土。优点是设备简单操作方便;缺点是受土质限制,当环刀打入土中时,产生的应力使土松动,壁厚时产生的应力较大,因此干密度有所降低。②灌砂法,是一种破坏性检测方法,适用于各类土。优点是测定值精确;缺点是操作较复杂,须经常测定标准砂的密度和锥体重。③核子密度仪法,是一种非破坏性测定方法。能快速测定湿密度和含水量,满足现场快速、无破损的要求,并具有操作方便,显示直观的优点,但应与灌砂法进行对比标定后方可使用。灌砂法灌砂法是利用均匀颗粒的砂去置换试洞的体积,它是当前最通用的方法,很多工程都把灌砂法列为现场测定密度的主要方法。该方法可用于测试各种土或路面材料的密度,它的缺点是:需要携带较多量的砂,而且称量次数较多,因此它的测试速度较慢。采用此方法时,应符合下列规定:(1)当集料的最大粒径小于15mm、测定层的厚度不超过150mm时,宜采用Φ100mm的小型灌砂筒测试。(2)当集料的粒径等于或大于15mm,但不大于40mm,测定层的厚度超过150mm,但不超过200mm时,应用Φ150mm的大型灌砂筒测试。1.仪具与材料(1)灌砂筒:有大小两种,根据需要采用。储砂筒筒底中心有一个圆孔,下部装一倒置的圆锥形漏斗,漏斗上端开口,直径与储砂筒的圆孔相同,漏斗焊接在一块铁板上,铁板中心有一圆孔与漏斗上开口相接,储砂筒筒底与漏斗之间没有开关。开关铁板上也有一个相同直径的圆孔。(2)金属标定罐:用薄铁板制作的金属罐,上端周围有一罐缘。(3)基板:用薄铁板制作的金属方盘,盘的中心有一圆孔。(4)玻璃板:边长约5m~600mm的方形板。(5)试样盘:小筒挖出的试样可用铝盒存放,大筒挖出的试样可用300mm x 500mm x 40mm的搪瓷盘存放。(6)天平或台称:称量10 ~15kg,感量不大于1g。用于含水量测定的天平精度,对细粒土、中粒土、粗粒土宜分别为0.01g、0.1g、1.0g。(7)含水量测定器具:如铝盒、烘箱等。(8)量砂:粒径0.30~0.60mm 及0.25~0.50mm清洁干燥的均匀砂,约2040kg,使用前须洗净、烘干,并放置足够长的时间,使其与空气的湿度达到平衡。(9)盛砂的容器:塑料桶等。(10)其他:凿子、改锥、铁锤、长把勺、小簸箕、毛刷等。2.试验方法与步骤(1)标定筒下部圆锥体内砂的质量①在灌砂筒筒口高度上,向灌砂筒内装砂至距筒顶15mm左右为止。称取装人筒内砂的质量m1 ,准确至1g。以后每次标定及试验都应该维持装砂高度与质量不变。②将开关打开,让砂自由流出,并使流出砂的体积与工地所挖试坑内的体积相当(可等于标定罐的容积),然后关上开关,称灌砂筒内剩余砂质量 m5 ,准确至1g。③不晃动储砂筒的砂,轻轻地将灌砂筒移至玻璃板上,将开关打开,让砂流出,直到筒内砂不再下流时,将开关关上,并细心地取走灌砂筒。④收集并称量留在板上的砂或称量筒内的砂,准确至1g。玻璃板上的砂就是填满锥体的砂m2 。⑤重复上述测量三次,取其平均值。(2)标定量砂的单位质量γ。①用水确定标定罐的容积V,准确至1mL。②在储砂筒中装人砂并称重,并将灌砂简放在标定罐上,将开关打开,让砂流出,在整个流砂过程中,不要碰动灌砂筒,直到砂不再下流时,将开关关闭,取下灌砂筒,称取筒内剩余砂的质量准确至1g。③计算填满标定罐所需砂的质量。④重复上述测量三次,取其平均值。⑤计算量砂的单位质量。(3)试验步骤①在试验地点,选一块平坦表面,并将其清扫干净,其面积不得小于基板面积。②将基板放在平坦表面上。当表面的粗糙度较大时,则将盛有量砂的灌砂筒放在基板中间的圆孔上,将灌砂筒的开关打开,让砂流入基板的中孔内,直到储砂筒内的砂不再下流时关闭开关。取下灌砂筒,并称量筒内砂的质量准确至1g。当需要检测厚度时,应先测量厚度后再进行这一步骤。③取走基板,并将留在试验地点的量砂收回,重新将表面清扫干净。④将基板放回清扫干净的表面上(尽量放在原处),沿基板中孔凿洞(洞的直径与灌砂筒一致)。在凿洞过程中,应注意勿使凿出的材料丢失,并随时将凿出的材料取出装人塑料袋中,不使水分蒸发,也可放在大试样盒内。试洞的深度应等于测定层厚度,但不得有下层材料混人,最后将洞内的全部凿松材料取出。对土基或基层,为防止试样盘内材料的水分蒸发,可分几次称取材料的质量。全部取出材料的总质量为mw ,准确至1g。⑤从挖出的全部材料中取出有代表性的样品,放在铝盒或洁净的搪瓷盘中,测定其含水量(w,以%计)。样品的数量如下:用小灌砂筒测定时,对于细粒土,不少于100g; 对于各种中粒土,不少于500g。用大灌砂筒测定时,对于细粒土,不少于200g;对于各种中粒土,不少于1000g对于粗粒土或水泥、石灰、粉煤灰等元机结合料稳定材料,宜将取出的全部材料烘干,且不少于2000g,称其质量m d,准确至1g。当为沥青表面处治或沥青贯人结构类材料时,则省去测定含水量步骤。6.将基板安放在试坑上,将灌砂筒安放在基板中间(储砂筒内放满砂质量m 1),使灌砂筒的下口对准基板的中孔及试洞,打开灌砂筒的开关,让砂流入试坑内匕在此期间,应注意勿碰动灌砂筒,直到储砂筒内的砂不再下流时,关闭开关。小心取走灌砂筒,并称量筒内剩余砂的质量m4 ,准确到1g。7.如清扫干净的平坦表面的粗糙度不大,也可省去上述②和③的操作。在试洞挖好后,将灌砂筒直接对准放在试坑上,中间不需要放基板。打开筒的开关,让砂流入试坑内。在此期间,应注意勿碰动灌砂筒。直到储砂筒内的砂不再下流时,关闭开关,小心取走灌砂筒,并称量剩余砂的质量m"4 ,准确至1g。8.仔细取出试筒内的量砂,以备下次试验时再用,若量砂的湿度已发生变化或量砂中混有杂质,则应该重新烘干、过筛,并放置一段时间,使其与空气的温度达到平衡后再用。3.计算(1)计算填满试坑所用的砂的质量mb。(2)计算试坑材料的湿密度ρw。(3)计算试坑材料的干密度ρd。(4)水泥、石灰粉、煤灰等无机结合料稳定土,计算干密度ρd。当试坑材料组成与击实试验的材料有较大差异时,可以试坑材料作标准击实,求取实际的最大子密度。4.试验中应注意的问题灌砂法是施工过程中最常用的试验方法之一。此方法表面上看起来较为简单,但实际操作时常常不好掌握,并会引起较大误差;又因为它是测定压实度的依据:故经常是质量检测监督部门与施工单位之间发生矛盾或纠纷的环节,因此应严格遵循试验的每个细节,以提高试验精度。为使试验做得准确,应注意以下几个环节:(1)量砂要规则。量砂如果重复使用,一定要注意晾干,处理一致,否则影响量砂的松方密度。(2)每换一次量砂,都必须测定松方密度,漏斗中砂的数量也应该每次重做。因此量砂宜事先准备较多数量。切勿到试验时临时找砂,又不作试验;仅使用以前的数据。(3)地表面处理要平整,只要表面凸出一点(即使1mm),使整个表面高出一薄层,其体积也算到试坑中去了,会影响试验结果。因此本方法一般宜采用放上基板先测定一次粗糙表面消耗的量砂,按式(6-7)计算填坑的砂量,只有在非常光滑的情况下方可省去此操作步骤。(4)在挖坑时试坑周壁应笔直,避免出现上大下小或上小下大的情形:这样就会使检测密度偏大或偏小。(5)灌砂时检测厚度应为整个碾压层厚,不能只取上部或者取到下一个碾压层中。灌沙法的检测步骤首先要在试验地点选一块平坦表面,其面积不得小于基板面积,并将其清扫干净。将基板放在此平坦表面上,沿基板中孔凿洞,洞的直径100毫米,在凿洞过程中应注意不使凿出的试样丢失,并随时将凿松的材料取出,放在已知质量的塑料袋内,密封。试洞的深度应等于碾压层厚度。凿洞毕,称此袋中全部试样质量,准确至1 克。减去已知塑料袋的质量后即为试样的总质量。然后从挖出的全部试样中取有代表性的样品,放入铝盒,用酒精燃烧法测其含水量。最后将灌砂筒直接安放在挖好的试洞上,这时灌砂筒内应放满砂,使灌砂筒的下口对准试洞。打开灌砂筒开关,让砂流入试洞内。直到灌砂筒内的砂不再下流时,关闭开关,取走灌砂筒,称量筒内剩余砂的质量,准确至1克。试洞内砂的质量=砂至满筒时的质量-灌砂完成后筒内剩余砂的质量-锥体的质量。挖出土的总质量除以试洞内砂的质量再乘以标准砂的密度可计算路基土的湿密度。干密度就等于湿密度/(1+0.01*含水量)压实度就等于土的干密度/土的最大干密度*100%在路基施工过程中,为控制好路基压实质量,提高现场压实机械的工作效率,需要重点做好四方面工作:一是通过试验准确确定不同种类填土的最大干密度和最佳含水量。二是现场控制填土的含水量。实际施工中,填土的含水量是一个影响压实效果的关键指标,路基施工中当含水量过大时应翻松晾晒或掺灰处理,降低含水量;当含水量过低时,应翻松并洒水闷料,以达到较佳的含水量。三是分层填筑、分层碾压。施工前,要先确定填土分层的压实厚度。最大压实厚度一般不超过20厘米。四是加强现场检测控制。填筑路基时,每层碾压完成后应及时对压实度、平整度、中线高程、路基宽度等指标进行质量检测,各项指标符合要求后方能允许填筑上一层填土。核子密度湿度仪法该法是利用放射性元素(通常是 射线和中子射线)测量土或路面材料的密度和含水量。这类仪器的特点是测量速度快,需要人员少。该类方法适用于测量各种土或路面材料的密度和含水量,有些进口仪器可贮存打印测试结果。它的缺点是,放射性物质对人体有害,另外需要打洞的仪器,在打洞过程中使洞壁附近的结构遭到破坏,影响测定的准确性,对于核子密度湿度仪法,可作施工控制使用,但需与常规方法比较,以验证其可靠性。1.仪具与材料(1)核子密度湿度仪:符合国家规定的关于健康保护和安全使用标准,密度的测定范围为1.12~2.73g/cm3 ,测定误差不大于± 0.03 ,含水率测量范围为0~0.64 , 测定误差不大于 ± 0.015 g/cm3 。它主要包括下列部件:① γ 射线源:双层密封的同位素放射源,如铯一137 、钴-60 或镭-226等。②中子源:如镅(241)一铍等。③探测器:γ射线探测器或中子探测器等。④读数显示设备:如液晶显示器。脉冲计数器、数率表或直接读数表。⑤标准板:提供检验仪器操作和散射计数参考标准用。⑤安全防护设备:符合国家规定要求的设备。6.刮平板、钻杆、接线等。(2)细砂:0.15~0.3mm。(3)天平或台称。(4)其他:毛刷等。2.试验方法与步骤本方法用于测定沥青混合料面层的压实密度时,在表面用散射法测定,所测定沥青面层的层厚应不大于根据仪器性能决定的最大厚度。用于测定土基或基层材料的压实密度及含水量时打洞后用直接透射法测定,测定层的厚度不宜大于20cm. 。1)准备工作(1)每天使用前按下列步骤用标准板测定仪器的标准值:①接通电源,按照仪器使用说明书建议的预热时间,预热测定仪。②在测定前,应检查仪器性能是否正常,在标准板上取34个读数的平均值建立原始标准值,并与使用说明书提供的标准值校对,如标准读数超过使用说明书规定的界限时,应重复此标准的测量,若第二次标准计数仍超出规定的界限时,需视作故障并进行仪器检查。(2)在进行沥青混合料压实层密度测定前,应用核子法对钻孔取样的试件进行标定;测定其他材料密度时,宜与挖坑灌砂法的结果进行标定。标定的步骤如下:①选择压实的路表面,按要求的测定步骤用核子仪测定密度,记录读数;②在测定的同一位置用钻机钻孔法或挖坑灌砂法取样,量测厚度,按规定的标准方法测定材料的密度;③对同一种路面厚度及材料类型,在使用前至少测定15处,求取两种不同方法测定的密度的相关关系,其相关系数应不小于0.9。(3)测试位置的选择①按照随机取样的方法确定测试位置,但与距路面边缘或其他物体的最小距离不得小于30cm。核子仪距其他射线源不得少于10m。②当用散射法测定时,应用细砂填平测试位置路表结构凹凸不平的空隙,使路表面平整,能与仪器紧密接触。③当使用直接透射法测定时,应在表面上用钻杆打孔,孔深略深于要求测定的深度,孔应竖直圆滑并稍大于射线源探头。(4)按照规定的时间,预热仪器。2)测定步骤(1)如用散射法测定时,应将核子仪平稳地置于测试位置上。(2)如用直接透射法测定时,将放射源棒放下插入已预先打好的孔内。(3) 打开仪器,测试员退出仪器2m以外,按照选定的测定时间进行测量,到达测定时间后,读取显示的各项数值,并迅速关机。各种型号的仪器具体操作步骤略有不同,可按照仪器使用说明书进行。3.使用安全注意事项(1)仪器工作时,所有人员均应退到距仪器2m以外的地方。(2)仪器不使用时,应将手柄置于安全位置,仪器应装人专用的仪器箱内,放置在符合核辐射安全规定的地方。(3)仪器应由经有关部门审查合格的专人保管,专人使用。对从事仪器保管及使用的人员,应遵照有关核辐射检测的规定,不符合核防护规定的人员,不宜从事此项工作。传统检测方法存在的问题传统路基压实度的检测方法,无论是环刀法、灌砂法、还是核子测量法均停留在结果检测,与此同时环刀法、灌砂法还属于有损检测不但操作麻烦费时费工,同时还耗费了大量的财物等诸多缺陷。公路的路基压实质量主要由压实系数控制,然而对于高等级铁路和公路,例如铁路客运专线的路基压实质量主要由地基反力系数K30、动态变形模量Evd、变形模量Ev2、孔隙率n、压实系数K控制。在路基压实过程中,为了检测上述指标主要依靠现场“抽样”试验方法。这样的路基质量检验方法在路基质量控制和施工经济性方面寄生了以下不足之处:1)用个别点的检测结果代表全断面的质量,因此不能反映路基全断面压实质量。2)质量控制仅是结果控制,而不是过程控制。3)无法控制超压现象。4)当填料存在不均匀性时,抽样点很难具有代表性。综上所述实时、无损伤路基检测仪成为路基压实度检测的迫切需求,压实度过程检测的研究也成为压路机行业的一大发展方向。智能检测基压实度检测仪ICCC,是由四川瞭望工业自动化控制技术有限公司与西南交通大学共同研发,在精度与稳定性较同类产品都有了本质的提升,该仪器不但能对压实度、振动频率、压路机运行速度及压路区域图做出准确测定,并且以cmv输出(cmv是国际对压实度评定标准的一种参数,通过系数拟合,可以方便显示为用户习惯的任何一种评定参数)同时可以作为压路机自动化,智能化终端平台,为“单机智能化,定点控制,智能机群化”等压路机发展方向提供了可行路径!同时能通过扩展得到用户需求的"地面温度","滚筒斜度"及各种复杂环境下数据支持。1、安装在作业压路机上,实时显示压路效果,并将效果图转化为直观的压路区域图,以cmv输出真实有效的反应路基压实度质量;2、用于压路效果的验收及质量检测。能够输出打印检测路段的压实度效果图,形象直观的为压实度检测提供数据的支持。相对于传统的优点1、实现了过程无损伤检测,更快速的反应问题,大大提高了施工进程和效率,避免了结果检测带来的人力物力的损失;2、ICCC的储存传输功能为施工进程提供了连续准确的检测数据,为路基压实质量提供了强有力的保障;3、连续、实时、准确的反应了路基断面压实真实质量,避免了以点带面的检测误差;4、简单直观的反应压实质量,ICCC检测仪采用彩色平面图直观并实时的显示路基压实区域内的压实质量。5、操纵简单,利用压实过程中的实时地基反力系数,压路机操作人员可进行路基压压实的过程控制,加强了路基压实质量控制的针对性;6、中文显示、体积小、重量轻、支持压路机专属配件,安装简易;7、设置压路机专属电源接口,实现了可持续不间断的检测。技术参数精度误差:2%(与灌砂法为参照点)显 示:800×600触控LED液晶屏,全中文显示;通信接口:标准网络接口、两个USB,支持U盘数据导出;A / D:24bit,动态范围:整个系统达100dB;直流精度:优于0.01% F.S;存储容量:标配4GB固态存储(扩展容量可选配);供电方式:支持压路机12/24 V DC供电;工作温度:-10℃~60℃;最大尺寸:218×131×65 mm重 量:1.5公斤防护等级:IP52(防大颗粒灰尘进入,防水淋溅)2023-07-29 04:47:251
Carbide tools是什么牌子刀片
硬质核心刀头型号Carbide from CERATIZIT: the basis for more productive powder compaction tools电石CERATIZIT:更有效的粉末压实工具的基础Longer tool life improves efficiency延长刀具寿命提高效率When being used for powder compaction, our corrosion-resistant carbide grades result in an increased wear resistance because the speed of and tendency towards corrosion are reduced. For highly abrasive pressing materials, these CF grades, in addition to the necessarily high hardness, also offer excellent fracture toughness as a result of the optimised binders. You benefit from the substantial increase in tool life and, compared to steel tools, machine downtimes are considerably reduced, making the entire system extremely efficient.当被用于粉末压实,我们的耐腐蚀碳化物等级的结果在增加耐磨性,因为速度和腐蚀倾向减少。对于高强度磨料的压制材料,这些碳纤维的等级,除了一定的高硬度,也提供优异的断裂韧性作为一个结果,优化的粘合剂。你受益于刀具寿命大幅增加,比钢制工具,机器停机时间大大减少,使得整个系统非常有效。Service: constructive support for developing solutions服务:开发解决方案的建设性支持Whether you"re looking for advice during the development phase, strategic information about how to produce the best possible surfaces, or a detailed laboratory analysis for an already active tool, to determine reasons of wear – we gladly invite you to partake in our decades of experience, in order to offer the optimal solution for your need.无论你是在寻找建议在开发阶段,战略信息如何产生最好的表面,或详细的实验室分析已经有效的工具,以确定穿–我们高兴地邀请你参与我们的几十年的经验的原因,为了您的需求提供最佳的解决方案。Carbide tool CPTT series 中华映管系列硬质合金刀具2023-07-29 04:47:461
回填土压实系数0.97施工能达到么?
压实系数是土样密度比最大密度,值越高,越密实。一般大面积土方要求大于0.9,室内及建筑周边有所要求时取0.94~0.95,作为持力层时取0.97.此值用于事后验收。0.97的压实系数是肯定能达到的2023-07-29 04:47:596
Hive的事务
何为事务? 事务就是一组单元化操作,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位。 事务(transaction)所应该具有的四个要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这四个基本要素通常称为ACID特性。 事务可以保证ACID原则的操作,那么事务是如何保证这些原则的?解决ACID问题的两大技术点是: Hive 0.13以前,原子性,一致性,和持久性都只支持到分区的级别。隔离性可以通过zookeeper或内存的锁机制来实现。在0.13以后,Hive支持行级别的ACID语义,这样一个应用在同一分区下可以添加数据行不会干扰其他应用的数据读取。 Hive的ACID语义可以完成以下使用场景 Hive提供数据数据接入和修改的api HDFS是不支持文件的修改,并且当有数据追加到文件,HDFS不对读数据的用户提供一致性的。为了在HDFS上支持以上的特性,我们借鉴了其他数据仓库工具的方法。表和分区的数据都被存在base files。 新的记录和更新,删除都存在delta files。一次事务操作创建一系列的delta files。在读取的时候,将基础文件和修改,删除合并,最后返回给查询。 为了开启hive的事务支持,以下是需要开启的最少的hive配置: 如果一个表需要使用ACID 的数据操作,表属性一定要设置 "transactional=true" ,一旦被设置为事务表是不可以被撤销的。 如果不需要系统对表进行数据合并,可以设置表属性 "NO_AUTO_COMPACTION"。 通过可以通过 Alter Table/Partition Compact 命令手动处理合并 CREATE TABLE table_name ( id int,name string) CLUSTERED BY (id) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true", "compactor.mapreduce.map.memory.mb"="2048", -- MRjob的属性 "compactorthreshold.hive.compactor.delta.num.threshold"="4", -- 超过4个deta目录触发小合并 "compactorthreshold.hive.compactor.delta.pct.threshold"="0.5" -- 如果deta文件的大小超过base文件的50%触发大合并 ); ALTER TABLE table_name COMPACT "minor" WITH OVERWRITE TBLPROPERTIES ("compactor.mapreduce.map.memory.mb"="3072"); ALTER TABLE table_name COMPACT "major" WITH OVERWRITE TBLPROPERTIES ("tblprops.orc.compress.size"="8192"); Hive事务管理避坑指南 Hive Transactions Streaming Data Ingest HCatalog Streaming Mutation API HCatalog UsingHCat2023-07-29 04:48:221
刘林的论文
1.Agarwal S, Loh YH, McLoughlin EM, Huang J, Park IH, Miller JD, Huo H, Okuka M, Dos Reis RM, Loewer S, Ng HH, Keefe DL, Goldman FD, Klingelhutz AJ, Liu L, Daley GQ. Telomere elongation in induced pluripotent stem cells from dyskeratosis congenita patients. Nature 464:292-296(2010). 2.Huang J, Okuka M, Wang F, Zuo B, Liang P, Kalmbach K, Liu L, Keefe DL. Generation of pluripotent stem cells from eggs of aging mice. Aging Cell Online (2009).3. C, Chen Z, Liu Z, Huang J, Zhang W, Zhou L, Keefe DL, Liu L. Correlation of expression and methylation of imprinted genes with pluripotency of parthenogenetic embryonic stem cells. Human Molecular Genetics 18:2177-2187 (2009).4.Liu N, Lu M, Feng XM, Ma FX, Fang ZH, Tian XM, Ren Q, Zhang L, Liu B, Huang PP, Liu L, Han ZC. Exogenous Nanog alleviates but is insufficient to reverse embryonic stem cells differentiation induced by PI3K signaling inhibition. Journal of Cellular Biochemistry 106:1041-1047 (2009).5.Chen Z, Liu Z, Huang J, Amano T, Li C, Cao S, Wu C, Liu B, Zhou L, Carter MG, Keefe DL, Yang X, Liu L. Birth of Parthenote mice directly from parthenogenetic embryonic stem cells. Stem Cells 27:2136-2145 (2009).6.Keefe DL, Liu L. Telomeres and reproductive aging. Reproduction, Fertility and Development 21:10-14 (2009).7.Cao S, Wang F, Chen Z, Liu Z, Mei C, Wu H, Huang J, Li C, Zhou L, Liu L. Isolation and culture of primary bovine embryonic stem cell colonies by a novel method. Journal of Experimental Zoology Part A Ecol Genet Physiol. 311A:368-376 (2009).8.Chen L, Liu L. Current progress and prospects of induced pluripotent stem cells. Sci China C Life Sci. 52:622-636 (2009).9.Huang J, Deng K, Wu H, Liu Z, Chen Z, Cao S, Zhou L, Ye X, Keefe DL, Liu L. Efficient production of mice from embryonic stem cells injected into four- or eight-cell embryos by piezo micromanipulation. Stem Cells 26:1883-1890 (2008)10.Liu L, S. M. Bailey, M. Okuka, P. Mu?oz, C. Li, L. Zhou, C. Wu, E. Czerwiec, L. Sandler, A. Seyfang, M. A. Blasco and Keefe. D. L. Telomere lengthening early in development. Nature Cell Biology 9: 1436-1441 (2007)11.Liu Y, Wu C, Lyu Q, Yang D, Albertini DF, Keefe DL, Liu L. Germline stem cells and neo-oogenesis in the adult human ovary. Developmental Biology 306:112-120 (2007)12.Liu L and Keefe DL. Chapter 15 Nuclear Transfer Methods to Study Aging in Methods in Molecular Biology: Biological Aging: Methods and Protocols. Humana Press Inc., Totowa, NJ. Pp191-207 (2007)13.Keefe DL, Liu L, Marquard K. Telomeres and aging-related meiotic dysfunction in women. Cellular and Molecular Life Sciences 64:139-143 (2007)14.Wang X, Liu L, Montagna C, Ried T, Deng CX. Haploinsufficiency of Parp1 accelerates Brca1-associated centrosome amplification, telomere shortening, genetic instability, apoptosis, and embryonic lethality. Cell Death & Differentiation 14:924-931 (2007)15.Dai, Y., L. Wang, H. Wang, Y. Liu, Q. Lyu, N. Li, D.L. Keefe, D.F. Albertini and L. Liu. Abnormalities in centrosome remodeling following somatic cell nuclear transfer (SCNT) in bovine oocytes. Reproduction 131:1051-1061 (2006).16.Liu, L., Franco, S., Spyropoulos, B., Moens, P.B., Blasco, M.A., and Keefe, D.L. Irregular telomeres impair meiotic synapsis and recombination in mice. Proc Natl Acad Sci U S A 101: 6496-6501 (2004)17.Liu, L., C.M. DiGirolamo, P.A.A.S. Navarro, M.A. Blasco and D. L. Keefe. Telomerase deficiency impairs differentiation of mesenchymal stem cells. Experimental Cell Research 294: 1-8 (2004)18.Liu, L., J.R. Trimarchi, P. Navarro, M.A. Blasco and D.L. Keefe. Oxidative stress contributes to arsenic-induced telomere attrition, chromosome instability, and apoptosis. The Journal of Biological Chemistry 278:31998–32004 (2003)19.Liu, L., M.A. Blasco, J.R. Trimarchi and D.L. Keefe. An essential role for functional telomeres in mouse germ cells during fertilization and early development. Developmental Biology 249:74-84 (2002)20.Liu, L., M.A. Blasco and D.L. Keefe. Requirement of functional telomeres for metaphase chromosome alignments and integrity of meiotic spindles. EMBO Reports21.Liu, L., M. Deng, X.C. Tian, and X. Yang. Chapter 17: Activation of mammalian oocytes: Principles and Practice. In: Introduction to Mammalian Reproduction. Editor: Daulat R.P. Tulsiani, Kluwer academic Publishers, MA, USA. pp-22.Liu, L., J.R. Trimarchi, P. Smith and D.L. Keefe. Mitochondrial dysfunction leads to telomere attrition and genomic instability. Aging Cell23.u, L., James R. Trimarchi, Peter Smith and David L. Keefe. Haploidy but not parthenogenetic activation leads to increased incidence of apoptosis in mouse embryos. Biology of Reproduction24.Trimarchi, J. R., Liu, L., Smith, P.J., and Keefe, D.L. Apoptosis recruits two-pore domain potassium channels used for homeostatic volume regulation. American Journal of Physiology25.Liu, L., Katherine Hammar, Peter J.S. Smith, Shinya Inoue, David L. Keefe. Mitochondrial modulation of calcium signaling at the initiation of development. Cell Calcium26.Dinnyés, A., Dai, Y., Barber, M., Liu, L., Xu, J., Zhou, P., and Yang, X. Development of cloned embryos from adult rabbit fibroblasts: effect of activation treatment and donor cell preparation. Biology of Reproduction27.Liu, L. Cloning efficiency and differentiation. Nature Biotechnology 19:406 (2001) (Correspondence).28.Liu, L., Oldenbourg, R., Trimarchi, J.R., and Keefe, D.L. A reliable, noninvasive technique for spindle imaging and enucleation of mammalian oocytes. Nature Biotechnology 陈凌懿,刘林. Current progress and prospects of induced pluripotent stem cells. Science in China陈凌懿,刘林. 诱导性多潜能干细胞(iPS)的研究现状和展望. 中国科学C辑Li C, Chen Z, Liu Z, Huang J, Zhang W, Zhou L, Keefe DL, Liu L. Correlation of expression and methylation of imprinted genes with pluripotency of parthenogenetic embryonic stem cells. Human Molecular GeneticsCao S, Wang F, Chen Z, Liu Z, Mei C, Wu H, Huang J, Li C, Zhou L, Liu L. Isolation and culture of primary bovine embryonic stem cell colonies by a novel method.. Journal of Experimental Zoology Part A Ecol Genet PhysiolChen Z, Liu Z, Huang J, Amano T, Li C, Cao S, Wu C, Liu B, Zhou L, Carter MG, Keefe DL, Yang X, Liu L*. Birth of Parthenote Mice Directly from Parthenogenetic Embryonic Stem Cells. Stem CellsKeefe DL, Liu L.. Telomeres and reproductive aging. Reproduction, Fertility and Development1. Agarwal S, Loh YH, McLoughlin EM, Huang J, Park IH, Miller JD, Huo H, Okuka M, Dos Reis RM, Loewer S, Ng HH, Keefe DL, Goldman FD, Klingelhutz AJ, Liu L, Daley GQ. . Telomere elongation in induced pluripotent stem cells from dyskeratosis congenita patients. NatureHuang J, Okuka M, Wang F, Zuo B, Liang P, Kalmbach K, Liu L*, Keefe DL. Generation of pluripotent stem cells from eggs of aging mice.. Aging Cell -Huang J, Okuka M, McLean M, Keefe DL, Liu L*. . Telomere susceptibility to cigarette smoke-induced oxidative damage and chromosomal instability of mouse embryos in vitro . Free Radical Biology & MedicineRichards T, Wang F, Liu L, Baltz JM. . Rescue of postcompaction-stage mouse embryo development from hypertonicity by amino acid transporter substrates that may function as organic osmolytes.. Biology of ReproductionLiu N, Enkemann SA, Liang P, Hersmus R, Zanazzi C, Huang J, Wu C, Chen Z, Looijenga LH, Keefe DL, Liu L.. Genome-wide gene expression profiling reveals aberrant MAPK and Wnt signaling pathways associated with early parthenogenesis.. J Mol Cell BiolLiu N, Lu M, Feng XM, Ma FX, Fang ZH, Tian XM, Ren Q, Zhang L, Liu B, Huang PP, Liu L, Han ZC.. Exogenous Nanog alleviates but is insufficient to reverse embryonic stem cells differentiation induc. J Cell BiochemLiu, Z., Hu, Z., Pan, X., Li, M., Togun, T.A., Tuck, D., Pelizzola, M., Huang, J., Ye, X., Yin, Y., Liu, M., Li, C., Chen, Z., Wang, F., Zhou, L., Chen, L., Keefe, D.L., and Liu, L. . Germline competency of parthenogenetic embryonic stem cells from immature oocytes of adult mouse ova. Hum Mol GenetHuang J, Wang F, Okuka M, Liu N, Ji G, Ye X, Zuo B, Li M, Liang P, Ge WW, Tsibris JC, Keefe DL, Liu L.. Association of telomere length with authentic pluripotency of ES/iPS cells.. Cell ResWang F, Yin Y, Ye X, Liu K, Zhu H, Wang L, Chiourea M, Okuka M, Ji G, Dan J, Zuo B, Li M, Zhang Q, Liu N, Chen L, Pan X, Gagos S, Keefe DL, Liu L.. Molecular insights into the heterogeneity of telomere reprogramming in induced pluripotent stem cells. Cell Res.2023-07-29 04:48:291
路基压实度检测自检频率是多少?
新的评定标准要求每200m每压实层2处2023-07-29 04:48:455