บันทึกสั้นๆ หลังใช้งาน Windows Azure Storage Table

ตอนนี้ใช้ Windows Azure Storage Table อยู่กับบางบางตัว ซึ่งหลังจากที่ใช้งานมา 3-4 วันที่ผ่านมา เอาสิ่งที่ได้มาแบ่งบันกันเล็กน้อย

  • มันเป็น NoSQL database เรื่อง schema โยนทิ้งไปเลย คิดใหม่ทำใหม่หมด คล้ายๆ Excel มากกว่าด้วยซ้ำ
  • มี Data type ไม่เยอะ ทำงานง่ายพอสมควร
  • รองรับข้อมูลที่ใส่ลงไปไม่เกิน 100 TB ต่อฐานข้อมูล
  • สื่อสารกันผ่าน HTTP / HTTPS มี SDK API ให้หลายๆ ภาษาทั้ง .NET Framework, Java, PHP, Node.js, Python ฯลฯ หรือจะติดต่อผ่าน CURL อะไรพวกนี้ก็ได้ แล้วแต่ความถึกแต่ละคน (แต่ผ่าน SDK มันจะง่ายกว่าเยอะมาก)
  • ใน 1 Table สามารถกำหนด entity (row/record ใน RDBMS) ให้มี properties (field/column ใน RDBMS) หลากหลายได้ ไม่จำเป็นต้องเป็น entity ที่มี properties เหมือนๆ กัน
  • entity แต่ละตัวที่ใส่ลงไปได้มีข้อมูลไม่มากเกินกว่า 1MB ต่อ entity
  • properties ตั้งได้ไม่เกิน 252 ตัวต่อ 1 entity
  • properties ที่จำเป็นต้องส่งเข้าไปหรือใช้งานมี 3 ตัวคือ partition key, row key และ timestamp ซึ่ง partition key, row key เราต้องกำหนดเอง ส่วน timestamp ไม่ส่งเข้าไปก็ได้ระบบจะใช้เวลาของระบบแทน
  • ค่า partition key และ row key จำเป็นอย่างมากในการ update/delete ต้องออกแบบดีๆ ค่า partition key เปรียบเสมือนกลุ่มข้อมูล (คล้าย Class) ซ้ำได้ ส่วน row key จำซ้่ำไม่ได้ในแต่ละ partition key เปรียบเสมือน primary key ใน RDBMS ต้องใส่ข้อมูลทั้งสองลงไปเสมอ
  • การส่งข้อมูลออกมาจากการ Query นั้นจะส่งมาไม่เกิน 1,000 entities เท่านั้น ถ้าต้องการมากกว่านั้นต้อง request อีกรอบด้วยการใช้ NextPartitionKey และ NextRowKey ร่วมด้วยในการ Query ครั้งต่อไปจึงจะได้ข้อมูลช่วงถัดมาอีก 1,000 entities
  • ไม่สามารถ Sorting หรือแบ่ง Pagination ได้ ถ้าอยากทำต้อง query มาทั้งหมดแล้ว Sorting ในระบบเอาเอง หรือใช้ร่วมกับ RDBMS ตัวอื่นๆ แทน แล้วเก็บเฉพาะ partition key และ row key เพื่ออ้างอิงพ่วงกับข้อมูลที่ต้องการ Sorting จะช่วยได้มาก
  • สามารถค้นหาจาก properties ที่ไม่ใช่ partition key, row key และ timestamp ได้ จะ full table query ก็ทำได้ จากที่ลอง 1 แสน entity ก็ทำงานได้ดี (ข้อมูลประมาณ 50MB) ค้นหาด้วย properties ที่ไม่ใช่ตัวหลักของระบบ และเป็น full table query ไม่เกิน execute time
  • การ import ข้อมูลทำได้หลายแบบ ที่สะดวกที่สุดคือ csv ที่ export จาก Excel หรือฐานข้อมูลตัวอื่นๆ แค่กำหนด first line ให้เป็นชื่อ properties ที่กำลังใส่ลงไปมันจะไป map ตัว properties ในตารางให้เอง แต่  Data type มันจะเป็น String
  • ระยะเวลาในการ execute time มากสุดที่ 5 วินาที
  • ระยะเวลาในการให้ client request ไม่เกิน 30 วินาที

อันนี้คือเท่าที่ลองๆ ใช้มา