redis佇列裡每天有超過一億條資料,使用python如何高效的將其寫入sql資料庫 有什麼解決方案?

時間 2021-05-05 15:26:02

1樓:愛遊戲的大叔

每天一億條資料,就REDIS而言,完全沒有問題,並且還不到效能瓶頸。

我測試壓測過REDIS,4核16G的REDIS伺服器,只是簡單壓測,每秒幾萬的併發資料,REDIS幾乎是沒有什麼波動,可見其抗壓能力極強,你這裡才每秒3000併發。

效能瓶勁並沒有REDIS這裡,你可以使用多執行緒併發從REDIS讀取資料,因為REDIS是單執行緒,所以不用單線併發問題,除非你是REDIS6.0

正常程式你這個併發量,MYSQL應該是吃不消的,你需要配置集群?

對不起,關係型資料目前沒有集群,最多也就是主從模式。

如果你只是寫入的話,可以試一下改變MYSQL的引擎,或者寫入模式來增強高效能。

如果不然,你將受限於MYSQL單主的寫入效能,從而影響程式的寫入。

不過MYSQL的效能還是快的,每天1億的寫入,不需要分庫分表,也可以完成,如果不需要查詢,只是寫入,完全可以應付,只是天長地久,資料查詢可能會非常困難。

只是儲存簡單,所以我可以建議你直接同步到大資料框架,反正以後查詢,也是要同步到大資料框架的。

2樓:lulupan

第一肯定是多執行緒併發,但是也不要太多,如果瓶頸在mysql,那就看mysql伺服器多少個core,配置相同的連線就行。

第二,可以的話mysql table不要建任何的index,如果你的插入和後續mysql對外服務不會同時發生的話,index可以等到插入結束再建。

第三,bulk load,跟multirow fetch同理,盡量塞滿每乙個資料報,反覆測試能找到合適的size,你也可以看看原理計算最優值。

最後有人提到檔案load的方法,這個中間乙個環節有問題,重啟代價昂貴,只適合檔案提前準備好,只考慮load的情形,你這種每天大批量同步的不合適

3樓:叔翰

做過其他語言從redis緩衝資料裡面,儲存資料到Mysql資料集群裡面。我們當時的情況簡單說:從緩衝層中備份重要資料。

資料且需要按需分類,部分資料需要實時存入資料庫裡面。備份資料使用者可能會看,運維也可能會用,老闆也可能會用。

程式真的不太難寫,無非就是多執行緒多開資料庫連線。需要注意的是程式執行時間應該選擇資料庫使用壓力不大的時候。有難點的話,就是如何在多執行緒情況下保證連線能用、穩定、如何高效的處理初始資料。

4樓:唉呀我去

你這個很好辦,普通未優化的PC機上搭建的MYSQL都能達到效能上的要求:

一次從redis中拉取5000條資料,將這5000條資料拼湊成一條SQL語句,讓MYSQL一次完成插入。

如果這5000條資料中需要分別插入MYSQL的多個表,那麼就每次從REDIS中多拉一些資料,比如一次拉5萬/10萬,插到3~5個MYSQL表中,其目的就是盡量讓單條SQL插入更多的資料到MYSQL中。

入庫頻率下來後,效率自然提上去了。

所以最終結果並不是單純的每秒3000次,而是每次插入3000條/3萬條/10萬條,可能時間只用了零點幾毫秒。

1億資料根本不是問題。

5樓:

多條合併插入!只有一次寫入鎖!IO延時。

效能不是問題!有人這樣做統計系統的。

不過是php寫的。

你可以試試5萬條資料合併插入。

可能網絡卡是瓶頸。

SSD企業級5萬4K不是什麼問題了。

6樓:李小參

考慮到處理執行緒掛了之後,導致資料丟失,為了解決這個,還不失效能,我給出的方案如下:

