打破常规!加入创业广告,轻松创造财富

打破常规!加入创业广告,轻松创造财富

在当今的数字化时代,越来越多的人选择通过广告创业,寻求商业财富的突破。广告行业已成为市场需求和社会发展的驱动力,它对于推动经济的增长和创造就业机会起到了至关重要的作用。本文将从4个方面对此主题进行详细阐述。

方面1:创业广告的趋势与前景

创业广告已经成为了当下最火热的趋势之一。这是因为广告行业日益成熟,创业广告团队利用其经验和技能帮助初创企业们获得更多的市场机会。同时,随着电子商务和移动互联网的兴起,创业广告也可以轻松地扩展至全球市场。在未来几年里,创业广告将继续成为一个繁荣的市场,带来更多的机会和成功案例。广告已经成为现代市场经济的基础,为企业提供了无数的展示和推销机会。因此,创业广告团队越来越多地受到了市场的青睐。创业广告的趋势预测是一个日益增长的市场。在这个市场上,秉承着创新和技术优势的公司将能够占据更多的市场份额,创造更多的财富。

方面2:创业广告的特点和优势

创业广告的特点在于其个性化和专业化的服务。随着市场竞争的加剧,企业需要定制化且专业的广告服务。创业广告团队通过了解市场和客户的需求,为客户提供全方位、全球化、高品质的广告服务。此外,创业广告相较于传统广告有更高的效率和更低的成本,这是由于创业广告团队专注于创新技术和创新思维,寻找更好地方式将广告精准投放到潜在客户中。在这个竞争激烈的市场中,创业广告的优势也越来越突出。创业广告团队专注于客户需求,创新技术达到最大的广告效果。相较于传统广告,创业广告更加灵活,可以针对不同的市场需求进行个性化的流程处理。此外,创业广告可以为客户提供全方位的广告服务,通过提高广告的精准性和投放效果,提高客户的转化率和购买率。

方面3:如何选择创业广告团队

选择一个靠谱、专业和创新的创业广告团队是至关重要的。在选择创业广告团队时,以下因素应该被优先考虑:首先,该团队需要具备一定的经验和创新能力;其次,该团队的专业技能和服务质量应得到客户的认可。此外,创业广告团队应该有一个强大的技术支持团队,以保证广告的精准投放和收益的最大化。在选择创业广告团队时,最重要的是要选择一支真正懂得市场和客户需求的团队。这些专业团队将能够为企业提供全方位的广告服务,从而提高企业的市场占有率和较高的收益率。此外,创业广告团队应该在推广方面采用一些创新、节约成本的策略,拥有一些独特的技术和创新的思维。

方面4:创业广告的未来前景

创业广告未来的前景非常乐观。随着大家对创新和个性化服务的需求增加,创业广告将继续成为一个繁荣的市场。创业广告团队将继续通过其创新、技术和专业,为客户提供更好的解决方案。同时,随着移动互联网的普及,创业广告将继续向移动端转移,为广告行业带来更大的市场机遇和财富。未来,创业广告领域将继续发挥其重要作用,为企业和消费者提供更好的服务和体验。创业广告团队将继续保持创新和技术领先的优势,为企业推广和营销提供帮助,带动经济的良性增长。

总结

本文从创业广告的趋势与前景、创业广告的特点和优势、如何选择创业广告团队以及创业广告的未来前景四个方面对其做了详细的阐述。创业广告在现代社会中已经成为了市场需求和社会发展的驱动力,它对于推动经济的增长和创造就业机会起到了至关重要的作用。在未来的发展中,创业广告团队将继续通过其创新、技术和专业,为客户提供更好的解决方案,带动经济的良性发展。问答话题:1、什么是创业广告?答:创业广告是一种通过了解市场和客户需求,为客户提供个性化、专业化、全球化、高品质的广告服务的行业。其特点在于个性化服务和专业化服务,相较于传统广告更加灵活和具有高效率优势,同时可以为广告客户提供全方位的服务。2、如何选择创业广告团队?答:选择一个靠谱、专业和创新的创业广告团队是至关重要的,应该优先考虑该团队的经验和创新能力、专业技能和服务质量以及技术支持团队的强大性。在选择之前,客户还需要了解该团队的案例和业务,以确保其能够满足自己的需求。

