擴展數據庫的時候面臨諸多挑戰。
搜索
當搜索量很少的時候,搜索是簡單的事。
當搜索量上來,比如達百萬級的時候,可以把搜索內容按某種順序排列。比如在字典中,按字母順序排列。
并發
如果100萬人需要同時用這本字典,這就是并發。
如何解決這個問題呢?
把這本字典復制100萬份,專業術語叫"主從復制"。
再把100萬份復制字典放到每個人的手頭,專業術語叫"分布式策略"。
一致性
如果想修改字典,這時候100萬人都在使用著字典,怎么辦呢?
如果一本一本收回來修改,這就造成了一致性問題,有的修改了,有的還沒有被修改。
如果全部收回來修改,造成了可用性問題,即在字典被收回階段,人們無法使用字典。
還有一個方法,就是做一個"修改日志"或"附錄",不修改原先的字典,把"修改日志"或"附錄"分發給每個人。
死鎖
在同一時間,有成百上千的人要修改數據庫中的同一條數據,大家對這條數據都競爭。就像超市發禮品,越多的人爭相拿同一個禮品,這就造成競爭,造成大家互相擁擠堵塞都拿不到禮品。而在數據庫中,這叫"死鎖"。
總結:在現實場景中,數據庫分布在不同的地方,會出現很多人在同時修改同一條數據。這時候需要數據庫設計,需要處理高并發避免死鎖保持一致性,需要環環相扣的算法,這夠很多數據庫牛人忙活一陣子了。最終給用戶的感覺或假象是:數據庫只有一份拷貝,同一時間只有一個人在修改,用戶看到是最新的數據,并且能立即響應。
參考資料:極客學院公眾號
新聞熱點
疑難解答