在搭建乙個單機redis作為輔助,按照之前網友給出的每個執行緒300qps的速度設計,那可以在輔助redis建立10個佇列。啟動乙個程序從生產環境redis讀取資料然後順序放進輔助的10個佇列裡,在啟動10個程序或者執行緒或者協程建立和sql的鏈結,負責從輔助的10個佇列裡取資料插進mysql,一條一條處理,這樣即使處理程序掛了,也不會擔心資料丟失。

7樓:

單純答這個問題本身,不發散到更遠的地方的話,先導文字檔案,然後一次性匯入即可。

一億看著多,但是換個看法,G級別而已。對於db來說小意思。

8樓:

單從效能上來說只要你的伺服器配置主流程式合理 ,MySQL MSSQL Oracle都沒問題,關鍵在於插入之後怎麼辦? 這麼大的資料量如何查詢加工?

是否可以從業務層面考慮資料分層?

建立查詢庫專門查詢資料?

9樓:

不考慮資料庫的瓶頸,如果資料是無序的,單從入庫的優化來說可以多條資料合併成1條SQL執行或者多條資料事物提交,效能都會比單條提交好很多。

10樓:

可以考慮在redis取資料到寫入的過程中加入支援持久化的訊息中介軟體,可以採用kafka之類。鑑於資料量不是很少且增長速度不慢,如果不是對外提供實時查詢的話可以考慮寫入hbase,一些查詢統計可以用hive來做。一般redis過來的資料可能還是需要清洗的,那麼寫入的操作可以讓storm來做,推薦jstorm更好用。

當然一般這套流程用來處理10w以上TPS場景時,價效比才超高。

11樓:柳傾

最近幾天做過MySQL 和MongoDB 的insert 測試,資料量也是在幾千萬到幾十億條記錄。

首先,每天上億條記錄寫入MySQ/Oracle 可以做到,區域網內,主流中端配置的機器,無優化。

單執行緒寫入MySQL 可以達到幾千條記錄每秒,多執行緒可以提到到1w 以上;(使用pyMySQLdb包 cur.execute(sql, params)方法寫入資料,每次插入多條和一條記錄速度差別不大)

Mongodb 的寫入效能更佳,多執行緒寫入記錄可以達到3W/s 以上(使用bulk insert() 不要用insert_one() 或者insert_many())。(以上都是未建立索引)

所以你的需求在系統不是過載的時候不是問題。

如果你需要用MySQL 作為儲存,可以考慮幾點優化速度:

使用memcached plugin 可以提高逐條插入速度

將記錄dump 為有格式的檔案,在系統空閒時,用 LOAD DATA INFILE (MySQL :: MySQL 5.7 Reference Manual ::

14.2.6 LOAD DATA INFILE Syntax) 命令載入檔案,批量插入,速度為逐條插入速度的20+倍。

12樓:

是每天新增1億條資料還是更新?前者的話三個月可就100億條資料了,使用傳統資料庫到時插入還是查詢都會巨慢的吧。我沒試過。

使用mongo,100個程序同時寫入,並且不用batch,共寫入1億條,qps在50000以上。當然機器效能比較好,128g記憶體,24核,SSD。

沒有測過mysql,雖說mongo對寫入有優勢,但也不應該差距很大吧。

所以我覺得,如果不要求嚴格的順序寫入,那麼應對每秒幾千的資料量完全不是問題。問題在於寫入的時候是否需要保證比較高的查詢效能。

13樓:傲氣雄鷹

1.建三個主線程,每個主縣城下可以有若干讀寫執行緒,其中讀或者檢索執行緒的優先順序要高於寫入執行緒,每個執行緒負責乙個資料庫的操作,執行緒1的庫是個小型庫,主要儲存按照時間序列對資料進行分配的結果,就是這個時間序列下的資料是存入了2庫還是3庫。

執行緒1負責將資料根據時間序列進行分塊,按照時間順序將接收的資料進行分配,並將分配序列的結果存入主記憶體。

2庫為快取庫,3庫為主存庫。資料會優先寫入3庫,如果3庫寫入速度小的話,則同時對2庫進行寫入。每天繁忙時段結束後,從2庫轉入3庫。

