ä»ä¹æ¯NoSQL
ãã大家æ没æå¬è¯´è¿âNoSQLâå¢?è¿å¹´ï¼è¿ä¸ªè¯æåå
³æ³¨ãçå°âNoSQLâè¿ä¸ªè¯ï¼å¤§å®¶å¯è½ä¼è¯¯ä»¥ä¸ºæ¯âNo!SQLâç缩åï¼å¹¶æ·±ææ¤æï¼âSQLæä¹ä¼æ²¡æå¿
è¦äºå¢?âä½å®é
ä¸ï¼å®æ¯âNot Only SQLâç缩åãå®çæä¹æ¯ï¼éç¨å
³ç³»åæ°æ®åºçæ¶å就使ç¨å
³ç³»åæ°æ®åºï¼ä¸éç¨çæ¶åä¹æ²¡æå¿
è¦é使ç¨å
³ç³»åæ°æ®åºä¸å¯ï¼å¯ä»¥èè使ç¨æ´å åéçæ°æ®åå¨ã
ãã为弥补å
³ç³»åæ°æ®åºçä¸è¶³ï¼åç§åæ ·çNoSQLæ°æ®åºåºè¿èçã
ãã为äºæ´å¥½å°äºè§£æ¬ä¹¦æä»ç»çNoSQLæ°æ®åºï¼å¯¹å
³ç³»åæ°æ®åºçç解æ¯å¿
ä¸å¯å°çãé£ä¹ï¼å°±è®©æ们å
æ¥çä¸çå
³ç³»åæ°æ®åºçåå²ãåç±»åç¹å¾å§ã
ããå
³ç³»åæ°æ®åºç®å²
ãã1969å¹´ï¼åå¾·å ?6?1å¼å
°å
?6?1ç§å¾·(Edgar Frank Codd)å表äºåæ¶ä»£ç论æï¼é¦æ¬¡æåºäºå
³ç³»æ°æ®æ¨¡åçæ¦å¿µãä½å¯æçæ¯ï¼åç»è®ºæçãIBM Research Reportãåªæ¯IBMå
¬å¸çå
é¨åç©ï¼å æ¤è®ºæåå平平ã1970å¹´ï¼ä»å次å¨åç©ãCommunication of the ACMãä¸å表äºé¢ä¸ºâA Relational Model of Data for Large Shared Data banksâ(大åå
±äº«æ°æ®åºçå
³ç³»æ¨¡å)ç论æï¼ç»äºå¼èµ·äºå¤§å®¶çå
³æ³¨ã
ããç§å¾·ææåºçå
³ç³»æ°æ®æ¨¡åçæ¦å¿µæ为äºç°ä»å
³ç³»åæ°æ®åºçåºç¡ãå½æ¶çå
³ç³»åæ°æ®åºç±äºç¡¬ä»¶æ§è½ä½å£ãå¤çé度è¿æ
¢èè¿è¿æ²¡æå¾å°å®é
åºç¨ãä½ä¹åéç硬件æ§è½çæåï¼å ä¹ä½¿ç¨ç®åãæ§è½ä¼è¶çä¼ç¹ï¼å
³ç³»åæ°æ®åºå¾å°äºå¹¿æ³çåºç¨ã
ããéç¨æ§åé«æ§è½
ããè½ç¶æ¬ä¹¦æ¯è®²è§£NoSQLæ°æ®åºçï¼ä½æä¸ä¸ªéè¦ç大åæï¼è¯·å¤§å®¶ä¸å®ä¸è¦è¯¯è§£ãè¿ä¸ªå¤§åæå°±æ¯âå
³ç³»åæ°æ®åºçæ§è½ç»å¯¹ä¸ä½ï¼å®å
·æé常好çéç¨æ§åé常é«çæ§è½âã毫æ çé®ï¼å¯¹äºç»å¤§å¤æ°çåºç¨æ¥è¯´å®é½æ¯æææç解å³æ¹æ¡ã
ããçªåºçä¼å¿
ããå
³ç³»åæ°æ®åºä½ä¸ºåºç¨å¹¿æ³çéç¨åæ°æ®åºï¼å®ççªåºä¼å¿ä¸»è¦æ以ä¸å ç¹:
ããä¿ææ°æ®çä¸è´æ§(äºå¡å¤ç)
ããç±äºä»¥æ åå为åæï¼æ°æ®æ´æ°çå¼éå¾å°(ç¸åçå段åºæ¬ä¸é½åªæä¸å¤)
ããå¯ä»¥è¿è¡JOINçå¤ææ¥è¯¢
ããåå¨å¾å¤å®é
ææåä¸ä¸ææ¯ä¿¡æ¯(æççææ¯)
ããè¿å
¶ä¸ï¼è½å¤ä¿ææ°æ®çä¸è´æ§æ¯å
³ç³»åæ°æ®åºçæ大ä¼å¿ãå¨éè¦ä¸¥æ ¼ä¿è¯æ°æ®ä¸è´æ§åå¤çå®æ´æ§çæ
åµä¸ï¼ç¨å
³ç³»åæ°æ®åºæ¯è¯å®æ²¡æéçãä½æ¯æäºæ
åµä¸éè¦JOINï¼å¯¹ä¸è¿°å
³ç³»åæ°æ®åºçä¼ç¹ä¹æ²¡æä»ä¹ç¹å«éè¦ï¼è¿æ¶ä¼¼ä¹ä¹å°±æ²¡æå¿
è¦ææ³¥äºå
³ç³»åæ°æ®åºäºã
ããå
³ç³»åæ°æ®åºçä¸è¶³
ããä¸æ
é¿çå¤ç
ããå°±åä¹åæå°çé£æ ·ï¼å
³ç³»åæ°æ®åºçæ§è½é常é«ãä½æ¯å®æ¯ç«æ¯ä¸ä¸ªéç¨åçæ°æ®åºï¼å¹¶ä¸è½å®å
¨éåºææçç¨éãå
·ä½æ¥è¯´å®å¹¶ä¸æ
é¿ä»¥ä¸å¤çï¼
ãã大éæ°æ®çåå
¥å¤ç
ãã为ææ°æ®æ´æ°ç表åç´¢å¼æ表ç»æ(schema)åæ´
ããå段ä¸åºå®æ¶åºç¨
ãã对ç®åæ¥è¯¢éè¦å¿«éè¿åç»æçå¤ç
ãããããããã
ããNoSQLæ°æ®åº
ãã为äºå¼¥è¡¥å
³ç³»åæ°æ®åºçä¸è¶³(ç¹å«æ¯æè¿å å¹´)ï¼NoSQLæ°æ®åºåºç°äºãå
³ç³»åæ°æ®åºåºç¨å¹¿æ³ï¼è½è¿è¡äºå¡å¤çåJOINçå¤æå¤çãç¸å¯¹å°ï¼NoSQLæ°æ®åºåªåºç¨å¨ç¹å®é¢åï¼åºæ¬ä¸ä¸è¿è¡å¤æçå¤çï¼ä½å®æ°æ°å¼¥è¡¥äºä¹åæå举çå
³ç³»åæ°æ®åºçä¸è¶³ä¹å¤ã
ããæäºæ°æ®çåæ£
ããå¦åæè¿°ï¼å
³ç³»åæ°æ®åºå¹¶ä¸æ
é¿å¤§éæ°æ®çåå
¥å¤çãåæ¬å
³ç³»åæ°æ®åºå°±æ¯ä»¥JOIN为åæçï¼å°±æ¯è¯´ï¼å个æ°æ®ä¹é´åå¨å
³èæ¯å
³ç³»åæ°æ®åºå¾åç主è¦åå ã为äºè¿è¡JOINå¤çï¼å
³ç³»åæ°æ®åºä¸å¾ä¸ææ°æ®åå¨å¨åä¸ä¸ªæå¡å¨å
ï¼è¿ä¸å©äºæ°æ®çåæ£ãç¸åï¼NoSQLæ°æ®åºåæ¬å°±ä¸æ¯æJOINå¤çï¼å个æ°æ®é½æ¯ç¬ç«è®¾è®¡çï¼å¾å®¹æææ°æ®åæ£å°å¤ä¸ªæå¡å¨ä¸ãç±äºæ°æ®è¢«åæ£å°äºå¤ä¸ªæå¡å¨ä¸ï¼åå°äºæ¯ä¸ªæå¡å¨ä¸çæ°æ®éï¼å³ä½¿è¦è¿è¡å¤§éæ°æ®çåå
¥æä½ï¼å¤çèµ·æ¥ä¹æ´å 容æãåçï¼æ°æ®ç读å
¥æä½å½ç¶ä¹åæ ·å®¹æã
ããæåæ§è½åå¢å¤§è§æ¨¡
ããä¸é¢è¯´ä¸ç¹é¢å¤è¯ï¼å¦ææ³è¦ä½¿æå¡å¨è½å¤è½»æ¾å°å¤çæ´å¤§éçæ°æ®ï¼é£ä¹åªæ两个éæ©ï¼ä¸æ¯æåæ§è½ï¼äºæ¯å¢å¤§è§æ¨¡ãä¸é¢æ们æ¥æ´çä¸ä¸è¿ä¸¤è
çä¸åã
ããé¦å
ï¼æåæ§è½æçå°±æ¯éè¿æåç°è¡æå¡å¨èªèº«çæ§è½æ¥æé«å¤çè½åãè¿æ¯é常ç®åçæ¹æ³ï¼ç¨åºæ¹é¢ä¹ä¸éè¦è¿è¡åæ´ï¼ä½éè¦ä¸äºè´¹ç¨ãè¥è¦è´ä¹°æ§è½ç¿»åçæå¡å¨ï¼éè¦è±è´¹çèµéå¾å¾ä¸åªæ¯åæ¥ç2åï¼å¯è½éè¦å¤è¾¾5å°10åãè¿ç§æ¹æ³è½ç¶ç®åï¼ä½æ¯ææ¬è¾é«ã
ããå¦ä¸æ¹é¢ï¼å¢å¤§è§æ¨¡æçæ¯ä½¿ç¨å¤å°å»ä»·çæå¡å¨æ¥æé«å¤çè½åãå®éè¦å¯¹ç¨åºè¿è¡åæ´ï¼ä½ç±äºä½¿ç¨å»ä»·çæå¡å¨ï¼å¯ä»¥æ§å¶ææ¬ãå¦å¤ï¼ä»¥ååªè¦ä¾è«è¦ç»ç¢å¢å å»ä»·æå¡å¨çæ°éå°±å¯ä»¥äºã
ããä¸å¯¹å¤§éæ°æ®è¿è¡å¤ççè¯å°±æ²¡æ使ç¨çå¿
è¦åï¼
ããNoSQLæ°æ®åºåºæ¬ä¸æ¥è¯´ä¸ºäºâ使大éæ°æ®çåå
¥å¤çæ´å 容æ(让å¢å æå¡å¨æ°éæ´å®¹æ)âè设计çãä½å¦æä¸æ¯å¯¹å¤§éæ°æ®è¿è¡æä½çè¯ï¼NoSQLæ°æ®åºçåºç¨å°±æ²¡ææä¹å?
ããçæ¡æ¯å¦å®çãçç¡®ï¼å®å¨å¤ç大éæ°æ®æ¹é¢å¾æä¼å¿ãä½å®é
ä¸NoSQLæ°æ®åºè¿æåç§åæ ·çç¹ç¹ï¼å¦æè½å¤æ°å½å°å©ç¨è¿äºç¹ç¹å°ä¼æ¯é常æ帮å©ãå
·ä½çä¾åå°ä¼å¨ç¬¬2ç« å第3ç« è¿è¡ä»ç»ï¼è¿äºç¨éå°ä¼è®©ä½ æåå°å©ç¨NoSQLç好å¤ã
ããå¸æ顺ç
å°å¯¹æ°æ®è¿è¡ç¼å(Cache)å¤ç
ããå¸æ对æ°ç»ç±»åçæ°æ®è¿è¡é«éå¤ç
ããå¸æè¿è¡å
¨é¨ä¿å
ããå¤æ ·çNoSQLæ°æ®åº
ããNoSQLæ°æ®åºåå¨çâkey-valueåå¨âãâææ¡£åæ°æ®åºâãâååå¨æ°æ®åºâçåç§åæ ·çç§ç±»ï¼æ¯ç§æ°æ®åºåå
å«åèªçç¹ç¹ãä¸ä¸è让æ们ä¸èµ·æ¥äºè§£ä¸ä¸NoSQLæ°æ®åºçç§ç±»åç¹ç¹ã
ããNoSQLæ°æ®åºæ¯ä»ä¹
ããNoSQL说起æ¥ç®åï¼ä½å®é
ä¸å°åºæå¤å°ç§å¢?æå¨æç¬çæ¶åï¼å°NoSQLçå®æ¹ç½ç«ä¸ç¡®è®¤äºä¸ä¸ï¼ç«ç¶å·²ç»æ122ç§äºãå¦å¤å®æ¹ç½ç«ä¸ä¹ä»ç»äºæ¬ä¹¦æ²¡ææ¶åå°çå¾å½¢æ°æ®åºå对象æ°æ®åºçå个类å«ãä¸ç¥ä¸è§é´ï¼åæ¥å·²ç»åºç°äºè¿ä¹å¤çNoSQLæ°æ®åºåã
ããæ¬èå°ä¸ºå¤§å®¶ä»ç»å
·æ代表æ§çNoSQLæ°æ®åºã
ããkey-valueåå¨
ããè¿æ¯æ常è§çNoSQLæ°æ®åºï¼å®çæ°æ®æ¯ä»¥key-valueçå½¢å¼åå¨çãè½ç¶å®çå¤çé度é常快ï¼ä½æ¯åºæ¬ä¸åªè½éè¿keyçå®å
¨ä¸è´æ¥è¯¢è·åæ°æ®ãæ ¹æ®æ°æ®çä¿åæ¹å¼å¯ä»¥å为临æ¶æ§ãæ°¸ä¹
æ§å两è
å
¼å
·ä¸ç§ã
ãã临æ¶æ§
ããmemcachedå±äºè¿ç§ç±»åãæè°ä¸´æ¶æ§å°±æ¯ âæ°æ®æå¯è½ä¸¢å¤±âçææãmemcachedææææ°æ®é½ä¿åå¨å
åä¸ï¼è¿æ ·ä¿åå读åçé度é常快ï¼ä½æ¯å½memcachedåæ¢çæ¶åï¼æ°æ®å°±ä¸åå¨äºãç±äºæ°æ®ä¿åå¨å
åä¸ï¼æ以æ æ³æä½è¶
åºå
å容éçæ°æ®(æ§æ°æ®ä¼ä¸¢å¤±)ã
ããå¨å
åä¸ä¿åæ°æ®
ããå¯ä»¥è¿è¡é常快éçä¿åå读åå¤ç
ããæ°æ®æå¯è½ä¸¢å¤±
ããæ°¸ä¹
æ§
ããTokyo TyrantãFlareãROMAçå±äºè¿ç§ç±»åãå临æ¶æ§ç¸åï¼æè°æ°¸ä¹
æ§å°±æ¯âæ°æ®ä¸ä¼ä¸¢å¤±âçææãè¿éçkey-valueåå¨ä¸åmemcachedé£æ ·å¨å
åä¸ä¿åæ°æ®ï¼èæ¯ææ°æ®ä¿åå¨ç¡¬çä¸ãä¸memcachedå¨å
åä¸å¤çæ°æ®æ¯èµ·æ¥ï¼ç±äºå¿
ç¶è¦åç对硬ççIOæä½ï¼æ以æ§è½ä¸è¿æ¯æå·®è·çãä½æ°æ®ä¸ä¼ä¸¢å¤±æ¯å®æ大çä¼å¿ã
ããå¨ç¡¬çä¸ä¿åæ°æ®
ããå¯ä»¥è¿è¡é常快éçä¿åå读åå¤ç(ä½æ æ³ä¸memcachedç¸æ¯)
ããæ°æ®ä¸ä¼ä¸¢å¤±
ãã两è
å
¼å
·
ããRediså±äºè¿ç§ç±»åãRedisæäºç¹æ®ï¼ä¸´æ¶æ§åæ°¸ä¹
æ§å
¼å
·ï¼ä¸éåäºä¸´æ¶æ§key-valueåå¨åæ°¸ä¹
æ§key-valueåå¨çä¼ç¹ãRedisé¦å
ææ°æ®ä¿åå°å
åä¸ï¼å¨æ»¡è¶³ç¹å®æ¡ä»¶(é»è®¤æ¯15åéä¸æ¬¡ä»¥ä¸ï¼5åéå
10个以ä¸ï¼1åéå
10000个以ä¸çkeyåçåæ´)çæ¶åå°æ°æ®åå
¥å°ç¡¬çä¸ãè¿æ ·æ¢ç¡®ä¿äºå
åä¸æ°æ®çå¤çé度ï¼åå¯ä»¥éè¿åå
¥ç¡¬çæ¥ä¿è¯æ°æ®çæ°¸ä¹
æ§ãè¿ç§ç±»åçæ°æ®åºç¹å«éåäºå¤çæ°ç»ç±»åçæ°æ®ã
ããåæ¶å¨å
åå硬çä¸ä¿åæ°æ®
ããå¯ä»¥è¿è¡é常快éçä¿åå读åå¤ç
ããä¿åå¨ç¡¬çä¸çæ°æ®ä¸ä¼æ¶å¤±(å¯ä»¥æ¢å¤)
ããéåäºå¤çæ°ç»ç±»åçæ°æ®
ããé¢åææ¡£çæ°æ®åº
ããMongoDBãCouchDBå±äºè¿ç§ç±»åãå®ä»¬å±äºNoSQLæ°æ®åºï¼ä½ä¸key-valueåå¨ç¸å¼ã
ããä¸å®ä¹è¡¨ç»æ
ããé¢åææ¡£çæ°æ®åºå
·æ以ä¸ç¹å¾ï¼å³ä½¿ä¸å®ä¹è¡¨ç»æï¼ä¹å¯ä»¥åå®ä¹äºè¡¨ç»æä¸æ ·ä½¿ç¨ãå
³ç³»åæ°æ®åºå¨åæ´è¡¨ç»ææ¶æ¯è¾è´¹äºï¼èä¸ä¸ºäºä¿æä¸è´æ§è¿éä¿®æ¹ç¨åºãç¶èNoSQLæ°æ®åºåå¯çå»è¿äºéº»ç¦(é常ç¨åºé½æ¯æ£ç¡®ç)ï¼ç¡®å®æ¯æ¹ä¾¿å¿«æ·ã
ããå¯ä»¥ä½¿ç¨å¤æçæ¥è¯¢æ¡ä»¶
ããè·key-valueåå¨ä¸åçæ¯ï¼é¢åææ¡£çæ°æ®åºå¯ä»¥éè¿å¤æçæ¥è¯¢æ¡ä»¶æ¥è·åæ°æ®ãè½ç¶ä¸å
·å¤äºå¡å¤çåJOINè¿äºå
³ç³»åæ°æ®åºæå
·æçå¤çè½åï¼ä½é¤æ¤ä»¥å¤çå
¶ä»å¤çåºæ¬ä¸é½è½å®ç°ãè¿æ¯é常容æ使ç¨çNoSQLæ°æ®åºã
ããä¸éè¦å®ä¹è¡¨ç»æ
ããå¯ä»¥å©ç¨å¤æçæ¥è¯¢æ¡ä»¶
ããé¢ååçæ°æ®åº
ããCassandraãHbaseãHyperTableå±äºè¿ç§ç±»åãç±äºè¿å¹´æ¥æ°æ®éåºç°çåæ§å¢é¿ï¼è¿ç§ç±»åçNoSQLæ°æ®åºå°¤å
¶å¼äººæ³¨ç®ã
ããé¢åè¡çæ°æ®åºåé¢ååçæ°æ®åº
ããæ®éçå
³ç³»åæ°æ®åºé½æ¯ä»¥è¡ä¸ºåä½æ¥åå¨æ°æ®çï¼æ
é¿è¿è¡ä»¥è¡ä¸ºåä½ç读å
¥å¤çï¼æ¯å¦ç¹å®æ¡ä»¶æ°æ®çè·åãå æ¤ï¼å
³ç³»åæ°æ®åºä¹è¢«ç§°ä¸ºé¢åè¡çæ°æ®åºãç¸åï¼é¢ååçæ°æ®åºæ¯ä»¥å为åä½æ¥åå¨æ°æ®çï¼æ
é¿ä»¥å为åä½è¯»å
¥æ°æ®ã
ããé«æ©å±æ§
ããé¢ååçæ°æ®åºå
·æé«æ©å±æ§ï¼å³ä½¿æ°æ®å¢å ä¹ä¸ä¼éä½ç¸åºçå¤çé度(ç¹å«æ¯åå
¥é度)ï¼æ以å®ä¸»è¦åºç¨äºéè¦å¤ç大éæ°æ®çæ
åµãå¦å¤ï¼å©ç¨é¢ååçæ°æ®åºçä¼å¿ï¼æå®ä½ä¸ºæ¹å¤çç¨åºçåå¨å¨æ¥å¯¹å¤§éæ°æ®è¿è¡æ´æ°ä¹æ¯é常æç¨çãä½ç±äºé¢ååçæ°æ®åºè·ç°è¡æ°æ®åºåå¨çæç»´æ¹å¼æå¾å¤§ä¸åï¼åºç¨èµ·æ¥ååå°é¾ã
ããé«æ©å±æ§(ç¹å«æ¯åå
¥å¤ç)
ããåºç¨ååå°é¾
ããæè¿ï¼åTwitteråFacebookè¿æ ·éè¦å¯¹å¤§éæ°æ®è¿è¡æ´æ°åæ¥è¯¢çç½ç»æå¡ä¸æå¢å ï¼é¢ååçæ°æ®åºçä¼å¿å¯¹å
¶ä¸ä¸äºæå¡æ¯é常æç¨çï¼ä½æ¯ç±äºè¿ä¸æ¬ä¹¦æè¦ä»ç»çå
容å
³ç³»ä¸å¤§ï¼å°±ä¸è¿è¡è¯¦ç»ä»ç»äºã
ããæ»ç»ï¼
ããNoSQL并ä¸æ¯No-SQLï¼èæ¯æNot Only SQLã
ããNoSQLçåºç°æ¯ä¸ºäºå¼¥è¡¥SQLæ°æ®åºå 为äºå¡çæºå¶å¸¦æ¥ç对海éæ°æ®ãé«å¹¶å请æ±çå¤ççæ§è½ä¸çæ¬ ç¼ºã
ããNoSQLä¸æ¯ä¸ºäºæ¿ä»£SQLèåºç°çï¼å®æ¯ä¸ç§æ¿è¡¥æ¹æ¡ï¼èä¸æ¯è§£å³æ¹æ¡çé¦éã
ããç»å¤§å¤æ°çNoSQL产åé½æ¯åºäºå¤§å
ååé«æ§è½éæºè¯»åçï¼æ¯å¦å
·ææ´é«æ§è½çåºæ硬çéµåï¼ï¼ä¸è¬çå°åä¼ä¸å¨éæ©NoSQLæ¶ä¸å®è¦æ
éï¼ä¸è¦ä¸ºäºNoSQLèNoSQLï¼å¯è½ä¼å¯¼è´è±äºå¤æé±åè½æäºé¡¹ç®è¿ç¨ã
ããNoSQLä¸æ¯ä¸è½çï¼ä½å¨å¤§å项ç®ä¸ï¼ä½ å¾å¾éè¦å®ï¼
温馨提示:答案为网友推荐,仅供参考