亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > PostgreSQL > 正文

Instagram提升PostgreSQL性能的五個技巧

2020-10-29 21:50:04
字體:
供稿:網(wǎng)友

 隨著Instagram的規(guī)模日益擴大,Postgres繼續(xù)充當(dāng)著Instagram的堅實基礎(chǔ),并存儲著絕大部分的用戶數(shù)據(jù)。不到一年之前,我們還曾在博客上說Instagram“存儲著大量數(shù)據(jù)”,每秒增加90條數(shù)據(jù),現(xiàn)在,這個數(shù)據(jù)已經(jīng)增長到了峰值的10000條。而我們的基礎(chǔ)存儲技術(shù)依然保持不變。

在過去的兩年半中,我們有一些關(guān)于Postgres擴展的經(jīng)驗和工具,想要分享出來。真希望在當(dāng)初啟動Instagram的時候就能有這些經(jīng)驗和工具呀。其中有些是Postgres獨有的,有些是其它數(shù)據(jù)庫也可以采用的。如果想要了解我們是如何水平分區(qū)的,可以看這篇文章。

1. 局部索引

如果我們經(jīng)常需要按某個固定的特征過濾數(shù)據(jù),而且這個特征只存在于一小部分行里,在這種情況下,局部索引非常有效。

比方說,Instagram搜索標簽的時候,我們需要找出有許多照片的標簽。我們一般會用ElasticSearch之類的技術(shù)來進行高級搜索,不過這里只靠數(shù)據(jù)庫的查詢能力就完全夠了。先來看一下,按標簽查詢,并按照片數(shù)排序,Postgres是怎么做的:
 

EXPLAIN ANALYZE SELECT id from tags WHERE name LIKE 'snow%' ORDER BY media_count DESC LIMIT 10;   QUERY PLAN ---------                                  Limit (cost=1780.73..1780.75 rows=10 width=32) (actual time=215.211..215.228 rows=10 loops=1)  -> Sort (cost=1780.73..1819.36 rows=15455 width=32) (actual time=215.209..215.215 rows=10 loops=1)     Sort Key: media_count     Sort Method: top-N heapsort Memory: 25kB     -> Index Scan using tags_search on tags_tag (cost=0.00..1446.75 rows=15455 width=32) (actual time=0.020..162.708 rows=64572 loops=1)        Index Cond: (((name)::text ~>=~ 'snow'::text) AND ((name)::text ~<~ 'snox'::text))        Filter: ((name)::text ~~ 'snow%'::text) Total runtime: 215.275 ms(8 rows)

有沒有看到,為了得到結(jié)果,Postgres不得不對15000行數(shù)據(jù)進行排序。由于標簽的分布滿足長尾模式(譯者注: 根據(jù)百度百科,「我們常用的漢字實際上不多,但因出現(xiàn)頻次高,所以這些為數(shù)不多的漢字占據(jù)了上圖廣大的紅區(qū);絕大部分的漢字難得一用,它們就屬于那長長的黃尾。」),我們可以改為查詢超過100張照片的標簽,先建局部索引:
 
CREATE INDEX CONCURRENTLY on tags (name text_pattern_ops) WHERE media_count >= 100
然后查詢,看一下新的查詢計劃:
 

EXPLAIN ANALYZE SELECT * from tags WHERE name LIKE 'snow%' AND media_count >= 100 ORDER BY media_count DESC LIMIT 10; QUERY PLAN Limit (cost=224.73..224.75 rows=10 width=32) (actual time=3.088..3.105 rows=10 loops=1)  -> Sort (cost=224.73..225.15 rows=169 width=32) (actual time=3.086..3.090 rows=10 loops=1)     Sort Key: media_count     Sort Method: top-N heapsort Memory: 25kB     -> Index Scan using tags_tag_name_idx on tags_tag (cost=0.00..221.07 rows=169 width=32) (actual time=0.021..2.360 rows=924 loops=1)        Index Cond: (((name)::text ~>=~ 'snow'::text) AND ((name)::text ~<~ 'snox'::text))        Filter: ((name)::text ~~ 'snow%'::text) Total runtime: 3.137 ms(8 rows)

