2011-05-01 15 views
0

我一直在使用python做一些簡單的網頁編程上的關係數據庫,而我的大部分參與生成和網頁服務的部位有基本的瞭解。但是,我只是對使用關係數據庫作爲存儲和檢索數據的方式有一絲懷疑。我確實瞭解SQL查詢和數據庫設計的基礎知識,但無法理解我應該如何做以允許併發訪問(以及其他方面)。如何去想網絡

考慮到這一點,我有幾個相當具體的問題。但是,對於每個問題,我只是對問題本身的答案部分感興趣。我主要關心我是否以正確的方式提出這些問題。所以這裏有雲:

  • 當使用關係數據庫中,你如何確保在寫入數據庫的多個線程不會互相干擾?
  • 可能有多個線程訪問數據庫會造成他們讀取的數據不同步的情況嗎?
  • 我應該如何管理從數據庫讀取/寫入權限?
  • 是否有東西不屬於數據庫(圖像,大塊文本)?

我很喜歡對這些特定問題的任何評論,或者是指向任何資源的指針,這些資源描述了在Web上使用關係數據庫的正確方法。

回答

3

很多關注點都被DBMS抽象掉了。你通常不需要強調線程/併發相關的東西。你可以做的是將插入/更新/查詢分組到事務中,以使它們更加原子化,並確保全部或不發生任何事情。例如,如果這些交易受到中途干擾,則可以回滾這些交易。

你沒有提到你使用的是什麼DB,但是這裏有一個小型的DB-agnostic介紹交易。當然你也應該查看你的數據庫的官方文檔。

http://www.sqlteam.com/article/introduction-to-transactions

至於「什麼事情沒有在數據庫中屬於」,圖像和文本的大塊的罰款。你可以存儲二進制斑點,如果它對你正在做的事情有意義,你可以存儲代碼。我建議的一件事是,您考慮將數據直接存儲在數據庫中還是存儲位於服務器上的文件的路徑/文件名是否符合您的興趣。

1

是我應該做的,允許併發訪問

你讓數據庫搞定,這就是它是專爲。


  • 當使用關係數據庫中,你如何確保多個線程不會互相干擾,同時寫入數據庫?

數據庫將處理這個。有時這意味着其中一個查詢會中止以避免死鎖。您需要在代碼中檢測到這一點。

  • 可能有多個線程訪問數據庫的創建中,他們正在閱讀的數據是不同步的情況?

是的,這是可能的。你可以做的事情並不多 - 這是多個線程讀取/寫入相同數據的結果。有跡象表明,你可以使用同步命令,但這些可能會對性能產生影響。

  • 我該如何管理從數據庫讀取/寫入的權限?

通過數據庫安全機制,無論它們是什麼。

  • 是否有沒有在數據庫中屬於(圖像,大文本)的東西?

大文件,但即使這取決於應用程序。將應用程序數據存儲在數據庫中

0

我不會直接向Web公開數據庫;我會在客戶端和數據庫之間有一箇中間層來處理認證和授權,驗證和綁定,數據庫訪問的同步和隔離等事情。

這樣做可以讓我通過添加更多中間多層硬件。