1 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
在我為尋找我想為我的新網(wǎng)站使用哪種語(yǔ)言而進(jìn)行的測(cè)試中,我嘗試了 php、golang 和 java。我對(duì)任何一種語(yǔ)言都沒(méi)有太多經(jīng)驗(yàn),所以我在這里所說(shuō)的任何內(nèi)容都可能在將來(lái)被某人糾正。
我的主要測(cè)試是批量插入到 mysql 數(shù)據(jù)庫(kù)中,因?yàn)槲业膽?yīng)用程序需要它。
我想遠(yuǎn)離 php,因?yàn)樗且环N非編譯的舊腳本語(yǔ)言,在很多方面都比 golang 和 java 慢。對(duì)于很多事情來(lái)說(shuō),這也是一種笨拙的語(yǔ)法。然而,對(duì)于大型“事務(wù)”,php mysqli 實(shí)際上比 golang 快 2 倍,除非你笨拙地生成許多 go-routines 來(lái)劃分工作。
在我的測(cè)試和研究過(guò)程中,我發(fā)現(xiàn)了一些事情。
PHP mysqli“交易”api 可能正在使用某種批處理操作來(lái)完成“交易”,因?yàn)?mysqli 沒(méi)有單獨(dú)的批處理功能,而且交易比單次插入更快。但在大多數(shù)其他語(yǔ)言中,事務(wù)不會(huì)自動(dòng)批處理所有內(nèi)容,甚至不會(huì)增加執(zhí)行時(shí)間。它們只是一種機(jī)制,可以在出現(xiàn)問(wèn)題時(shí)回滾事務(wù)中的所有內(nèi)容。在其他語(yǔ)言中增加執(zhí)行時(shí)間的是使用批處理。
但是現(xiàn)在 go mysql 接口的一大問(wèn)題似乎是沒(méi)有真正支持批處理操作。通過(guò)這樣做,我能夠?qū)?go 的執(zhí)行時(shí)間從 9.2 秒縮短到 3.9 秒,而無(wú)需生成其他 go 例程。但是由于沒(méi)有真正的支持,批處理操作只為批處理的第一個(gè)操作返回一個(gè)結(jié)果集。這對(duì)我來(lái)說(shuō)毫無(wú)價(jià)值,因?yàn)槲倚枰獮椴迦氲男蟹祷?autoinc ID。此設(shè)置還有其他問(wèn)題,我不會(huì)深入探討。
所以最后我在 tomcat 服務(wù)器上嘗試了 java。Tomcat/java 的安裝比 go 復(fù)雜一點(diǎn),但是用 java 編程要容易得多,也自然得多。JDBC 是一個(gè)優(yōu)秀的驅(qū)動(dòng)程序,完全支持使用準(zhǔn)備好的語(yǔ)句進(jìn)行簡(jiǎn)單的批處理操作。它僅在 1 秒內(nèi)完成了 100k 次插入。這是我書(shū)中的明顯贏家。加上 java 語(yǔ)法比 golang IMO 自然得多。
- 1 回答
- 0 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)