当前位置: 首页 > 软件库 > 大数据 > 其他 >

SF1R

海量数据引擎
授权协议 Apache
开发语言 C/C++
所属分类 大数据、 其他
软件类型 开源软件
地区 国产
投 递 者 越安翔
操作系统 Windows
开源组织
适用人群 未知
 软件概览

什么是SF1R

SF1R是一个分布式的存储搜索一体化海量数据引擎。SF1R来自于iZENECloud团队多年的研发成果,并且已经在商业网站上经受住了严苛的考验。2014年,iZENECloud团队把SF1R开放给社区,采用Apache License 2,希望共同改进和维护。

Note

SF1R的全称是Search Formula 1 Revolution,SF1R是iZENECloud团队给搜索引擎项目使用的内部代号。

SF1R的历史和特色

SF1R是一个存在多年的项目,完全基于C++语言开发,最新的master分支已经可以用C++ 11编译。SF1R在早期开发时,参考了流行的Lucene的索引设计,并进行了若干改进,这里边包括实时索引,以及更好的压缩手段如PForDelta以及NewPFor。然而在使用过程中,我们发现Lucene这种完全基于文件的索引应对高并发和低延迟方面不具有优势,鉴于绝大多数大规模搜索引擎的索引均完全放置于内存中,iZENECloud团队又给SF1R添加了两种索引Zambezi和Suffix,这2种索引均是业界最佳的设计,大大提升了SF1R的性能,在后边将分别提到。iZENECloud团队在根据需求不断调整SF1R的过程中,给SF1R添加了众多的功能,包括各种数据挖掘特性,以及集成了推荐引擎,使之成为一个庞大的搜索,存储,推荐,挖掘一体化引擎,项目也因此变得臃肿不堪。因此,在2014年,iZENECloud团队针对老版本的SF1R进行了大量裁剪,把不需要的数据挖掘,以及推荐引擎都从项目里删除,只留下搜索和存储,这就是SF1R-Lite项目,感兴趣的朋友可以从提交历史里恢复这些裁剪。

为什么采用SF1R

社区目前绝大多数应用都已经采用Lucene,以及基于Lucene的一系列搜索解决方案比如Solr和ElasticSearch,这些搜索方案经过十多年很多人的改进,在通用化方面已经非常优秀。那么基于此,为什么还要再采用新的搜索方案呢? 这里边有3个原因:首先,基于Java的搜索方案,在面临高压力场景时,由于GC的存在而时常有延迟抖动发生,SF1R在实际应用中,可以做到跑满全部CPU(例如16核),并且7*24不间歇的运转而没有上述抖动;其次,SF1R采用的2种内存索引,在性能上远高于常规方案,更能满足对性能要求苛刻的应用,在实际应用中,SF1R曾经在单一节点上部署和索引了上亿文档,仍然提供快速响应;第三,SF1R是一个完整的服务端引擎,可以方便的对索引和其他功能进行扩展。相比Lucene社区的庞大代码仓库,SF1R的项目要精简得多,因此更加便于针对特定场景进行修改和维护,这从SF1R支持3种索引结构就可以看出,此外,针对广告检索,SF1R也可以方便扩充第4种索引,这些都是传统搜索解决方案Lucene不具备的。

Zambezi索引

Zambezi索引来自于 Zambezi 项目,索引的原理可以参考相关的论文,这是传统倒排索引结构里的最佳设计之一,因为它可以做到在提供实时搜索的功能下不损失查询性能,因此非常适合作为Twitter或者微博搜索服务。在引入Zambezi到SF1R的过程中,iZENECloud团队又进行了若干改进,这里边包含:原始Zambezi索引完全为Twitter类查询服务,因此,对于不常见的词(比如在少于128个文档里出现),原始设计进行了剪枝,既无法在索引中搜索到。iZENECloud团队的改进去掉了这种限制;此外,iZENECloud团队还引入了一些最新的索引压缩技术并且加以改进,比如 SIMD intersection ,使之具备最高速的解压方案。

Suffix索引

