segment

Optimize API for reducing the segments and eliminating ES deleted docs not working

懵懂的女人 提交于 2021-02-04 07:31:05
问题 This is in continuation of my previous question Does huge number of deleted doc count affects ES query performance related to deleted docs in my ES index. As pointed in the answer, I used optimize API as I am using the ES 1.X version where force merge API is not available but after reading about optimize API github link(provided earlier as couldn't find it on ES site) by Say Bannon founder of elastic, looks like it does the same work. I got the success message for my index after running the

cytoscape.js. For edge segment, transforming coordinates onto segment-distances and segment-weights

喜欢而已 提交于 2021-01-27 11:39:45
问题 I'd like to share with community an useful function that returns segment-distances and segment-weights from a coordinate (PointX, PointY). I create diagrams from tool (such as draw.io) and when making edge (segment style) with multiple waypoints, the freeware provides waypoints by its coordinates. Unfortunately latest version of cytoscape.js (at the time I wrote this post) dont include this capability (apologies if it does) and only segment-distances and segment-weights are used. Therefore I

ConcurrentHashMap总结

不羁岁月 提交于 2020-04-17 03:25:23
【推荐阅读】微服务还能火多久?>>> 并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响,无论对于Java并发编程的学习还是Java内存模型的理解,ConcurrentHashMap的设计以及源码都值得非常仔细的阅读与揣摩。 这篇日志记录了自己对ConcurrentHashMap的一些总结,由于JDK6,7,8中实现都不同,需要分开阐述在不同版本中的ConcurrentHashMap。 之前已经在 ConcurrentHashMap原理分析 中解释了ConcurrentHashMap的原理,主要是从代码的角度来阐述是源码是如何写的,本文仍然从源码出发,挑选个人觉得重要的点(会用红色标注)再次进行回顾,以及阐述ConcurrentHashMap的一些注意点。 1. JDK6与JDK7中的实现 1.1 设计思路 ConcurrentHashMap采用了 分段锁 的设计

Elasticsearch的Refresh与Flush操作

只谈情不闲聊 提交于 2020-04-02 14:21:53
初次接触到这两个概念,估计都会觉得他们没什么差别,都是为了在操作索引之后让索引可以被实时性的搜索,不过它们还是有点不同的。 Elasticsearch底层依赖Lucene,这里我们介绍下Lucene的segment, Reopen,commit。 Segment 在ES中,基本的存储单元是shard(分片),但是在更底层的Lucene上稍微有点不同,ES的每一个shard是Lucene的一个index(索引),Lucene的索引由多个segment组成,每个segment就是ES文档的倒序索引,里面包含了一些term(词)的mapping(映射)。 当每个ES的文档创建的时候,都会写入一个新的segment中,因此每次写入的都是新的segment,所以不需要修改之前的segment。在删除文档的时候,只是在它属于的segment哪里标记为已删除就可,没有真正的从磁盘中抹除。更新也是同样的,只是在对应之前segment哪里标记为逻辑删除,然后新建一个新的segment。 Lucene Reopen Reopen是为了让数据可以可以被搜索到,尽管这个时候数据可以被搜索到,但是不一定保证数据已经被持久化到磁盘中。 Lucene Commit Commit就是为了让数据持久化,每一次的Commit,不同segment的数据都会被持久化到磁盘中,虽然这样可以让数据更安全

Literature Review: Incremental Segment-Based Localization in 3D Point Clouds

别来无恙 提交于 2020-03-30 01:49:25
Abstract 在3D点云中定位因为 从3D数据中提取信息的复杂度 的原因是非常挑战的。我们提出了一个增量的方法来高效的解决这个问题。 首先会在动态的voxel积累观测,然后有选择性的更新点的normal。 一个incremental segmentation algorithm 我们展现说这个增量方案可以在10Hz的urban场景下进行全局定位,比起batch solution快了7.1倍。 1. Introduction 感知能力是很重要的。所以移动机器人经常会配备3D的time-of-filght的传感器来产生环境的精准重建。我们专注于3D点云的定位。可以在3D数据中做全局关联使得我们可以重建要给unified表达方式,不需要假设low drife,或者已知的相对起始点。 Contributions 基于segment matching的3D点云定位方法。 一组用来normal estimation, segmentation和recognition的增量算法。 incremental approach和batch solution在urban驾驶下的比较 2. Related Work a) Incremental point cloud segmentation [3]提出了稠密点云分割的区域生长方法。 对每个输入点云,分割只会做一次,还有后续的融合步骤

es架构

