0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

億級(jí)ES數(shù)據(jù)搜索性能優(yōu)化

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 2023-05-26 14:55 ? 次閱讀

1

背景

2020年以來(lái)內(nèi)容標(biāo)注結(jié)果搜索就是社區(qū)中后臺(tái)業(yè)務(wù)的核心高頻使用場(chǎng)景之一,為了支撐復(fù)雜的后臺(tái)搜索,我們將社區(qū)內(nèi)容的關(guān)鍵信息額外存了一份到Elasticsearch中作為二級(jí)索引使用。隨著標(biāo)注業(yè)務(wù)的細(xì)分、迭代和時(shí)間的推移,這個(gè)索引的文檔數(shù)和搜索的RT開(kāi)始逐步上升。 下面是這個(gè)索引當(dāng)前的監(jiān)控情況。 2e89cb94-fb6b-11ed-90ce-dac502259ad0.png

本文介紹社區(qū)利用IndexSorting,將億級(jí)文檔搜索性能由最開(kāi)始2000ms優(yōu)化到50ms的過(guò)程。如果大家遇到相似的問(wèn)題和場(chǎng)景,相信看完之后一定能夠一行代碼成噸收益。

2

探索過(guò)程

2.1 初步優(yōu)化

最開(kāi)始需求很簡(jiǎn)單,只需要最新發(fā)布的動(dòng)態(tài)分頁(yè)展示。這時(shí)候?qū)崿F(xiàn)也是簡(jiǎn)單粗暴,滿(mǎn)足功能即可。查詢(xún)語(yǔ)句如下:

GET /content-alias/_search
{
  "track_total_hits": true,
  "sort": [
    {
      "publish_time": {
        "order": "desc"
      }
    }
  ],
  "size": 10
}

由于首頁(yè)加載時(shí)沒(méi)加任何篩選條件,于是變成了從億級(jí)內(nèi)容庫(kù)中找出最新發(fā)布的10條內(nèi)容

針對(duì)這個(gè)查詢(xún)很容易發(fā)現(xiàn)問(wèn)題出現(xiàn)在大結(jié)果集的排序,要解決問(wèn)題,自然的想到了兩條路徑:

去掉sort

縮小結(jié)果集

經(jīng)過(guò)用戶(hù)訴求和開(kāi)發(fā)成本的權(quán)衡后,當(dāng)時(shí)決定“先扛住,再優(yōu)化”:在用戶(hù)打開(kāi)首頁(yè)的時(shí)候,默認(rèn)增加“發(fā)布時(shí)間在最近一周內(nèi)”的篩選條件,這時(shí)語(yǔ)句變成了:

GET /content-alias/_search
{
  "track_total_hits": true,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "publish_time": {
              "gte": 1678550400,
              "lt": 1679155200
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "publish_time": {
        "order": "desc"
      }
    }
  ],
  "size": 10
}

這個(gè)改動(dòng)上線(xiàn)后,效果可以說(shuō)是立竿見(jiàn)影,首頁(yè)加載速度立馬降到了200ms以?xún)?nèi),平均RT60ms。這次改動(dòng)也為我們減小了來(lái)自業(yè)務(wù)的壓力,為后續(xù)的優(yōu)化爭(zhēng)取了不少調(diào)研的時(shí)間。

雖然搜索首頁(yè)的加載速度明顯快了,但是并沒(méi)有實(shí)際解決根本問(wèn)題——ES大結(jié)果集指定字段排序還是很慢。對(duì)業(yè)務(wù)來(lái)說(shuō),結(jié)果頁(yè)上的一些邊界功能的體驗(yàn)依舊不能盡如人意,比如導(dǎo)出、全量動(dòng)態(tài)的搜索等等。這一點(diǎn)從監(jiān)控上也能夠較明顯的看出:慢查詢(xún)還是存在,并且還伴隨著少量的接口超時(shí)。

2e95414a-fb6b-11ed-90ce-dac502259ad0.png

