å¦ä½éæ©æ°æ®åº
æ³æ
å ¬ä¼å·ï¼æ³æ ççµ®å¨å¨
å ³æ³¨ä»
30 人èµåäºè¯¥æç«
æ们æ£å¨åä¸ä¸ªçµå书å°ç¨åºã
1.0 å±æ¬¡æ¨¡åæ°æ®åº
ç¨æ·è´ä¹°ï¼çæ订åï¼è®¢å详æ éæç¨æ·è´ä¹°ççµå书ï¼
ä¸å±ä¸å±éºå¼ï¼ä¸å¯¹å¤ï¼è¿æ¯ãå±æ¬¡æ¨¡åæ°æ®åºãï¼Hierarchical Databaseï¼ã
2.0 ç½ç¶æ¨¡åæ°æ®åº
ä¸ç¬è®¢åå¯ä»¥è´ä¹°å¤æ¬çµå书ï¼ä¸æ¬çµå书ä¹å¯ä»¥è¢«å¤ç¬è®¢åè´ä¹°ï¼
è¿å°±å½¢æäºãå¤å¯¹å¤ãçãç½ç¶æ¨¡åæ°æ®åºãï¼Network Databaseï¼ã
ä¸é¢è®²ç两ç§æ°æ®åºï¼ä¹è®¸ä½ å¬é½æ²¡å¬è¿ã
æ们ç¨çï¼æ¯ãå ³ç³»æ¨¡åãï¼èéä¸é¢çãå±æ¬¡æ¨¡åãæè ãç½ç¶æ¨¡åãã
为ä»ä¹ï¼
ä½ ä¼è¯´ï¼è¿æ ·ä¸æ¹ä¾¿éåææ订åã
并ä¸ä¼ï¼åå ä¸ä¸ªæ ¹èç¹å°±å¥½ï¼
ä½ ä¼è¯´ï¼è¿æ ·æ¥æ¾æçå¾ä½ã
ä¹ä¸ä¼ï¼å 为å¯ä»¥ä¼åä¸æ°æ®ç»æï¼æ¯å¦æ¢æ B+ æ ã
为ä»ä¹æ们ä»ä¸å¼å§å°±å¨ç¨ãå ³ç³»æ¨¡åæ°æ®åºãï¼
3.0 å ³ç³»æ¨¡åæ°æ®åº
æ 论æ¯å±æ¬¡æ¨¡åè¿æ¯ç½ç¶æ¨¡åï¼ç¨åºåçå°çï¼é½æ¯å®å®å¨å¨çç©çåå¨ç»æã
æ¥è¯¢æ¶ï¼ä½ è¦ç §çéé¢çæ°æ®ç»æï¼ç¨å¯¹åºçç®æ³æ¥æ¥ï¼
æå ¥æ¶ï¼ä½ ä¹è¦ç §çæ°æ®ç»æï¼ç¨å¯¹åºç®æ³æ¥æå ¥ï¼å¦åä½ å°±ç ´åäºæ°æ®çç»ç»ç»æï¼æ°æ®ä¹å°±åæäºã
å 为æ们é½æ²¡ç¨è¿åé¢ä¸¤ç§æ°æ®åºï¼æ以è§å¾ãå ³ç³»æ¨¡åæ°æ®åºãï¼ä»¥ä¸ç®ç§° RDBï¼çä¸åé½çæå½ç¶ï¼ä½å ¶å®ï¼å®ååºäºä¸ä¸ªé©å½æ§çåé©ï¼
ç¨é»è¾ç»æï¼logical representation of dataï¼ä»£æ¿ç©çç»æï¼physical representation of dataï¼
æè°ãé»è¾ç»æãï¼ä¹å°±æ¯æ们ç»å¸¸çå°çãè¡¨æ ¼ãï¼User æ¯ä¸å¼ è¡¨æ ¼ï¼Order æ¯ä¸å¼ è¡¨æ ¼ï¼Book åæ¯ä¸å¼ è¡¨æ ¼ï¼å®ä»¬ä¹é´çå ³ç³»ï¼ç¨ id æ¥å ³èï¼è¿äº idï¼å¯è½æ¯ number ç±»åï¼ä¹å¯è½æ¯ string ç±»å
ä½ä½ çå°çï¼ä¸ä¸å®å°±æ¯å®é çï¼ä½ çå°çåªæ¯è®©ä½ æ¹ä¾¿ç解çãé»è¾ç»æãï¼çå®æ°æ®èªç¶ä¸æ¯è¿æ ·æè¡¨æ ¼æ¥åå¨ï¼è¡¨æ ¼æ å¼äºä¸ä¸ªæ°ç»ï¼æ°ç»æ¥è¯¢æ¯å¾æ ¢çã
çå®çãç©çç»æãï¼ä¹è®¸è¿æ¯åãå±æ¬¡æ¨¡åãåãç½ç¶æ¨¡åãä¸æ ·ï¼æ¯å¤æçæ°æ®ç»æã
ä½å°åºæ¯ææ ·çæ°æ®ç»æï¼ä½ é½æ éå ³å¿ï¼ä½ åªéæå®æ³è±¡æä¸å¼ ã表ãå»æä½ï¼å°±è¿å¯è§åå·¥å ·ï¼é½ä¼å¸®ä½ ææ°æ®å¯è§åæ表ï¼æ¥æ¹ä¾¿ä½ ç解ã
è¿ä¸ªè§å¿µçæåºï¼æ¥èªäº 1970 å¹´ Codd çä¸ç¯è®ºæï¼A Relational Model of Data for Large Shared Data Banksï¼
Future users of large data banks must be protected from having to know how the data is organized in the machine (the internal representation).
Activities of users at terminals and most application programs should remain unaffected when the internal representation of data is changed and even when some aspects of the external representation are changed.
ââ Codd
Codd çè¿ç§ææ³ï¼å ¶å®å°±æ¯ç»æµå¦éæå°çï¼å工产çæè½ã
ç¨åºå们ä¸éè¦ç´æ¥åç©çç»ææ交éï¼åªè´è´£åè¯æ°æ®åºï¼ä»æ³åä»ä¹ï¼è³äºæ°æ®æ¯å¦ä½åå¨ãå¦ä½ç´¢å¼ï¼é½äº¤ç»æ°æ®åºï¼æç»ä»ä»¬çå°çå°±æ¯ä¸å¼ å¼ ç¹å«ç´è§ãç¹å«å¥½ç解ç excel è¡¨æ ¼ã
èæ°æ®åºåæç»´æ¤ç©çç»æçå¤æé»è¾ï¼äº¤ç»äºèªå·±ï¼ 对ç¨åºåå±è½äºå¤æçå®ç°ç»èã
å¼åæ¶åç代ç å°äºï¼è¦åæ§éä½äºï¼æ°æ®ä¹ä¸å®¹ææåï¼ä¹å°±æé«äºç产æçï¼productiveï¼ã
ä¸åè½ç¨åæ ·çèè½ï¼å¸¦æ¥æ´å¤æè½çææ¯ï¼é½ä¼è¢«å¹¿æ³ä½¿ç¨ã
NoSQL
é£åæ¥ä¸ºä»ä¹åæäº NoSQL å¢ï¼
å¨ RDB 被åæçæ¶ä»£ï¼è½¯ä»¶å¤ç¨äºå¤§åä¼ä¸ï¼æ¯å¦é¶è¡ãéèççï¼äººä»¬å¯¹æ°æ®çè¦æ±é常纯粹ï¼åç¡®ãå¯é ãå®å ¨ï¼è®©æ°æ®æç §ææï¼æ£ç¡®çåå ¥ï¼ä¸è¦ç»èåç®éé±å°±å¥½ï¼äºæ¯æäºå ·æ ACID ç¹æ§çäºå¡ï¼ååæ§ãä¸è´æ§ãé离æ§åæä¹ æ§ã
é£æ¶åç¨ç½ç»ç人å¾å°ï¼éè¿ç»ç«¯æ¥è®¿é®å®¢æ·ç«¯ç人ï¼æ´å°ï¼èªç¶çï¼æ°æ®åºçæ°æ®éå访é®éé½è·ç°å¨æ²¡æ³æ¯ï¼ä¸å°æºå¨ï¼è¶³ç£ï¼æå¤åæ¥ä¸ªä¸ä¸»å¤ä»ï¼
åæ¥ï¼ä½ ç¥éçï¼æ¯ä¸ªäººæéé½æ个ææºï¼æ¯åæ¯ç§ï¼é½ææåä¸ä¸çæ°æ®ï¼åå ¥ä½ çæ°æ®åºãä»ä½ çæ°æ®åºè¢«æ¥åºï¼äºæ¯æäºãåå¸å¼ãï¼æäº BASE å CAPãè¿æ¶åï¼RDB å°±ä¼åç°ï¼èªå·±ä¹åçé£ä¸å¥ ACIDï¼ç«ç¶æç¹ä½è§èªç¼äºï¼
为äºä¿è¯äºå¡çé离æ§ï¼è¦è¿è¡å éï¼å¨åå¸å¼çç¯å¢ä¸ï¼å°±è¦å¯¹å¤å°æºå¨çæ°æ®è¿è¡å éï¼
为äºä¿è¯äºå¡çååæ§ï¼å¨æºå¨ A çæä½åå¨æºå¨ B çæä½ï¼è¦ä¹ä¸èµ·æåï¼è¦ä¹ä¸èµ·å¤±è´¥ï¼
â¦...
è¿äºé½è¦å»ä¸åèç¹çæºå¨è¿è¡é讯ååè°ï¼å®ç°èµ·æ¥é常å¤æï¼èä¸è¦ä»åºæ´å¤çç½ç» IOï¼å½±åæ§è½ã
ACID å¨åå¸å¼ç³»ç»ä¸å®ç°èµ·æ¥å°±ä¼åå¾é¾ä»¥å®ç°ï¼å³ä½¿å®ç°äºï¼ä¹è¦ä»åºå¾å¤§çæ§è½ææ¬ï¼äºæ¯ææäºåæ¥çåç§ãåå¸å¼ä¸è´æ§åè®®ãï¼PaxosãRaftã2PC â¦â¦ è Mysql ä¹æä¾äºåç§æ¹æ¡æ¥å®ç°åå¸å¼ï¼å½ç¶ï¼è¿äºæ¹æ¡èªç¶æ¯å¾å¤æçï¼æ¯å¦ ãNDB Clusterã ï¼
è NoSQL å没æè¿ä¹å¤æ¿è¯ºï¼å®çä¸è´æ§ï¼ä¸è¬é½æ¯æç»ä¸è´æ§ï¼å½ç¶ä½ å¯ä»¥éæ©å¼ºä¸è´ï¼é£èªç¶å°±è¦ä»åºç¹æ§è½ä½ä¸ºä»£ä»·ï¼å½ç¶ä½ è¿å¯ä»¥å¼±ä¸è´ï¼è¿æ ·ä¼æ´ä¸å®å ¨ï¼ä½æ¯æ´å¿«ï¼ä¸ååå³äºä½ 对æ°æ®çè¦æ±ã
é¤æ¤ä¹å¤ï¼RDB çãæ°æ®åºèå¼ãï¼Database Schemaï¼ï¼ä¹æäºéå¶æ©å±æ§çç¶é¢ã为äºé¿å æ°æ®åä½å¯¼è´çåç§é®é¢ï¼å ç¨ç©ºé´ãå é¤å¼å¸¸ãæ´æ°å¼å¸¸ççï¼ï¼æ们å¨è®¾è®¡å ³ç³»æ¨¡åæ¶ï¼é常é½æ¯æç §æå°åä½æ¥è®¾è®¡çã
ä»ä¹å«æå°åä½ï¼æ¯å¦ç¨æ·æå°ååç±å¥½ï¼é£ä¹å¨æ£ç¡®è®¾è®¡çå ³ç³»æ¨¡åï¼æ¯å¦ 3NFï¼éï¼è¿å°±æ¯ä¸å¼ 表ï¼
å¦æè¿ä¸å¼ 表被åæ£å¨ä¸åçæºå¨ï¼é£è¿è¡å ³èæ¥è¯¢æ¶ï¼å°±éè¦å¤æ¬¡è·¨æºå¨çé讯ï¼
èå¯¹äº NoSQLï¼è¿ä¸ç±»ä¿¡æ¯ï¼é½å¯ä»¥å©ç¨ Json æ ¼å¼çæ°æ®ï¼å°å®ä»¬åæ¾å¨ä¸èµ·ï¼
å®æ´çåå¨è¿å»ï¼å®æ´çååºæ¥ï¼ä¸éè¦é¢å¤çæä½ã
NoSQL æ¯ RDB ææ´å¼ºçæ©å±æ§ï¼å¯ä»¥å åå©ç¨åå¸å¼ç³»ç»æ¥æå读åæ§è½åå¯é æ§ã
è¿ä¸æ¯è°è®¾è®¡å¥½åçé®é¢ï¼èæ¯è·ä»ä»¬è¦è§£å³çé®é¢æå ³ï¼RDB è¯çäºäºèç½èè½çæ¶ä»£ï¼é£æ¶æ°æ®çåç¡®ãå¯é æ¯æéè¦çï¼è NoSQL è¯çäºäºèç½å¿«éåå±æ®åçæ¶ä»£ï¼å¤§æ°æ®ãåå¸å¼ãæ©å±æ§æäºæ°æ®åºçå¦ä¸ä¸ªéè¦ç¹æ§ã
æ»ç»ä¸ä¸ï¼
RDB é¦å å¾æ¯åç¡®ãå¯é ï¼ç¶åæåæ´é«çãå¯æå±æ§ãåå±ï¼
è NoSQL çèåå¸å¼ï¼å¯æå±æ§å¼ºï¼ç¶åæåæ´é«çãåç¡®æ§ãåå±ã
NoSQL ï¼not only SQLï¼å ¶å®å°±æ¯å¯¹é£ç§æç ´äº RDB ä¸¥æ ¼äºå¡åå ³ç³»æ¨¡å约æçé£äºæ°æ®åºçæ³æï¼èéçè¦è§£å³çé®é¢çä¸åï¼åè¯çäºåç§åæ ·ç NoSQLã
é¦å æ¯ãåå¼æ°æ®åºãï¼Column-oriented DBMSï¼ï¼æ°æ®éä¸å»äºï¼æ们æ³åæç½ç«ç¨æ·çå¹´é¾åå¸ï¼ç®å说ï¼å°±æ¯ä½ éè¦å¯¹åä¸ä¸ªç¹å¾è¿è¡å¤§æ°æ®éçåæç»è®¡ï¼äºæ¯æåæ¥ RDB çãæè¡åå¨ãçèå¼æç ´ï¼åæäºãæååå¨ãï¼æ¯å¦ HBaseï¼
ç¶åä½ åç°æäºæ°æ®åå¨ä¸æ¯å¾å¤§ï¼ä½æ¯ç»å¸¸éè¦è¢«æ¥è¯¢ï¼ æ¥è¯¢æ¶è¿è¦å ³èå¾å¤å¼ 表ï¼äºæ¯ä½ æè¿äºæ¥èªä¸å表çæ°æ®ï¼ææä¸ä¸ªå¤§å¯¹è±¡ï¼æ key-value çæ ¼å¼åèµ·æ¥ï¼æ¯å¦ Redisï¼
ååæ¥ä½ éè¦å¯¹å客å 容è¿è¡ç¸å ³æ§æç´¢ï¼ä¼ ç» RDB ä¸æ¯æç¸å ³æ§æç´¢ï¼æéè¦çï¼è¿æ¯æ©å±æ§å·®ï¼å¢å æºå¨ç带æ¥è¾¹é æçæéï¼äºæ¯æäºãå ¨ææç´¢å¼æãï¼æ¯å¦ Elasticsearchï¼
é¤æ¤ä¹å¤ï¼è¿æãææ¡£æ°æ®åºãããå¾å½¢æ°æ®åºãâ¦â¦
没æä¸ç§æ°æ®åºæ¯é¶å¼¹ã
æ»ç»
è¿ç¯æç« çé¢ç®æ¯ãå¦ä½éæ©æ°æ®åºãï¼è¿æ¯å°æ°å¾å¤äººçé®é¢ï¼é£ä¹å¤æ°æ®åºï¼å°åºè¦éä»ä¹å¥½ï¼
å¯æ¯å½ä½ é®åºè¿æ ·ä¸ä¸ªé®é¢æ¶ï¼å ¶å®ä½ æ¯å¨é®ä¸ç§ãæ段ããæç°å¨è¦åè¿æ ·ä¸ä¸ªéæ±ï¼ç¨ä»ä¹æ°æ®åºå¯ä»¥å¸®æå®ç°å®ï¼
ä½å ¶å®ä½ éè¦çä¸åªæ¯ä¸ç§ãæ段ãï¼å 为å¦æ对æ¹ç©ç»ä½ ä¸ä¸ªå·å°å°çååï¼MysqlãElasticsearchãMongoDBï¼ä½ è¯å®ä¼é®ï¼åä»ä¹ï¼
ä½ éè¦çï¼æ¯ä¸ç§ã解å³æ¹æ¡ããå¦æä½ éè¦æ°æ®ååä¸¥æ ¼åç¡®ï¼å毫ä¸å·®ï¼é£æä¼æ¨èä½ éç¨ãäºå¡ãåãå ³ç³»æ¨¡åãæ¥å¤çæ°æ®ï¼å¦æä½ éè¦æ°æ®è½å¤è¢«å¤§é读åååå ¥ï¼é£æä¼æ¨èä½ æ©å±æ§å¼ºçãåå¸å¼ãï¼å¦æä½ çæ°æ®ç»å¸¸æ¯æ´ä¸ªè¯»åãæ´ä¸ªæ´æ°çï¼é£ãå ³ç³»æ¨¡åã就没æãæ档模åãéåä½ ã
ãäºå¡ãããå ³ç³»æ¨¡åãããåå¸å¼ãããæ档模åãççï¼è¿äºå°±æ¯ã解å³æ¹æ¡ãï¼ç¥éç¨ä»ä¹ã解å³æ¹æ¡ãï¼ç¨åªä¸ªæ°æ®åºï¼èªç¶æ°´å°æ¸ æã
æ£å¦ä¸ä½å¤§ç说çï¼
设计å®è·µä¸ï¼è¦åºäºéæ±ãä¸å¡é©±å¨æ¶æãæ 论éç¨ RDB/NoSQLï¼ä¸å®æ¯ä»¥éæ±ä¸ºå¯¼åï¼æç»æ°æ®åå¨æ¹æ¡å¿ ç¶æ¯åç§æè¡¡ç综åæ§è®¾è®¡ãç¨æ·ä¸ä¼å ä¸ºä½ ç¨äº Mysql æè MongoDB è使ç¨ä½ ç软件ï¼æ¯ç«ç»å¤§å¤æ°ç¨æ·é½ä¸ç¥é Mysql å MongoDB æ¯ä»ä¹ç©æã