Not Only SQL 1998λ λμ SQLμ μ¬μ©νμ§ μλ κ²½λ λ°μ΄ν°λ² μ΄μ€μ μλ―Έλ‘ μ²μ λ±μ₯νμλ€. μΌλ°μ μΌλ‘ ν΅μ©λλ μ μκ° μμΌλ©°, κ·Έ μ μλ₯Ό λ΄λ¦¬λ κΆμμλ μ‘΄μ¬νμ§ μλλ€.
λΉ λ°μ΄ν°μ μ¬λ¬ΌμΈν°λ·μ λ°μ μΌλ‘ λ€μν ννμ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ μ₯νκ³ μ²λ¦¬νκΈ° μν μλ‘μ΄ ννμ λ°μ΄ν°λ² μ΄μ€ κ΅¬μ‘°κ° νμνλ€.
- κ΄κ³ν λͺ¨λΈμ μ¬μ©νμ§ μμ
- λλΆλΆ μ€νμμ€
- 21μΈκΈ° μΉ νκ²½μ μν΄ κ΅¬μΆλ¨
- μ€ν€λ§κ° μμ
NoSQLμ μ ν΅μ μΈ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€κ° ν΄κ²°ν μ μλ μΉ κΈ°λ° μ ν리μΌμ΄μ μ μ±λ₯κ³Ό νμ₯μ± μꡬμ¬νμ ν΄κ²°νκΈ° μν΄ κ°λ°λ μμ€ν λ€μ΄κΈ° λλ¬Έμ, λΆμ° μ²λ¦¬ ꡬ쑰λ₯Ό μ§λκ³ μλ€. λ°λΌμ λΆμ° μμ€ν μ μ μ©λλ CAP μ΄λ‘ μ λνμ¬ μ΄ν΄νλ κ²λ νμνλ€. CAP μ΄λ‘ μ Eric Brewκ° μ£Όμ₯ν κ²μΌλ‘, λΆμ° μμ€ν μμ 보μ₯ν΄μΌ νλ μΈ‘λ©΄μ λ€μκ³Ό κ°μ΄ μ μνκ³ μλ€.
- μΌκ΄μ±(consistency): λͺ¨λ ν΄λΌμ΄μΈνΈλ€μ νμ λ°μ΄ν°λ€μ λν κ°μ λ·°λ₯Ό κ°μ ΈμΌ νλ€. μ¦ λͺ¨λ λ Έλλ€μ λμμ κ°μ λ°μ΄ν°λ₯Ό 보μμΌ νλ€.
- κ°μ©μ±(availability): κ°κ°μ ν΄λΌμ΄μΈνΈλ€μ νμ μ½κ³ μΈ μ μλ€. λͺ¨λ μμ²μ μ€ν¨νλ μ±κ³΅νλ μλ΅μ λ°λ κ²μ 보μ₯νλ€.
- λΆν μ©μΈ(partition tolerance): λ€νΈμν¬ μ€ν¨λ‘ μΈνμ¬ μμμ λΆν μ΄ λ°μν΄λ μμ€ν μ κ³μμ μΌλ‘ λμν΄μΌ νλ€. μμμ λ©μμ§λ€μ μμ€ λλ μμ€ν μ λΆλΆ μ€ν¨μλ λΆκ΅¬νκ³ , μμ€ν μ μ§μμ μΌλ‘ λμνλ€. CAP μ΄λ‘ μ λ°λ₯΄λ©΄ Cμ Aλ λμμ λ§μ‘±ν μ μκΈ° λλ¬Έμ, μΌλ°μ μΌλ‘ C+P μ λ΅ νΉμ A+P μ λ΅μ μ μΆ©ν΄μ μ·¨νλ€. μΌλ°μ μΈ SQL μμ€ν μ κ²½μ° νΈλμμ μ΄ μ§λ μΌ νλ 4κ°μ§ μμ±μΈ ACID μμ±μ λ§μ‘±νλλ°, CAPμ P μμ±μ κΈ°λ³Έμ μΈ μΈ‘λ©΄μΌλ‘ μ·¨νκΈ° λλ¬Έμ BASE μμ±μ λ°λ₯Έλ€.
- Basically Available: νμ₯μ±
- Soft State: μννΈ μν
- Eventually Consistent: κ²°κ΅ μΌκ΄μ±
κΈ°λ³Έμ μΌλ‘ νμ₯μ μ NoSQL λ°μ΄ν°λ² μ΄μ€ μμ€ν μ΄ νμ₯μ±μ 보μ₯νλ€λ κ²μΌλ‘, μ ν리μΌμ΄μ μ νμ λμμ ν΄μΌ νλ€λ κ²μ μλ―Ένλ€. μννΈ μνλ μ ν리μΌμ΄μ λ€μ΄ νμ μΌκ΄μ μΈ μνμ μμ νμκ° μμμ μλ―Ένλ€. μ μ§μ μΈ μΌκ΄μ±μ 리λ(reader)λ€μ΄ μκ°μ΄ μ§λ¨μ λ°λΌ μ°κΈ° κ²°κ³Όλ₯Ό λ³Έλ€λ λ»μ΄λ€. μμ μνμμ μμ€ν μ κ²°κ΅ λ§μ§λ§ μ°κΈ° κ²°κ³Όλ₯Ό λ°ννλ€. μ΄λ ν΄λΌμ΄μΈνΈλ€μ λ³κ²½μ΄ μ§νμ€μΈ μν©μμλ λ°μ΄ν°μ λΆμΌμΉ μνλ₯Ό κ²ͺμ μ μλ€.
λ§μ μμ NoSQL λ°μ΄ν°λ² μ΄μ€κ° μ€λ©(sharding)μ νΉμ§μΌλ‘ λ΄μΈμ°κ³ μλ€. μ€λ© κΈ°λ²μ μ¬μ©ν λ μ€μν λ¬Έμ μ€μ νλλ λ°μ΄ν° μμ΄ν μ μ΄λ 물리μ μΈ λ Έλμ λ°°μΉνλ μ§λ₯Ό κ²°μ νλ κ²μ΄λ€. κ°μ₯ λ¨μν λ°©λ²μ NodeID = hash(key) % TotalNodes μμ μ¬μ©νμ¬ λ Έλμ μμΉλ₯Ό μ°Ύλ κ²μ΄λ€. μλ‘μ΄ λ Έλμ μΆκ°λ κΈ°μ‘΄ λ Έλμ μμ κ° μΌκΈ°νλ μ 체 λ°μ΄ν°μ μ¬μ 리(reshuffling)κ° λ°μνλλ°, νμ§λ§ λλ¨Έμ§ μ°μ°μ μ΄λ° ν΄λ¬μ€ν°μ μ¬μ‘°μ μ ν¨μ¨μ μΌλ‘ μ§μν μ μκ³ κ²°κ³Όμ μΌλ‘ 볡μ μ μ₯μ μ‘°μΉ(failover)λ₯Ό λ€λ£¨κΈ° λ§€μ° μ΄λ ΅λ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν λ°©λ²μΌλ‘ NoSQL λ°μ΄ν°λ² μ΄μ€λ€ μ€ μΌλΆλ consistent hashingμ μ¬μ©νλ€. Consistent hashingμ κΈ°λ³Έ μμ΄λμ΄λ λ°μ΄ν° μμ΄ν κ³Ό λ Έλλ€μ΄ κ°μ ν΄μ ν¨μλ₯Ό μ¬μ©νλ€λ κ²μ΄λ€. λ Έλλ€μκ² κ°κ²©(interval)μ λ§€ννλλ°, κ° κ°κ²©μ λ§μ μμ λ°μ΄ν° μμ΄ν ν΄μλ€μ μ μ₯νλ€. λ Έλκ° ν΄λ¬μ€ν°μμ μ κ±°λλ©΄, κ·Έ λ Έλμ κ°κ²©μ μ΄μν κ°κ²©μ μ§λ λ Έλκ° κ°μ Έκ°λ€. λ€λ₯Έ λ Έλλ€μκ²λ μλ¬΄λ° λ³νκ° λ°μνμ§ μλλ€.
- Key-Value Stores: κ°μ₯ κΈ°λ³Έμ μΈ νμμΌλ‘ λλΆλΆμ NoSQLμ΄ μ§μνλ μ μ₯ κ°λ μΈ ν€/κ° νμμ μ§μνλ€. Memcached, Redis, Dynamo, Voldemort, BerkeleyDB, λ±μ΄ μ§μνλ€.
- Wide Column Stores: ν€/κ° μ μ₯μμ νμ₯ κ°λ μΌλ‘, κ°μΌλ‘ μ»¬λΌ ν¨λ°λ¦¬ ννλ₯Ό μ¬μ©νλ€. Cassandra, Hbase, Hypertable, Accumulo, λ±μ μ€νμμ€κ° μ‘΄μ¬νλ€.
- Document Stores: ν€/κ° μ μ₯μμ νμ₯λ κ°λ μΌλ‘, κ°μ ννλ‘ XMLκ³Ό JSON ννμ λ¬Έμ νμ μ μ¬μ©νλ€. MongoDB, CouchDB, Couchbase, Dynamo, OrientDB, λ±μ μ루μ μ΄ μλ€.
- Graph Database: ν μ΄λΈκ°μ JOIN μ°μ°μ΄ μλλΌ κ·Έλνμμμ κ²½λ‘ νμ ννμ μ°μ°μ΄ λ§μ΄ μ¬μ©λλ μμ λ€νΈμν¬ λΆμ κ°μ κ·Έλν μμ© νλ‘κ·Έλ¨μ μ£Όλ‘ μ¬μ©λλ€. Neo4j, InfiniteGraph, Titan, ArangoDB, Trinity, λ±μ μ루μ μ΄ μλ€.
- NoSQL λ°μ΄ν°λ² μ΄μ€ μ΅μ λν₯, κΆμ€νΈ(λΆμ°λνκ΅), μ 보μ²λ¦¬ννμ§ μ 22κΆ μ 4νΈ(2015. 7)