打破常规!加入创业广告,轻松创造财富随机日志

「缘分速配」功能全新上线:匹配附近真实帅哥美女,即刻畅聊!

1、注册免押金,新用户免费用车,还不快来;

2、可以为用户推荐附近的用户为好友,让彼此见面聊天更方便,大同小异的生活环境,让彼此有更多聊天话题。

3、关闭追评并增加评价个月内支持修改功能。

4、全新设计,上手操作更简单,新增抖音手机开播模式,0粉也能使用电脑开播,一键轻松实现多直播间同时开播,视频直播功能让带货更给力更多,绿幕直播、画中画直播也能轻松实现收起

5、界面锁屏,即锁定屏幕,可有效避免不必要的横竖屏切换影响正常视频预览和不断移动中的操作体验。

<随心_句子c><随心_句子c><随心_句子c><随心_句子c><随心_句子c>放(fang)棄(qi)ElasticSearch,GitHub從(cong)零(ling)打(da)造(zao)搜(sou)索(suo)引(yin)擎(qing)!2億(yi)代(dai)碼(ma)倉(cang)庫(ku)怎(zen)麽(me)搜?

新(xin)智(zhi)元(yuan)報(bao)道(dao)

編(bian)輯(ji):LRS

【新智元導(dao)讀(du)】目(mu)前(qian)GitHub新版(ban)搜索引擎已(yi)經(jing)處(chu)於(yu)測(ce)試(shi)階(jie)段(duan),只(zhi)需(xu)18小(xiao)時(shi)即(ji)可(ke)建(jian)完(wan)4500萬(wan)個(ge)代码库的(de)索引。

2021年(nian)12月(yue),GitHub發(fa)布(bu)了(le)壹(yi)次(ci)技(ji)術(shu)預(yu)覽(lan)(technology preview),針(zhen)對(dui)GitHub代码搜索「啥(sha)也(ye)搜不(bu)出(chu)來(lai)」的問(wen)題(ti)進(jin)行(xing)了一次全(quan)面(mian)優(you)化(hua)。

去(qu)年11月,在(zai)GitHub Universe開(kai)发者(zhe)大(da)會(hui)上(shang),官(guan)方(fang)再(zai)次发布了公(gong)开测试版,主(zhu)要(yao)解(jie)決(jue)开发者尋(xun)找(zhao)、閱(yue)读和(he)导航(hang)代码的问题。

在大会上,有(you)人(ren)问了一个重(zhong)要的问题,「代码搜索」改(gai)进背(bei)後(hou)的原(yuan)理(li)到(dao)底(di)是(shi)什(shen)么?

最(zui)近(jin),GitHub发布了一篇(pian)博(bo)客(ke),詳(xiang)細(xi)解釋(shi)了新模(mo)型(xing)背后的技术原理和系(xi)統(tong)架(jia)構(gou)。

从零打造GitHub搜索引擎

簡(jian)單(dan)来說(shuo),新搜索引擎的背后就(jiu)是研(yan)究(jiu)人員(yuan)用(yong)Rust重新编寫(xie)的一个輪(lun)子(zi),專(zhuan)門(men)针对代码搜索进行优化,代號(hao)黑(hei)鳥(niao)(Blackbird)。

乍(zha)一看(kan),从零开始(shi)构建搜索引擎似(si)乎(hu)是一个令(ling)人費(fei)解的决定(ding):為(wei)什么要从頭(tou)再来?現(xian)有的开源(yuan)解决方案(an)不是已经很(hen)多(duo)了嗎(ma)?为什么還(hai)要再浪(lang)费精(jing)力(li)造一个新的東(dong)西(xi)?

