[AZ-204] Develop solutions that use Azure Cosmos DB

Explore Azure Cosmos DB

  • Azure Cosmos DB is designed to provide low latency, elastic scalability of throughput, well-defined semantics for data consistency, and high availability.
  • multi-master replication protocol, every region
  • 1 subscription มีได้มากสุด 50 Azure Cosmos accounts
  • Key benefits of global distribution
    • Unlimited elastic write and read scalability.
    • 99.999% read and write availability all around the world.
    • Guaranteed reads and writes served in less than 10 milliseconds at the 99th percentile.
  • Explore the resource hierarchy
    • Database Accounts
    • Database
    • Container
    • Logical Partitions
    • Item
  • supported APIs
    • Core(SQL) API - เหมือน SQL ปกติเลย Return เป็น JSON ถ้าย้ายมาจาก RDBMS ให้ใช้ API นี้
    • API for MongoDB
    • Cassandra API
    • Table API - Store Key/Value Format (Migrate จาก Azure Table Storage ได้)
    • Gremlin API - Graph Query ที่ทำยากใน RDB เพราะ ต้อง Join หรือ แตก Table เยอะ ตอนนี้รองรับ OLTP scenarios
  • Explore consistency levels + Choose the right consistency level
    • strong - clients are guaranteed to read the latest committed value of the write operation.
      • Read / Write ทุก Region ได้ค่าเหมือนกัน และตอน Read ได้ค่าล่าสุด (most recent)
    • bounded staleness - clients reads are guaranteed to honor the consistent-prefix guarantee. The reads might lag behind writes
      • most "K" versions (that is, "updates") อาจจะเป็นเวอร์ชันล่าสุด หรือ ก่อนหน้า (Prior Version)
      • by "T" time interval ดูตามเวลา
    • session consistent (recommended)
    • consistent prefix - eventual consistency
    • eventual -  there's no ordering guarantee for reads. In the absence of any further writes, the replicas eventually converge.
      • highest availability and the lowest latency / greatest throughput at the cost of weaker consistency. (บาง Region อาจจะไม่พบค่า หรือได้ค่าเก่าไป)
    • Note
      • If you need even higher data durability without sacrificing performance, you can create a custom consistency level at the application layer.
      • Probabilistically Bounded Staleness (PBS) metric. probability that your clients may get strong and consistent reads for your workloads
    • Reference - Consistency levels in Azure Cosmos DB | Microsoft Docs
  • หากใครยังงงๆ มาลองดูโจทย์กันดีกว่าครับ ลองมาเลือก Consistency level ที่เหมาะสม
    1. The status for the Medical records must be the most recent. This should be the case even if multiple users in different locations update the Medical records records
      ANS strong เพราะ most recent แม้ว่าจะมีการแก้พร้อมกัน
    2. The health of a patient needs to be ensured that the data must be either the current version or a prior version
      ANS bounded staleness เพราะ ไม่ได้ต้องการข้อมูลล่าสุด ก่อนหน้าก็ได้ (prior version) อาจจะมีคุมในแง่ Coding อีกที่ให้สามารถ Write ได้ที่เดียว
    3. When the patient is being discharged (ออกจากโรงพยาบาล), all charges should be processed, and the final bill should be processed
      ANS eventual เพราะคนได้ยังไงออกจากโรงพยาบาลได้ 1 จุด และเรามีเวลารอ final bill ได้
  • Discover request units (RUs)
    • A request unit(RUs) represents the system resources such as CPU, IOPS, and memory that are required to perform the database operations supported by Azure Cosmos DB.
    • RUs charged Mode
      • Provisioned throughput mode - ปรับตามการใช้งาน ปกติ 100 RUs per second. โดยเพิ่มลดได้ทีละ 100 RUs
      • Serverless mode - request จริง
      • Autoscale mode - mission-critical workloads / unpredictable traffic patterns / SLA
  • Knowledge check - Explore Azure Cosmos DB (Knowledge check)

Implement partitioning in Azure Cosmos DB

  • Explore partitions - จาก Container ที่เก็บข้อมูลจะแบ่งย่อยออกมาตาม Logical Partition
    • Logical Partition - consists of a set of items that have the same partition key
    • Logical Partition - ใช้พื้นที่ Physical Partition หลายอันก็ได้
    • ถ้าเรามีข้อมูลหุ้น 100 ตัว แล้วเอา SecurityName เป็น Partition Key เราจะมี Logical Partition ทั้งหมด 100 Partition
    • Note สำหรับ Physical Partition เรา Control ไม่ได้ เอาไว้เพิ่ม throughput
  • Choose a partition key
    • partition key ตัวที่เอาไว้อ่างอีกถึง Logical Partition ประกอบไปด้วย
      • partition key path ชื่อ Field
      • partition key value ข้อมูลของ Field (Update ข้อมูลทับไม่ได้)
    • partition key ที่ดี
      • value ไม่ควรเปลี่ยนแปลงบ่อยๆ
      • มีค่าที่กว้าง (high cardinality)
      • ต้องกระจาย RUs ไปทั่ว Logical Partition
      • Note กรณีที่หา partition key เอา item ID ซึ่งเป็น System Property มาใช้แทน
        แต่ stored procedures or triggers can't run across multiple logical partitions.
    • synthetic partition key - partition key ที่เอา values มาต่อกัน อาจจะต้อง Client ทำมาให้เลย
    • partition key with a random suffix - improve write throughput / แต่อ่านยาก
    • partition key with pre-calculated suffixes ลด hot partition
    • hot partition key ที่มี workload เยอๆ
  • Row Key
    • Unique Identifier สำหรับระบุข้อมูลใน Partition ที่สนใจ
    • Field ที่จะเอามาทำเป็น Row Key ห้ามมี Missing Value
  • Knowledge check - Implement partitioning in Azure Cosmos DB (Knowledge check)

Work with Azure Cosmos DB

  • Explore Microsoft .NET SDK v3 for Azure Cosmos DB
    • Microsoft.Azure.Cosmos NuGet package
    • CosmosClient
    • Database examples
    • Container examples
    • Item examples
  • Create stored procedures
  • Create triggers and user-defined functions
    • Pre-triggers validate the properties of an Azure Cosmos item
    • Post-triggers queries for the metadata item and updates it with details
  • User-defined functions
  • Knowledge check - Work with Azure Cosmos DB (Knowledge check)

Additional Resource

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.