太久沒用sqlite, 外加之前使用的地方都是小資料的應用,沒啥必要做tuning,但是這次我的data有1,490,755 (約150萬筆),在這種scale下就發現之前的暴力法,即使有建Index, 還是不夠用了。
測試出來能夠增加效能的方法 (加上下面粗體的三行):
sqlite3_exec(db,』PRAGMA synchronous=OFF;』, NULL, 0, &msg);
sqlite3_exec(db, 『BEGIN TRANSACTION;』, NULL, 0, &msg);
sqlite3_exec(db, 『YOUR_STATEMENT』, NULL, 0, &msg);
剩下的1499998個statements
sqlite3_exec(db, 『YOUR_STATEMENT』, NULL, 0, &msg);
sqlite3_exec(db, 『COMMIT TRANSACTION;』, NULL, 0, &msg);
比較結果如下:
INSERT 1.5M筆 record
TUNE之前 每insert 10000筆約3分鐘
TUNE之後 做完1.5M筆record花費 1分13秒
UPDATE 1.5M筆 record
TUNE之前 超級久~~慢到我忍不住按Ctrl+C
TUNE之後 花費10分32秒
結論,INSERT變的超快,UPDATE速度也有顯著提升,不過UPDATE的速度還是不太理想,看到這篇文章的朋友不知道有沒有更好的方法可以分享呢?
中國反垃圾郵件聯盟是一個非營利的由一群熱心的中國網友所建立的。從建立到現在已經建立了一定的公信力以及很低的誤擋率,大陸/香港地區有非常非常多的人採用他們所提供的RBL(Realtime Block List)。
Continue reading ‘推薦中國反垃圾郵件聯盟(CASA)的RBL’
全世界都在推動電視訊號數位化,澳洲也不例外。在澳洲,數位電視採取的規格為DVB-T,很幸運的跟台灣是使用相同的規格,換句話說,你可以來澳洲前就先買好數位電視盒/棒來這邊使用,但是要怎麼買就是學問了,譬如說,在台灣看電視有字幕是天經地義、理所當然的,但是在這邊可不是,你的設備必須使用有支援解讀字幕訊號的功能,對我來說,看著自己喜歡的影集,配上英文的字母,可以快速且無負擔的增加我的聽力及閱讀能力,所以有沒有字幕的功能對我來說就超級重要了。於是乎有了這篇購買心得,希望看過這篇文章的人可以少走點冤枉路。
Continue reading ‘如何在澳洲收看有字幕的數位電視頻道’
念資工的人多數都是由C語言起家的,只要計概教到亂數產生的function時,授課老師總是會耳提面令的提醒著要記得使用srand()來產生一個random seed,否則每次跑出來的亂數都會是相同的,相信大家應該都有這段的印象才是。
於是,當我開始寫PHP後,也自然而然的將這個習慣套用進來,總是習慣先使用srand()產生亂數種子後,再用rand()產生亂數,直到前幾天,我亂翻PHP的Manual才在srand()說明頁看到下面這句話:
Note: As of PHP 4.2.0, there is no need to seed the random number generator with srand() or mt_srand() as this is now done automatically.
原來PHP 4.2.0以後,使用亂數前已經不用先指定產生亂數種子了,它會自動的幫你產生,所以自己多做無謂的事情已經有一段時間了 Orz~,雖然少這行呼叫對程式效率也不會有任何提升,但是能少打點字還是不賴啦,如果你有看到這篇文章,記得下次在寫PHP時可以直接呼叫rand()喔!
手邊有個服務需要圖片驗證(captcha)的功能,所以翻了一下之前寫的code,順便整理一下跟大家分享。這邊的code是產生出來的圖片是最簡單的樣式,僅是四個亂數產生的字母(有字母可能重複),外加上一些黑點雜訊來增加辨識上難度,為了避免黑點干擾造字母的辨識困難,我剔除掉一些長相相近的字母,希望增加使用者輸入正確的機率,畢竟圖片驗證是要拿來擋機器人而不是拿來刁難真正的人類阿。
Continue reading ‘簡單實作PHP圖片驗證’
也許是因為我跟MySQL太不熟,長久以來我都以為MySQL裡面的wildcard character只有 % 跟 * (for host and table name),所以我就被愚弄了 Orz
之前寫的一個的MySQL服務會自動的加上 『帳號_』 的prefix,昨天我在檢查MySQL的時候突然發現有個資料庫是 『帳號-』 的prefix,心中第一個想法就是』糟糕! 遇到高手,第一天就被人玩爛了』。後來看了一下log跟user的設定發現是先用系統建立一個 xxx_test的db,然後在程式端因為打錯字,打成了xxx-test,妙的是系統竟然也接受,即便這個user沒有create的權限!!
後來經過一番survey才發現原來』_『也是個wildcard character,所以一旦建立了xxx_test的資料庫以及其對應的權限,user就可以自由的建立 xxx*test(ex: xxx-test,xxxatest,xxxbtest)。所幸發現的早,一下就搞定這個因為我的無知而造成的bug Orz
結論,所有東西的refernece manual都應該乖乖的看阿 Orz
很多朋友轉換到Linux下的時候,再下載大型檔案時,往往會遭遇到網路速度緩慢,想要使用在Windows上面像是flashget這類的多線程軟體,來加速下載。這裡推薦一個好用的小軟體 – aria2c,不但能夠多線程下載檔案,也能夠拿來下載bittorrent的檔案(有支援DHT),不過下載bittorrent還是建議使用rtorrent比較威猛剛強一點,這邊介紹在Debian下面如何安裝使用aria2c。
在Debian下面安裝aria2c非常簡單:
apt-get install aria2c
多線程下載使用方法如下:
aira2c -s16 http://file.to.download/file.zip
-s 後面接的數字是線程數目,限制是1~16,應該可以滿足大多數人的需求,如果需要更高的數目,可以透過 -j 來增加。
如果你需要使用aria2c來下載bittorrent檔案,使用方法如下:
aria2c –enable-dht –listen-port=某個port –max-upload-limit=單一檔案上傳速度 –max-overall-upload-limit=全局上傳速度 –torrent-file=torrent檔案
上面簡單介紹了最常使用到的兩種功能,其他的細部設定請自行參酌aria2c的man page。
昨天在使用flashget下載自己在VPS上面的資料後,檢察apache log竟然發現一堆不速之客的連線,都在嘗試我之前抓過的那個檔案(還好我習慣不錯,抓完即砍),後來網路上翻了一下才發現,flashget 1.8之後的版本,會非常』好心『的將你曾經下載過的連結都傳送到
stats.flashget.com
所以當其他user嘗試下載相同檔案時,便會使用連結到你的連結去下載。我目前的鴕鳥是解決法是,編輯c:\windows\system32\drivers\etc\hosts,在最後加上一行:
127.0.0.1 stats.flashget.com
來解決。如果你常使用這類的下載軟體,建議其他套來使用吧,才是永保安康之策。
之前架設一台vpn時, 由dmesg看到一個警告訊息
『ip_conntrack: table full, dropping packet『
google了一下發現似乎是個還蠻常見的問題,通常是NAT user過多或是同時建立太多tcp connection,導致table爆炸,因為Linux Kernel在NAT預設的tcp timeout是五天,難怪user多就爆炸。所以改法很簡單,就是把table加大,timeout縮短即可,要注意的是table所使用的memory為
ip_conntrack_max * 232 Bytes
所以要小心大小,不要改的太爽,加到超過你記憶體能夠負擔的能力,步驟如下:
首先查看一下table size以及timeout預設是多少:
cat /proc/sys/net/ipv4/ip_conntrack_max
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
上面兩行指令能告訴你,目前機器上的table大小及tcp timeout時間
改法有二, 選一個你喜歡的作法即可 :Q
方法一:
sysctl -w net.ipv4.ip_conntrack_max=131072 (or 任何妳喜歡且不會爆的值)
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=600
(把這兩行寫到你的開機啟動檔裡面)
方法二:
編輯/etc/sysctl.conf, 加上下列兩行
net.ipv4.ip_conntrack_max=131072 (or 任何妳喜歡且不會爆的值)
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=600
這樣每次開機就會設定上去啦.
問題便可以因此解決。
如果沒有搞清楚這些動作, 常常在不該cleanup的部份就先cleanup了,害得後面一些還會被callup的method想access的東西都access不到。然後程式就爆走啦 XDD,為了避免自己重蹈覆轍,還是寫一篇來記錄一下。[這是我自己測出來的結果,使用的是BCB 6.0,若有錯誤還請幫忙指正,謝謝
]
Continue reading ‘BCB Form Create/Close Procedure Flow’
近期迴響