在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

關(guān)于Instgram的搜索架構(gòu)簡(jiǎn)要分析

大小:0.4 MB 人氣: 2017-10-10 需要積分:1
Instagram的優(yōu)勢(shì)在于:雖然公司規(guī)模小,卻擁有相對(duì)大得多的基礎(chǔ)設(shè)施架構(gòu),在恰當(dāng)?shù)臅r(shí)候還能利用資源以借助Facebook十年來積累的經(jīng)驗(yàn)。Facebook的“Unicorn”搜索架構(gòu)是一款以社交圖譜為基礎(chǔ)的搜索引擎,可擴(kuò)展至包含上萬億個(gè)文檔的索引。2015年初,Instagram將所有的搜索架構(gòu)從Elasticsearch轉(zhuǎn)到Unicorn。同一時(shí)期,Instagram的搜索流量增加了65%,這不僅是用戶群數(shù)量增加的結(jié)果,也是忠實(shí)用戶數(shù)(每次使用搜索引擎時(shí)都會(huì)使用Instagram)增長(zhǎng)了12%的結(jié)果。
  這樣的成果部分得益于Unicorn通過社交功能及二階連接執(zhí)行查詢排序的能力。在7.0升級(jí)后,通過對(duì)圖譜的各個(gè)部分編制索引,Instagram的搜索能力更強(qiáng),可以更迅速、更便捷地搜索任何想要查找的信息,包括人、地點(diǎn)、標(biāo)簽與媒體。
  什么是搜索?
  Instagram的搜索架構(gòu)包含了所有興趣實(shí)體,如:標(biāo)簽、位置、用戶及媒體,這些內(nèi)容以非規(guī)范化的形式儲(chǔ)存,通常被稱為文檔——它們被分組歸類到集合中,可通過高效的集合運(yùn)算(如AND、OR與NOT)來查詢,在實(shí)際操作中Instagram對(duì)運(yùn)算結(jié)果高效地排序篩選,只留下與指定查詢最相關(guān)的文檔。當(dāng)用戶查詢時(shí),服務(wù)器后端會(huì)將查詢轉(zhuǎn)換成編碼,進(jìn)行集合運(yùn)算后篩出最佳匹配結(jié)合的有序集合。
  數(shù)據(jù)錄入
  Instagram每秒可處理數(shù)百萬個(gè)搜索請(qǐng)求,其中很多如注冊(cè)、點(diǎn)贊和上傳在內(nèi)的請(qǐng)求需要修改現(xiàn)有記錄,并向主PostSQL數(shù)據(jù)庫增加新行。為了確保可搜索文件的集合正確,我們需要將這些變更告知搜索架構(gòu)。此外,在PostgreSQL數(shù)據(jù)庫中,搜索時(shí)一般需要不只一行的信息,例如在照片上傳后,該用戶帳號(hào)的歷史信息也會(huì)用在搜索中。
  為了解決非規(guī)范化的問題,Instagram引入了Slipstream系統(tǒng),該系統(tǒng)會(huì)對(duì)Instagram上的event進(jìn)行編碼,再錄入包含更多信息的Thrift架構(gòu)中。這些event以二進(jìn)制序列化格式存儲(chǔ),通過異步發(fā)送-訂閱頻道(Firehose)來發(fā)送。譬如“搜索”功能之類的消費(fèi)者訂閱到Firehose,過濾掉不相干的event,再對(duì)其余event作出反應(yīng)。Firehose在Facebook的Scribe頂端實(shí)現(xiàn),讓消息傳輸可以異步實(shí)現(xiàn)。
  下圖展示了該架構(gòu):
  關(guān)于Instgram的搜索架構(gòu)簡(jiǎn)要分析
  自系統(tǒng)化之后,Thrift中跨請(qǐng)求對(duì)象再次復(fù)用;同時(shí)無需自定義反序列化,消費(fèi)者便可直接消費(fèi)所傳遞的信息。Slipstream架構(gòu)中與照片對(duì)應(yīng)的子集如下所示:
  struct User { 1: required i64 id; 2: string username; 3: string fullname; 4: bool is_private; 。..} struct Media { 1: required i64 id; 2: required i64 owner_id; 3: required MediaContentType content_type; 。..} struct LikeEvent { 1: required i64 liker_id; 2: required i64 media_id; 3: required i64 media_owner_id; 4: Media media; 5: User liker; 6: User media_owner; 。..8: bool is_following_media_owner; } union InstagramEvent { 。..2: LikeEvent like; 。..} struct FirehoseEvent { 1: required i64 server_time_millis; 2: required InstagramEvent event; }
  Firehose頻道的信息作為best-effort delivery,在消息傳遞中預(yù)計(jì)只有很小比例的數(shù)據(jù)丟失。在搜索時(shí),我們通過數(shù)據(jù)核對(duì)進(jìn)程或base build建立起最終一致性:每天晚上都會(huì)對(duì)Instagram連接到Hive的所有PostgreSQL數(shù)據(jù)庫進(jìn)行截圖存檔,并定期在這些Hive表格與結(jié)構(gòu)中查詢每個(gè)垂直搜索的所有文檔;將base build與從Slipstream中獲取的數(shù)據(jù)相合并,以確保在數(shù)據(jù)丟失的情況下,系統(tǒng)也保持最終一致性。
  數(shù)據(jù)輸出
  處理查詢
  如果數(shù)據(jù)正確接收,則搜索架構(gòu)可在一定的約束下高效提取相關(guān)的文檔,我們稱之為“約束查詢(constraint a query)”,一般是根據(jù)用戶提供的文字(例如:用戶輸入“Justin”,實(shí)際想搜索Justin Bieber)所衍生。在Unicorn中,查詢被重寫為明確表達(dá)目的的S-Expressions,比如:
  (anduser:maxime(applyfollowed_by: followed_by:me))
  以上代碼翻譯過來就是:查找我關(guān)注、名叫maxime的人所關(guān)注的人。在搜索架構(gòu)中,這個(gè)過程分兩步處理:
  生成候選集:找出一組與給定查詢匹配的文檔,Instagram的服務(wù)器后端使用反向索引(reverse index)結(jié)構(gòu),即通過關(guān)鍵詞索引找到多組文檔。舉例來說,輸入關(guān)鍵詞“name:justin”就會(huì)出現(xiàn)包含“justin”的用戶名集合。
  排序:從所有候選集中選出最佳文檔。獲取候選文檔后,從文檔的元數(shù)據(jù)編碼中找出特征,例如:用戶Justin Bieber的特征之一是關(guān)注者多達(dá)3.23千萬。系統(tǒng)會(huì)將這些特征用于計(jì)算“擬合度值(goodness)”,以便對(duì)候選子集進(jìn)行排序。擬合度可通過機(jī)器學(xué)習(xí)或手動(dòng)調(diào)整而生成——在機(jī)器學(xué)習(xí)案例中,針對(duì)特定候選者,我們可以設(shè)計(jì)點(diǎn)擊或關(guān)注有所差異的特征。
  通過這兩個(gè)步驟,最終得出指定查詢的最佳文檔有序列表。
  社交圖譜搜索
  在優(yōu)化搜索功能時(shí),為了提供更具個(gè)性化的搜索結(jié)果,Instagram現(xiàn)在會(huì)將用戶關(guān)注的人以及他們所關(guān)注的人都納入搜索范圍。這樣一來,基于用戶所關(guān)注的人再來查找某人會(huì)更容易。
  使用Unicorn后,我們能夠?qū)nstagram上的所有帳號(hào)、媒體、標(biāo)簽和地址,還有其間各類關(guān)系生成索引。舉例來說,通過對(duì)某個(gè)用戶的關(guān)注者編輯索引,Unicorn可以回答這類問題:
  “用戶X與用戶Y同時(shí)關(guān)注的賬號(hào)有哪些?”
  同樣的,通過對(duì)媒體中的位置進(jìn)行索引,Unicorn能得出如下信息:
  “我關(guān)注的帳號(hào)所發(fā)布的媒體是在紐約拍攝的”。
  優(yōu)化帳號(hào)搜索功能
  單獨(dú)使用Instagram的圖譜的話體驗(yàn)不佳,不足以找到想要查找的帳號(hào),必須結(jié)合Unicorn的搜索排序架構(gòu)使用才能奏效。
  完成這一目標(biāo)的方法之一是在Instagram上為現(xiàn)有連接建立模型。在Facebook上,賬號(hào)間的基本關(guān)系是非定向的(通常會(huì)互加好友),而在Instagram上卻不一定要回粉。我們的團(tuán)隊(duì)必須對(duì)搜索排序算法進(jìn)行修改,以存儲(chǔ)并檢索Instagram關(guān)注圖譜中的帳號(hào)信息。對(duì)Instagram來說,要使用Unicorn按照混合的方式來檢索帳號(hào):“你關(guān)注的人所關(guān)注的人”和“關(guān)注你的人所關(guān)注的其他人”。
  此外,Instagram的用戶關(guān)注彼此的原因各種各樣,某位用戶無需與他所關(guān)注的用戶保持完全一致的興趣點(diǎn)。我們的團(tuán)隊(duì)構(gòu)建了一個(gè)模型,針對(duì)每個(gè)用戶所關(guān)注的帳號(hào)進(jìn)行排序,因此在搜索時(shí),與搜索者關(guān)系更為密切的用戶所關(guān)注的對(duì)象會(huì)優(yōu)先顯示。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