讀取需求產生的時候,執行緒1根據時間序列檢索出儲存在2庫還是3庫,然後轉交給對應執行緒進行讀取,同時將寫入轉到另乙個庫。

如果有讀取請求,檢索分配結果後,按照結果將請求轉給執行緒2或3,同時將資料寫入非讀取操作的乙個資料庫。

2.購買若干pcie介面的ssd組建兩個raid,根據資料情況可以選擇乙個壓縮型主控的產品,建立乙個主存乙個緩衝庫。盡量消除硬體瓶頸。

如果一台機器打不到速度要求,可以執行在多台電腦,留一台快的儲存資料分配結果,將資料寫入並行分配給多台伺服器去寫入,除了有讀取操作的那台電腦外,其他的3000+臺都可以用於資料寫入。應該夠用了吧。

14樓:vvii

既然是資料入庫,肯定是為了更好的查詢。

而寫操作肯定會造成表鎖。所以無阻塞肯定是個偽命題。

如果能容忍先寫入,寫入完畢之後再查詢。而且又是用的FLUME,為什麼不嘗試下直接LOAD FILE 呢,非常高效的命令。

如果我來做這個事情的話,拋棄掉REDIS, FLUME直接按分鐘落地到本地檔案,單檔案10萬級別的資料量LOAD進去也就是幾秒鐘的事情。再把主從的讀寫分離做好,效能完全不是問題。

15樓:最愛肉鬆

抱歉確實沒遇到過這種情況。

這麼多行任何乙個資料庫都是挑戰。

顯然瓶頸在IO和MySQL上。Hadoop試試。不樂觀。

最好在redis這邊先清洗一下。

這個數量級的產品,理應選擇更理想的架構,nosql,普通話業務級產品已經不足以支援了。

16樓:石頭三顆

我只用過百萬級的資料架構而已。

以我粗淺的見識和經歷,堵塞多半都是發生在併發的時候鎖定資料造成的。你檢查一下業務邏輯會不會發生併發鎖同乙個位置?

如果是我來完成這個任務,可能我會採購一種訊息中介軟體(比如IBM的MQ)來處理資料寫入的佇列緩衝。(更多的技術細節我就不知道了,MQ我也沒用過,只是聽IBM來投標的時候提了一下。)

答得不好強答的,期待大神出來真正解惑。

每天 慢跑四公里有什麼作用?

行者老應 慢跑是有氧運動。長期堅持適當的有氧運動,能夠對身體產生非常大的積極影響。有氧運動的作用主要有 提高組織細胞有氧氧化酶活性,改善有氧代謝能力 改善心臟功能,防止心臟病的發生 增強肺的功能 增加骨骼密度,防止骨質疏鬆 減少體內多餘的脂肪,防止與肥胖有關的疾病發生,如糖尿病 高血壓 高血脂 改善...

每天跑5 6公里有必要買護膝嗎?

小邁君 每天都有跑步的話,而且跑5 6公里小邁君是建議您最好穿戴乙個基礎款的護膝,因為跑步初跑者很少能掌握到跑步的正確姿勢,這也就容易導致膝蓋在跑動的過程中由於跑步姿勢的不正確導致膝蓋損傷,前期徵兆一般就是膝蓋會感覺到疼,上下樓梯疼痛感會加倍,所以可以使用護膝做一些防護。護膝的作用簡單的說一下,護膝...

每天跑步五公里會對身體有危害嗎

曉宓 如果以前沒有跑步的習慣,突然每天5公里,膝蓋會受不了,會疼的腿彎不了。別問我怎麼知道的。而且膝蓋的乙個組織,半月板 不確定叫什麼 如果損傷了,是不能恢復的。 何吉 沒有,一點都沒有。就五公里的話,量不大,就算是200斤,只要你能每天跑到5公里那就隨便跑,跑多了體重就下來了。而且什麼傷膝蓋就是扯...