首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

Lucene查看全文
Lucene整体架构.jpg
Lucene是用Java语言开发的一款开源检索工具,提供了索引构建以及查询的能力。Lucene目前是Apache基金会jakarta项目组的一个子项目,除了作为SDK集成在业务应用中提供检索功能之外,ElasticSearch、Solr等全文搜索引擎都基于Lucene实现。

Lucene的索引结构可以分为索引,段,文档,域,词等几个层级。 索引(Index):索引是Lucene可以对外提供检索服务的基本单元,一个索引包含的文档通用具有相同的schema,这些文档经过分词建立索引文件之后存储在持久化存储,例如数据库或文件目录。 段(Segment):一个索引可以包含多个彼此独立的段。Lucene进行关键词检索时需要加载所有的段,索引段较多会增加I/O开销,减慢检索速度,Lucene提供了段合并策略定期对段进行合并。 文档(Document):文档是需要建立索引的数据,文档一般有会多个字段,这些字段建立索引之后存储在Index的Segment中。 域(Field):文档一般会包含多种不同的字段,这些字段在建立索引的过程会会有不同的属性,例如是否需要存储,是否需要分词等。 词(Item):Lucene会通过分词器将字段中的字符串拆分成词序列,这些词会以倒排索引的形式存储在索引中。 lucene框架的使用流程一般分为创建索引以及查询检索两部分。 首先建立索引,Lucene采用倒排索引存储词到文档的信息。除了倒排索引之外,Lucene对索引中的词(Item)通过压缩结构建立表字典表,字典表可以定位一个词在倒排索引中的位置。

检索过程首先对输入进行分词,然后分别检索这些词对应的文档,通过一定的合并策略(交集或者并集)再加上加分机制返回结果…
切片【Golang】查看全文
切片结构图.png
一般编程语言的数组都是静态大小的,由列表等数据结构提供动态大小的线性数据结构。但是Golang语言提供了可以自动扩容的动态数组——切片(Slice),切片支持追加,遍历,截取、随机访问等能力。

Golang中的切片由切片数据结构以及底层数组构成。 Golang的数据结构是一个值类型的结构体,包含的信息如下: 指向底层数组的指针,切片结构体本身不存储数据,数据都存储在底层的数组上。 切片的长度指切片中元素的个数。 切片的容量是指底层数组可以容纳的元素个数。 切片中元素不一定是从数组的起始位置开始的,所以切片的容量不一定是底层数组的长度,而是底层数组长度减去第一个元素的位置。 多个切片可以复用底层的同一个数组,所以对数组中数值的修改会反应在每个应用它的切片上。 当append数据,切片底层的数组长度不足时,会启动扩容的机制,产生一个新的数组,将数据拷贝到新的数组上。 Golang也提供数组类型的数据结构,数组是长度是不可变化的,需要在声明数组的时候确定的长度的值,一般是传入明确的数组长度或者通过数组的值而确定数组的长度。 切片的声明和数组类似,但是不需要传入切片的长度,或者通过make方式构建,此时传入一个初始长度。

切片不能使用“==”进行比较,所以切片不能作为map结构的Key。
Paxos查看全文
Paxos的两阶段.png
Paxos是一种共识算法,共识算法往往用作分布式系统下实现一致性的一种手段。

Paxos是Leslie Lamport在1990提出的,Lamport在文中虚构了一个希腊城邦 Paxos 来阐述该理论,因为论文未和审稿人就修改意见达成一致,该文章未能在当年进行发表。 在 1998 年和 2001 年,Lamport分别写了两篇论文,《The Part-Time Parliament》和《Paxos Made Simple》来解释Paxos协议。 Paxos将共识算法分为了两个阶段,分别是投票阶段和审议阶段,通过两个阶段在集群中半数以上的结点完成一致性的共识。 名词解释 共识算法是保证分布式集群中多个结点达到最终一致性的算法。 共识算法不能解决拜占庭问题(数据的丢失以及错误问题) 保证多个结点数据一致性可以通过下列方式: Paxos将结点分为提议者( Proposer ),接收者( Acceptor ),学习者(Learner)。在提交数据的时候除了提交的值之外,还会提交递增的版本号。 结点类型 流程 Paxos将写入流程分为两个阶段,第一个阶段是投票阶段,第二个阶段是执行阶段。 投票 Paxos的第一阶段是Proposer发起提议,提议的过程中Proposer会结合Acceptor的返回判断是否进行第二阶段的提交操作。 Proposer发起某个版本的提议。 Acceptor接收Proposer的提议,Acceptor会记录之前Proposer提交的数据版本,并且将之前保存的数据版本以及已经接收的值返回给Proposer。

Proposer接收到Acceptor的返回之后,有两种情况会直接放弃提议…

热门分类

算法题库

精选内容