實(shi)際(ji)上GitHub一直(zhi)在嘗(chang)试使(shi)用现有的解决方案来解决搜索问题,但(dan)不巧(qiao)的是,用于通(tong)用文(wen)本(ben)搜索的產(chan)品(pin)很難(nan)適(shi)配(pei)到「代码」搜索上。由(you)于索引速(su)度(du)太(tai)慢(man),导致(zhi)用戶(hu)體(ti)驗(yan)很差(cha),並(bing)且(qie)所(suo)需的服(fu)務(wu)器(qi)數(shu)量(liang)很大,運(yun)行成(cheng)本也過(guo)高(gao)。

雖(sui)然(ran)有一些(xie)較(jiao)新的、专门适配于代码搜索的开源項(xiang)目,但它(ta)們(men)仍(reng)然不适合(he) GitHub這(zhe)么大規(gui)模的代码库。

基(ji)于上述(shu)觀(guan)察(cha),GitHub的开发者設(she)定的目標(biao)和結(jie)論(lun)主要有三(san)个:

1. 用户在搜索过程(cheng)中(zhong)能(neng)夠(gou)得(de)到全新的体验,可以(yi)通过提(ti)出一些代码上的问题来疊(die)(die)代搜索、瀏(liu)览、导航(navigate)和阅读代码来得到答(da)案。

2. 代码搜索與(yu)通用文本搜索之(zhi)間(jian)有著(zhe)許(xu)多不同(tong)之处。

开发者编写代码是为了讓(rang)機(ji)器理解,所以代码搜索的过程應(ying)該(gai)利(li)用上代码的结构和相(xiang)關(guan)性(xing);并且用户可能会搜索标點(dian)符(fu)号(例(li)如(ru),句(ju)号、开括(kuo)号等(deng)代码中的操(cao)作(zuo)符);不要对代码中的詞(ci)做(zuo)词幹(gan)分(fen)析(xi)(stemming);不要从query中刪(shan)除(chu)停(ting)止(zhi)词;或(huo)者使用正(zheng)則(ze)表(biao)達(da)式(shi)进行搜索。

3. GitHub 的规模確(que)实是一个獨(du)特(te)的挑(tiao)戰(zhan)。

舊(jiu)版本的搜索引擎使用的是Elasticsearch,第(di)一次部(bu)署(shu)的时候(hou)花(hua)了幾(ji)个月的时间来索引GitHub上的所有代码(當(dang)时大約(yue)有800万个代码库),但现在代码仓库数量已经超(chao)过了2亿,而(er)且这些代码还不是靜(jing)態(tai)的:开发者不斷(duan)提交(jiao),代码也在不断變(bian)化,对于构建搜索引擎来说非(fei)常(chang)具(ju)有挑战性。

目前在测试版中,用户可以搜索大约4500万个代码库,包(bao)含(han)115TB的代码和155亿个文檔(dang)。

綜(zong)上所述,现成的东西滿(man)足(zu)不了需求(qiu),所以,从零开始再造一个。

试试Grep?

在搜索的时候,一个常用的工(gong)具就是「grep」,通过輸(shu)入(ru)表达式,就能在文本中进行匹(pi)配,所以为什么不干脆(cui)用grep蠻(man)力解决搜索问题?

为了回(hui)答这个问题,可以先(xian)計(ji)算(suan)一下(xia)用ripgrep对115TB的代码进行匹配需要多長(chang)时间。

在一臺(tai)配備(bei)8核(he) Intel CPU 的机器上,ripgrep 可以在2.769秒(miao)內(nei)(约0.6 GB/sec/core)对緩(huan)存(cun)在内存中的13 GB 文件(jian)运行正则表达式查(zha)詢(xun)。

