在追求高并發性能的項目中,經常會遇到一個備受爭議的問題:是否需要在數據庫中使用外鍵約束?有人說,為了提升效率,需要禁止使用外鍵,這究竟是怎么回事呢?
事實上,在一些高并發場景下,確實會選擇不使用數據庫提供的物理外鍵約束。這并不是說完全放棄了外鍵的概念,而是避免依賴數據庫自身提供的外鍵特性來保證數據一致性。原因在于,數據庫層面的外鍵約束會影響數據庫的寫操作性能,尤其是在高并發環境下,外鍵檢查會成為性能瓶頸。
那么,如果不用物理外鍵,數據的一致性該如何保證呢?答案是:通過業務層來實現。 例如,當主表數據被刪除時,關聯表中相應的記錄也需要被刪除。使用物理外鍵可以方便地通過級聯刪除來實現,但如果禁用物理外鍵,則需要在業務邏輯層顯式地編寫代碼,分別對主表和關聯表進行刪除操作。 類似地,外鍵約束的更新操作也需要在業務層進行處理。
這種方式,將數據庫操作的原子性從數據庫層轉移到了應用層。應用層需要保證操作的原子性,通常需要事務機制來保證數據的完整性。
值得注意的是,很多高并發場景下,最終一致性就足夠了。 這也就是說,數據一致性不必嚴格要求在同一時刻完成,允許存在短暫的時間窗口,數據可能處于不一致狀態,但最終會達到一致。 這與強一致性(數據在任何時刻都必須保持一致)有所不同。 最終一致性能夠更好地適應高并發環境,并提升系統的吞吐量。 因此,放棄數據庫物理外鍵,并由應用層負責數據一致性,在很多高并發場景下是一種可行的方案。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END