老實(shí)說(shuō)這個(gè)時(shí)期我們對(duì)于ES的了解還比較基礎(chǔ),只能說(shuō)會(huì)用、知道分片、倒排索引、相關(guān)性打分,然后就沒(méi)有了??傊覀冇辛朔较颍_(kāi)始奮起直追。

2.2 細(xì)致打磨

2.2.1 知識(shí)積累

帶著之前遺留的問(wèn)題,我們開(kāi)始開(kāi)始重新出發(fā),從頭學(xué)習(xí)ES。要優(yōu)化搜索性能,首先我們要知道的是搜索是怎么做的。下面我們就以一個(gè)最簡(jiǎn)單的搜索為例,拆解一下整個(gè)搜索請(qǐng)求的過(guò)程。

(1)搜索請(qǐng)求

GET /content-alias/_search
{
  "track_total_hits":false,
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "category_id.keyword": "xxxxxxxx"
          }
        }
      ]
    }
  }, 
  "size": 10
}

精確查詢(xún)category_id為"xxxxxxxx"的文檔,取10條數(shù)據(jù),不需要排序,不需要總數(shù)

總流程分3步:

客戶(hù)端發(fā)起請(qǐng)求到Node1

Node1作為協(xié)調(diào)節(jié)點(diǎn),將請(qǐng)求轉(zhuǎn)發(fā)到索引的每個(gè)主分片或副分片中,每個(gè)分片在本地執(zhí)行查詢(xún)。

每個(gè)節(jié)點(diǎn)返回各自的數(shù)據(jù),協(xié)調(diào)節(jié)點(diǎn)匯總后返回給客戶(hù)端

如圖可以大致描繪這個(gè)過(guò)程:

2e9e6b4e-fb6b-11ed-90ce-dac502259ad0.png

我們知道ES是依賴(lài)Lucene提供的能力,真正的搜索發(fā)生在Lucene中,還需要繼續(xù)了解Lucene中的搜索過(guò)程。

(2)Lucene

Lucene中包含了四種基本數(shù)據(jù)類(lèi)型,分別是:

Index:索引,由很多的Document組成。

Document:由很多的Field組成,是Index和Search的最小單位。

Field:由很多的Term組成,包括Field Name和Field Value。

Term:由很多的字節(jié)組成。一般將Text類(lèi)型的Field Value分詞之后的每個(gè)最小單元叫做Term。

在介紹Lucene index的搜索過(guò)程之前,這里先說(shuō)一下組成Lucene index的最小數(shù)據(jù)存儲(chǔ)單元——Segment。

Lucene index由許許多多的Segment組成,每一個(gè)Segment里面包含著文檔的Term字典、Term字典的倒排表、文檔的列式存儲(chǔ)DocValues以及正排索引。它能夠獨(dú)立的直接對(duì)外提供搜索功能,幾乎是一個(gè)縮小版的Lucene index。

(3)Term字典和倒排表

2ea8d714-fb6b-11ed-90ce-dac502259ad0.png

上圖是Term字典和其倒排表的大致樣子 當(dāng)然這里還有些重要數(shù)據(jù)結(jié)構(gòu),比如:

FST:term索引,在內(nèi)存中構(gòu)建??梢钥焖賹?shí)現(xiàn)單Term、Term范圍、Term前綴和通配符查詢(xún)。

BKD-Tree:用于數(shù)值類(lèi)型(包括空間點(diǎn))的快速查找。

SkipList:倒排表的數(shù)據(jù)結(jié)構(gòu)

這里面的細(xì)節(jié)比較多,感興趣的可以單獨(dú)了解,這里不影響我們的整體搜索流程,不過(guò)多贅述。 有了Term字典和倒排表我們就能直接拿到搜索條件匹配的結(jié)果集了,接下來(lái)只需要通過(guò)docID去正排索引中取回整個(gè)doc然后返回就完事兒了。 這是ES的基本盤(pán)理論上不會(huì)慢,我們猜測(cè)慢查詢(xún)發(fā)生在排序上。那給請(qǐng)求加一個(gè)排序會(huì)發(fā)生什么呢?比如:

GET /content-alias/_search
{
  "track_total_hits":false,
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "category_id.keyword": "xxxxxxxx"
          }
        }
      ]
    }
  }, 
  "sort": [
    {
      "publish_time": {
        "order": "desc"
      }
    }
  ],
  "size": 10
}

通過(guò)倒排表拿到的docId是無(wú)序的,現(xiàn)在指定了排序字段,最簡(jiǎn)單直接的辦法是全部取出來(lái),然后排序取前10條。這樣固然能實(shí)現(xiàn)效果,但是效率卻是可想而知。那么Lucene是怎么解決的呢?

(4)DocValues

倒排索引能夠解決從詞到文檔的快速映射,但需要對(duì)檢索結(jié)果進(jìn)行分類(lèi)、排序、數(shù)學(xué)計(jì)算等聚合操作時(shí)需要文檔號(hào)到值的快速映射。而正排索引又過(guò)于臃腫龐大,怎么辦呢?

這時(shí)候各位大佬可能就直接想到了列式存儲(chǔ),沒(méi)有錯(cuò),Lucene就引入了基于docId的列式存儲(chǔ)結(jié)構(gòu)——DocValues

文檔號(hào) 列值 列值映射
0 2023-01-13 2
1 2023-01-12 1
2 2023-03-13 3

比如上表中的DocValues=[2023-01-13, 2023-01-12,2023-03-13]

如果列值是字符串,Lucene會(huì)把原來(lái)的字符串值按照字典排序生成數(shù)字ID,這樣的預(yù)處理能進(jìn)一步加快排序速度。于是我們得到了DocValues=[2, 1, 3]

Docvalues的列式存儲(chǔ)形式可以加快我們的遍歷的速度。到這里一個(gè)常規(guī)的搜索取前N條記錄的請(qǐng)求算是真正的拆解完成。這里不討論詞頻、相關(guān)性打分、聚合等功能的分析,所以本文對(duì)整個(gè)過(guò)程和數(shù)據(jù)結(jié)構(gòu)做了大幅簡(jiǎn)化。如果對(duì)這部分感興趣,歡迎一起討論。

此時(shí)排序慢的問(wèn)題也逐漸浮出了水面:盡管Docvalues又是列式存儲(chǔ),又是將復(fù)雜值預(yù)處理為簡(jiǎn)單值避免了查詢(xún)時(shí)的復(fù)雜比較,但是依舊架不住我們需要排序的數(shù)據(jù)集過(guò)大。

看起來(lái)ES盡力了,它好像確實(shí)不擅長(zhǎng)解決我們這個(gè)場(chǎng)景的慢查詢(xún)問(wèn)題。

不過(guò)有靈性的各位讀者肯定想到了,如果能把倒排表按照我們預(yù)先指定的順序存儲(chǔ)好,就能省下整個(gè)排序的時(shí)間。

2.2.2 IndexSorting

很快ES官方文檔《How to tune for search speed》中提到了一個(gè)搜索優(yōu)化手段——索引排序(Index Sorting)出現(xiàn)在了我們的視野中。

從文檔上的描述我們可以知道,索引排序?qū)τ谒阉餍阅艿奶嵘饕趦蓚€(gè)方面:

對(duì)于多條件并列查詢(xún)(a and b and ...),索引排序可以幫助我們把不符合條件的文檔存在一起,跳過(guò)大量的不匹配的文檔。但是此技巧僅適用于經(jīng)常用于篩選的低基數(shù)字段。

提前中斷:當(dāng)搜索排序和索引排序指定的順序一樣時(shí),只需要比較每個(gè)段的前 N 個(gè)文檔,其他的文檔僅需要用于總數(shù)計(jì)算。比如:我們的文檔中有一個(gè)時(shí)間戳,而我們經(jīng)常需要按照時(shí)間戳來(lái)搜索和排序,這時(shí)候如果指定的索引排序和搜索排序一致,通常能夠極大的提高搜索排序的效率。