北战南征 提交于 2020-03-28 12:42:36
es是分布式的,存在很多节点,每个节点是以lucene为基础的。 分布式都是有主副分片的,分片是shard,主分片是primary_shard,副分片是replica_shard。一般是有几个节点就会有几个主分片,一个节点对应一个主分片,这是数据安全的考虑,一个主分片一般会有一到两个副分片,同一主副分片的分片是存储在不同的节点上的,这是为了数据完整性的考虑。对于消息应该存储到哪个分片中,这是由哈希值对主分片总数取余来确定的,当主分片和其一个副分片写入成功后,才会返回写入成功的响应。 每个分片其实是由很多个segment组成的。由commit文件来维护该分片中的segment组成。并且为了实现数据的高可靠性,数据从进入内存到写入segment,还需要经过translog和文件缓存。translog相当于内存中数据的备份,文件缓存是在写入磁盘中的segment之前的缓存。数据在写入内存之后,会先存入translog,生成文件缓存,文件缓存是为了保证服务的实时性而设计的,因为读写磁盘太慢,因此文件缓存也会加入到搜索范围使其可以被实时搜索到。文件缓存最后会生成一个新的segment。然后commit文件更新其segment的范围。从内存到文件系统默认是一秒一次。从内存到文件系统的动作称为refresh,es提供了接口/_refresh来实现主动刷新

ES写入数据/查询数据的工作原理

╄→гoц情女王★ 提交于 2020-03-25 13:23:45
一、ES写入数据 (选择 协调节点 —>根据文件进行路由转发给对应的 节点 —>节点的 主分片处理请求 —>数据同步到 副本分片 —>返回响应) 客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node (协调节点)。 coordinating node 对 document 进行 路由 ,将请求转发给对应的 node(有 primary shard)。 实际的 node 上的 primary shard 处理请求,然后将数据同步到 replica node 。 coordinating node 如果发现 primary node 和所有 replica node 都搞定之后,就返回响应结果给客户端。 二、 ES搜索数据过程 es 最强大的是做全文检索,就是比如你有三条数据 java真好玩儿啊 java好难学啊 j2ee特别牛 你根据 java 关键词来搜索,将包含 java 的 document 给搜索出来。es 就会给你返回:java真好玩儿啊,java好难学啊。 (协调节点 —> 分片对应的主分片或者副本分片—>返回文件id给协调节点—>根据文件id去个节点拉取实际数据) 客户端发送请求到一个 coordinate node 。 协调节点将搜索请求转发到 所有 的 shard 对应的 primary shard 或 replica

ConcurrentHashMap原理

不想你离开。 提交于 2020-03-23 21:30:51
转载地址:http://www.blogjava.net/xylz/archive/2010/07/20/326661.html 在上一篇中介绍了HashMap的原理,这一节是ConcurrentMap的最后一节,所以会完整的介绍ConcurrentHashMap的实现。 ConcurrentHashMap原理 在 读写锁章节部分 介绍过一种是用读写锁实现Map的方法。此种方法看起来可以实现Map响应的功能,而且吞吐量也应该不错。但是通过前面对 读写锁原理 的分析后知道,读写锁的适合场景是读操作>>写操作,也就是读操作应该占据大部分操作,另外读写锁存在一个很严重的问题是读写操作不能同时发生。要想解决读写同时进行问题(至少不同元素的读写分离),那么就只能将锁拆分,不同的元素拥有不同的锁,这种技术就是“锁分离”技术。 默认情况下ConcurrentHashMap是用了16个类似HashMap 的结构,其中每一个HashMap拥有一个独占锁。也就是说最终的效果就是通过某种Hash算法,将任何一个元素均匀的映射到某个HashMap的Map.Entry上面,而对某个一个元素的操作就集中在其分布的HashMap上,与其它HashMap无关。这样就支持最多16个并发的写操作。 上图就是ConcurrentHashMap的类图。参考上面的说明和HashMap的原理分析

ConcurrentHashMap 源码浅析 1.7

落花浮王杯 提交于 2020-03-23 15:38:18
简介 (1) 背景 HashMap死循环:HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry. HashTable效率低下:HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下.因为当一个线程访问HashTable的同步方法,其它线程也访问HashTable的同步方法时,会进入阻塞或轮询状态.如线程1使用put进行元素添加,线程2不但不能使用put方法添加元素,也不能使用get方法获取元素,所以竞争越激烈效率越低. (2) 简介 HashTable容器在竞争激烈的并发环境下表现出效率低下的原因是所有访问HashTable的线程都必须竞争一把锁,假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么多线程访问容器里不同的数据段时,线程间不会存在竞争,从而可以有效提高并发访问效率,这就是ConcurrentHash所使用的锁分段技术.首先将数据分成一段一段地储存,然后给每一段配一把锁,当一个线程占用锁访问其中一段数据时,其它段的数据也能被其它线程访问. 结构 ConcurrentHashMap是由Segments数组结构和HashEntry数组结构组成

Lintcode: Segment Tree Build

瘦欲@ 提交于 2020-03-21 07:40:00
The structure of Segment Tree is a binary tree which each node has two attributes start and end denote an segment / interval. start and end are both integers, they should be assigned in following rules: The root's start and end is given by build method. The left child of node A has start=A.left, end=(A.left + A.right) / 2. The right child of node A has start=(A.left + A.right) / 2 + 1, end=A.right. if start equals to end, there will be no children for this node. Implement a build method with two parameters start and end, so that we can create a corresponding segment tree with every node has