$30 off During Our Annual Pro Sale. View Details »

NoSQL 大腸花

yunglin
January 17, 2015

NoSQL 大腸花

yunglin

January 17, 2015
Tweet

More Decks by yunglin

Other Decks in Technology

Transcript

  1. NoSQL ⼤大腸花
    何永琳

    ⼯工頭 @ Fliptop

    View Slide

  2. 議程
    • NoSQL 經驗
    • MongoDB 2.2, 2.4, 2.6
    • CouchDB 1.2
    • Cassandra 0.6, 0.7, 1.0
    • Riak 1.?

    View Slide

  3. 其實我只是想幹樵
    MongoDB

    View Slide

  4. NoSQL 前世今⽣生

    View Slide

  5. No SQL
    Not Only SQL

    View Slide

  6. 為什麼 SQL 變成 DB
    的代名詞?

    View Slide

  7. 第⼀一次 DB ⼤大戰
    1960s~1970s

    View Slide

  8. 參戰國
    • Hierarchical model
    • Network model
    • Relational model

    View Slide

  9. 戰勝國
    • Edgar F. Codd: I don't use
    database often, but when I
    do, I always use RDBMS.

    View Slide

  10. Relational Model

    View Slide

  11. RDBMS/SQL
    • Atomicity
    • Consistency
    • Isolation
    • Durability

    View Slide

  12. RDBMS 的問題
    • 不是所有資料都是 Relational Model
    • Schema Migration: 會把整個 Table/DB 鎖住
    • Hard to Scale Write.

    View Slide

  13. 中間(沒⼈人理的)戰爭
    2000~?

    ObjectDB, XmlDB

    View Slide

  14. 第⼆二次 DB ⼤大戰
    2009~ 未完

    View Slide

  15. 前期參戰國
    • Dynamo DB
    • Google AppEngine Datastore
    • Cassandra
    • CouchDB
    • MongoDB
    http://thechangelog.com/18/

    View Slide

  16. • Amazon SimpleDB
    • Redis
    • Neo4j
    前期參戰國

    View Slide

  17. 盟國
    • Column Store: Cassandra, HBase
    • Document Store: CouchDB, MongoDB
    • Key-Value Store: DynamoDB, Redis, Riak
    • Graph Store: Neo4J

    View Slide

  18. CAP

    View Slide

  19. ⼝口號: BASE
    • Basically Available
    • Soft State
    • Eventual consistency

    View Slide

  20. 好話說完了,要開幹了

    View Slide

  21. Eventual Consistency?
    • Eventual inconsistency!!
    • ⼀一個確認的 Write 可能最終會消失!!

    View Slide

  22. Eventual Consistency?
    • Eventual inconsistency!!
    • ⼀一個確認的 Write 可能最終會消失!!
    • ⼀一個確認失敗的 Write 可能會跑出來!!

    View Slide

  23. https://aphyr.com/posts/284-call-me-maybe-mongodb

    View Slide

  24. ⼤大家都說不會掉資料
    • 實測結果
    • MongoDB: 47% Acked Data Lost!
    • Riak: 91% Ack lost!, 0.3% Unack found!
    • Cassandra: 28% Ack lost! 

    Cassandra/CRDT: 0% lost

    View Slide

  25. 發⽣生了什麼事?!
    • Failover Strategy: MongoDB.
    • When Primary down, the secondary will
    become new Primary. When old Primary is
    back online, it will replay the op-log on old
    Primary.


    But it won’t most of time !!!

    View Slide

  26. 發⽣生了什麼事?!
    • Failover Strategy: Riak.
    • 由下 N 個結點接收 Write. 如果 N 個寫⼊入成功,
    就會回傳成功,但是回傳失敗,即使只有⼀一個
    成功,最終,這⼀一個 Write 會被寫到 N 份去。

    • Conflict Resolution: 如果對同⼀一個 Key 的寫⼊入有
    衝突,Riak會回傳多個值,由 Client 來判斷怎麼
    取捨
    http://blog.monitis.com/20123/14/an-overview-of-riak-an-open-source-nosql-database/

    View Slide

  27. 發⽣生了什麼事?!
    • Failover Strategy: Cassandra.
    • 由下 N 個結點接收 Write. 如果 N 個寫⼊入成功,就會
    回傳成功,但是回傳失敗,即使只有⼀一個成功,最終,
    這⼀一個 Write 會被寫到 N 份去。

    • Conflict Resolution: 如果對同⼀一個 Key 的寫⼊入有衝突,
    Timestamp 最⼤大的會獲勝.
    • Timestamp 是個不可靠的數值,因為你不能保證
    Cluster 中所有機器的時間都是同步的。
    http://blog.monitis.com/20123/14/an-overview-of-riak-an-open-source-nosql-database/

    View Slide

  28. 教訓
    • 不要對同⼀一值重覆寫⼊入。
    • 使⽤用 Commutative Replicated Data Type,
    Command Query Responsibility Segregation
    Pattern 來寫程式

    View Slide

  29. 教訓
    • 不要對同⼀一值重覆寫⼊入。
    • 使⽤用 Commutative Replicated Data Type,
    Command Query Responsibility Segregation
    Pattern 來寫程式

    View Slide

  30. CRDT
    • Bank never deletes anything
    • https://www.youtube.com/watch?v=BGxnjKd4MFQ

    View Slide

  31. Scalability?
    • 所有的 DB 都是實作⼀一樣的 Journal DB 機制。
    • 所以所有的 DB 在 EC2 m1.large 上,都是
    11,000 write/sec. (Riak: 我只有 4000w/s)

    View Slide

  32. Scale Read
    • Shading.
    • Replication.
    • ⼤大家都做得很好.

    View Slide

  33. Scale Write
    • MongoDB: 請叫我廢柴,無論開多少台,都是笑
    能。

    View Slide

  34. Scale Write - Cassandra
    http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html

    View Slide

  35. Schema-less
    • Schema 真的是問題嗎?請再問你⾃自⼰己三遍
    http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html

    View Slide

  36. Schema-less
    • Schema 真的是問題嗎?請再問你⾃自⼰己三遍
    • Schema 的危害是,Migrate 時可能會把 DB 鎖住,
    造成 Downtime

    • Schema-less 要做 migration ,是在 code 中做
    read-repair.
    • 所以說你的程式碼中要⼀一直有有 V1->V2, V2->V3,
    V3->V4…. 的 migration code.
    http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html

    View Slide

  37. Schema-less
    • Dynamic Language ⽤用起來很爽
    • var tweets = db.find(….)

    for tweet in tweets:

    print tweet.text

    View Slide

  38. Schema-less
    • Dynamic Language ⽤用起來很爽
    • var tweets = db.find(….)

    for tweet in tweets:

    print tweet.text
    • 可是我們是寫 Java 的

    View Slide

  39. Model class is Schema
    @Entity("employees")
    class Employee {
    // auto-generated, if not set (see ObjectId)
    @Id ObjectId id;
    // value types are automatically persisted
    String firstName, lastName;
    // only non-null values are stored
    Long salary = null;
    // by default fields are @Embedded
    Address address;

    View Slide

  40. Schema-less
    • ⼤大多數時間造成的是危害不是好處

    View Slide

  41. AdHoc Query
    • SQL 中好好⽤用。
    • MongoDB 中可以⽤用
    • Cassandra, Riak 中....
    • CouchDB 有 MapReduce 可⽤用

    View Slide

  42. MapReduce?!
    • 把資料庫的所有物件,⼀一個個的拿出來看
    • 挑想要的資料,佔存在 “某個地⽅方”
    • 然後再來 Reduce(Aggregate)

    View Slide

  43. MapReduce?!
    • 把資料庫的所有物件,⼀一個個的拿出來看
    • 挑想要的資料,佔存在 “某個地⽅方”
    • 然後再來 Reduce(Aggregate)
    • 所以 MongoDB 會要個 Write Lock !! 把 DB 鎖死

    View Slide

  44. MapReduce
    • Not Production Ready.

    View Slide

  45. 2nd Index.
    • Cassandra, Riak 對 AdHoc Query 的回應
    • 每個結點⾃自⼰己 Index ⾃自⼰己的資料。
    • 所以 Index 的⼤大⼩小是無限的。

    View Slide

  46. 2nd Index.
    • Cassandra, Riak 對 AdHoc Query 的回應
    • 每個結點⾃自⼰己 Index ⾃自⼰己的資料。
    • 所以 Index 的⼤大⼩小是無限的。
    • 結果變成能夠承受的 Query 總量,是固定的。

    View Slide

  47. ACID 好好⽤用
    • counter + 1 (NoSQL開始提供對單⼀一欄位操作)
    • 資料正確性 vs Availability.
    • Transaction
    • Data Consistency

    View Slide

  48. MongoDB
    • 最熱⾨門的 NoSQL
    • ⽀支援 AdHoc Query
    • ⽀支援 Index on any field
    • ⽀支援 Sharding, Replication

    View Slide

  49. MongoDB 缺點
    • ⽂文件的 Size
    • Index 的 Size 驚⼈人
    • 被 Index 有欄位⼤大⼩小的限制(1024 bytes)
    • 對變⾰革的適應能⼒力( 連結外部新來的資料或查
    尋)

    View Slide

  50. 結語

    View Slide