可以看到,Postgres只需要訪問169行,所以速度快得多。Postgres的查詢計劃器對約束的評估也很有效。如果以后想要查詢超過500張照片的標簽,由于這個結(jié)果集是上面集合的子集,所以仍然會使用這個局部索引。

2. 函數(shù)索引

在某些表上,我們需要對一些很長的字符串建立索引,比如說,64個字符的base64記號。如果直接建索引的話,會造成大量的數(shù)據(jù)重復(fù),這種情況下,可以用Postgres的函數(shù)索引:
 

CREATE INDEX CONCURRENTLY on tokens (substr(token), 0, 8)

雖然這樣會造成許多行匹配相同的前綴,但我們可以在匹配的基礎(chǔ)上再用過濾,速度很快。而且索引很小,只有大概原來的十分之一。

3. 用pg_reorg來讓數(shù)據(jù)更緊湊

隨著時間的流逝,Postgres的表會變得越來越零碎(由MVCC并發(fā)模型等原因引起)。而且,數(shù)據(jù)行插入的順序往往也不是我們希望返回的順序。比如說,如果我們經(jīng)常要按用戶來查詢照片等,那么最好是在磁盤上把這些東西放在一起,這樣就可以減少磁盤尋道的時間。

我們用pg_reorg來解決這個問題,它用三個步驟來讓“壓緊”一個表:

  1.     取得表的獨占鎖
  2.     建一個記錄變更的臨時表,在原始表上加一個觸發(fā)器,把對原始表的變更復(fù)制到臨時表上
  3.     用CREATE TABLE...SELECT FROM...ORDER BY建表,新表擁有原始表的全部數(shù)據(jù),而且是按索引順序排序的
  4.     將CREATE TABLE執(zhí)行時間點以后發(fā)生的變更從臨時表同步過來
  5.     業(yè)務(wù)切換到新表

每一步都會有很多細節(jié),不過大體上就是像上面這個樣子。我們先對這個工具進行了一些審查,運行了若干測試,然后再把它用到生產(chǎn)環(huán)境上?,F(xiàn)在,我們已經(jīng)在幾百臺機器的環(huán)境上跑過幾十次pg_reorg,沒出現(xiàn)過任何問題。


4. 用WAL-E進行WAL(寫前日志)的歸檔和備份

我們用WAL-E來歸檔WAL日志,它是Heroku寫的一個工具,我們也向它貢獻了一部分代碼。WAL-E大大簡化了數(shù)據(jù)備份和復(fù)制庫創(chuàng)建的過程。

WAL-E是利用Progres的archive_command,將PG產(chǎn)生的每個WAL文件都歸檔到Amazon的S3。利用這些WAL文件和數(shù)據(jù)庫的基準備份,我們可以將數(shù)據(jù)庫恢復(fù)到基準備份后任何一個時間點的狀態(tài)。利用這個手段,我們也可以快速創(chuàng)建只讀的復(fù)制庫或故障備用庫。

我們?yōu)閃AL-E寫了一個簡單的封裝腳本,可以監(jiān)控歸檔時的重復(fù)故障,見GitHub。
 
5. psycopg2中的自動提交模式和異步模式

我們也開始用psycopg2中的一些高級功能(psycopg2是Postgres的Python驅(qū)動)。

一個是自動提交模式。在這個模式里,psycopg2不會發(fā)出BEGIN/COMMIT,每個查詢跑在自己的單語句事務(wù)里。這對不需要事務(wù)的只讀查詢特別有用。開啟很簡單:

connection.autocommit = True

開啟自動提交后,我們的應(yīng)用服務(wù)器和數(shù)據(jù)庫之間的對話大減,數(shù)據(jù)庫服務(wù)器的CPU用量也大減。而且,我們是用PGBouncer作為連接池,開啟自動提交后,連接的歸還也更快了。

