NoSQL Model

หลายวันก่อน @somkiat เล่าว่าจะใช้ NoSQL ให้ศึกษาถึง Model ที่ใช้ก่อนที่จะเลือกว่าจะใช้ Database ตัวไหน วันนี้พึ่งเข้าใจหลังจากเล่น Redis อีกครั้ง เพราะเป็น Database ที่ต่างจากตัวอื่นจริงๆ โดยเฉพาะเวลาจะ query เลือก data ที่ต้องการ ทั่วไปแล้วก็มีสองแบบ

  1. Document Oriented – แบบแรกเวลาที่จะเอาข้อมูลขึ้นมาใช้ จะสามารถค้นหาผ่าน field ต่างๆ ได้โดยตรง สมมติมีข้อมูลแบบด้านล่าง

    {
      name: Lucy,
      age: 12,
      occupation: student
    }
    

    DB ที่ใช้ Model แบบนี้สามารถหาผ่าน field แต่ละ field ได้เลยเช่นกำหนดว่าต้องการ query field name ที่มีค่าเป็น Lucy หรือ field age อยู่ในช่วง 12 และเราสามารถเพิ่ม field เข้าไปเพื่อค้นหาได้เลยด้วย DB กลุ่มนี้ก็พวก MongoDB, CouchDB จริงๆ อยากนับพวก HBase, Cassandra ไปด้วยแต่มันก็ไม่เหมือนกันซะทีเดียว ไว้แยกเป็นอีกพวกดีกว่า ใน Wiki เรียกว่า Column Oriented อีกต่างหาก

  2. Key-Value – แบบที่สอง operation ส่วนใหญ่จะเกี่ยวข้องกับ key ทั้งหมด หากต้องการค้นหาอะไรซับซ้อนต้องใช้ตัวช่วยอื่นเช่น Lucene. Redis คำสั่งทั้งหลายจะไม่มีอะไรเกี่ยวกับการค้นหาผ่าน field ของข้อมูลเลย หรือ Riak ที่แม้จะมีให้ใช้แต่ก็เป็นการ index data แล้วค้นหาแยกเหมือนมี Lucene อยู่ภายใน

นอกจากสองแบบนี้ก็ยังมี Column Oriented เช่น HBase และ Cassandra ที่มีหน้าตาคล้ายๆ Document Oriented แต่ว่า Column ต้องกำหนดตายตัว แต่สามารถค้นหาผ่าน Column ต่างๆ ได้ไม่ต้องทำ Index แยกหรือค้าผ่าน Key เอา

ตอนนี้ก็คิดว่าจะลองเอาแบบ Document Oriented กับ Column Oriented มาแทนที่ Database ที่ใช้อยู่เดิมก่อนดูว่าผลลัพทธ์จะเป็นยังไง มีอาการอะไรประหลาดๆ เหมือน BDBJE มั้ยที่เกิด LogFileNotFound ได้และประสิทธิภาพเป็นอย่างไร ไว้ทดลองเสร็จจะลองมาเล่าอีกที

About llun

Just a programmer

, ,

  • http://twitter.com/visibletrap TAP

    ข้อดึของ Key-value คือ อะไรครับ speed & simplicity?

    • Anonymous

      speed, simplicity & memory footprint.

  • http://www.facebook.com/profile.php?id=755758746 Metwara Narksook

    ตอนนี้บุ๊คเล่น MongoDB อยู่นะครับ แต่เดี๋ยวกะลังจะไปเล่น redis แล้ว แรงสะใจกว่า 5555+

    • Anonymous

      มันเหมาะกับบางงานอ่ะ เพราะวิธีใช้แต่ละตัวไม่เหมือนกันเลยนี่สิ โดยเฉพาะ Redis กับ Riak