- 挑戰
- 如何保证数据的正确性和完整性,哪怕是在系统中发生错误的时候?
- 如何保证系统能够持续提供良好的性能,哪怕是在系统的部分组件已经降级的时候?
- 如何保证系统的弹性,来应对不断增长的负载压力?
- 追求
- 可靠性
- 可擴展性
- 處理更多loading的能力
- 向上、垂直擴展
- 向外、水平擴展
- 可維護性
- 可運維
- 全链路监控系统的运行情况,统计各项运行指标,全面记录日志,在出错的时候能够迅速定位到问题点。
- 簡單清晰
- 可演化
一、數據模型種類
1-1. 關係型數據模型 RDBM
- 數據以有關係的形式被組織起來
- 使用聲明式查詢語言
- 戰勝了網路模型、層級模型,後兩者使用命令式查詢語言
1-1-1. 聲明式查詢語言 vs 命令式查詢語言
- 解耦 vs 高耦合
- 聲明式查詢語言,如SQL
- 程序只需要声明想获取的数据
- 由数据库系统自己决定改如何获取信息
- 查询引擎可以基于不同的SQL,进行解析优化、索引优化,大大提高了查询的速度。
- 命令式查詢語言
- 程序必须明确地告诉数据系统具体的执行步骤,系统才能够一步步执行完成任务
- 要求程序员了解数据库系统的实现细节和约定
1-1-2. 結構失配
- 關係型數據模型是以二維結構儲存
- 現在大多程式語言都是面向對象,對象包含各種類型的數據,通常是用樹狀儲存在內存
- 對象與數據模型之間的轉換需要多層翻譯代碼
1-2. 文檔型數據模型
- NoSQL not only sql
- 解決SQL問題
- 結構固化難以擴展、不夠靈活
- 查詢效能差
- 代碼更簡單
- 適用於一對多關係(樹狀結構)
1-3. 圖數據模型