提前中斷?。?!簡(jiǎn)直是缺什么來(lái)什么,于是我們開(kāi)始圍繞這一點(diǎn)展開(kāi)調(diào)研。

(1)開(kāi)啟索引排序

PUT /content
{
    "settings": {
        "index": {
            "sort.field": "publish_time", // 可指定多個(gè)字段
            "sort.order": "desc"
        }
    },
    "mappings": {
        "properties": {
            "content_id": {
                "type": "long"
            },
            "publish_time": {
                "type": "long"
            },
            ...
        }
    }
}
如上面的例子,文檔在寫(xiě)入磁盤(pán)時(shí)會(huì)按照 publish_time 字段的遞減序進(jìn)行排序。

在前面的段落中我們反復(fù)提到了docID和正排索引。這里我們順帶簡(jiǎn)單介紹下他們的關(guān)系,首先Segment中的每個(gè)文檔,都會(huì)被分配一個(gè)docID,docID從0開(kāi)始,順序分配。在沒(méi)有IndexSorting時(shí),docID是按照文檔寫(xiě)入的順序進(jìn)行分配的,在設(shè)置了IndexSorting之后,docID的順序就與IndexSorting的順序一致。

下圖描述了docID和正排索引的關(guān)系:

2eb1e818-fb6b-11ed-90ce-dac502259ad0.png

那么再次回頭來(lái)看看我們最開(kāi)始的查詢(xún):

GET /content-alias/_search
{
  "track_total_hits":true,
  "sort": [
    {
      "publish_time": {
        "order": "desc"
      }
    }
  ],
  "size": 10
}

在Lucene中進(jìn)行查詢(xún)時(shí),發(fā)現(xiàn)結(jié)果集的倒排表順序剛好是publish_time降序排序的,所以查詢(xún)到前10條數(shù)據(jù)之后即可返回,這就做到了提前中斷,省下了排序開(kāi)銷(xiāo)。那么代價(jià)是什么呢?

(2)代價(jià)

IndexSorting和查詢(xún)時(shí)排序不一樣,本質(zhì)是在寫(xiě)入時(shí)對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。所以排序字段只能在創(chuàng)建時(shí)指定且不可更改。并且由于寫(xiě)入時(shí)要對(duì)數(shù)據(jù)進(jìn)行排序,所以也會(huì)對(duì)寫(xiě)入性能也會(huì)有一定負(fù)面影響。

之前我們提到了Lucene本身對(duì)排序也有各種優(yōu)化,所以如果搜索結(jié)果集本身沒(méi)有那么多的數(shù)據(jù),那么就算不開(kāi)啟這個(gè)功能,也能有不錯(cuò)的RT。

另外由于多數(shù)時(shí)候還是要計(jì)算總數(shù),所以開(kāi)啟索引排序之后只能提前中斷排序過(guò)程,還是要對(duì)結(jié)果集的總數(shù)進(jìn)行count。如果能夠不查總數(shù),或者說(shuō)通過(guò)另外的方式獲取總數(shù),那么能夠更好的利用這個(gè)特性。

小結(jié):

針對(duì)大結(jié)果集的排序取前N條的場(chǎng)景下,索引排序能顯著提高搜索性能。

索引排序只能在創(chuàng)建索引時(shí)指定,不可更改。如果你有多個(gè)指定字段排序的場(chǎng)景,可能需要慎重選擇排序字段。

不獲取總數(shù)能更好的利用索引排序

開(kāi)啟索引排序會(huì)一定程度降低寫(xiě)性能。這里貼一條ElaticsearchBenchmarks的數(shù)據(jù)截圖供大家參考。

2eb8df74-fb6b-11ed-90ce-dac502259ad0.png

見(jiàn):Elasticsearch Benchmarks

2.3 效果