简单的计算后就能发现,对于当下的海(hai)量数據(ju)来说,该方法(fa)是行不通的:假(jia)设代码搜索程序(xu)运行在一个擁(yong)有32台服务器的集(ji)群(qun)上,每(mei)台机器有64个核心(xin),即使把(ba)115TB的代码全放到内存裏(li),并且一切(qie)运行順(shun)利,2,048个 CPU 核大概(gai)需要96秒跑(pao)完「一个」query,而且只能是一个,其(qi)他(ta)用户得排(pai)隊(dui),也就是说只有QPS是0.01的話(hua)才(cai)能用grep

所以蛮力走(zou)不通,只能先建一个索引。

搜索索引(serach index)

只有以索引的形(xing)式预先计算好(hao)相关信(xin)息(xi)后,才能让搜索引擎在查询时快(kuai)速響(xiang)应,简单来说,索引就是一个key-value映(ying)射(she),在倒(dao)排索引(inverted index)的情(qing)況(kuang)下,key就是一个关鍵(jian)词,value就是出现该词的有序文档ID列(lie)表。

在代码搜索任(ren)务中,研究人员用到了一種(zhong)特殊(shu)類(lei)型的倒排索引,即ngram索引。

一个 ngram 是长度为 n 的字(zi)符序列,例如 n = 3(trigams)意(yi)为key的最大长度只能是3,对于较长的key来说,就需要按(an)照(zhao)长度3进行切割(ge),比(bi)如limits就被(bei)分为lim, imi, mit和its

執(zhi)行搜索时,综合多个key的查询结果(guo),合并后得到该字符串(chuan)所出现的文档列表

下一个问题是如何(he)在相对合理的时间内完成索引的构建。

研究人员观察到:Git 使用内容(rong)寻址(zhi)散(san)列,以及(ji) GitHub 上实际上有相当多的重復(fu)内容,所以研究人员提出下面兩(liang)个方法建立(li)索引。

1. shard by Git blob object ID提供(gong)了一种在 shards 之间均(jun)勻(yun)分布文档的好方法,并且可以避(bi)免(mian)重复,同时能够根(gen)据需要隨(sui)时擴(kuo)展(zhan)shards的数量。

2. 將(jiang)索引建模为樹(shu),并使用差分编码(delta encoding)来減(jian)少(shao)crawling的数量并优化索引中的元数据,其中元数据包括文档出现的位(wei)置(zhi)列表(哪(na)个path、分支(zhi)和代码库)以及关于这些对象(xiang)的信息(代码库名(ming)稱(cheng)、所有者、可見(jian)性等)。对于一些熱(re)门仓库来说,元数据量可能会相当大。

GitHub还设计了一个系统,使得查询结果与提交后的代码保(bao)持(chi)一致。

如果用户在團(tuan)队成员推(tui)送(song)代码时搜索代码库,那(na)么在系统完全处理完新提交的文档之前,搜索结果中不应该包含这些文档,Blackbird将commit查询一致性作为其设计的核心部分。

Blackbird

下面是Blackbird搜索引擎的架构圖(tu)。

首(shou)先,Kafka会提供events来指(zhi)定索引的内容,然后就会有大量的爬(pa)蟲(chong)(crawler)程序与Git进行交互(hu),其中还有一个从代码中提取(qu)符号的服务;再次使用Kafka对每个shard进行索引,獲(huo)取目标文档。

虽然该系统只是响应像(xiang)「git push」来抓(zhua)取更(geng)改内容等类似的事(shi)件,但在首次ingest所有代码库时还需要做一些額(e)外(wai)的工作。

该系统的一个关键特性就是对初(chu)始ingest顺序的优化以充(chong)分利用增(zeng)量编码。

GitHub使用了一种全新的概率(lv)数据结构来表示(shi)代码库的相似性,并且通过从代码库相似性图的一个最小生(sheng)成树的水(shui)平(ping)顺序遍(bian)歷(li)中计算得到ingest的顺序。

基于优化后的ingest顺序,delta 树的构建过程就是将每个代码库与其父(fu)代码库进行差分,这也意味(wei)着该系统只需要抓取当前代码库所特有的 blobs,爬取包括从 Git 获取 blob 内容,分析后提取符号,以及創(chuang)建将作为索引输入的文档。

