我們很多人在我們的 web 網站上安裝 (ASP、 CGI 或 PHP) 的伺服器端腳本和許多此腳本在伺服器上存儲的資料。然而,設計不佳的腳本可以遇到性能問題,有時甚至忙 (和不太忙) 的 web 網站上的資料損壞。
如果你不是一個程式師,為什麼這關係到你嗎?
答: 即使你只正在安裝和使用伺服器端腳本,你要確保您選擇的腳本別隨機破或導致資料損壞。
第一,一些類型的腳本存儲在 web 伺服器上的資料的示例包括:
(當然,許多腳本中的這些 (和其他) 每個類別是精心設計的和非常好,即使在很忙的 web 網站上運行)。
1.後續行動自動回復通常存儲訂閱伺服器自動回應,以及其中的消息的序列,每個訂閱伺服器是清單。自動回應腳本的示例: http://www.scriptcavern.com/scr_email_auto.php
2.分類廣告腳本存儲訪客放置的所有分類廣告 (至少) 的清單。這種類型的腳本示例: http://www.scriptcavern.com/scr_classified.php
3.免費腳本存儲發佈的訪客的所有連結清單的所有連結。請參閱在列出一些示例腳本: http://www.scriptcavern.com/scr_ffa.php
4.頂級網站腳本通常存儲區的頂級網站的成員的清單,每個"票數"有關的資訊以及已收到。這種類型的腳本的示例,請參見 http://www.scriptcavern.com/scr_topsite.php
那麼什麼樣的腳本有問題?和談談什麼問題嗎?
好的原則問題,所有涉及到資料存儲在多個使用者需要從位在同一時間更新時,會發生什麼。一些腳本處理這些情況很好,但有的沒有...
資料損壞
下麵是常見的資料損壞問題可能出現的許多腳本:
1.當一些資料位需要更新,伺服器端腳本的副本開始運行,,然後開始對其進行更新。
2.如果另一個使用者出現,該腳本的第一個副本已完成之前,不會更新,第二個副本的腳本的啟動運行在同一時間。
3.有很多方法可以現在出問題,例如:
(a) 如果該腳本的第一個副本讀取的資料,然後第二個副本讀取相同的資料,然後第一個副本更新資料,然後第二個副本更新的資料嗎?答: 第一個腳本的副本所做的任何更改可以迷路。
(b) 如果腳本的第一和第二個副本都添加新資料的多個位元組到存儲在同一時間嗎?例如,假設每個需要存儲標題、 描述和分類廣告張貼的人的姓名。相,什麼能發生 (帶有一些腳本) 兩個分類廣告可以獲得混合,因此您可能會獲得 (例如) 標題 1,說明 1、 標題 2、 人 1,說明 2、 人 2。或更糟的是,你會得到每一部分的每個分類廣告,混的另位有位。這種類型通常是東西的真的壞消息,因為您的資料可能會因此變得不可用,從這點上。
這聽起來不太可能有問題,擔心不會嗎?別指望它...即使它發生在 1000 或 1 中 10,000 僅 1 次最終它將會發生: 您需要的解決方案。
所以,真正的問題是: 是程式師創建腳本,而這些問題不可能嗎?幸運的是,答案是肯定的還有很多程式師可以解決它的方法:
1.他們可以在一個單獨的檔中存儲資料的每一位。這不一定總的解決方案本身 (在特別是哪只是不,這仍可能有問題,如果腳本中的多個副本更新相同的檔,在同一時間的腳本),但它可以使資料損壞不大可能和如果確實出現腐敗,至少它不會破壞整個資料存儲中的,一次過。
2.他們可以使用檔鎖定。這意味著如果使用腳本的一個副本的檔,該腳本的另一個副本無法從該檔,直到完成第一份工作。檔鎖定的作品,如果做得正確,但程式設計它變成一個腳本需要做非常仔細、 確切地說,每個單一的可能情況 … … 甚至一個小小的錯誤或遺漏,可以允許在資料損壞通過後門程式的可能性 !
3.他們可以使用 (例如,MySQL) 資料庫來存儲資料。提供資料結構合理在資料庫中,資料庫處理的自動鎖定。程式師沒有寫自己特別鎖定常式,如錯誤和遺漏的可能性更減少了。
性能問題
當然,避免出現您已損壞的資料應為首要考慮選擇一個腳本,但還有什麼事情我們需要關注的是嗎?
答案: 性能
當然,所有網站管理員的目標建立 … … 忙高流量網站,但您的腳本將能夠處理負載嗎?
請返回並重新讀取鎖定檔的段落。現在想想如果分類頁面上的所有分類廣告被都存儲在單個檔 (或您的頂級網站上的所有連結或自動回應等的所有訂閱伺服器),會發生什麼。
會怎樣呢?
答: 因為每個更新只能執行一次更新已完全結束後,您的網站可能緩慢,或甚至無法處理您所有的使用者請求。
解決方案是什麼?
有兩個選項,程式師可以使用:
1.他們可以使用大量小檔和檔鎖定每個單獨 (示例、 分類的每一個,頂級網站清單等每一個)。當然,這需要非常小心處理...
2.他們可以使用資料庫 (如 MySQL),如資料庫允許進行更新,另一個也被更新時,甚至任何一個單個記錄 ("行")。
最後
現在,讓我們總結:
1.將資料存儲在檔中的腳本需要使用檔鎖定,以避免資料損壞,和他們還需要將資料劃分為分別可更新資料塊來避免繁忙的 web 網站的性能問題。
2 通常不大可能遇到資料損壞或性能問題.存儲 (如 MySQL),資料庫中的資料他們有了適當的編碼,當然提供的腳本。
和一個附加點:
3.即使最好的腳本不是免疫硬碟硬體故障,您的 web 主機遭雷擊以及可能會發生所有其他記分。所以,不要採取任何你不能輸不起的資料定期備份 !
簡而言之,即使你不是一個腳本程式師,你需要注意資料存儲問題。在將來,考慮到您的 web 網站的腳本,不要害怕一些難以回答的問題詢問如何將資料存儲,以及它如何處理多個使用者。
No comments:
Post a Comment