由于我們的業(yè)務(wù)遠(yuǎn)遠(yuǎn)沒(méi)有達(dá)到ES的寫(xiě)入瓶頸,而且也少有頻繁變更排序字段的場(chǎng)景。在經(jīng)過(guò)短暫的權(quán)衡之后,確定索引排序正是我們需要的,于是開(kāi)始使用線(xiàn)上真實(shí)數(shù)據(jù)對(duì)索引排序的效果進(jìn)行簡(jiǎn)單的性能測(cè)試。

(1)性能測(cè)試:首頁(yè)

2ebe982e-fb6b-11ed-90ce-dac502259ad0.png

(2)性能測(cè)試:其他

這里開(kāi)啟索引排序后,隨機(jī)幾個(gè)常規(guī)條件和時(shí)間窗口的搜索組合測(cè)試

2ec6dfe8-fb6b-11ed-90ce-dac502259ad0.png

可以看到效果非常明顯,沒(méi)有以前的那種尖刺,RT也很穩(wěn)定,于是我們決定正式上線(xiàn)這個(gè)功能。

(3)線(xiàn)上效果

慢查詢(xún)

2ecf2d74-fb6b-11ed-90ce-dac502259ad0.png

整體前后對(duì)比

2ed93eea-fb6b-11ed-90ce-dac502259ad0.png

和我們預(yù)期的基本一樣,搜索RT大幅降低,慢查詢(xún)完全消失。

2.4后續(xù)優(yōu)化

在探索過(guò)程中,其實(shí)還發(fā)現(xiàn)了一些其他的優(yōu)化手段,鑒于開(kāi)發(fā)成本和收益,有些我們并沒(méi)有完全應(yīng)用于生產(chǎn)環(huán)境。這里列出其中幾點(diǎn),希望能給大家一些啟發(fā)。

不獲取總數(shù): 大部分場(chǎng)景下,不查詢(xún)總數(shù)都能減少開(kāi)銷(xiāo),提高性能。ES 7.x之后的搜索接口默認(rèn)不返回總數(shù)了,由此可見(jiàn)一斑。

自定義routing規(guī)則: 從上文的查詢(xún)過(guò)程我們可以看到,ES會(huì)輪詢(xún)所有分片以獲取想要的數(shù)據(jù),如果我們能控制數(shù)據(jù)的分片落點(diǎn),那么也能節(jié)省不少開(kāi)銷(xiāo)。比如說(shuō):如果我們將來(lái)如果有大量的場(chǎng)景都是查某個(gè)用戶(hù)的動(dòng)態(tài),那么可以控制按照用戶(hù)分片,這樣就避免了分片輪詢(xún),也能提升搜索效率。

keyword: 不是所有的數(shù)字都應(yīng)該按照數(shù)值字段來(lái)存,如果你的數(shù)字值很少用于范圍查詢(xún),但是經(jīng)常被用作term查詢(xún),并且對(duì)搜索rt很敏感。那么keyword才是最適合的存儲(chǔ)方式。

數(shù)據(jù)預(yù)處理:就像IndexSoting一樣,如果我們能夠在寫(xiě)入時(shí)預(yù)處理好數(shù)據(jù),也能節(jié)省搜索時(shí)的開(kāi)銷(xiāo)。這一點(diǎn)配合_ingest/pipeline 也許能發(fā)揮意想不到的效果。

3

寫(xiě)在最后

相信看到這里的大家都能看出,我們的優(yōu)化中也沒(méi)有涉及到十分高深的技術(shù)難點(diǎn),我們只是在解決問(wèn)題的過(guò)程中,逐步從小白轉(zhuǎn)變成了一個(gè)初學(xué)者。來(lái)一個(gè)大牛也許從一開(kāi)始就能直接繞過(guò)我們的彎路,不過(guò)萬(wàn)里之行始于足下,最后這里總結(jié)一點(diǎn)經(jīng)驗(yàn)和感受分享給大家,希望能給與我們一樣的初學(xué)者一些參考。

ES在大結(jié)果集指定字段排序的場(chǎng)景下性能不佳,我們使用時(shí)應(yīng)該盡量避免出現(xiàn)這種場(chǎng)景。如果無(wú)法避免,合適的IndexSorting設(shè)置能大幅提升排序性能。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8257

    瀏覽量

    149953
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88311
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67766