與Django的交互細節(jié)可以看這里。


psycopg2還有一個很有用的功能,它可以通過注冊一個等待回調(diào)(wait callback)函數(shù),提供協(xié)同程序(coroutine)支持。它可以支持跨連接查詢,對命中多個節(jié)點的查詢非常有用,當(dāng)有數(shù)據(jù)時,socket會被喚醒(我們利用Python的select模塊來處理喚醒)。它也可以與eventlet和gevent等多線程庫很好的協(xié)作,參考實現(xiàn)可見psycogreen。

總的來說,我們對Postgres的高性能和可靠性十分滿意。想在世界上最大之一的Postgres集群上工作嗎?想跟一群基礎(chǔ)設(shè)施高手們一起干活嗎?請聯(lián)系infrajobs@instagram.com吧。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲国产91色在线| 丁香久久综合| 黄色一级片在线免费观看| 不卡av影片| 九九久久精品视频| 精品国模一区二区三区欧美| 伊大人久久香线焦宗合一75大| 中文字幕av一区二区三区人| 亚洲精品成人无码熟妇在线| 蜜桃麻豆影像在线观看| 中文字幕+乱码+中文字幕明步| 欧洲美女7788成人免费视频| 精品国产乱码一区二区三区| 成人在线免费av| 黄色电影免费在线看| 日韩欧亚中文在线| 蜜桃视频免费观看一区| 黄网址在线看| 精品国产高清自在线一区二区三区| 日韩一区二区精品在线观看| 九色porny视频国产网曝| 国产精品一区二区三区视频网站| 一个人在线视频免费观看www| av在线1区2区| 久久视频在线直播| 国产一区二区电影| 色综合99久久久无码国产精品| 久久久久久久久久国产精品| 婷婷丁香在线| 懂色aⅴ精品一区二区三区蜜月| 国产三级国产精品国产专区50| 久久成人国产精品入口| 成人免费高清视频在线观看| 国产suv精品一区| 男女高潮又爽又黄又无遮挡| 国产精品羞羞答答在线观看| 荡女精品导航| 国产精品v日韩精品| 国产精品免费视频二三区| 色婷婷成人网| 欧美一区二区在线看| 国产日韩欧美在线观看视频| 亚洲精品综合网| 猛男gaygay欧美视频| 1769国内精品视频在线播放| 加勒比色老久久爱综合网| 91日本韩国| 欧美二区在线| 污污的视频在线免费观看| 国产91精品最新在线播放| 亚洲不卡在线观看| 中文字幕日韩欧美一区二区三区| a级片在线免费看| 成人免费毛片网| 亚洲一区二区三区涩| 日本在线播放不卡| 91精品国产91久久久久久青草| 亚洲天堂av影院| 中文字幕一区二区人妻| 亚洲午夜在线观看视频在线| 99re免费99re在线视频手机版| 99国产精品一区二区三区| www.四虎影视.com| 伊人国产在线| 欧美激情视频在线免费观看 欧美视频免费一| a视频在线看| 国产精品一区专区欧美日韩| 成人午夜在线观看| 亚洲欧美日韩不卡一区二区三区| 欧美在线中文| 久久久久五月天| 国产精品69久久久久孕妇欧美| 午夜伦理在线视频| 亚洲私人影吧| 免费一级特黄特色大片| 久久久久.com| 亚洲久草视频| 妖精视频在线观看| 欧美福利一区二区三区| www.日本久久| 成人在线分类| 亚洲精品456| 欧美激情视频在线观看| 黄色一级片播放| 国产日产欧美一区二区三区| 在线激情视频| 另类ts人妖一区二区三区| 看黄色免费网站| 欧美性狂猛xxxxxbbbbb| 欧美成人三级伦在线观看| 国产在线精品91| 成人欧美一区二区三区视频网页| 精品人妻一区二区色欲产成人| 日韩欧美中文一区| 老司机久久99久久精品播放免费| 欧美日本一区二区三区四区| 欧美激情视频给我| 日b视频免费观看| 亚洲日本在线播放| 麻豆成人久久精品二区三区红| aaa欧美色吧激情视频| 黄色片网站免费| 欧美在线一区二区三区四| 一本到不卡精品视频在线观看| 国产伦视频一区二区三区| 最爽无遮挡行房视频在线| 国产裸体无遮挡| 年下总裁被打光屁股sp| 欧美熟妇交换久久久久久分类| 人人妻人人澡人人爽精品日本| 日韩伦理av| 无码一区二区精品| 国产69精品久久久| 黑人巨大国产9丨视频| 欧美日韩高清丝袜| 亚洲午夜久久久影院伊人| 亚洲男同性恋视频| 精品久久久久久久免费人妻| 精品久久一区二区三区蜜桃| 福利在线观看| 美女网站视频黄色| 91视频九色网站| 国产精品亲子伦av一区二区三区| 999精品视频在线观看播放| 伊人久久久久久久久| 在线观看视频中文字幕| 亚洲成人av一区二区三区| 欧美性猛交xxxx乱大交退制版| 日韩美女主播视频| 欧美丰满片xxx777| 疯狂欧美牲乱大交777| 一呦二呦三呦国产精品| 欧美黑人一级片| 无码人妻丰满熟妇奶水区码| 国产91亚洲精品| 国产成人自拍高清视频在线免费播放| 极度色播免费播放视频| 亚洲成人久久影院| 亚洲综合在线中文字幕| 在线国产91| 精品久久久久久综合日本欧美| 丰满少妇被猛烈进入一区二区| 91国在线精品国内播放| 中文字幕91| 99久久亚洲精品日本无码| 精品视频偷偷看在线观看| 亚洲理论电影片| 精品在线视频免费| 国产视频一区欧美| 一二三在线视频| 国产精品免费视频网站| 丝袜美女在线观看| 51vv免费精品视频一区二区| 国产精品麻豆久久久| 一本一本大道香蕉久在线精品| 日本欧美三级| 青青九九免费视频在线| 中文字幕在线观看欧美| 美女网站视频色| 欧美淫片网站| 91超碰在线播放| 亚洲精品1234| 国产成人精品一区二区无码呦| 国产91在线播放九色快色| 婷婷综合在线观看| 丝袜视频国产在线播放| 2022亚洲天堂| 成人a级免费视频| 麻豆视频在线免费看| 久久久久99精品国产片| 正在播放日韩欧美一页| 欧美日韩亚洲免费| 国产精品老熟女一区二区| 亚洲日本成人女熟在线观看| 国产精品免费一区二区三区四区| 在线观看视频你懂的| 国产成人亚洲精品自产在线| 国产资源中文字幕| 亚洲成人激情综合网| 日韩一级免费一区| 亚洲一区免费观看| 日韩精品一区二区视频| 美女扒开腿免费视频| 在线日韩精品视频| 成人黄色免费看| 91九色porn| 久久久人成影片一区二区三区在哪下载| 人妻互换一区二区激情偷拍| 在线观看一级片| 电影一区二区三区久久免费观看| 亚洲 自拍 另类 欧美 丝袜| 成人影视在线播放| 国产真实乱人偷精品视频| 中文精品无码中文字幕无码专区| 少妇高潮喷水久久久久久久久久| 日本精品久久久久影院| 亚洲一区二区国产| www.国产麻豆| 久久一区国产| 青青青在线视频| 黄频在线免费观看| 97蝌蚪自拍自窝| 色视频www在线播放国产| 国产精品日日摸夜夜添夜夜av| 久久久久久av无码免费网站下载| 国产成人精品一区二区三区在线观看| 国产一级片免费| 扒开伸进免费视频| 在线观看h网| 五月天免费网站| 国产在线精品一区在线观看麻豆| 亚洲精品国产成人| 午夜精品美女久久久久av福利| 粉嫩精品一区二区三区在线观看| 欧美日韩成人黄色| 国产精品久久久久久久久久ktv| 99精品国产高清在线观看| 国产综合在线观看视频| 国产精品18毛片一区二区| 美女国产精品久久久| 国产视频久久久久久久| 国产精品国产精品| 欧美日韩1080p| 精品福利影视| 成年丰满熟妇午夜免费视频| 亚洲精品亚洲人成人网在线播放| 美女福利视频一区| 欧美18xxxx| 日本人妻丰满熟妇久久久久久| 天天看天天摸天天操| 国产裸体写真av一区二区| 日韩影院在线| 久久婷婷国产综合国色天香| 中文字幕一区二区三区有限公司| 国产一区欧美二区| 亚洲午夜精品一区二区| 男人添女人荫蒂免费视频| 91免费看蜜桃| 欧美小视频在线| 国产麻豆91精品| 狠狠v欧美v日韩v亚洲ⅴ| 伊人久久大香线蕉综合75| 韩国女主播一区二区| 一级片在线免费观看视频| 午夜小视频在线观看| 久久免费福利| 在线亚洲精品自拍| 久久午夜免费视频| 国产精品不卡| 无码国产精品96久久久久| 极品少妇一区二区三区精品视频| 牛人盗摄一区二区三区视频| gogo大尺度成人免费视频| 中文字幕精品一区日韩| 国产视频1区2区| xvideos亚洲人网站| 91丨porny丨在线| 免费看成人片| 松下纱荣子在线观看| 国产免费成人在线视频| 一级黄色性视频| 91淫黄看大片| 成人性生交大片免费看视频在线| 欧美成人精品福利在线视频| 欧美午夜黄色| jzzjzzjzz亚洲成熟少妇| 日韩欧美高清一区| 日本h片在线观看| 91成人噜噜噜在线播放| 日韩精品一区在线观看| 亚洲精品中文在线观看| av在线下载| 337p粉嫩大胆噜噜噜噜噜91av| 欧美色大人视频| 国产精品99无码一区二区| 欧美变态tickling挠脚心| 大桥未久在线视频| 狠狠人妻久久久久久综合麻豆| 粉嫩av四季av绯色av第一区| 午夜成年人在线免费视频| 午夜裸体女人视频网站在线观看| 国产精品一二一区| 中文字幕亚洲高清| 亚洲精品456在线播放狼人| 欧美久久精品午夜青青大伊人| 欧美大人香蕉在线| 欧美性猛交xxxx黑人| 极品美女一区二区三区| av影片在线| 97最新国自产拍视频在线完整在线看| 日韩在线a电影| 在线观看中文字幕视频| 成人免费福利片| 欧美日韩国产电影| 亚洲av无码乱码国产麻豆| 国产女人18水真多毛片18精品| 91热精品视频| 欧美三区免费完整视频在线观看| jizz日韩| 欧美激情综合亚洲一二区| 99久久精品网| 福利资源在线久| 91亚洲精品丁香在线观看| 成年人午夜久久久| 久久国内精品自在自线400部| 好吊的妞视频这里都有| 黄色片中文字幕| 国产精品亚洲片夜色在线| 中文字幕一区二区三区四区免费看| 青青草在线视频免费观看| 在线免费观看你懂的| 日本不卡影院| 99国产精品久久久久老师| 日韩电视剧在线观看免费网站| 欧美一区久久久| 在线观看中文字幕av| 18禁网站免费无遮挡无码中文| 亚洲丝袜制服诱惑| 日本h片在线| 污污的视频免费| 亚洲高清成人影院| 牛人国产偷窥女洗浴在线观看| av成人免费看| 日本一本在线免费福利| 午夜精品福利在线| 亚洲欧美另类久久久精品| 久久久久久精| 黑人巨大精品欧美一区二区小视频|