然后将这些文件发布到另(ling)一个Kafka主题中,也是在shards之间将数据分區(qu)的地(di)方。每个shards使用主题中的一个Kafka分区。

使用Kafka可以将索引与crawl解耦(ou),并且Kafka中对消(xiao)息的排序也可以也可以使得查询结果一致。

然后,indexer shards找到这些文档并构建索引:tokenizing内容、符号和path以构造 ngram indices和其他有用的indices(語(yu)言(yan)、所有者、代码库等) ,并将结果刷(shua)新到磁(ci)盤(pan)上。

最后,对shards进行壓(ya)縮(suo)(compaction),将较小的索引折(zhe)叠成较大的索引,这樣(yang)查询起(qi)来更有效(xiao),移(yi)動(dong)起来也更容易(yi)。

query的生命(ming)周(zhou)期(qi)

有了索引之后,通过系统跟(gen)蹤(zong)query就变得简单了,每个query都(dou)是一个正则表达式,可以写作「/arguments?/ org:rails lang:Ruby」,即查找一个由Rails組(zu)織(zhi)用Ruby语言编写的代码。

在 GitHub.com 和shards之间还有一个服务,負(fu)責(ze)協(xie)調(tiao)接(jie)收(shou)用户query,并将請(qing)求分散到搜索集群中的每个主机上,最后使用 Redis 来管(guan)理磁盘空(kong)间(quotas)和缓存一些訪(fang)问控(kong)制(zhi)数据。

前端(duan)接受(shou)一个用户查询并将其傳(chuan)遞(di)給(gei)黑鸟,然后将query解析为一个抽(chou)象语法树,将其重写为规範(fan)的语言 ID,并在额外的子句上标記(ji)權(quan)限(xian)和范圍(wei)。

下一步(bu)将发送 n 个并发请求: 向(xiang)搜索集群中的每个shard发送一个,系统中设定的sharding策(ce)略(lve)就是向集群中的每个shard发送查询请求。

然后,在每个单独的shard上对查询进行一些轉(zhuan)換(huan)以便(bian)在索引中查找信息。

最后聚(ju)合所有shard返(fan)回的结果,按分数重新排序,篩(shai)選(xuan)(再次檢(jian)查权限) ,并返回 top 100,然后GitHub.com 的前端进行语法突(tu)顯(xian)、术语高亮(liang)、分頁(ye),最后我(wo)们才能将结果呈(cheng)现给页面。

实际使用中,单个shard的p99响应时间大约是100ms,但是由于聚合response、检查权限以及语法突显等原因(yin),總(zong)的响应时间要长一些。

一个query在索引服务器上占(zhan)用一个 CPU 核心100毫(hao)秒,因此(ci)64个核心主机的上限大约是每秒640个查询。与 grep 方法(0.01 QPS)相比,这种方法可以说是相当快了。

总结

完整(zheng)的系统架构介(jie)紹(shao)完以后,可以重新来審(shen)視(shi)一下问题的规模了。

GitHub的ingest pipeline每秒可以发布大约12万个文档,因此全部处理完155亿个文档需要大约36个小时;但是增量索引(delta indexing)可以降(jiang)低(di)所需抓取的文档数量的50%以上,使得整个过程可以在大约18小时内重新索引整个语料(liao)库。

在索引规模方面取得了一些突破(po),初始的内容量为115TB,删除重复内容、使用增量索引后将内容的数量减少到28TB左(zuo)右(you)。

而索引本身(shen)只有25TB,其中不僅(jin)包括所有索引(含ngram) ,还包括所有唯(wei)一内容的压缩副(fu)本,这也意味着包括内容在内的总索引大小大约只有原始数据大小的四(si)分之一!

參(can)考(kao)資(zi)料:

https://github.blog/2023-02-06-the-technology-behind-githubs-new-code-search/返回搜狐(hu),查看更多

责任编辑:

发布于:安徽蚌埠禹会区