在MySQL中維護數據庫視圖有時很麻煩。當你改變一張引用的表格時,你必須改變這張表格,並且在遷移過程中沒有乾淨的方法(DB::unprepared()
)。我想在模型中使用query scopes更可維護。不是嗎?它是否對性能有負面影響?我應該避免在Laravel項目中使用數據庫視圖嗎?
回答
我不知道你的項目有多大,我沒有很多元素來完美地判斷這種情況。
但是,使用視圖意味着取決於底層數據庫系統。顯然它有其優點和缺點,但我更願意分離我的軟件組件。
如果你改變,在未來,從MySQL的切換到MongoDB的?
也許,您可以使用緩存系統,如Redis或Memcached(並且Laravel 已經有一個現成的服務)。
正如我之前告訴過你的,我基本上是在提出這個建議,因爲我考慮了軟件可伸縮性和組件解耦。此外http://laravel.com/docs/5.1/cache
,如果你有一些信心與設計模式,你可以使用一些堆放倉庫旁邊的裝飾模式實現一個真正優雅的解決方案:
在這裏你可以瞭解的基本使用緩存服務。
您可以找到有關的話題在這裏的一些有趣的文章:
- http://culttt.com/2014/02/03/laravel-4-cache-service/
- http://culttt.com/2014/04/23/decorator-pattern/
是的,他們是約Laravel 4,但這個概念可以很容易地在Laravel通過5. *項目。
希望它有用!
編輯:正如我在以下評論中所說的,如果你不想從Redis或Memcached之類的東西開始,你總是可以使用基於文件系統的緩存。
我同意了。但是,扮演魔鬼的擁護者 - 多久換一次數據庫系統?有時候,最好使用可用的工具,以便您可以編寫您現在需要的apis,而不是考慮未來可能不會發生的更改。 – Amo
我部分同意你的看法。你說的是對的,但在我的生活中,我看到很多情況下花費幾個小時可以大大改變一切。另外,如果你喜歡Cache服務的想法,你總是可以使用基於**的文件系統**。它可以是一個很好的入門者,它不需要配置! :) –
- 1. 我應該避免重複數據庫中的條目嗎?
- 2. 我應該避免在foreach循環中查詢數據庫嗎?
- 3. 我應該避免在Rails視圖中檢查零嗎?
- 4. 我應該避免在CSS中使用!important嗎?
- 5. 避免在列表視圖項目中使用多個佈局
- 6. 我應該在生產應用程序中避免打包嗎?
- 7. 我應該避免使用STATIC vaiables
- 8. 我們應該避免使用LEFT JOIN
- 9. 我應該用guard子句,並試圖避免else子句嗎?
- 10. 我應該避免使用這些數據類型TEXT,NTEXT?
- 11. 我應該避免使用Monad失敗嗎?
- 12. 如何避免在視圖中打數據庫
- 13. 避免在Rails視圖中使用nil
- 14. 我應該在我的新Xcode項目中使用autolayout嗎?
- 15. 我應該在我的項目中開始使用java7嗎?
- 16. 我應該避免在IIS中安裝WordPress嗎?
- 17. 我應該在我的MVC視圖中使用Url.Content()或ResolveUrl()嗎?
- 18. 我應該在SQLite數據庫中存儲圖像嗎?
- 19. 我應該在大型表的查詢中避免使用ORDER BY嗎?
- 20. 我是否應該避免在SQL中使用循環?
- 21. 使用該項目發佈數據庫
- 22. 使用Rails 3.2,應該避免在視圖中包含條件JavaScript?
- 23. 我們應該避免變量的複數名稱嗎?
- 24. 我應該在網站項目中使用aspnet_compiler嗎?
- 25. 避免視圖
- 26. 我應該如何操作Laravel數據庫遷移數據?或者我應該在別的地方去做嗎?
- 27. C++程序員應該避免memset嗎?
- 28. 「雙重」任務 - 應該避免嗎?
- 29. 在laravel視圖中使用URL數據
- 30. 我應該在加密CloudSQL數據庫中的數據嗎?
這裏有很多事情要考慮,所以我不認爲有任何真正的建議可以包含任何未來的項目。查詢範圍在Laravel應用程序的上下文中可能更易於維護,但它們與視圖不完全相同,這使得這種奇怪的比較成爲可能。在某些情況下,視圖可以具有更好的性能,但這取決於您使用的數據庫系統。所以底線是你應該使用最適合該特定項目的任何工作。在性能至關重要的情況下,完美的可維護性可能會帶來一些衝擊。 – Bogdan
我同意Bogdan關於查詢範圍。他們是完全不同的東西...... –