關(guān)于Instgram的搜索架構(gòu)簡(jiǎn)要分析下載

相關(guān)電子資料下載

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 97影院理论| 六月丁香六月婷婷| 综合久| 高清视频一区二区三区| 国产内地激情精品毛片在线一| 国产免费久久| 亚洲欧美精品一区二区| 天天射天天摸| 日韩特级毛片| 免费无遮挡很爽很污很黄| 激情综合色综合久久综合| 国产美女视频一区二区二三区| www五月婷婷| 激情综合视频| 成人永久免费视频网站在线观看 | 天天摸日日摸人人看| 日韩欧美中文字幕在线播放| 欧美大胆一级视频| 国产一区二区三区不卡观| 97影院理论| 免费观看一级一片| 男人操女人免费网站| 欧美做a欧美| 天天狠狠弄夜夜狠狠躁·太爽了| 全黄性色大片| 国产欧美综合在线| 窝窝午夜看片| 7777奇米| 1024你懂的在线播放欧日韩| 69xxxx日本| 夜色资源站www国产在线观看| 日韩第二页| 成人在线观看网站| 久久人人干| 欧美亚洲一区二区三区在线| 婷婷久久综合九色综合98| 欧美午夜电影| 在线女同免费观看网站| 2021韩国理论片ok电影天堂 | 欧美zoozzooz性欧美| 风流护士|