程式的效能與程式設計師的思維

2021-04-13 09:43:05 字數 1278 閱讀 9028

又有一段時間沒有寫blog了, 這段時間在忙著做實驗, 寫 一些perl的指令碼程式, mining一些資料, 其實程式本身並沒有什麼, 但是剛開始的時候沒有認識到, 要處理的資料量很大, 所以效能成為了程式的瓶頸.

我的工作主要是parse乙個文字字串, 將其中一些field 往資料庫裡面塞, 如果是處理100條這樣的串, 那隨便怎樣都可以了, 讀一行檔案, 處理一行, 然後往資料庫裡面insert 一條記錄; 如果處理的是 100 萬 條資料, 那麼就可以處理出1萬行, 然後一次性插入資料庫, 連著寫 一萬個 insert into values 的語句. 當然, 如果你嫌慢, 可以這樣做, 開闢乙個大的緩衝區 buffer1 讀資料, 但後處理出來放入 buffer2. 讓buffer2 往資料庫裡面塞. 當然了, 你還可以用多執行緒來加速這個過程, 如果用的是多核cpu 當然最好了.  如果這樣你還覺得慢的話, 就可以用資料庫的 bulk insert, 首先將buffer2 寫入檔案, 然後讓資料庫bulk insert 這個檔案. 請你不要認為寫檔案會耽擱時間, 實際上 先寫入檔案再bulk insert 的速度 要比 連著 insert 資料庫快 20 倍. 我做過這個實驗. 用 c++, c# 插資料庫要比 perl 快一些, 大約 perl 是 c++ 的 1.3 倍, 然後記憶體中一次性插入 多條 記錄要比一次一條 快 2倍左右, bulk insert 比 用多條插入 快 20 倍.

可惜我面臨的問題不是 100 萬, 而是 1 萬 個 100 萬, 資料庫可以 插那麼多的記錄, 可是如果我要 join 表 或者是 select 什麼的, 就會很慢很慢了,  光是數 count 那就簡單,  group by 一下就ok了. 如果我還是用bulk insert 的話, 那我再等半年可能資料才能處理完, 到時候都過年咯, 呵呵.

唉, 沒辦法, 只有考慮用 分布式 的資料庫, 可見什麼東西, 是有需要才用的, 沒有那個必要, 就不會用了.

在此之前, 還寫過乙個簡單的parser , 結果用 c# 實現同樣的功能要快 10 倍, 因為我在 perl 的parser 裡面加入了一些複雜的 正規表示式, 運算的複雜度很大, 一下子就慢了下來, 結果需要很快的跑出結果, 就需要重新思考.

就我個人經驗, 很多時候, 剛開始寫乙個程式, 可能並沒有意識到這個程式將要面臨的挑戰, 所以往往寫完了改, 測試, 反正是總要出點問題才甘心的. 以前總是為了趕任務, 寫的快, 現在才發現, 磨刀不誤砍柴工啊, 以此提醒程式設計師兄弟們, 1天寫 1萬行程式, 其實不算什麼的,  關鍵要看你這個程式 做了一些什麼事情.

寫好程式之後, 還請多思考思考, 這個程式處理這個問題合適嗎? 時間上來的及嗎? 還能夠優化嗎?

男程式設計師思維VS女程式設計師思維

今天下午參加了乙個技術分享,產生了一些想法。本文沒有什麼理論性,也沒有什麼科學性,單純主觀感受。如果您讀後有所收穫,那就再好不過啦。先說事情的流程 知識點就不涉及了,主要講講大boss問的問題帶給我的思考。問題 1 2 請參考上圖 1 問題 為什麼不能直接通訊,而是經過 解決 這就能牽扯出 這一部分...

程式設計師的營銷思維

前言 大學本科讀的是理工科,從大學畢業後,走上了程式設計師的道路。每天開啟電腦第一件事就是敲寫 也就是網際網路流傳的專業術語 碼農 有大部分人把自己經營成了乙個ip 給自己貼乙個營銷標籤 別人知道你幹什麼,相互了解才會有更深入的合作。程式設計師只會埋頭寫 不會學會營銷自己,職業生涯越走越窄。給大部分...

程式設計師的思維方式

讀書不覺已春深,一寸光陰一寸金。不覺間實習已近四周,我想起這首詩,並非標榜自己學習,工作有多投入,而是感慨時間靜悄悄得溜過,只有當你回首時,才能覺察到它的存在且已過去。這幾周的工作主要都是修改公司專案的bug,通過修改bug,我思考了下網際網路人工作對自身思維的影響,這裡只粗 談產品經理,測試人員和...