PHP Artisan Tanker是一個(gè)流行的Laravel擴(kuò)展,可以方便地管理和維護(hù)數(shù)據(jù)庫(kù)中的大型數(shù)據(jù)集。對(duì)于大型網(wǎng)站,使用Tanker插件將大幅度提高數(shù)據(jù)插入速度和性能優(yōu)化。
首先,通過(guò)它的示例以及手動(dòng)操作基礎(chǔ),我們來(lái)理解它是如何工作的。一個(gè)典型的場(chǎng)景是:有一份包含大量用戶(hù)的CSV文件需要導(dǎo)入數(shù)據(jù)庫(kù)中。在無(wú)Tanker情況下的傳統(tǒng)方法,我們需要學(xué)會(huì)sql語(yǔ)言、打開(kāi)mysql交互命令行工具、處理轉(zhuǎn)義符等等。使用種種方法綁定數(shù)據(jù)。最大的缺點(diǎn)是,數(shù)據(jù)量越大,我們遇到的問(wèn)題就會(huì)越多,尤其在性能方面。
但是如果你使用Tanker,要做的事情就變得非常簡(jiǎn)單。使用Artisan命令行工具和Tanker插件,你只需要將它的類(lèi)名與拉取的csv文件匹配,然后運(yùn)行一個(gè)Artisan命令。它會(huì)將文件中的數(shù)據(jù)直接導(dǎo)入到你的數(shù)據(jù)庫(kù)中。
以下給出代碼示例
php artisan csv:import Models\User /path/to/csv/file.csv這個(gè)命令會(huì)將CSV文件中存儲(chǔ)的用戶(hù)數(shù)據(jù)導(dǎo)入到User的模型中。這個(gè)操作是非??焖俚模梢蕴幚泶罅康臄?shù)據(jù)。而且這個(gè)過(guò)程是很安全的,因?yàn)椴迦胄聰?shù)據(jù)時(shí),Tanker會(huì)自動(dòng)對(duì)其進(jìn)行去重,不會(huì)在數(shù)據(jù)庫(kù)中插入重復(fù)數(shù)據(jù)。 另一個(gè)非常方便的功能是通過(guò)Tanker創(chuàng)建的單元測(cè)試。我們可以使用Artisan測(cè)試命令來(lái)測(cè)試Tanker的功能,從而確保它們能夠正確地工作。如果你想要驗(yàn)證任何一個(gè)Model是否可以被導(dǎo)入,你可以使用以下命令:
php artisan csv:test Models\User這個(gè)命令會(huì)確保User模型可以被成功導(dǎo)入。而且,如果測(cè)試失敗,它也會(huì)讓你知道究竟失敗了哪里。 最后,我們需要明確一個(gè) Tanker 的限制,就是所有導(dǎo)入的數(shù)據(jù)只能導(dǎo)入到一張表中。因此,如果你想導(dǎo)入的數(shù)據(jù)跨越多個(gè)表,需要分別單獨(dú)處理。但是,如果你想要將數(shù)據(jù)重新導(dǎo)入到一個(gè)不同的數(shù)據(jù)庫(kù)中,Tanker插件仍然是非常強(qiáng)大的工具。 總之,通過(guò)PHP Artisan Tanker來(lái)處理大型數(shù)據(jù)集是非常簡(jiǎn)單的。而且由于這個(gè)工具是使用了Laravel框架的最佳實(shí)踐方法,它的性能和可靠性都非常優(yōu)秀。您只需要簡(jiǎn)單配置一下命令行,其中的一些細(xì)節(jié)就留給Tanker來(lái)處理吧。