Suffix索引采用了罕见的Succinct Self Index结构,基础设施是Suffix Array和Wavelet Tree,具备完全不同于倒排索引的结构,相关的原理可以参见SF1R的技术报告。Suffix索引具备远高于传统索引的查询性能,缺点是构建的时候需要占用大量内存,并且无法支持增量。

  • 什么是SF1R SF1R是一个分布式的存储搜索一体化海量数据引擎。SF1R来自于iZENECloud团队多年的 研发成果,并且已经在商业网站上经受住了严苛的考验。2014年,iZENECloud团队把SF1R 开放给社区,采用Apache License 2,希望共同改进和维护。 Note SF1R的全称是Search Formula 1 Revolution,SF1R是iZENECloud团队给

  • 什么是sf对象? 本人最近看国内博文,很少有介绍R语言中sf对象的文章。而sf对象是R语言地图绘制的重要工具,在国外已经介绍和使得非常普遍了,国内现在这样让我这个学习者查资料很不方便,很多时候不得不想办法看国外网站内容,网速慢不说,还要花monney。再加上我每次想下载CSDN网站上的资源时,都苦于没有c币,所以想来写写,希望能有意外收获。 那么,到底什么是sf对象呢?sf即simple feat

  • 谷歌地球的数据导入R语言可以直接用st_read命令生成sf类型的对象。通常情况下使用是没有问题的。但是实际上,与在R语言内部直接通过坐标点生成的sf类型对象或者读入shp等矢量数据得到的sf对象不同,kml格式的数据空间维度是XYZ 而并非XY ,也即多了一个Z维度。在与XY维度的数据混在一个数据框中构建一个sf对象时,会发生一些莫名其妙的错误。所以,还是需要对数据进行清洗和重组,以下是我的解决

  • geom_sf()绘制地图坐标转化 坐标转换在上一篇设置ylim中有提及,一些网站也附在里面。总体来说,用sf::st_read()读入数据后,首先用st_crs()看看有无空间参考坐标信息。如果没有,若不想用coord_sf()的自定义设置,可以用st_set_crs(),进行设置。如果有,则用st_transform_crs(x,crs)进行转换。crs参数直接用epgs码即可,在上一篇内容附

  • 通过META-INF/.SF文件区分apk是V1还是V2签名的方法如下:     如果.SF文件抬头包含X-Android-APK-Signed: 2,则表明该apk是V1和V2混合签名;     如果.SF文件抬头不包含X-Android-APK-Signed: 2,则表明该apk是纯V1签名;     如果连.SF文件都没有,则表明该apk是纯V2签名;         验证办法:     1

 相关资料
  • 备忘 1 GB: 十亿个字节(Byte) 1(B) * 10*10^8 / 1024 / 1024 ≈ 953.67(MB) ≈ 1000(MB) ≈ 1(GB) 400 MB: 一亿个 4 字节(Byte) int 整型占用的内存 4(B) * 10^8 / 1024 / 1024 ≈ 381.57(MB) ≈ 382(MB) ≈ 400(MB) 10 亿个整型 -> 400(MB) * 10

  • 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢? 针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/trie树。 针对空间,无非就一个办法:大而化小,分而治之(hash映射)。 二、算法/数据结构基础 1.

  • 方法介绍 倒排索引是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射,常被应用于搜索引擎和关键字查询的问题中。 以英文为例,下面是要被索引的文本: T0 = "it is what it is" T1 = "what is it" T2 = "it is a banana" 我们就能得到下面的反向文件索引: "a": {2} "banana":

  • 技术一面 1,自我介绍 2,做过最难的一个功能模块,遇到最难的问题 3,现场做一道设计题,比较T1,T2两个表的数据,找出ID相同的数据(1)数据大小256M;(2)数据大小为4G; 4,面向对象的特征,如何实现多态。

  • 方法介绍 当遇到大数据量的增删改查时,一般把数据装进数据库中,从而利用数据的设计实现方法,对海量数据的增删改查进行处理。

  • 我有大量的数据( 另外,是否是合适的数据结构?或者另一种数据结构会提供更好的复杂性 注意:我不能使用,因为如果使用,也可能存在重复项。查找中值将增加复杂性,因为我将从开始到中间循环以获取其值。