Key Technologies - Database
Key Technologies
系統設計面試會要求你像堆積木一樣層層架構出你的產品設計架構,這代表你需要知道每個組件(積木)能夠做什麼,但通常不會要求你知道某個具體的技術解決方案,只要能夠選擇一個合適的就好,不過你就必須對市面上常見的技術跟工具有所了解,知道它們可以用在什麼場景,才能應對大多數系統設計的挑戰。
系統設計面試,深度是與你面試的職等成正比的,而前期你應該關注的是廣度,知道每個組件可以做什麼,然後再向下探討它們背後是怎麼做到的。
Core Database
照理來說,你一定會需要一個資料庫來儲存你的資料,如果你面試的職位專注在產品設計的話,你會需要強一致性,關聯式資料庫(RDBMS)大概率可以滿足你的需求,如果你面試的職位專注在基礎設施的話,那高可用性跟可應對海量資料的 NoSQL 會是你的不二考量。
在當前 NoSQL 跟 RDBMS 已經有高度的功能重疊,而且大多數場景兩者都能夠辦到,因此去比較這兩者在大多數情況都是不必要的,而且這類比較很可能會因為不精確導致你透露出自己的不熟悉,如果面試官要求你去比較,一個好的技巧是,談論你熟悉的資料庫、比較它們的差異、說明它們如何影響你的設計,舉例來說,當你選擇 PostgreSQL 時,可以強調其 ACID 屬性,如何幫助你維護數據的一致性與完整性
Relational Databases
RDBMS,是常見的資料庫選項,使用 SQL 作為查詢語言,具有 ACID 的特性,在大多數情況下你都可以無腦選擇它作為你的資料儲存方案。
而 RDBMS 最著名的就是其 Transaction、Index、SQL Join,常見的選擇有 MySQL、Postgres,而 CMU 教授最愛 Postgres,此文章也推薦 Postgres
NoSQL
不是傳統 RDBMS 的可以稱為 NoSQL,包含 key-value、document、column-family、graph formats,NoSQL 給予更高的彈性、擴展性、可用性,通常選擇 NoSQL 的場景是在面對海量資料時,你需要快速的讀寫,並且這些資料的結構還沒有定案,需要可以隨著需求進行動態調整,同時這些 NoSQL 都有提供各式的一致性選擇,從最終一致性到強一致性都有,聽起來很完美,不過缺乏了 SQL 提供的靈活查詢語法、RDBMS 複雜的關聯操作、表示一對一、一對多的關聯性。
關於 NoSQL,你需要知道
- 資料模型:針對不同資料類型需要選擇不同的 NoSQL,每個資料庫都有針對該類型的資料有特殊的優化
- 一致性模型:提供各式資料模型,從最終一致性到強一致性都有,
- Indexing:NoSQL 也有提供 indexes
- Scalability:NoSQL 提供 一致雜湊、sharding 來讓你將資料分發做到水平擴展
常見的選項有 MongoDB 和 DynamoDB,作者推薦 DynamoDB