注意:這篇文檔寫於2000年5月。因此,它並不能說明MySQL的最新特性。但從中我們仍然可以了解RDBMS的一些基本概念、原理,從而在實踐中更好地應用數據庫,同時也才能對一些不實的炒作保持必要的警惕。
為何不用MySQL?
作者:Ben Adida 譯者:馬維達
幾乎每周、有時甚至更為頻繁,總有人會問我們為何不采用MySQL作為OpenACS的RDBMS(關系式數據庫管理系統)。ACS Classic team(ArsDigita)也一再地在他們的論壇上遇到同樣的提問。如果MySQL對於Slashdot來說足夠好的話,它也一定能夠用於OpenACS,不是嗎?
不對。 這篇簡短的論文將嘗試解釋為何MySQL不僅對OpenACS來說是錯誤的選擇,它也不應被用於任何處理關鍵數據的系統。
RDBMS的目的
RDBMS的目的是提供一種可靠的永久存儲機制,在ACID測試中具體表述了這種機制的非常嚴格的特性。我將直接引用Philip Greenspun的精彩解釋(以Oracle作為RDBMS的代表):
原子性(Atomicity)
事務的執行結果或者被全部提交、或者被全部回滾(roll back)。要麼所有的變動都生效,要麼就沒有變動生效。假定一個用戶正在編輯一條注釋,Web腳本告訴數據庫“將舊注釋值拷貝到審計表中,並用新文本更新活動表”。如果在拷貝之後、更新之前硬盤變滿的話,審計表插入就將被回滾。
一致性(Consistency)
數據庫從一種有效狀態轉換到另一種有效狀態。僅在服從用戶定義的完整性約束時,一個事務才是合法的。不允許非法的事務,而且,如果不能滿足某完整性約束的話,該事務會被回滾。例如,假定你定義了一條規則:論壇表中的帖子必須與有效的用戶ID相關聯。然後你雇用了Joe Novice來編寫管理頁面。Joe編寫了一個刪除用戶頁面,它不會檢查刪除是否會產生一些無主的論壇帖子。然而像Oracle這樣的RDBMS將會進行檢查,並中止任何事務,如果它產生的論壇帖子為已被刪除的用戶所擁有的話。