NoSQL database –Apache Cassandra

Apache Cassandra เป็นฐานข้อมูลแบบ open source ที่เปิดให้ดาวน์โหลดฟรีใช้กับฐานข้อมูลที่เป็นแบบ NoSQL หรือข้อมูลที่มีคอลัมน์แบบไม่เฉพาะเจาะจง Cassandra ตอนแรกถูกพัฒนากับเว็บ facebook โดยดูในส่วนของ เมนู inbox เป็นหลัก ซึ่งจริงๆ แล้วมันถูกเปิดให้ใช้งานอย่างเป็นทางการตั้งแต่ปี 2008

Cassandra ถูกนำมาใช้กับงาน big data เพื่อรับ workload ของข้อมูลแบบกระจัดกระจาย, การอ่าน, การเขียน ระหว่างโหนดหลายๆโหนด โดยที่ไม่เกิดข้อผิดพลาดเลย

Cassandra เป็นระบบแบบ peer-to-peer ซึ่งใช้การทำงานโดยเรียกคลัสเตอร์ในแต่ละโหนด ซึ่งโหนดนั้นต้องสามารถรองรับการอ่านหรือเขียนได้ เช่นเดียวกับ ฐานข้อมูลของ Amazon’s Dynamo DB ที่ทุกโหนดในคลัสเตอร์จะติดต่อสื่อสารระหว่างกัน โดยใช้โปรโตตอลการสื่อสารแบบ peer-to-peer

หลักการทำงานที่แท้จริงของมันคือ Cassandra จะใช้เครื่องมือที่เรียกว่า Log Structured Merge (LSM) และประกอบด้วยองค์ประกอบหลักหลายอย่างด้วยกันดังนี้

Commit log 

แต่และโหนดใน cluster จะมี commit log ที่แบบเรียงต่อกันเพื่อไรท์ข้อมูลลงใน disk และให้เกิดความสมบูรณ์ของ data ในส่วนของการไรท์อินเด็กซ์และข้อมูลลงไปในหน่วยความจำภายใน เราเรียกว่า memtable.

Memtable

เป็นเหมือนแคชที่สามารถไรท์ข้อมูลลงไป โดยใช่ i/o เชื่อมต่อโดยตรงกับแคช มันมีข้อดีคือ ลด latency ให้ต่ำลง และเกิด high throughput  โครงสร้างของ memTable จะเก็บไว้ใน memory ของ java (Java heap memory) 

อย่างไรก็ตาม Cassandra 2.1 เพิ่มออพชันการเก็บ memtable ให้อยู่นอก java heap memory เพื่อลดการเก็บข้อมูลที่เป็นข้อมูลขยะได้ด้วย

SSTables

เมื่อ commit log เต็ม มันจะเกิดการเปลี่ยนที่เก็บ memTable ให้ไปเก็บในรูปแบบของ SSTables data file และกระบวนการของ memTable จะถูกเคลียร์ออกไปก่อน และ commit log จะถูกลบออกและนำกลับมาใช้ใหม่ได้ 

Cassandra จะแบ่งพาร์ทิชั่นโดยอัตโนมัติเพื่อไรท์ข้อมูลและ replicates มันผ่าน cluster

Compaction 

Cassandra เกิดการรวม SStables โดยใช้กระบวนการที่เรียกว่า compaction ที่ความถี่ของการรวม compactions จะถูกเก็บไว้ในไฟล์ yaml หรือผ่านคำสั่งของ Cassandra เองที่เรียกว่า Cassandra Query Language (CQL) ในกระบวนการรวมกัน Cassandra จะรวมคีย์, คอลัมน์merges keys, combines columns, evicts tombstones data จริงๆจะถูกมาร์กว่าเป็นของเก่า, และมีการรวม SSTables และสร้าง index ใหม่ 

YugaByte DB มีความคล้ายคลึงกับ LSM storage engine ที่ออกแบบใน Cassandra แต่ว่ามันมีข้อดีตรงที่มีประสิทธิภาพและความทนทาน

ภาษาโปรแกรมอะไรที่สามารถเขียนในฐานข้อมูล Cassandra ได้ 

เมื่อเรากล่าวถึง casssandra ที่มันถูกเขียนด้วย java ภาษาที่ใช้เขียนมันก็คือ Long garbage collection (GC) หรือที่มันนำมาใช้ในสภาพแวดล้อมของ production ซึ่งข้อดีของ garbage collector นี้เพื่อลด latency และเพิ่ม throughput ได้ด้วย

CQL หรือชื่อเต็มคือ Cassandra Query Language (CQL) ใช้เพื่อเขียน insert, update, delete, select ข้อมูลจาก Cassandra นั่นเอง