原文標(biāo)題:億級(jí)ES數(shù)據(jù)搜索性能調(diào)優(yōu)實(shí)踐

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HBase性能優(yōu)化方法總結(jié)

    HBase是Hadoop生態(tài)系統(tǒng)中的一個(gè)組件,是一個(gè)分布式、面向列的開(kāi)源數(shù)據(jù)庫(kù),可以支持?jǐn)?shù)百萬(wàn)列、超過(guò)10行的數(shù)據(jù)存儲(chǔ),因此,對(duì)HBase性能提出了一定的要求,那么如何進(jìn)行HBase
    發(fā)表于 04-20 17:16

    優(yōu)化了功率級(jí)的20位1MSPS高性能數(shù)據(jù)采集系統(tǒng)

    描述該適用于高性能數(shù)據(jù)采集 (DAQ) 系統(tǒng)的參考設(shè)計(jì)優(yōu)化了功率級(jí),以降低功耗并最大程度地減小開(kāi)關(guān)穩(wěn)壓器的 EMI 影響(通過(guò)使用 LMS3635-Q1 降壓轉(zhuǎn)換器)。與 LM5363
    發(fā)表于 12-05 13:56

    什么是探索性測(cè)試ET

    索性測(cè)試ET(exploratory)是和ST(script based test)相比較而言的.籠統(tǒng)地說(shuō),ST就是有確定的步驟和預(yù)期目標(biāo)的測(cè)試.探索性測(cè)試可以說(shuō)是一種測(cè)試思維。它沒(méi)有很多實(shí)際
    發(fā)表于 07-05 06:38

    數(shù)據(jù)庫(kù)設(shè)計(jì)及開(kāi)發(fā)規(guī)范之sql性能優(yōu)化

    數(shù)據(jù)庫(kù)設(shè)計(jì)及開(kāi)發(fā)規(guī)范,sql性能優(yōu)化
    發(fā)表于 05-08 10:58

    用BI系統(tǒng)做級(jí)數(shù)據(jù)分析,效率會(huì)變慢嗎?

    影響的報(bào)表格式要求,一鍵即可生成。同時(shí),奧威BI的分布式計(jì)算,還能以低成本獲得大數(shù)據(jù)性能計(jì)算能力。即使涉及級(jí)數(shù)據(jù)的運(yùn)算分析,也能夠保持秒級(jí)
    發(fā)表于 02-07 13:52

    優(yōu)化電動(dòng)汽車(chē)的結(jié)構(gòu)性能

    優(yōu)化電動(dòng)汽車(chē)的結(jié)構(gòu)性能以提高效率和安全性迅速增長(zhǎng)的全球電動(dòng)汽車(chē)(EV)市場(chǎng)預(yù)計(jì)到2027年將達(dá)到8028美元。在電池和高壓電子設(shè)備的驅(qū)動(dòng)下,電動(dòng)汽車(chē)的運(yùn)行和維護(hù)成本往往低于傳統(tǒng)汽車(chē),幾乎不會(huì)產(chǎn)生
    發(fā)表于 09-17 08:10

    門(mén)級(jí)電路功耗優(yōu)化的相關(guān)資料分享

    設(shè)計(jì)保持其性能,即滿(mǎn)足設(shè)計(jì)規(guī)則和時(shí)序的要求。功耗優(yōu)化前的設(shè)計(jì)是已經(jīng)映射到工藝庫(kù)的電路,如下圖所示:      門(mén)級(jí)電路的功耗優(yōu)化包括了設(shè)計(jì)總功耗,動(dòng)態(tài)功耗以及漏電功耗的
    發(fā)表于 11-12 06:14

    基于興趣相關(guān)度的P2P網(wǎng)絡(luò)搜索優(yōu)化算法

    P2P網(wǎng)絡(luò)中的搜索性能是影響P2P網(wǎng)絡(luò)發(fā)展的關(guān)鍵問(wèn)題。該文研究非結(jié)構(gòu)化分散型P2P網(wǎng)絡(luò)中的搜索機(jī)制,提出2個(gè)改進(jìn)算法。改進(jìn)算法利用節(jié)點(diǎn)的共享情況和查詢(xún)歷史發(fā)掘節(jié)點(diǎn)的興趣愛(ài)好
    發(fā)表于 04-21 09:51 ?15次下載

    Allegro封裝命名要注重可搜索性

    在封裝的命名上,特別是在pcb layout軟件allegro里面,封裝命名要注重可搜索性,pcb設(shè)計(jì)培訓(xùn)這里說(shuō)的可搜索性是指window對(duì)文件的排列,我們知道封裝在allegro里面里面以.dra結(jié)尾,如果零件
    發(fā)表于 06-25 11:36 ?4125次閱讀

    低信噪比環(huán)境下WCDMA小區(qū)搜索的FPGA實(shí)現(xiàn)

    針對(duì)區(qū)域內(nèi)多個(gè)小區(qū)普查的需求,對(duì)復(fù)雜環(huán)境下低信噪比WCDMA小區(qū)搜索進(jìn)行了針對(duì)性改進(jìn),采用差分相干累積以及RS軟譯碼算法提高了低信噪比條件下WCDMA小區(qū)搜索性能并利用FPGA進(jìn)行了工
    發(fā)表于 08-13 17:26 ?25次下載
    低信噪比環(huán)境下WCDMA小區(qū)<b class='flag-5'>搜索</b>的FPGA實(shí)現(xiàn)

    混合搜索的含邏輯“與”“或”的RM優(yōu)化算法

    問(wèn)題已有的解法包括函數(shù)變換、混合整數(shù)規(guī)劃、線(xiàn)性規(guī)劃搜索等算法.隨著任務(wù)數(shù)的增多,這些算法的求解時(shí)間較長(zhǎng).提出一種基于線(xiàn)性規(guī)劃的深度廣度混合搜索算法(LPHS),將廣義約束優(yōu)化問(wèn)題拆分成若干子問(wèn)題建立線(xiàn)性規(guī)劃
    發(fā)表于 12-25 17:13 ?0次下載
    混合<b class='flag-5'>搜索</b>的含邏輯“與”“或”的RM<b class='flag-5'>優(yōu)化</b>算法

    數(shù)據(jù)是如何優(yōu)化企業(yè)搜索引擎

    企業(yè)網(wǎng)站將比以往任何時(shí)候都更多地使用大數(shù)據(jù),大數(shù)據(jù)搜索引擎優(yōu)化(SEO)中起著非常重要的作用。
    發(fā)表于 12-28 10:24 ?2174次閱讀

    支持向量機(jī)網(wǎng)絡(luò)搜索優(yōu)化應(yīng)用程序下載

    支持向量機(jī)網(wǎng)絡(luò)搜索優(yōu)化應(yīng)用程序下載
    發(fā)表于 04-20 09:51 ?0次下載

    傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)和ES的差別

    上面。這個(gè)也是我在學(xué)習(xí)之前對(duì) ES 最感興趣的部分。 本文大致包括以下內(nèi)容: 關(guān)于搜索:傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)和 ES 的差別 搜索引擎原理 細(xì)究
    的頭像 發(fā)表于 10-12 10:49 ?2435次閱讀

    如何提高數(shù)據(jù)倉(cāng)庫(kù)的性能優(yōu)化設(shè)計(jì)

      隨著數(shù)據(jù)倉(cāng)庫(kù)規(guī)模的擴(kuò)大,數(shù)據(jù)倉(cāng)庫(kù)的性能問(wèn)題就顯得越來(lái)越突出,如何提高數(shù)據(jù)倉(cāng)庫(kù)的性能,除了在設(shè)計(jì)階段對(duì)其邏輯結(jié)構(gòu)和物理結(jié)構(gòu)進(jìn)行
    發(fā)表于 07-18 16:10 ?0次下載