2012-12-17 42 views
1

http://martinfowler.com/articles/dblogic.html事務腳本是NoSQL數據庫的反模式嗎?

使用上述文章的術語,在處理SQL數據庫時,編碼的事務腳本模式顯然是反模式。

NoSQL數據庫(如MongoDB)也是如此嗎?假設nosql查詢將使用的列都被適當地編入索引。

我問這個問題的原因是:MongoDB中的查詢執行返回一個遊標,可以迭代遊標。我不知道的是,無論是否存在與其相關的性能損失。

+0

你爲什麼downvote這個問題 - 爲什麼? – Harry

+1

有許多種NoSQL數據庫,其理念完全不同。也許這對他們中的一些人來說是正確的,也許這對其他人來說是錯誤的。 – Philipp

回答

2

該文章描述了「事務腳本」作爲

[A]的過程中,可能需要的所有數據讀取,然後做內存的選擇和操作,以找出哪些[數據庫條目]是需要。

每個NoSQL數據庫都是不同的,所以你不能概括任何「NoSQL」。但是在幾乎每個數據庫系統中,儘可能多地對數據庫執行操作是個好主意。

  1. 只要您使用的數據庫的查詢語法,它至少可以在理論上使用索引來加快某些操作,但只要被返回的結果集,索引信息丟失,這使這些操作更加昂貴。
  2. 當您從數據庫中獲得一個巨大的結果集並在應用程序層上對其進行過濾時,必須通過網絡傳遞所有數據。根據網絡基礎架構的工作情況,這可能會成爲性能瓶頸(假設您的數據庫位於不同的物理服務器上 - 通常應該在生產環境中)。傳輸巨大的數據集還可以與數據庫或數據庫驅動程序的任何緩衝系統一起使用。

當您特別詢問MongoDB時:MongoDB數據庫的設計不像SQL數據庫那樣「智能」。設計假設SQL數據庫自己解決的許多問題在應用程序層上解決(約束,級聯刪除,連接,事務...)。查詢語法還不如40年SQL開發中積累的所有功能。這意味着你通常不會在應用程序層上進行過濾。但是,當查詢語法可以解決問題時,通常應該嘗試這樣做。