SlideShare une entreprise Scribd logo
1  sur  157
สไลด์ต้นแบบสามารถดาวน์โหลดได้ที่
http://codex.cs.yale.edu/avi/db-book/db6/slide-dir/
การขึ้นต่อกันของข้อมูล
• Data Dependency = การขึ้นต่อกันของข้อมูล
• เกิดจาก Attribute หนึ่งมีความสัมพันธ์กับอีก Attribute หนึ่ง
• แบ่งออกเป็น 3 ประเภท
   – Functional Dependency
   – Multivalued Dependency
   – Join Dependency
• ในคอร์สนี้จะศึกษาเพียง Functional Dependency เท่านั้น
ฟังก์ชันการขึ้นต่อกัน
• Functional Dependency (FD) = ฟังก์ชันการขึ้นต่อกัน
• FD จะเกิดขึ้นเมื่อมีค่าของ Attribute หนึ่งสอดคล้องกับอีก
Attribute หนึ่งเพียงหนึ่งค่า
   – นิยาม เมื่อ R เป็น Relation และให้ A, B เป็นส่วนหนึ่งของ Attribute ที่อยู่ใน
   R ถ้าหากค่า A นั้นสอดคล้องกับค่า B เพียงหนึ่งค่า จะกล่าวได้ว่า “B นั้นขึ้นต่อ A”
   หรือ “A เป็นตัวกาหนด B” หรือ A -> B
   – เราจะเรียก A ว่าตัวกาหนด (Determinant) และ B ว่าตัวถูกระบุค่า
   (Dependent)
• Functional Dependency มีผลต่อการเลือก PK และการทา NF
ลักษณะของฟังก์ชันการขึ้นต่อกัน
• Trivial Functional Dependency
   – ความสัมพันธ์ระหว่าง Determinant Set กับ Determinant Subset
   – ไม่รู้ความหมายอะไรในตาราง ก็สามารถบอก Dependent ได้
   – ไม่ค่อยสาคัญเท่าไร
• Nontrivial Functional Dependency
   – ความสัมพันธ์ระหว่าง Determinant Attribute Set กับ Attribute อื่น
   – ต้องเข้าใจความหมาย ความสัมพันธ์ เงื่อนไขของ Attribute ในตาราง ถึง
   จะบอก Dependent ได้
Trivial Functional Dependency
    id        char_name    hair_id skin_color    level    class_name
thep444     Adolescence   2        f0e7c8       34       Archer
thep444     AcetoOrceiN   17       f0e7c8       68       Knight
madoka555   QBayDesu      15       ffffff       57       Magician

• ในตารางนี้มี Trivial Functional Dependency เท่าไร
Nontrivial Functional Dependency
    id        char_name    hair_id skin_color    level    class_name
thep444     Adolescence   2        f0e7c8       34       Archer
thep444     AcetoOrceiN   17       f0e7c8       68       Knight
madoka555   QBayDesu      15       ffffff       57       Magician

• ในตารางนี้มี Nontrivial Functional Dependency
    – {char_name}  {id, hair_id, skin_color, level, class_name}
Nontrivial Functional Dependency




• ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
Nontrivial Functional Dependency
รหัสพนักงาน      ชื่อพนักงาน    รหัสแผนก วันที่ทางาน เวลาเข้างาน เวลาออกงาน
   226        Keiseiie Hara      FKnL     2100/6/28     7:45       18:10
   227        Kawada I. Inoue     LL      2100/6/30     8:01       19:24
   226        Keiseiie Hara      FKnL     2100/6/30     6:19       17:16
   228        Moriyama Aiko       HR       2100/7/1     8:59       16:44
   229        Keiseiie Kune       CP       2100/7/1     7:33       20:54
   229        Keiseiie Kune       CP       2100/7/3     7:42       19:17

 • ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
รูปแบบของฟังก์ชันการขึ้นต่อกัน
• Full Functional Dependency
  – เกิดจากทุก Attribute ใน Determinant Set กาหนดค่า Attribute ทั้งหมด
  – ถ้า Determinant Set D สามารถกาหนดทุกค่าใน Attribute แล้ว D จะเป็น
  Primary Key
• Partial Dependency
  – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่เป็น PK
• Transitive Dependency
  – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่ไม่เป็น PK
Full Functional Dependency
รหัสพนักงาน      ชื่อพนักงาน     รหัสแผนก        ตาแหน่งงาน          เงินเดือน
   226        Keiseiie Hara       FKnL      L Hand General Knight     14800
   227        Kawada I. Inoue      LL         Linguistics Lecturer    13900
   228        Moriyama Aiko        HR           Salary Manager        10430
   229        Keiseiie Kune        CP       Computer Programmer       12040
   230        Tadachizu Yoichi    FKnL      L Hand Security Guard      9400
   231        Meira Meiji           P        Super General Priest      9000

• {รหัสพนักงาน} --> {ชื่อพนักงาน, รหัสแผนก, ตาแหน่งงาน, เงินเดือน}
Partial Functional Dependency
    id    project_id     staff_name        project_name    Advisor_id dept_id
104450        1        Thunder Storm      1.. 2… 3… Go!      21004      O01
104450        2        Thunder Storm      True Love Camp     32850      H32
104451        1        Bipinnaria Larva   1.. 2… 3… Go!      21004      O01

•    {id}  {staff_name}
•    {project_id}  {project_name, advisor_id, dept_id}
Transitive Functional Dependency
      proj_name    staff_id         job_class     job_id   เงินเดือน
AbBeaw Project       120      Presenter           20540      6100
AbBeaw Project       145      Presenter           20540      6100
Makenai Camp         228      First Aid Manager   31001      8020
Makenai Camp         130      Director            90001     15400
Makenai Camp         144      Presenter           20540      7800
Makenai Camp         210      Entertainer         90100      8020

 •   {job_id}  {job_class}
 •   {job_class}  {job_id}
การนาเสนอฟังก์ชันที่ขึ้นต่อกัน
• เราสามารถเขียน Functional Dependency ได้ 2 รูปแบบ
   – เขียนเป็น Diagram
   – เขียนเป็นเซต
• ขึ้นกับความถนัดของบุคคลนั้น ๆ



            {EMP_NUM}  {EMP_NAME, JOB_CLASS}
Normalization
• Normalization = การทาบรรทัดฐาน, การทาให้เป็นมาตรฐาน
• กระบวนการหนึ่งที่มีอยู่ในการออกแบบฐานข้อมูล
   – การแก้ไขตารางข้อมูลให้มีการซ้าซ้อนของข้อมูลน้อยลง
   – นิยมทาไปพร้อมกันกับการออกแบบ ER Diagram
• Normalization จะทาตามลาดับไปเรื่อย ๆ
   – แต่ละระดับเรียกว่า Normal form
   – Normal Form (NF) = รูปแบบบรรทัดฐาน
Normal Form
• ข้อกาหนดในการแก้ไขตารางภายในฐานข้อมูล
• รูปแบบที่มีตัวเลขมาก ข้อกาหนดยิ่งมากขึ้น แต่ฐานข้อมูลที่ได้ยิ่งดีขึ้น
   – รูปแบบบรรทัดฐานที่ 1 (1NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 0 (0NF)
   – รูปแบบบรรทัดฐานที่ 2 (2NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 1
   – ...
• ในปัจจุบันรูปแบบบรรทัดฐานหลักมีทั้งหมด 9 รูปแบบ[1]
   – 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, 6NF
• ส่วนใหญ่นิยมแก้ไขถึงรูปแบบบรรทัดฐานที่ 3 (3NF)
ข้อเสียของตารางที่ไม่ทา Normal Form
• ปัญหาการเพิ่มข้อมูล (Insertion Anomalies)
   – การเพิ่มข้อมูลที่มีข้อมูลไม่ครบตาม Schema
   – อาจใส่ค่า null แต่ null เป็นค่าที่เราไม่อยากได้
• ปัญหาการแก้ไขข้อมูล (Update Anomalies)
   – การแก้ไขข้อมูลที่มีความซ้าซ้อนกันในตาราง
   – ไล่แก้ไปเรื่อย ๆ
• ปัญหาการลบข้อมูล (Deletion Anomalies)
   – ข้อมูลใน Attribute นั้นไม่อยากลบ แต่ข้อมูลนั้นอยู่ที่ Tuple ที่อยากลบ
Insertion Anomalies
     id            char_name    hair_id skin_color    level    class_name
thep444         Adolescence     2       f0e7c8       34       Archer
0816581025      Sensation       10      eed99b       11       Novice
madoka555       QBayDesu        15      ffffff       57       Magician
darni_maria     FuxkYeah-_-!!   14      ffffee       7        Archer
kodman_cs       นู๋IปJIทย       7       f0e7c8       13       Novice


                    id
              thunderstrom
Update Anomalies
     id          char_name    hair_id skin_color    level    class_name
thep444       Adolescence     2       f0e7c8       34       Archer
0816581025    Sensation       10      eed99b       11       Archer
madoka555     QBayDesu        15      ffffff       57       Magician
darni_maria   FuxkYeah-_-!!   14      ffffee       7        Archer
kodman_cs     นู๋IปJIทย       7       f0e7c8       13       Archr
0876551000    n๐IIหล          1       343232       1        Novice
Deletion Anomalies
     id          char_name    hair_id skin_color    level    class_name
thep444       Adolescence     2       f0e7c8       34       Archer
0816581025    Sensation       10      eed99b       11       Archer
madoka555     QBayDesu        15      ffffff       57       Magician
darni_maria   FuxkYeah-_-!!   14      ffffee       7        Archer
kodman_cs     นู๋IปJIทย       7       f0e7c8       13       Archr
0876551000    n๐IIหล          1       343232       1        Novice
รูปแบบบรรทัดฐานที่ 1
• รูปแบบบรรทัดฐานที่ 1 = First Normal Form (1NF)
• ตารางในข้อกาหนด 1NF ต้องมี Attribute ใด ๆ อยู่ภายใน Attribute
   – ถ้ามี Attribute ซ้อนอยู่ จะเอา Composite Attribute ออก
• ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว
• ทุก ๆ Attribute ต้องขึ้นกับ Primary Key
• Schema ที่แปลงจาก ER Diagram จะเป็น 1NF ในทันที
การทาตารางเป็น 1NF
Serv    Server                   Board     Charac      Character              Character Info
                      ID
 ID     Name                     Name       ter ID      Name        LV Class Name        Job Name
 0     Mochi                                 1       Adolescence    34                 Archer
                  thep44       Nopakun~*                                 Fighter
                                             1       Adolescence    41                 Scout
       Takoyaki
                  thanyapol thanyapol        15      NeoS                Backpacker    Mechanic
 1                                                                  99
                                             78      parazettamon                      Bard
       Takoyaki kunemata       kunemata                                  Spell User
                                            150      Sufflez        76                 Sage
 0     Mochi                                104      Harasama       64                 Dark Stalker
                                                                         Fighter
                  olfactory    harasama     119      Reizinixc      99                 Bounty Hunter
 1     Takoyaki
                                            183      ReizinixcII    36 Backpacker      Tatarabe
การทาตารางเป็น 1NF
  • Attribute ใดที่ซ้อนกับ Attribute ให้เอา Composite Attribute ออก

Serv   Server          Board   Charac    Character          Character Info
                ID
 ID    Name            Name     ter ID    Name       LV Class Name     Job Name




Serv   Server          Board   Charac    Character
                ID                                   LV Class Name     Job Name
 ID    Name            Name     ter ID    Name
การทาตารางเป็น 1NF
     • ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว
Serv   Server                   Board     Charac      Character
                     ID                                            LV Class Name     Job Name
 ID    Name                     Name       ter ID      Name
 0     Mochi     thep44       Nopakun~*     1       Adolescence    34 Fighter      Archer
 1     Takoyaki thep44        Nopakun~*     1       Adolescence    41 Fighter      Scout
 1     Takoyaki thanyapol thanyapol         15      NeoS           99 Backpacker   Mechanic
 1     Takoyaki kunemata      kunemata      78      parazettamon   99 Spell User   Bard
 1     Takoyaki kunemata      kunemata     150      Sufflez        76 Spell User   Sage
 0     Mochi     olfactory    harasama     104      Harasama       64 Fighter      Dark Stalker
 1     Takoyaki olfactory     harasama     119      Reizinixc      99 Fighter      Bounty Hunter
 1     Takoyaki olfactory     harasama     183      ReizinixcII    36 Backpacker   Tatarabe
การทาตารางเป็น 1NF
     • ทุก Attribute ต้องขึ้นกับ Primary Key
Serv    Server                  Board     Charac      Character
                     ID                                            LV Class Name     Job Name
 ID     Name                    Name       ter ID      Name
 0     Mochi     thep44       Nopakun~*     1       Adolescence    34 Fighter      Archer
 1     Takoyaki thep44        Nopakun~*     1       Adolescence    41 Fighter      Scout
 1     Takoyaki thanyapol thanyapol         15      NeoS           99 Backpacker   Mechanic
 1     Takoyaki kunemata      kunemata      78      parazettamon   99 Spell User   Bard
 1     Takoyaki kunemata      kunemata     150      Sufflez        76 Spell User   Sage
 0     Mochi     olfactory    harasama     104      Harasama       64 Fighter      Dark Stalker
 1     Takoyaki olfactory     harasama     119      Reizinixc      99 Fighter      Bounty Hunter
 1     Takoyaki olfactory     harasama     183      ReizinixcII    36 Backpacker   Tatarabe
รูปแบบบรรทัดฐานที่ 2
• รูปแบบบรรทัดฐานที่ 2 = Second Normal Form (2NF)
• มีหลายเหตุผลที่ต้องทาตารางให้เป็น 2NF
   – ปัญหาความซ้าซ้อนของข้อมูล
• ตาราง 2NF ต้องผ่านคุณสมบัติทั้งหมดของ 1NF มาก่อน
• 2NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับบางส่วนของ Primary Key
   – ไม่มี Partial Dependency
การทาตารางเป็น 2NF
  • พิจารณา Partial Dependency ของตาราง

Serv   Server          Board   Charac    Character
                ID                                   LV Class Name   Job Name
 ID    Name            Name     ter ID    Name



  {Serv ID, Character ID}  {Server Name, ID, Board Name, Character
  Name, LV, Class Name, Job Name}
  {Serv ID}  {Server Name}
การทาตารางเป็น 2NF
• แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้
ตารางใหม่มี PK คือ Determinant Set
• ตั้งชื่อ Schema ใหม่ที่แยกออกมา
                           Serv   Server
 ตารางรายชื่อเซิร์ฟเวอร์    ID    Name


 ตารางลักษณะตัวละคร
 Serv              Board     Character     Character
         ID                                            LV Class Name   Job Name
  ID               Name         ID          Name
รูปแบบบรรทัดฐานที่ 3
• รูปแบบบรรทัดฐานที่ 3 = Third Normal Form (3NF)
• ในบางครั้ง การทาตาราง 2NF ยังไม่พอ
   – ปัญหาความซ้าซ้อนของข้อมูลอีกแล้ว
• ตาราง 3NF ต้องผ่านคุณสมบัติทั้งหมดของ 2NF มาก่อน
• 3NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับ Attribute ใด ๆ ที่ไม่เป็น
Primary Key
   – ไม่มี Transitive Dependency
การทาตารางเป็น 3NF
• พิจารณา Transitive Dependency ของตาราง
• อย่าลืมพิจารณาตารางที่ถูกแยกจาก 2NF ด้วย
                           Serv   Server
 ตารางรายชื่อเซิร์ฟเวอร์    ID    Name


 ตารางลักษณะตัวละคร
 Serv              Board     Character     Character
         ID                                            LV Class Name   Job Name
  ID               Name         ID          Name


{ID}  {Board Name}
{Job Name}  {Class Name}
ECO Job                         System[2]



 1st Class        2nd Class    3rd Class   1st Class    2nd Class      3rd Class    1st Class      2nd Class        3rd Class
             Blademaster                               Sorcerer                                 Blacksmith
Swordman                      Gladiator    Wizard                   Force Master   Tatarabe                       Maestro
             Bounty Hunter                             Sage                                     Machinery
             Knight                                    Elementer                                Alchemist
Fencer                        Guardian     Shaman                   Astralist      Farmer                         Harvest
             Dark Stalker                              Enchanter                                Marionette
             Assasin                                   Druid                                    Explorer
Scout                         Eraser       Vates                    Cardinal       Ranger                         Strider
             Commando                                  Bard                                     Treasure Hunter
             Striker                                   Cabalist                                 Trader
Archer                        Hawker       Warlock                  Soultaker      Merchant                       Royal Dealer
             Gunner                                    Warlock                                  Gambler

             Fighter Class                          Spell User Class                        Backpacker Class
การทาตารางเป็น 3NF
• แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้
ตารางใหม่มี PK คือ Determinant Set
• ตั้งชื่อ Schema ใหม่ที่แยกออกมา
                                ตารางลักษณะตัวละคร
                 Serv           Character   Character
                          ID                            LV   Job Name
                  ID               ID        Name


ตารางรายชื่อเซิร์ฟเวอร์        ตารางชื่อในเว็บบอร์ด             ตารางคลาสอาชีพ
 Serv ID Server Name            ID      Board Name           Job Name   Class Name
รูปแบบบรรทัดฐานบอยซ์คอดด์
• ในเชิงธุรกิจ การทาตารางถึง 3NF นั้นเพียงพอแล้ว แต่บางครั้งก็ยังไม่พอ
• การพิจารณา BCNF ไม่ต้องพิจารณา 1NF, 2NF, 3NF ก็ได้
• ลักษณะของ Relation ที่สามารถนามาพิจารณา BCNF
   – มี Candidate Key ตั้งแต่ 2 ตัวขึ้นไป
   – Primary Key เป็น Composite Key
   – Candidate Key บางตัวมีการใช้ Attribute      เดียวกันเป็นส่วนหนึ่งของ
   Candidate Key
• BCNF จะไม่มี Attribute บางส่วนที่เป็น PK ขึ้นกับบาง Attribute ที่ไม่
เป็น PK
การทาตารางเป็น BCNF
• ผู้ พั ฒ นาระบบคนหนึ่ ง อยากให้ พิ จ ารณาว่ า ตารางการสอนของ
มหาวิทยาลัย S นั้นอยู่ใน BCNF หรือไม่
       Teacher Name   Semester   Year   Course ID   sec   Capacity
     Mera Meiji          1       2001   02358230    1       300
     Mera Meiji          2       2001   02358230    2       300
     Keiseiie Kune       1       2001   02358101    1       300
     Edogawa Asaki       1       2002   01411103    1       40
     Inoue Shuichi       1       2002   01411103    2       40
     Keiseiie Hara       2       2002   01999610    1       30
     Inoue Fumiko        2       2002   01420101    1       300
การทาตารางเป็น BCNF
• ภายในตารางไม่พบ Transitive Dependency, Partial Dependency
ดังนั้นตารางนี้เป็นตาราง 3NF
• ตารางนี้ไม่เป็น BCNF เพราะ {Semester, Year, Course ID, sec} เป็น
ตัวกาหนดให้กับ {Teacher Name}


       Teacher Name   Semester   Year   Course ID   sec   Capacity
การทาตารางเป็น BCNF
• การเปลี่ยนให้เป็น BCNF ทาได้โดยเปลี่ยน Determinant Set ที่ไม่ใช่
PK มาเป็น PK แทน ส่วน Dependent Set นั้นเปลี่ยนเป็น Attribute
ธรรมดา
       Teacher Name   Semester   Year   Course ID   sec   Capacity




       Teacher Name   Semester   Year   Course ID   sec   Capacity
การทาตารางเป็น BCNF
• ในกรณีที่ Determinant Set เป็น Attribute ที่ไม่ได้อยู่ใน PK ทั้งหมด
การเปลี่ยนเป็น BCNF อาจทาให้เกิด Partial Dependency ได้
          A         B         C         D          E



          C         B         D         A          E




                    B         C         A

              B          C          D          E
รูปแบบบรรทัดฐานที่ 4
•   รูปแบบบรรทัดฐานที่ 4 = Fourth Normal Form (4NF)
•   ส่วนใหญ่ไม่นิยมทากัน
•   ตาราง 4NF ต้องผ่านคุณสมบัติทั้งหมดของ BCNF มาก่อน
•   คอร์สนี้ไม่มีเรื่อง 4NF
Denormalization
• ข้อมูลที่ผ่าน Normalization แล้ว จะทาให้ข้อมูลซ้าซ้อนลดลง และ
Schema มากขึ้น
• การคืนสภาพของตาราง schema ที่ Normalized แล้ว จะใช้วิธี
Natural Join
   – ยิ่ง schema มาก record ที่ใช้ในการ Natural Join จะยิ่งมากขึ้นเรื่อย ๆ
• Denormalization ช่วยเพิ่มความเร็วในการ query ยิ่งขึ้น
• การตัดสินใจ Denormalization ขึ้นกับจุดประสงค์ที่ใช้งานตาราง
Denormalization




• ข้อขัดแย้งระหว่าง Time กับ Space
• เป้าหมายคือประสิทธิภาพระบบโดยรวมที่ดีที่สุด
ประเภทของ Physical Storage
• Physical = ทางกายภาพ, Storage = หน่วยเก็บ
• Volatile
   – เมื่อไฟดับ ข้อมูลภายในหายทั้งหมด
• Non-Volatile
   – เมื่อไฟดับ ข้อมูลที่เก็บไว้ภายในยังอยู่คงเดิม
   – เหมาะสาหรับการสารองข้อมูล, ทา Backup
Volatile Physical Storage Media
• Cache
   – หน่วยความจาที่มีความเร็วสูงสุด
   – แต่ราคาแพงสุดเหมือนกัน
   – จัดการโดย Hardware ของ Computer
• Main Memory
   – เวลาในการเข้าถึงช้ากว่า Cache แต่ยังถือว่าเร็วมาก (ระดับนาโนวินาที)
   – ปัจจุบันราคาเริ่มถูกลงและความจุมากขึ้นเรื่อย ๆ
• เมื่อไฟดับ ข้อมูลใน Cache และ Main Memory จะหายทั้งหมด
Non-Volatile Physical Storage Media
• Flash Memory
   – สามารถเขียนแล้วลบใหม่ในจานวนครั้งที่จากัด
   – การอ่านไว แต่เขียนและลบช้า โดยเฉพาะการลบ
   – นิยมใช้ในกล้องดิจิทัล, USB Drive, โทรศัพท์
• Magnetic Disk
   –   ข้อมูลถูกเก็บในจานหมุน ใช้อานาจแม่เหล็กในการอ่าน/เขียน
   –   ใช้สาหรับเก็บ DB ทั้งหมด
   –   สามารถเข้าถึงข้อมูลได้โดยตรง
   –   มีความจุข้อมูลมาก และมากขึ้นไปอีกในอนาคต
Non-Volatile Physical Storage Media
• CD-Rom, DVD, Blu-ray Disk
   – ใช้แสงในการอ่านข้อมูล
   – ความเร็วในการอ่านและเขียนต่ากว่า Magnetic Disk
• Tape Storage
   –   สมัยก่อนนิยมใช้กับการ Backup ข้อมูล
   –   สามารถเข้าถึงข้อมูลแบบลาดับ
   –   มีความจุข้อมูลมาก
   –   เทปสามารถดึงออกจาก Drive ได้
   –   เทปราคาถูก แต่ Drive ราคาแพง
Storage Hierarchy
• Primary Storage
   – รวดเร็ว แต่ Volatile
   – Cache, Main Memory
• Secondary Storage (On-line Storage)
   – เร็วในโดยรวม และ Non-Volatile
   – Flash Memory, Magnetic Disk
• Tertiary Storage (Off-line Storage)
   – เวลาในการเข้าถึงช้า Non-Volatile
   – Magnetic Tape, Optical Disk
Storage Hierarchy
กลไกของ Magnetic HDD
กลไกของ Magnetic HDD
• หัวอ่าน/เขียน
   – อยู่ใกล้มาก ๆ กับผิวของจานแม่เหล็ก (เกือบจะสัมผัสกัน)
   – สาหรับการอ่าน/เขียนข้อมูลในรูปแม่เหล็ก
   – 1 หัวต่อ 1 จานแม่เหล็ก
• Tracks
   –   ส่วนที่แบ่งจานแม่เหล็กออกเป็นส่วน ๆ
   –   Tracks แบ่งเป็นวงกลมย่อย ๆ ตามวงของจานแม่เหล็ก
   –   1 Tracks ใช้ได้ทั้งด้านบนและล่าง
   –   HDD 1 จาน มี Track 50K ~ 100K
กลไกของ Magnetic HDD
• Sectors
   – หน่วยที่เล็กที่สุดที่สามารถอ่าน/เขียนได้
   – ส่วนใหญ่มีขนาด 512 bytes
   – Tracks ภายในมี Sector ประมาณ 0.5 ~ 1K ภายนอกมีประมาณ 2 เท่า
• วิธีการอ่าน/เขียน Sector
   – แขนจะขยับไปยังตาแหน่ง Track ที่ถูกต้อง ขณะที่จานแม่เหล็กหมุนไปเรื่อย ๆ
   – ข้อมูลถูกอ่าน/เขียนผ่าน Sector ที่อยู่ใต้หัวอ่าน/เขียน
   – สาเหตุที่ทาให้การเข้าถึงข้อมูลช้า
กลไกของ Magnetic HDD
• ความคงทนของ HDD
  –   สมัยก่อนผิวบนจานแม่เหล็กประกอบด้วยเหล็กออกไซด์
  –   แตก, พัง, สลายได้ หากได้รับการกระเทือน
  –   HDD ปัจจุบันนี้มีความไวต่อการกระทบกระเทือนน้อยลง
  –   ส่วนใหญ่เสียเพราะ Bad Sector, Sector พัง
Disk Controller
• ตัวกลางเชื่อมต่อระหว่างระบบคอมพิวเตอร์กับ HDD ส่วน Hardware
   – รับคาสั่งอ่าน/เขียนจากระบบคอมพิวเตอร์
   – ควบคุมให้แขนขยับไปยัง Track ที่ต้องการและอ่าน/เขียนข้อมูล
   – คานวณและใส่ Checksum ลงไปในแต่ละ Sector เพื่อความถูกต้องเมื่ออ่าน
   ข้อมูลกลับ
   – มีการอ่านข้อมูลที่เขียนไปแล้วเพื่อตรวจสอบความถูกต้องอีกครั้ง
      • สาเหตุที่ทาให้การอ่าน/เขียนช้า
   – Remapping of Bad Sector
• หากมี HDD หลายตัว ทุกตัวจะเชื่อมต่อกับ Disk Controller ทั้งหมด
Disk Controller
• หากมี HDD หลายตัว ทุกตัวจะเชื่อมต่อกับ Disk Controller ทั้งหมด
   – แต่หน้าที่ของ Controller ส่วนใหญ่ HDD จะจัดการของตนเอง
       • ลดภาระให้กับ Controller
• มาตรฐานตัวกลางในการเชื่อมต่อ
   –   ATA (AT Adaptor)
   –   SATA (Serial ATA)
   –   SCSI (Small Computer System Interconnect)
   –   SAS (Serial Attached SCSI)
• ปัจจุบันนิยมใช้ SATA
การสร้างที่เก็บไฟล์ไว้ใช้ร่วมกัน[3]

• SAN (Storage Area Network)
   – ระบบเครือข่ายของที่เก็บข้อมูล โดยการนาอุปกรณ์ที่เก็บข้อมูลมาต่อกันเป็น
   เครือข่าย
   – สามารถดึงข้อมูล และเก็บข้อมูลปริมาณมากได้ในเวลาสั้น ๆ
   – มีความยืดหยุ่นสูง สามารถปรับระบบให้ทางานตามการใช้งานได้
• NAS (Network Attached Storage)
   – ระบบไฟล์เซิร์ฟเวอร์ที่เข้าถึงทาง TCP/IP
   – ดูแลรักษาง่าย สามารถจัดการผ่าน GUI บน Web Browser ได้
   – ไม่เหมาะกับข้อมูลที่มีขนาดใหญ่
ตัววัดประสิทธิภาพ HDD
• เวลาเข้าถึงข้อมูล (Access Time) เกิดจาก
   – เวลาแสวงหา (Seek Time) = เวลาที่ Arm ขยับหาตาแหน่ง Track ที่ถูกต้อง
   – เวลาที่จานหมุนหมุน Sector ให้ไปอยู่ที่หัวอ่าน/เขียน
   – ใช้เวลารวมประมาณ 0.022 วินาที
• อัตราการย้ายข้อมูล (Data-Transfer Rate)
   – ในกรณีที่มี HDD มาก ๆ Controller มีผลกับอัตรานี้
• เวลาใช้งานโดยเฉลี่ย (Mean Time to Failure (MTTF))
   – เวลาเฉลี่ยที่ HDD สามารถทางานได้โดยไม่เสีย
   – HDD ส่วนใหญ่จะมี MTTF 3 ~ 5 ปี
Block
• Sector ที่อยู่ติดกันบน Track
• ใช้ในการอ่าน/เขียนข้อมูลระหว่าง HDD กับ Main Memory
   – ขนาดเล็ก ใช้เวลาเพื่อย้ายข้อมูลมาก
   – ขนาดใหญ่ เกิดพื้นที่เหลือในกรณีข้อมูลมีความจุน้อยกว่า Block
• ข้อมูลเดียวกัน ไม่จาเป็นต้องอยู่ Blocks ติดกัน
   – ถ้าไม่มีข้อมูลอื่นคั่น ข้อมูลเดียวกันจะเขียน Blocks ติดกันเรื่อย ๆ
   – ถ้ามีข้อมูลอื่นคั่น ข้อมูลเดียวกันอาจอยู่กระจัดกระจาย
       • มีผลต่อประสิทธิภาพ HDD
   – แก้ได้โดยการ Defragment ซึ่งไม่ค่อยมีใครชอบทากัน
Redundant Arrays of Independent                                     Disks [4]

• การนา HDD หลายตัวมาต่อกัน และมองให้เป็น HDD ตัวเดียว
• RAID ทาให้ประสิทธิภาพการเก็บข้อมูลดีขึ้น
   – ความจุมากขึ้น RAID นั้นประกอบด้วย HDD หลายตัว
   – ความเร็วมากขึ้น ข้อมูลเดียวกัน แบ่งกันเก็บ ทาให้อ่าน/เขียนได้เร็วขึ้น
   – ความน่าเชื่อถือมากขึ้น มีการเก็บข้อมูลเดียวกันไว้หลาย HDD
• RAID สามารถทาสาเนาข้อมูล (Mirroring) ได้
   – เกิดการซ้าซ้อนกันของข้อมูล (Redundancy)
   – ในกรณีที่ HDD ตัวใดตัวหนึ่งเสียหรือซ่อม ข้อมูลจะไม่สูญหายไป
   – สามารถใช้ข้อมูลได้จากทั้ง HDD ต้นแบบกับ HDD สาเนา
ระดับ RAID
• RAID 0: Block Striping, non-redundant
   – มีการแบ่งข้อมูลกันเก็บอย่างเดียว
   – เหมาะกับข้อมูลที่ต้องการความเร็วในการเข้าถึง
   – เมื่อ HDD ตัวใดเสียข้อมูลจะหายทั้งหมด
• RAID 1: Mirrored Disk[4]
   –   มีการทาสาเนา (Mirroring) เพียงอย่างเดียว
   –   เวลาในการเข้าถึงช้ากว่า RAID 0
   –   เมื่อ HDD ตัวใดตัวหนึ่งเสีย ข้อมูลจะไม่หายไป
   –   เน้นด้านความปลอดภัยของข้อมูล
ระดับ       RAID [4]

• RAID 1+0
  –   ต้องการ 4 HDDs ขึ้นไป
  –   นาเอาข้อดีของ RAID 0 และ RAID 1 มารวมกัน
  –   ทาสาเนา HDD ก่อน แล้วค่อยแบ่งเก็บข้อมูลของต้นฉบับและสาเนา
  –   เหมาะสาหรับข้อมูลที่ต้องการความเร็วในการเข้าถึงและความจุไม่มาก
• RAID 2
  –   มี HDD สาหรับเก็บข้อมูลไว้ตรวจสอบและแก้ไขส่วนที่ผิดพลาด (ECC)
  –   เมื่อ HDD ใดเสียหาย ข้อมูลสามารถกู้คืนได้จากไฟล์ที่เหลือกับค่า ECC
  –   HDD ทางานช้า และต้องมีที่ HDD ไว้เก็บ ECC ด้วย
  –   แบ่งข้อมูลเก็บเป็นระดับ Bit
ระดับ       RAID [4]

• RAID 3: Bit-Interleaved Parity
   –   ใช้ Parity แทน ECC ในการตรวจสอบข้อผิดพลาดของข้อมูล
   –   HDD จะเก็บ Parity เพียง 1 HDD เท่านั้น
   –   แบ่งข้อมูลเก็บเป็น Byte แทน Bit
   –   Parity ที่มี HDD เดียว ทาให้เวลาเขียนข้อมูลมาก ๆ ทาได้ช้าลง
• RAID 4: Block-Interleaved Parity
   – ระบบการทางานคล้าย RAID 3
   – มีการแบ่งข้อมูลเป็นระดับ Block แทน Byte
   – ยังคงปัญหาเรื่องเวลาการเขียนข้อมูล
ระดับ      RAID [4]

• RAID 5: Block-Interleaved Distributed Parity
   –   แก้ปัญหาคอขวดของ Parity โดยให้ Parity เก็บรวมไปกับข้อมูล
   –   Parity Block จะเก็บเรียงลาดับตาม HDD ไปเรื่อย ๆ จนครบ
   –   การแบ่งข้อมูลและระดับการแบ่งเป็นหน่วย Block (เหมือนกับ RAID 4)
   –   มีระบบ Hot Swap สามารถเปลี่ยน HDD ที่เสียได้ในขณะที่ระบบทางานอยู่
   –   เหมาะกับการเก็บข้อมูลบน Server ต่าง ๆ ทั่วไป
ระดับ        RAID [4]

• RAID 6: P+Q Redundancy
  – คล้ายกับ RAID 5
  – มีการสร้าง Parity Block เพิ่มอีก 1 Block
  – สามารถ Hot Swap 2 HDDs ได้
     • ในกรณีที่ HDD เสียสองตัวพร้อมกัน RAID 6 ยังสามารถทางานต่อได้
  – เหมาะกับข้อมูลที่ต้องการความเสถียรภาพ
• RAID 7
  – เหมาะสาหรับองค์กรขนาดใหญ่
  – พื้นฐานมาจาก RAID 4 แต่ HDD ทางานโดยอิสระ ไม่ต้องรอกัน
  – มี Real-Time Operating System คอยควบคุมการทางานของ RAID
การเลือกระดับ RAID
• ปัจจัยหลักในการตัดสินใจ
    –   ราคา
    –   ประสิทธิภาพการอ่าน/เขียน
    –   ประสิทธิภาพเมื่อ HDD บางตัวใน Logical Disk เกิดเสีย
    –   ประสิทธิภาพการกู้ข้อมูลกลับคืน
•   RAID 0 สาหรับข้อมูลที่เน้นความเร็ว และไม่ค่อยสาคัญ
•   RAID 2, 4 ถูกแทนด้วย RAID 3, 5 และ RAID 3 ถูกแทนด้วย RAID 5
•   RAID 5 นิยมใช้เก็บข้อมูลที่ไม่ค่อยเปลี่ยนแปลงและปริมาณมาก
•   RAID 1 มีความเร็วในการเขียนมากกว่า RAID 5 แต่ใช้พื้นที่มากกว่า
•   ระดับ RAID ที่นิยมใช้ RAID 0, 1, 1+0, 5
ประเภทระเบียน
• ระเบียนจากัดขนาด (Fixed-Length Records)
   – บอกขนาดที่แน่นอนแต่ละระเบียน และขนาดตารางได้
   – อาจเกิดช่องว่างในกรณีที่ข้อมูลมีขนาดน้อยกว่าความจุที่กาหนดไว้
   – เข้าถึงแต่ละระเบียนได้ง่าย
• ระเบียนขนาดแปรผันได้ (Variable-Length Records)
   – ขนาดของระเบียนขึ้นกับข้อมูลที่เก็บจริง
   – มี Null Bitmap ไว้บอกจุดสิ้นสุดของระเบียน
การจัดการระเบียน
• Heap ระเบียนสามารถใส่ได้ทุกที่ที่มีพื้นที่ว่าง
• Sequential เก็บระเบียนแบบเรียงลาดับโดยขึ้นกับ Search-Key
• Hash เก็บข้อมูลโดยอาศัย Hash Function กาหนดตาแหน่ง Block
• Multitable Clustering การเก็บระเบียนโดยค่าที่อยู่ใน Schema อื่น
สามารถเก็บไว้ในที่เดียวกันได้
• ในคอร์สนี้ยกตัวอย่างเพียง Sequential กับ Multitable Clustering
การจัดการระเบียนแบบลาดับ
• เหมาะสาหรับงานที่ต้องการประมวลผลทุกระเบียน
• ระเบียนจะเรียงลาดับโดยอาศัย Search-Key
การจัดการระเบียนแบบลาดับ
• การค้นหา อาศัยการเดินไปทีละ
ระเบียน
• การลบ มี ก ารอั พ เดต Pointer
ของระเบียนข้างเคียง และลบ
ระเบียนที่ต้องการ
• การเพิ่ ม ค้ น หาที่ ว่ า งส าหรั บ
ระเบียนใหม่ จากนั้นค้นหาตาแหน่ง
ที่ ร ะเบี ย นใหม่ ค วรอยู่ สุ ด ท้ า ย
อัพเดต Pointer ข้างเคียงเพื่อให้
สามารถอ้างอิงถึงระเบียนใหม่ได้
การจัดการระเบียนแบบ Multitable Clustering
• การเก็บระเบียนโดยหนึ่งไฟล์อาจประกอบด้วยข้อมูลจาก Schema อื่น
การจัดการระเบียนแบบ Multitable Clustering
• ข้อดี ทาให้การ Natural Join เร็วขึ้น
• ข้อเสีย การสอบถามข้อมูลใน Schema เดียวกันทาได้ช้าลง
• ในระเบียนอาจมี Pointer สาหรับชี้ระเบียนที่อยู่ใน Schema เดียวกัน
Data Dictionary
• ใช้เก็บข้อมูลของข้อมูล (metadata)
   – ข้อมูลเกี่ยวกับ Schema
       • ชื่อ ประเภท ความจุของ Attribute และชื่อ Schema
       • ชื่อและนิยามของ Views
       • เงื่อนไขบังคับของข้อมูล (Integrity Constrains)
   –   User Account ที่ใช้เข้าถึงฐานข้อมูล
   –   ข้อมูลต่าง ๆ ภายใน Schema
   –   ข้อมูลเกี่ยวกับ Index
   –   ข้อมูลการเก็บไฟล์ทางกายภาพ
       • วิธีการเก็บ Schema และที่อยู่ของไฟล์ที่เก็บ
Data Dictionary
Buffer
• ส่วนของ Main Memory ที่สามารถเก็บ Blocks ของข้อมูลได้
   – ลดจานวนครั้งการอ่านจาก HDD โดยอ่านทีเดียวและเก็บไว้ที่นี่
• เกิดจากการอ่าน/เขียนของ HDD ทาได้ช้า
   – มีการเคลื่อนไหวของแขนและจานหมุน ซึ่งช้ามากเมื่อเทียบกับ Main Memory
   – ยิ่งอ่าน/เขียนหลาย ๆ ครั้ง ก็ยิ่งช้า
• ทาให้การอ่าน/เขียน Blocks เร็วขึ้น
   – อ่าน/เขียน Blocks จาก Main Memory ได้โดยตรง
• ยิ่งมีพื้นที่มาก การเขียน/อ่านกับ HDD ก็น้อยลงตาม
Buffer Manager
• ระบบย่อยในการจัดการ Buffer
• ทางานเมื่อโปรแกรมต้องการข้อมูลต้องการ Blocks จาก HDD
   – หากใน Buffer มี Blocks ที่ต้องการ จะให้ Pointer ของ Blocks นั้นกลับไป
   – หากไม่มี Block ที่ต้องการใน Buffer
      • อาจเอาบาง Blocks ใน Buffer ออก โดย Blocks ที่เอาออกนั้นหากมีการเปลี่ยนแปลง
      จะเขียน Blocks นั้นลง HDD ก่อน
      • อ่าน Blocks ที่ต้องการจาก HDD ไว้ใน Buffer จากนั้นให้ Pointer ของ Blocks ที่
      อ่านมากลับไปยังโปรแกรมที่ต้องการ Blocks นั้น
• ส่วนใหญ่ Blocks ใน Buffer ที่ไม่ค่อยได้ใช้จะถูกเอาออก (LRU
Strategy) เมื่อต้องการพื้นที่สาหรับ Blocks ใหม่ที่จะอ่าน
Query Processing
Parsing & Translation -> Optimization -> Evaluation
Query Processing
• Parsing & Translation
   – ตรวจสอบความถูกต้องของคาสั่ง SQL
   – เปลี่ยนคาสั่ง SQL เป็น Relational Algebra
• Evaluation
   – Query-execution Engine เริ่มสร้าง Query-evaluation plan
   – ประมวลผลจากคาสั่งตาม Query-evaluation plan ที่วางไว้
   – ส่งคาตอบที่ประเมินได้เป็น Result Set
Query Optimization
• การเลือกคาสั่งที่ทาให้การทางานทาได้รวดเร็วที่สุด
   – บางคาสั่ง SQL สามารถเขียนได้หลายแบบ และได้ผลลัพธ์ที่เหมือนกัน
• ตัวอย่าง
  SELECT * FROM (SELECT salary FROM instructor)
  AS S WHERE salary < 75000

  SELECT salary FROM (SELECT * FROM instructor
  WHERE salary < 75000) AS S

   – ควรเลือกคาสั่งใด เพื่อให้เวลาทางานน้อยที่สุด
Query Cost
• วัดจากเวลาที่ใช้ตั้งแต่สั่ง Query จนได้ Result Set กลับมา
   – การเข้าถึงข้อมูลจาก HDD + เวลาประมวลผล CPU + ความเร็วเครือข่าย + ...
• ส่วนใหญ่แล้ว Cost เกิดจากการเข้าถึงข้อมูลใน HDD
   – เวลาโดยประมาณที่ใช้ในการเข้าถึง HDD คานวณจากเวลาที่เข้าถึง b Blocks
   + เวลาที่ใช้กับการ Seek S ครั้ง
                        (b * tT) + (S * tS)
   – tT =เวลาที่ใช้ในการเคลื่อนย้าย 1 Block, tS = เวลาที่ใช้ Seek 1 ครั้ง
   – สามารถลดการเข้าถึง HDD ได้ด้วย Buffer
Selection Operation
• Linear Search Algorithm การเข้าไปอ่านแต่ละ Blocks และดูว่าแต่ละ
ระเบียนนั้นตรงตามเงื่อนไขที่กาหนดหรือไม่
   – Cost โดยประมาณคานวณจากจานวน Blocks ที่เก็บ Relation r ทั้งหมด +
   การ Seek 1 ครั้ง
              br blocks transferred + 1 seek
   – หากเงื่อนไขที่กาหนดเป็น Key Attribute สามารถจานวนได้จาก
           (br/2) blocks transferred + 1 seek
   – Linear Search สามารถนาไปใช้กับการเลือกระเบียนตามเงื่อนไขหรือการ
   เรียงลาดับระเบียน
การเลือกโดยใช้ดัชนี
• Index Scan การค้นหาข้อมูลโดยใช้ดัชนี (Index)
• Primary Index, equality on key
   – เลือกระเบียนที่ตรงกับเงื่อนไขการเลือกเพียงระเบียนเดียว
                  Cost = (hi + 1) * (tT + tS)
   – hi = ความสูงของต้นไม้ B-Tree
• Primary Index, equality on non-key
   – เลือกระเบียนที่ตรงเงื่อนไขทั้งหมด โดยระเบียนจะอยู่ Block   ที่ต่อเนื่อง
   ตามลาดับ
           Cost = hi * (tT + tS) + tS + (tT * b)
การเลือกโดยใช้ดัชนี
• Secondary Index, equality on nonkey
   – เลือกเพียงระเบียนเดียว หาก key ที่ใช้ค้นเป็น candidate key
                   Cost = (hi + 1) * (tT + tS)
   – เลือกหลายระเบียน ถ้า key ที่ใช้ค้นไม่เป็น candidate key
      • ระเบียนที่ตรงกับเงื่อนไข n ระเบียน แต่ละระเบียนอาจไม่ได้อยู่ใน block เดียวกัน
      • ทุกครั้งที่อ่านข้อมูลใหม่มีการ Seek เกิดขึ้น
                   Cost = (hi + n) * (tT + tS)
การเรียงลาดับ
• การสร้าง index ของ schema และใช้ index ในการอ่าน schema โดย
อ่านแบบเรียงลาดับ สามารถทาให้ใช้เพียง 1 block ในการเข้าถึงแต่ละ
ระเบียนได้
• สาหรับ schema ที่มีขนาดค่อนข้างพอดีกับหน่วยความจา จะนิยมใช้
Quicksort ในการเรียงลาดับ แต่หากไม่พอดีจะใช้ External sort-merge
แทน
Join Operation
• การ Join มีหลากหลาย Algorithms
   –   Nested-Loop-Join
   –   Block Nested-Loop Join
   –   Indexed Nested-Loop Join
   –   Merge-Join
   –   Hash-Join
• เลือกวิธีใด ขึ้นกับ Cost โดยประมาณ
Nested-Loop Join
• Algorithms
  foreach tuple tr in r:
     foreach tuple ts in s:
         if pair (tr, ts) satisfy the join condition:
            add tr•ts to the result.

• r = outer relation, s = inner relation
• ไม่ต้องใช้ index และใช้กับการ join ได้ทุกแบบ
• จะเกิดอะไรขึ้น หากใช้กับข้อมูลนี้
   – Schema student ที่มี 5000 tuples และ 100 blocks
   – Schema takes ทีมี 10000 tuples และ 400 blocks
                    ่
Nested-Loop Join
• กรณีแย่ที่สุด: เมื่อ buffer สามารถเก็บแต่ละ schema ได้เพียง 1 block
    (nr * bs) + br block transfers + nr + br seeks
   – หากเลือก student เป็น Outer relation
      • 5000 * 400 + 100 = 2,000,100 block transfers
      • 5000 + 100 = 5100 seeks
   – หากเลือก takes เป็น Outer relation
      • 10000 * 100 + 400 = 1,000,400 block transfers
      • 10000 + 400 = 5100 seeks
• การเลือก Outer relation เป็น Schema ที่มีข้อมูลมากจะไวขึ้น
Block Nested-Loop Join
• วนรอบเปรียบเทียบ โดยทุก block ใน inner relation จับคู่กับทุก
block ใน outer relation
  foreach block Br of r:
     foreach block Bs of s:
         foreach tuple tr in Br:
            foreach tuple ts in Bs:
                if (tr, ts) satisfy the join condition:
                   add tr•ts to the result.

• Algorithm นี้ให้ผลที่ดีกว่า Nested-Loop Join อย่างไร
Block Nested-Loop Join
• กรณีที่ดีที่สุดคานวณได้จาก
             br + bs block transfers + 2 seeks

• กรณีที่แย่ที่สุดคานวณ Cost โดยประมาณได้จาก
     (br * bs) + br block transfers + 2 * br seeks
   – แต่ละ Block ใน Inner Relation อ่านเพียงครั้งเดียวสาหรับทุก Blocks ที่อยู่
   ใน Outer Relation
Transaction Concept
• Transaction คือ หน่วยการทางานที่มีการเข้าถึงและเปลี่ยนแปลงข้อมูล
จากข้อมูลหนึ่งเป็นอีกข้อมูลหนึ่ง
   – การฝากเงิน, ถอนเงิน, โอนเงิน
   – การลงทะเบียนเรียน, การ Drop รายวิชา
• ในบางครั้งการทางานเพียงคาสั่งเดียวอาจไม่พอ
Transaction        Concept[5]

1 CREATE PROCEDURE transfer_funds (from_account INT,
to_account INT, amount NUMERIC(10,2))
2   SET AUTOCOMMIT = 0;
3   UPDATE account_balance SET balance = balance –
amount WHERE account_id = from_account;
4   UPDATE account_balance SET balance = balance +
amount WHERE account_id = to_account;
5   INSERT INTO journal (from_acount_id, to_account_id,
transfer_amount) VALUES (from_account, to_account,
amount);
6   COMMIT;
Transaction Concept
1   read(A)
2   A := A – 50
3   write(A)
4   read(B)
5   B := B + 50
6   write(B)
• สิ่งที่อาจเกิดขึ้นเมื่อทาคาสั่งนี้
    – เกิดความเสียหายทางด้าน Software หรือ Hardware
        • ปลั๊กหลุด
    – มีการทา Transaction แบบเดียวกัน
Transaction Concept
• จะเกิดอะไรเมื่อมีอีก Transaction ถูกทางาน และผังทางานเป็นดังนี้
   1   read(A)
   2   A := A – 50
   3   write(A)
                                   1   read(A)
   4   read(B)
   5   B := B + 50
                                   2   read(B)
                                   3   print(A + B)
   6   write(B)


• A + B ของ Transaction ที่ 2 เหมือนกับ Transaction ที่ 1 ?
Transaction Concept
• สมมติว่าเงินคุณ A คงเหลือ 100G และคุณเหลือเงิน 200G
   1   read(A)        100
   2   A := A – 50    50
   3   write(A)
                                  1   read(A)        50
   4   read(B)        200
   5   B := B + 50    250
                                  2   read(B)        200
                                  3   print(A + B)   250
   6   write(B)


• A + B ของ Transaction ที่ 2 เหมือนกับ Transaction ที่ 1 ไหม?
คุณสมบัติของ ACID
• เนื่องจาก Transaction อาจประกอบด้วยการทางานย่อย ๆ โดยเฉพาะ
การอ่าน/เขียนข้อมูล เพื่อรักษาความบูรณภาพ (Integrity) ของข้อมูลไว้
ระบบของฐานข้อมูลต้องมีคุณสมบัติ ACID
   – ความเป็นอันหนึ่งอันเดียวกัน (Atomicity)
      • งานย่อยภายใน Transaction ต้องสาเร็จทั้งหมด ไม่เช่นนั้นจะ Roll back กลับทั้งหมด
   – ความเสมอต้นเสมอปลาย (Consistency)
      • ข้อมูลหลังจากที่ทา Translation แล้วต้องสอดคล้องกับการเปลี่ยนแปลง
   – ความเป็นส่วนตัว (Isolation)
      • Transaction ที่ยังทาไม่เสร็จจะมี Transaction อื่นเข้าถึงส่วนต่าง ๆ ไม่ได้
   – ความมั่งคง (Durability)
      • Transaction ที่ทาเสร็จแล้ว ข้อมูลที่เปลี่ยนไปต้องคงอยู่ถาวร
สถานะของ Transaction
• Active: สถานะเมื่อ Transaction กาลังทางาน
• Partially Committed: สถานะหลังจากคาสั่งสุดท้ายใน Transaction
ทางานเสร็จ
• Failed: สถานะเมื่อพบว่า Transaction ไม่สามารถทางานได้
• Aborted: สถานะที่ Transaction ถูก Roll back และฐานข้อมูลกลับมา
เป็นเหมือนก่อน Transaction เริ่มทางาน
   – Transaction จะทาใหม่ (Restart) เมื่อไม่มีปัญหาด้าน Logic
   – เลิกทา (Kill)
• Committed: สถานะที่ Transaction ทางานได้สาเร็จ
สถานะของ Transaction
การ Execute ร่วมกัน
• Transaction หลาย ๆ ตัวสามารถรันไปพร้อมกันได้ในระบบ
   – เพิ่มประสิทธิภาพการทางานของ CPU และการใช้ Disk
   – ลดเวลาการทางานโดยรวม
• Transaction จะถูกคุมโดยกลไก Concurrency Control Schemes
   – ช่วยควบคุมให้ Transaction ทางานเป็นส่วนตัว ไม่ให้คุณสมบัติ Consistency
   และ Isolation เสียไป
ลาดับการทางาน
• ลาดับการทางาน (Schedule) เป็นลาดับของงานย่อยที่จะ execute
โดยเรียงตามเวลาที่ถูก execute
   – ลาดับการทางานของ Transaction Set ต้องประกอบด้วยงานย่อยทั้งหมดที่อยู่
   ใน Transaction Set
   – แต่ละงานย่อยใน Transaction ต้องคงลาดับการทางานใน Transaction ของ
   ตนเอง
• Transaction จะทาสาเร็จก็ต่อเมื่อได้สถานะ Committed
   – โดยปกติแล้ว การทา Transaction สุดท้ายเสร็จก็จะ Commit ทันที
• Transaction ที่ทางานไม่สาเร็จจะถูกยกเลิกและได้สถานะ Aborted
ลาดับการทางาน
       • สมมติ ใ ห้ ฐ านข้ อ มู ล หนึ่ ง มี 2
       Transactions ที่ต้องการ Execute
       โดย T1 แทนการโอนเงิน 50G จาก
       คุณ A ไปคุณ B และ T2 แทนการ
       โอนเงิน 10% กลับให้คุณ A
       • ล าดั บ การท างานแบบต่ อ เนื่ อ ง
       (serial) โดยให้ T1 ทางานก่อนตาม
       ด้วย T2
ลาดับการทางาน
• ล าดั บ การท างานแบบต่ อ เนื่ อ ง
โดยให้ T2 ทางานก่อนตามด้วย T1
• มีสิ่งใดแตกต่างไปจากลาดับการ
ทางานที่แล้วหรือไม่
ลาดับการทางาน
       • ลาดับการทางานแบบไม่ต่อเนื่อง
       แ ต่ ก า ร จั ด ล า ดั บ ก า ร ท า ง า น นี้
       เหมือนกับตารางลาดับการทางาน 1
       • ลาดับการทางานที่ 1, 2 และอัน
       นี้ เมื่อทั้ง 2 Transactions           ถูก
       Committed แล้ว ถ้านา A + B
       แล้วค่าที่ได้จะเท่ากันหรือไม่
ลาดับการทางาน
       • ตารางลาดับการทางานนี้ เมื่อทั้ง
       2 Transactions ถูก Committed
       แล้ว ถ้านา A + B แล้วค่าที่ได้จะ
       เหมือนกันกับตารางลาดับที่ 1, 2, 3
       หรือไม่
Serializability
• Serializability เป็นลาดับการทางานแบบ Concurrent     ที่ให้ผล
เหมือนกับ Serial Schedule
   – เราอยากได้ทั้งความเร็ว และความถูกต้องของข้อมูล
• Serializability สามารถแบ่งได้เป็น 2 ประเภทย่อย
   – Conflict Serializability
   – View Serializability
Conflict Serializability
• การ Conflict ของงานย่อย เกิดจากงานย่อยของ 2 Transaction ขึ้นไป
มีการใช้งานการอ่าน/เขียนใน Data Item เดียวกัน และเมื่อสลับงานย่อย
ของ Transaction กันแล้วจะทาให้ผลลัพธ์เปลี่ยนไป
   – สมมติให้ Ii และ Ij แทนงานย่อยของ Ti และ Tj และพบว่า Ii มีการทางานใน
   ลาดับการทางานก่อน Ij
      •   ถ้า Ii = read(Q) และ Ij = read(Q) ไม่เกิด Conflict
      •   ถ้า Ii = read(Q) และ Ij = write(Q) เกิด Conflict
      •   ถ้า Ii = write(Q) และ Ij = read(Q) เกิด Conflict
      •   ถ้า Ii = write(Q) และ Ij = write(Q) เกิด Conflict
Conflict Serializability
• Conflict Serializable คือ ชื่อเรียกของลาดับการทางานแบบ
Concurrent ที่มี Conflict Equivalent กับ Serial Schedule
• ลาดับการทางานที่ Conflict Serializable สามารถสลับคาสั่งย่อยได้โดย
ไม่ Conflict จนได้เป็น Serial Schedule
Conflict Serializability
• ตารางซ้ายมือนี้เป็น Conflict Serializable หรือไม่
   – สามารถสลับจนเป็น Serial Schedule ของ <T1, T2> หรือ <T2, T1> ได้
   หรือไม่
Conflict Serializability
• ลาดับการทางานนี้เป็น Conflict Serializable หรือไม่




• ลาดับการทางานนี้ไม่เป็น Conflict Serializable
   – ไม่สามารถสลับงานย่อยจนเป็น Serial Schedule ของ <T3, T4> หรือ <T4,
   T3> ได้
View Serializability
• การ View Equivalent ของลาดับการทางาน เกิดจาก 2 ลาดับการ
ทางานที่มี Transactions เดียวกัน และมีคุณสมบัติ 3 ข้อดังต่อไปนี้
   – หากลาดับการทางาน i ที่ Transaction t มีการอ่านค่า data item D จากค่า
   เริ่มต้น ลาดับการทางาน j ที่ t ต้องมีการอ่านค่า D จากค่าเริ่มต้นด้วยเช่นกัน
   – หากลาดับการทางาน i ใน Transaction t มีการอ่านค่า data item D จาก
   ค่าที่เขียนใน Transaction s ลาดับการทางานที่ j ใน t จะต้องอ่านค่า D จาก s
   ด้วย
   – หากลาดับการทางานที่ i Transaction t เป็น Transaction ที่มีการสั่งเขียน
   data item D ครั้งสุดท้าย ในลาดับการทางานที่ j นั้น t จะต้องเป็น Transaction
   ที่เขียน D เป็นครั้งสุดท้ายด้วยเช่นกัน
View Serializability
• View Serializable คือ ชื่อเรียกของลาดับการทางานแบบ concurrent
ที่ View Equivalent กับ Serial Schedule
• ลาดับการทางานที่เป็น View Serializable จะสามารถสลับคาสั่งย่อย
โดยเมื่อสลับแล้ว View Equivalent จนได้เป็น Serial Schedule
• หากลาดับการทางานเป็น Conflict Serializable แล้วจะเป็น View
Serializable ทันที
   – ถ้าพบว่าเป็น View Serializable แล้วจะเป็น Conflict Serializable หรือไม่
   – (P -> Q) ^ (Q -> P) = T ?
View Serializability
• ตารางนี้เป็น View Serializable และ Conflict Serializable หรือไม่




• ตารางนี้เป็น View Serializable แต่ไม่เป็น Conflict Serialzable
   – การสลับ write(Q) ของ T28 กับ write(Q) ของ T27 ไม่ผิดกฎของ View
   Equivalent และสลับแล้วจะได้ Serial Schedule <T27, T28, T29>
   – write(Q) ของ T28 กับ write(Q) ของ T27 เกิด Conflict ของคาสั่งย่อย
View Serializability
         • ตารางนี้เป็น View Serializable
         และ Conflict Serializable หรือไม่
Cascading Rollbacks
• เหตุการณ์ที่มี Transaction หนึ่งเข้าสู่สถานะ Abort และทาให้
Transaction อื่น ที่กาลังทางานอยู่บางส่วน Abort ตามไปด้วย
   – Transaction ที่ Aborted จะโดน roll back
• สาเหตุเกิดจากบาง Transaction ยังไม่ commit เมื่อทางานเสร็จ
   – การ commit Transaction เมื่อทางานเสร็จ ทาให้ข้อมูลถูกเขียนลง DB ทันที
   โดยที่ Transaction อื่นยังทางานไม่เสร็จ
• ในบางครั้ง Transaction ที่สาคัญอาจโดน roll back โดยไม่ได้ตั้งใจ
Cascading Rollbacks



• จากลาดับการทางานนี้ T10, T11, T12 จะถูกยกเลิกการทางาน
• ปัญหานี้สามารถแก้ได้ด้วย Cascadeless Schedule
   – หากต้องการอ่านข้อมูลที่เกิดจาก Transaction   อื่นเขียน ต้องอ่านเมื่อ
   Transaction นั้น committed แล้วเท่านั้น
การทดสอบ Conflict                        Serializable [6]

• การทดสอบ Serializability ของลาดับการทางาน สามารถทดสอบด้วย
การวาด Precedence Graph
• Node ของ Graph เป็น Transaction ทั้งหมดในลาดับการทางาน
• Edge ของ Graph เป็นความสัมพันธ์การ Conflict ของ Data Item
   – เมื่อ Transaction t read(D) ก่อน Transaction s write(D)
   – เมื่อ Transaction t write(D) ก่อน Transaction s read(D)
   – เมื่อ Transaction t write(D) ก่อน Transaction s write(D)
• ถ้าลาดับการทางาน S สามารถเขียน Precedence Graph ได้โดยไม่เกิด
Cycle จะได้ว่า S เป็น Conflict Serializable
การทดสอบ Conflict Serializable
• กราฟนี้ไม่เป็น Conflict Serializable
การทดสอบ Conflict Serializable
• กราฟนี้เป็น Conflict Serializable หรือไม่
Concurrency Control
• กลไกที่ช่วยให้ลาดับการทางานที่เกิดขึ้นมีคุณสมบัติ
   –   Conflict Serializable หรือ View Serializable
   –   สามารถกู้คืนได้ (Recoverable)
   –   Cascadeless
   –   สามารถรักษาคุณสมบัติ ACID ได้
• การทางานของ Concurrency Control จะทาผ่าน Protocol
   – Lock-Based Protocols
   – Timestamp-Based Protocols
Lock-Base Protocol
• การ Lock เป็นกลไกในการควบคุมการเข้าถึง data items พร้อม ๆ กัน
   – ล็อกข้อมูลที่กาลังอ่าน/เขียน ไม่ให้ Transaction อื่นมาร่วมยุ่งด้วย
• Data items สามารถ lock ได้ 2 แบบ
   – Exclusive (X) Mode: ล็อก data items สาหรับการอ่าน/เขียน
   – Shared (S) Mode: ล็อก data items สาหรับอ่านอย่างเดียว
• การส่งคาขอการล็อกจะส่งไปยัง Concurrency-Control Manager และ
Transaction จะทางานได้ก็ต่อเมื่อคาขอได้รับการอนุญาตเท่านั้น
Lock-Base Protocol
• ตารางความเข้ากันได้ของประเภทการ lock



   – Transaction จะสามารถล็อก data items ได้ ถ้าประเภทการ lock ที่ร้องขอ
   ไปเข้ากันได้กับประเภทของ lock ที่มีอยู่ที่ data items นั้น ๆ
      • Shared lock สามารถล็อก data items ได้เท่าไรก็ได้
      • Exclusive lock สามารถล็อก data items ได้เพียงครั้งเดียวเท่านั้น
   – หากไม่ได้รับอนุญาตในการล็อก Transaction ต้องรอจนกว่า Transaction
   อื่นจะปลดล็อกจนสามารถล็อก data item ได้
ข้อผิดพลาดของ Lock-Base Protocol
• การ lock ที่สั้นเกินไป อาจทาให้ Serializability หายไปได้
• การ lock ที่ยาวเกินไป ก็ทาให้เกิดปัญหาเช่นเดียวกัน
• พิจารณาลาดับการทางานนี้




• Schedule นี้มีสิ่งที่ผิดปกติหรือไม่?
ข้อผิดพลาดของ Lock-Base Protocol
• จากตารางที่แล้วพบว่า T3 และ T4 ไม่สามารถทางานต่อไปได้
   – T4 รอการปลด X-lock ของ T3 และ T3 รอการปลด S-lock ของ T4
• T3 และ T4 เกิดสภาวะ Deadlock
   – Transaction ที่ค้างอยู่ต้อง roll back ทั้งหมด
• ในบางครั้ง Concurrency Control ที่ออกแบบมาไม่ดี อาจเกิดสภาวะ
Starvation ด้วยเช่นกัน
Deadlock




http://www.gosw.kr/wp-content/uploads/2010/08/deadlock.jpg
Deadlock Handling
• สภาวะ Deadlock เกิดจาก transaction หนึ่งใน transaction set มี
การรอ transaction หนึ่งที่อยู่ในเซตเดียวกัน
• ปัญหา Deadlock สามารถแก้ได้ 2 รูปแบบ
   – Wait-Die Scheme: transaction ที่ทางานทีหลังแล้วเกิด deadlock จะถูก
   rollback
   – Wound-Wait Scheme: transaction ที่ทางานก่อนแล้วเกิด deadlock จะ
   ถูก rollback
      • rollback น้อยกว่าแบบ Wait-Die
   – Timeout-Based Schemes
      • กาหนดเวลาการร้องขอ หากใช้เวลาเกินกาหนดจะถูก rollback
Starvation   (1)
Starvation   (2)
Two-Phase Locking Protocol
• Protocol ชนิด Two-Phase Locking จะมีการ lock เป็น 2 ช่วง
   – Growing Phase ช่วงที่สามารถ lock ได้เท่านั้น
   – Shrinking Phase ช่วงที่สามารถ unlock ได้เท่านั้น
• การใช้ Protocol นี้ทาให้ลาดับการทางาน serializable แต่ยังเกิด
Deadlock และ Cascade rollback ได้อยู่
• Cascade rollback แก้ได้ด้วย Strict Two-Phase Locking Protocol
   – Exclusive Lock จะ lock จนกว่า transaction จะ committed
Locking Conversions
• Locking Conversions เป็นส่วนเพิ่มเติมของ Two-Phase Locking
Protocol
• มี 2 ช่วงเช่นเดียวกับ Two-Phase Locking Protocol
   – First Phase: สามารถล็อก S-lock, X-lock, เปลี่ยนจาก S-lock เป็น X-lock
   – Second Phase สามารถปลดล็อก S-lock, X-lock หรือเปลี่ยน X-lock เป็น
   S-lock
• การใช้ Protocol นี้ทาให้ลาดับการทางาน serializable                  แต่
โปรแกรมเมอร์ต้องเขียนวิธีการ lock เพิ่มเติมให้กับโปรแกรมด้วย
Automatic Acquisition of Locks
• Read data item algorithm
  if Ti has a lock on D:
     read(D)
  else:
     if necessary wait until no other transaction
         has a lock-X on D:
         grant Ti a lock-S on D
         read(D)
Automatic Acquisition of Locks
• Write data item algorithm
  if Ti has a lock-X on D:
     write(D)
  else:
     if necessary wait until no other transaction
         has any lock on D:
         if Ti has a lock-S on D:
            upgrade lock on D to lock-X
         else:
            grant Ti a lock-X on D
            write(D)
Implementation of Locking
• การล็อกจะทาผ่าน Lock Manager
   – Process ถูกแยกจาก DB อย่างชัดเจน
• Lock Manager มีหน้าที่คอยตอบกลับคาร้องขอการล็อกโดยการส่ง
lock grant messages
   – อาจส่ง rollback messages ในกรณีที่เกิด deadlock
• transactions ที่ส่งคาร้องแล้วจะรอจนกว่าจะได้รับการตอบกลับ
• Lock Manager จะคอยปรับปรุง Lock Table เพื่อจาว่า data item ใด
ได้อนุญาตให้ล็อก หรือพิจารณาคาร้องขออยู่
Tree-Protocol
• Graph-Based Protocol เป็นอีกหนึ่งวิธีนอกจาก Two-Phase Locking
Protocol
   – อาจเรียกอีกชื่อว่า Tree-Protocol
• Database Graph เป็นกราฟที่ไม่มีวัฏจักร แสดงความสัมพันธ์ระหว่าง
data item
   – data item d -> data item e หมายถึงต้องเข้าถึง d ก่อนจึงจะเข้าถึง e ได้
• สามารถล็อกได้เพียง Exclusive lock (X-lock) เท่านั้น
Tree-Protocol
• ใน transaction ใด ๆ การล็อกครั้ง
แรกสามารถล็อกได้ทุก node อย่าง
อิสระ
• การล็ อ กครั้ ง ที่ ส องนั้ น จ าเป็ น ต้ อ ง
ล็อก parent node ของ node ที่
ต้องการล็อกก่อนจึงสามารถล็อกได้
• การปลดล็ อ กท าได้ ทุ ก เวลา แต่
node ที่ล็อกและปลดล็อกไปแล้ว จะ
ไม่สามารถล็อกได้อีกใน transaction
นั้น ๆ
Tree-Protocol
• Graph-Based Protocol ทาให้ลาดับการทางานเป็น conflict
serializable และไม่เกิด deadlock
• Graph-Based Protocol ปลดล็อกข้อมูลได้ก่อน Two-Phase Locking
Protocol
   – ลดเวลาการทางานลง เพิ่มประสิทธิภาพมากขึ้น
• Graph-Based Protocol อาจเกิด Cascade Rollback และอาจกู้คืน
ข้อมูลไม่ได้
• การล็อกข้อมูลเกินจาเป็น
   – การล็อกต้องใช้เวลามากขึ้น
Multiple Granularity
• Granular = เป็นเม็ดเล็ก ๆ
• สามารถเขียน data items เป็น node ต่าง ๆ โดยข้อมูลที่ใหญ่กว่าจะ
เป็น parent node ให้กับข้อมูลที่ย่อยลงไป
   – ห้ามสับสนกับ Tree-Locking Protocol เด็ดขาด
• เมื่อ Transaction ล็อก node ใด ๆ child node ทั้งหมดของ node
นั้นจะถูกล็อกด้วย
• การล็อกมี 2 ประเภท
   – Fine Granularity การล็อก node ที่มี level สูง
   – Coast Granularity การล็อก node ที่มี level ต่า
Multiple Granularity
Multiple Granularity
• ใน Multiple Granularity มีวิธีการล็อกเพิ่มอีก 3 แบบ
   – Intention-Shared (IS) การล็อกเพื่อบ่งบอกว่า child node ลงไป มีการ S-
   Lock
   – Intention-Exclusive (IX) การล็อกเพื่อบอกว่า child node ลงไป มีการ S-
   Lock หรือ X-Lock
   – Shared and Intention-Exclusive (SIX) node ที่ล็อกด้วย SIX จะเป็น S-
   Lock ส่วน child node ลงไปจะเป็น IX
• Intention Lock จะทาให้ node ที่เป็น coarse สามารถ S-Lock หรือ
X-Lock โดยไม่ต้องตรวจสอบ child nodes
Multiple Granularity
• Intention Lock Compatibility Matrix
Timestamp-Based Protocols
• เมื่อระบบเริ่มทางาน แต่ละ transaction จะได้รับ timestamp
• transaction ที่ใหม่กว่า จะมีค่าใน timestamp สูงกว่า
   – ถ้า transaction i มีค่าใน timestamp คือ TS(i) และ transaction j มีค่าใน
   timestamp คือ TS(j) ถ้า j ใหม่กว่า i จะได้ว่า TS(j) > TS(i)
• Timestamp-Based Protocol สามารถทาให้ลาดับการทางานเป็น
Conflict Serializable โดยการเปลี่ยนค่า timestamp ของ data item
   – W-Timestamp(D) มีค่าเป็น timestamp ที่มากที่สุดของ transaction ที่
   สามารถ write(D) ได้สาเร็จ
   – R-Timestamp(D) มีค่าเป็น timestamp ที่มากที่สุดของ transaction ที่
   สามารถ read(D) ได้สาเร็จ
Timestamp-Based Protocols
• สมมติให้ transaction i กาลังทาคาสั่งย่อย read(Q)
• หาก TS(i) น้อยกว่า W-Timestamp(Q) จะถือว่า i กาลังอ่านข้อมูลที่
ถูกเขียนหลัง i
   – transaction i จะถูก reject และ roll back
• หาก TS(i) มากกว่าหรือเท่ากับ W-Timestamp(Q) จะถือว่า i กาลังอ่าน
ข้อมูลที่เขียนก่อน i
   – I จะสามารถอ่าน data item Q ได้ และ R-Timestamp จะเปลี่ยนเป็น
   ค่าสูงสุดระหว่าง TS(i) หรือ R-Timestamp(Q)
Timestamp-Based Protocols
• สมมติให้ transaction i กาลังทาคาสั่งย่อย write(Q)
• หาก TS(i) น้อยกว่า R-Timestamp(Q) จะถือว่า i กาลังจะเขียน
ข้อมูลที่มี transaction ใด ๆ ที่ทาทีหลังแต่อ่านข้อมูลไปก่อนแล้ว
   – transaction i จะถูก reject และ roll back
• หาก TS(i) น้อยกว่า W-Timestamp(Q) จะถือว่า i กาลังเขียนข้อมูลที่
มี transaction ที่ทาทีหลังแต่เขียนข้อมูลไปก่อนหน้าแล้ว
   – transaction i จะถูก reject และ roll back
• ถ้า TS(i) ไม่ตรงกับเงื่อนไขทั้งสอง i จะสามารถเขียนข้อมูลลงบน data
item Q ได้ และ W-Timestamp(Q) จะเปลี่ยนเป็น TS(i)
Timestamp-Based Protocols
• กาหนดให้ transaction ในลาดับการทางานนี้มี timestamp เป็น 1, 2,
3, 4, 5




• เกิดอะไรขึ้นกับตารางนี้บ้าง
Timestamp-Based Protocols
• นอกจาก Timestamp-Based Protocols จะไม่มีปัญหาเรื่อง Conflict
Serializable แล้ว ยังไม่มีปัญหา Deadlock อีกด้วย
• Timestamp-Based Protocols ยังไม่สามารถกู้ข้อมูลได้ , เกิด
Cascade rollback และ transaction อาจถูก rollback บ่อย
   –   แก้โดยให้คาสั่งเขียนนั้นทาเมื่อคานวณค่าต่าง ๆ เสร็จแล้ว
   –   ขณะที่มีการเขียน บังคับไม่ให้ transaction ทางาน
   –   transaction ที่ aborted จะกลับมาทาใหม่พร้อม timestamp ใหม่
   –   ข้อมูลจะอ่านได้ ต้อง committed จาก transaction ก่อน
Recovery System
• ความผิดพลาดของ transaction เกิดขึ้นได้ 2 แบบ
   – Logical Error เกิดจากคาสั่งย่อยใน transaction หรือความผิดพลาดภายใน
   – System Error เกิดจากระบบ เช่น Deadlock
• ระบบเสียหาย (System Crash) อันเนื่องจาก Hardware, Software,
ไฟฟ้า
• ความผิดพลาดของจานแม่เหล็ก (Disk Failure)
   – หัวอ่าน/เขียนไม่สามารถใช้งานได้
   – บางส่วนของข้อมูลเสียหายจนไม่สามารถอ่านบางข้อมูลขึ้นมาได้
Storage Structure
• Volatile Storage
   – เมื่อระบบเสียหาย ข้อมูลจะหายทันที
   – Main Memory, Cache Memory
• Non-Volatile Storage
   – ข้อมูลไม่หายไปเมื่อระบบเสียหาย แต่บางครั้งข้อมูลอาจหายบางส่วนหรือเสีย
   – Tape, HDD, Disk, Flash Memory
• Stable Storage
   – ไม่ว่าอะไรจะเกิด ข้อมูลก็ไม่หายไป
   – สามารถทาได้จากอุปกรณ์ที่เป็น Non-Volatile
Stable-Storage Implementation
• Mirroring กับดิสก์ที่แตกต่างกัน
   – การทากับ Remote ดิสก์สามารถป้องกันข้อมูลหายเมื่อเกิดภัยพิบัติได้
• การใช้ระบบ RAID
   – ค่าใช้จ่ายน้อยกว่า Mirroring
Data Access
• Physical Blocks: Blocks ที่อยู่บนจานแม่เหล็ก
• Buffer Blocks: Blocks ที่เก็บชั่วคราวอยู่บน main memory
• การย้ายข้อมูลระหว่าง main memory กับ disk จะใช้ 2 คาสั่งด้วยกัน
   – input(B) ย้าย Blocks จากจานแม่เหล็กเข้าสู่ Main Memory
   – output(B) ย้าย Blocks จาก Main Memory เข้าสู่จานแม่เหล็ก
• แต่ละ transaction ที่ทางานอยู่ภายใน main memory จะมี local
variables เป็นของตนเอง
   – การทางานของ transaction กับตัวแปรจะมีการเปลี่ยนแปลงค่าที่ local
   variable ของ transaction ตนเอง
Data Access
• การเปลี่ยนแปลงข้อมูลระหว่าง Buffer Blocks กับ Transaction Local
Variables จะใช้ 2 คาสั่งเช่นเดียวกัน
   – read(B) อ่าน data item B จาก Buffer Blocks มาไว้ที่ local variable
   – write(B) เขียน data item B ใน local variable ไว้ที่ Buffer Blocks
• การ write กับ output บางครั้งอาจไม่เกิดพร้อมกัน
• การทางานครั้งแรก data item จะถูกอ่านมาเก็บที่ local variables ถ้า
data item เพิ่งอ่านเป็นครั้งแรก
• Local variables จะถูกเขียนลง Buffer Blocks หลังจาก transaction
committed
Data Access
                         buffer
Buffer Block A                       input(A)
                          X                             A
Buffer Block B            Y                             B
                                     output(B)
           read(X)
                          write(Y)

                              x2
                 x1
                 y1

           work area          work area
           of T1              of T2

                      memory                     disk
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam
Database Review for Final Exam

Contenu connexe

Tendances

ภาวะผู้นำ
ภาวะผู้นำภาวะผู้นำ
ภาวะผู้นำ
klarharn
 
หน้าที่ผู้บริหารสถานศึกษา
หน้าที่ผู้บริหารสถานศึกษาหน้าที่ผู้บริหารสถานศึกษา
หน้าที่ผู้บริหารสถานศึกษา
Phuritchanart Thongmee
 
นวัตกรรมการศึกษา 7 ประเภท
นวัตกรรมการศึกษา 7 ประเภทนวัตกรรมการศึกษา 7 ประเภท
นวัตกรรมการศึกษา 7 ประเภท
NGamtip
 
เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]
เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]
เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]
CMRU
 
التعلم النشط-Active--learning
التعلم النشط-Active--learningالتعلم النشط-Active--learning
التعلم النشط-Active--learning
Dina Reda
 
โครงการอบรมการผลิตสื่อออนไลน์
โครงการอบรมการผลิตสื่อออนไลน์โครงการอบรมการผลิตสื่อออนไลน์
โครงการอบรมการผลิตสื่อออนไลน์
tassanee chaicharoen
 
แผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำ
แผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำแผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำ
แผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำ
Mine Pantip
 
หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์
หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์
หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์
Orawonya Wbac
 
ภูมิศาสตร์ทวีปอเมริกาเหนือ
ภูมิศาสตร์ทวีปอเมริกาเหนือภูมิศาสตร์ทวีปอเมริกาเหนือ
ภูมิศาสตร์ทวีปอเมริกาเหนือ
rungnapa4523
 
โครงสร้างหลักสูตร
โครงสร้างหลักสูตรโครงสร้างหลักสูตร
โครงสร้างหลักสูตร
nang_phy29
 

Tendances (20)

ภาวะผู้นำ
ภาวะผู้นำภาวะผู้นำ
ภาวะผู้นำ
 
การจัดการเรียนการสอนสำหรับเด็ก ld
การจัดการเรียนการสอนสำหรับเด็ก ldการจัดการเรียนการสอนสำหรับเด็ก ld
การจัดการเรียนการสอนสำหรับเด็ก ld
 
135 402 cross-cultural management12 การเจรจาต่อรองในวัฒนธรรมที่แตกต่าง
135 402 cross-cultural management12 การเจรจาต่อรองในวัฒนธรรมที่แตกต่าง135 402 cross-cultural management12 การเจรจาต่อรองในวัฒนธรรมที่แตกต่าง
135 402 cross-cultural management12 การเจรจาต่อรองในวัฒนธรรมที่แตกต่าง
 
Iso50001 (Energy Management System
Iso50001 (Energy Management SystemIso50001 (Energy Management System
Iso50001 (Energy Management System
 
หน้าที่ผู้บริหารสถานศึกษา
หน้าที่ผู้บริหารสถานศึกษาหน้าที่ผู้บริหารสถานศึกษา
หน้าที่ผู้บริหารสถานศึกษา
 
นวัตกรรมการศึกษา 7 ประเภท
นวัตกรรมการศึกษา 7 ประเภทนวัตกรรมการศึกษา 7 ประเภท
นวัตกรรมการศึกษา 7 ประเภท
 
mind map
mind  mapmind  map
mind map
 
เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]
เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]
เรียนรวมบทที่ 3 แผนการจัดการศึกษาเฉพาะบุคคล [1 54]
 
เล่มที่ 1 แนะนำโปรแกรม
เล่มที่ 1 แนะนำโปรแกรมเล่มที่ 1 แนะนำโปรแกรม
เล่มที่ 1 แนะนำโปรแกรม
 
التعلم النشط-Active--learning
التعلم النشط-Active--learningالتعلم النشط-Active--learning
التعلم النشط-Active--learning
 
โครงการอบรมการผลิตสื่อออนไลน์
โครงการอบรมการผลิตสื่อออนไลน์โครงการอบรมการผลิตสื่อออนไลน์
โครงการอบรมการผลิตสื่อออนไลน์
 
สรุปเนื้อหา เศรษฐศาสตร์ ม.3 ชุดที่ 1
สรุปเนื้อหา เศรษฐศาสตร์ ม.3 ชุดที่ 1สรุปเนื้อหา เศรษฐศาสตร์ ม.3 ชุดที่ 1
สรุปเนื้อหา เศรษฐศาสตร์ ม.3 ชุดที่ 1
 
استراتيجية الإستقصاء
استراتيجية الإستقصاءاستراتيجية الإستقصاء
استراتيجية الإستقصاء
 
แผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำ
แผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำแผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำ
แผนการจัดการเรียนรู้ กลุ่มสาระสังคมศึกษา ศาสนาและวัฒนธรรมท้องถิ่นไทดำ
 
หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์
หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์
หลักเศรษฐศาสตร์ เรื่องอรรถประโยชน์
 
التعلم الخدمي
التعلم الخدميالتعلم الخدمي
التعلم الخدمي
 
2
22
2
 
ภูมิศาสตร์ทวีปอเมริกาเหนือ
ภูมิศาสตร์ทวีปอเมริกาเหนือภูมิศาสตร์ทวีปอเมริกาเหนือ
ภูมิศาสตร์ทวีปอเมริกาเหนือ
 
โครงสร้างหลักสูตร
โครงสร้างหลักสูตรโครงสร้างหลักสูตร
โครงสร้างหลักสูตร
 
7
77
7
 

Database Review for Final Exam

  • 2. การขึ้นต่อกันของข้อมูล • Data Dependency = การขึ้นต่อกันของข้อมูล • เกิดจาก Attribute หนึ่งมีความสัมพันธ์กับอีก Attribute หนึ่ง • แบ่งออกเป็น 3 ประเภท – Functional Dependency – Multivalued Dependency – Join Dependency • ในคอร์สนี้จะศึกษาเพียง Functional Dependency เท่านั้น
  • 3. ฟังก์ชันการขึ้นต่อกัน • Functional Dependency (FD) = ฟังก์ชันการขึ้นต่อกัน • FD จะเกิดขึ้นเมื่อมีค่าของ Attribute หนึ่งสอดคล้องกับอีก Attribute หนึ่งเพียงหนึ่งค่า – นิยาม เมื่อ R เป็น Relation และให้ A, B เป็นส่วนหนึ่งของ Attribute ที่อยู่ใน R ถ้าหากค่า A นั้นสอดคล้องกับค่า B เพียงหนึ่งค่า จะกล่าวได้ว่า “B นั้นขึ้นต่อ A” หรือ “A เป็นตัวกาหนด B” หรือ A -> B – เราจะเรียก A ว่าตัวกาหนด (Determinant) และ B ว่าตัวถูกระบุค่า (Dependent) • Functional Dependency มีผลต่อการเลือก PK และการทา NF
  • 4. ลักษณะของฟังก์ชันการขึ้นต่อกัน • Trivial Functional Dependency – ความสัมพันธ์ระหว่าง Determinant Set กับ Determinant Subset – ไม่รู้ความหมายอะไรในตาราง ก็สามารถบอก Dependent ได้ – ไม่ค่อยสาคัญเท่าไร • Nontrivial Functional Dependency – ความสัมพันธ์ระหว่าง Determinant Attribute Set กับ Attribute อื่น – ต้องเข้าใจความหมาย ความสัมพันธ์ เงื่อนไขของ Attribute ในตาราง ถึง จะบอก Dependent ได้
  • 5. Trivial Functional Dependency id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer thep444 AcetoOrceiN 17 f0e7c8 68 Knight madoka555 QBayDesu 15 ffffff 57 Magician • ในตารางนี้มี Trivial Functional Dependency เท่าไร
  • 6. Nontrivial Functional Dependency id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer thep444 AcetoOrceiN 17 f0e7c8 68 Knight madoka555 QBayDesu 15 ffffff 57 Magician • ในตารางนี้มี Nontrivial Functional Dependency – {char_name}  {id, hair_id, skin_color, level, class_name}
  • 7. Nontrivial Functional Dependency • ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
  • 8. Nontrivial Functional Dependency รหัสพนักงาน ชื่อพนักงาน รหัสแผนก วันที่ทางาน เวลาเข้างาน เวลาออกงาน 226 Keiseiie Hara FKnL 2100/6/28 7:45 18:10 227 Kawada I. Inoue LL 2100/6/30 8:01 19:24 226 Keiseiie Hara FKnL 2100/6/30 6:19 17:16 228 Moriyama Aiko HR 2100/7/1 8:59 16:44 229 Keiseiie Kune CP 2100/7/1 7:33 20:54 229 Keiseiie Kune CP 2100/7/3 7:42 19:17 • ในตารางนี้มี Nontrivial Functional Dependency อะไรบ้าง?
  • 9. รูปแบบของฟังก์ชันการขึ้นต่อกัน • Full Functional Dependency – เกิดจากทุก Attribute ใน Determinant Set กาหนดค่า Attribute ทั้งหมด – ถ้า Determinant Set D สามารถกาหนดทุกค่าใน Attribute แล้ว D จะเป็น Primary Key • Partial Dependency – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่เป็น PK • Transitive Dependency – เกิดจาก Dependent Set ขึ้นกับบางส่วนของ Attribute ที่ไม่เป็น PK
  • 10. Full Functional Dependency รหัสพนักงาน ชื่อพนักงาน รหัสแผนก ตาแหน่งงาน เงินเดือน 226 Keiseiie Hara FKnL L Hand General Knight 14800 227 Kawada I. Inoue LL Linguistics Lecturer 13900 228 Moriyama Aiko HR Salary Manager 10430 229 Keiseiie Kune CP Computer Programmer 12040 230 Tadachizu Yoichi FKnL L Hand Security Guard 9400 231 Meira Meiji P Super General Priest 9000 • {รหัสพนักงาน} --> {ชื่อพนักงาน, รหัสแผนก, ตาแหน่งงาน, เงินเดือน}
  • 11. Partial Functional Dependency id project_id staff_name project_name Advisor_id dept_id 104450 1 Thunder Storm 1.. 2… 3… Go! 21004 O01 104450 2 Thunder Storm True Love Camp 32850 H32 104451 1 Bipinnaria Larva 1.. 2… 3… Go! 21004 O01 • {id}  {staff_name} • {project_id}  {project_name, advisor_id, dept_id}
  • 12. Transitive Functional Dependency proj_name staff_id job_class job_id เงินเดือน AbBeaw Project 120 Presenter 20540 6100 AbBeaw Project 145 Presenter 20540 6100 Makenai Camp 228 First Aid Manager 31001 8020 Makenai Camp 130 Director 90001 15400 Makenai Camp 144 Presenter 20540 7800 Makenai Camp 210 Entertainer 90100 8020 • {job_id}  {job_class} • {job_class}  {job_id}
  • 13. การนาเสนอฟังก์ชันที่ขึ้นต่อกัน • เราสามารถเขียน Functional Dependency ได้ 2 รูปแบบ – เขียนเป็น Diagram – เขียนเป็นเซต • ขึ้นกับความถนัดของบุคคลนั้น ๆ {EMP_NUM}  {EMP_NAME, JOB_CLASS}
  • 14. Normalization • Normalization = การทาบรรทัดฐาน, การทาให้เป็นมาตรฐาน • กระบวนการหนึ่งที่มีอยู่ในการออกแบบฐานข้อมูล – การแก้ไขตารางข้อมูลให้มีการซ้าซ้อนของข้อมูลน้อยลง – นิยมทาไปพร้อมกันกับการออกแบบ ER Diagram • Normalization จะทาตามลาดับไปเรื่อย ๆ – แต่ละระดับเรียกว่า Normal form – Normal Form (NF) = รูปแบบบรรทัดฐาน
  • 15. Normal Form • ข้อกาหนดในการแก้ไขตารางภายในฐานข้อมูล • รูปแบบที่มีตัวเลขมาก ข้อกาหนดยิ่งมากขึ้น แต่ฐานข้อมูลที่ได้ยิ่งดีขึ้น – รูปแบบบรรทัดฐานที่ 1 (1NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 0 (0NF) – รูปแบบบรรทัดฐานที่ 2 (2NF) จะดีกว่ารูปแบบบรรทัดฐานที่ 1 – ... • ในปัจจุบันรูปแบบบรรทัดฐานหลักมีทั้งหมด 9 รูปแบบ[1] – 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, 6NF • ส่วนใหญ่นิยมแก้ไขถึงรูปแบบบรรทัดฐานที่ 3 (3NF)
  • 16. ข้อเสียของตารางที่ไม่ทา Normal Form • ปัญหาการเพิ่มข้อมูล (Insertion Anomalies) – การเพิ่มข้อมูลที่มีข้อมูลไม่ครบตาม Schema – อาจใส่ค่า null แต่ null เป็นค่าที่เราไม่อยากได้ • ปัญหาการแก้ไขข้อมูล (Update Anomalies) – การแก้ไขข้อมูลที่มีความซ้าซ้อนกันในตาราง – ไล่แก้ไปเรื่อย ๆ • ปัญหาการลบข้อมูล (Deletion Anomalies) – ข้อมูลใน Attribute นั้นไม่อยากลบ แต่ข้อมูลนั้นอยู่ที่ Tuple ที่อยากลบ
  • 17. Insertion Anomalies id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer 0816581025 Sensation 10 eed99b 11 Novice madoka555 QBayDesu 15 ffffff 57 Magician darni_maria FuxkYeah-_-!! 14 ffffee 7 Archer kodman_cs นู๋IปJIทย 7 f0e7c8 13 Novice id thunderstrom
  • 18. Update Anomalies id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer 0816581025 Sensation 10 eed99b 11 Archer madoka555 QBayDesu 15 ffffff 57 Magician darni_maria FuxkYeah-_-!! 14 ffffee 7 Archer kodman_cs นู๋IปJIทย 7 f0e7c8 13 Archr 0876551000 n๐IIหล 1 343232 1 Novice
  • 19. Deletion Anomalies id char_name hair_id skin_color level class_name thep444 Adolescence 2 f0e7c8 34 Archer 0816581025 Sensation 10 eed99b 11 Archer madoka555 QBayDesu 15 ffffff 57 Magician darni_maria FuxkYeah-_-!! 14 ffffee 7 Archer kodman_cs นู๋IปJIทย 7 f0e7c8 13 Archr 0876551000 n๐IIหล 1 343232 1 Novice
  • 20. รูปแบบบรรทัดฐานที่ 1 • รูปแบบบรรทัดฐานที่ 1 = First Normal Form (1NF) • ตารางในข้อกาหนด 1NF ต้องมี Attribute ใด ๆ อยู่ภายใน Attribute – ถ้ามี Attribute ซ้อนอยู่ จะเอา Composite Attribute ออก • ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว • ทุก ๆ Attribute ต้องขึ้นกับ Primary Key • Schema ที่แปลงจาก ER Diagram จะเป็น 1NF ในทันที
  • 21. การทาตารางเป็น 1NF Serv Server Board Charac Character Character Info ID ID Name Name ter ID Name LV Class Name Job Name 0 Mochi 1 Adolescence 34 Archer thep44 Nopakun~* Fighter 1 Adolescence 41 Scout Takoyaki thanyapol thanyapol 15 NeoS Backpacker Mechanic 1 99 78 parazettamon Bard Takoyaki kunemata kunemata Spell User 150 Sufflez 76 Sage 0 Mochi 104 Harasama 64 Dark Stalker Fighter olfactory harasama 119 Reizinixc 99 Bounty Hunter 1 Takoyaki 183 ReizinixcII 36 Backpacker Tatarabe
  • 22. การทาตารางเป็น 1NF • Attribute ใดที่ซ้อนกับ Attribute ให้เอา Composite Attribute ออก Serv Server Board Charac Character Character Info ID ID Name Name ter ID Name LV Class Name Job Name Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name
  • 23. การทาตารางเป็น 1NF • ข้อมูลแบบ Multivalue ต้องแยกเป็นแต่ละแถว Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name 0 Mochi thep44 Nopakun~* 1 Adolescence 34 Fighter Archer 1 Takoyaki thep44 Nopakun~* 1 Adolescence 41 Fighter Scout 1 Takoyaki thanyapol thanyapol 15 NeoS 99 Backpacker Mechanic 1 Takoyaki kunemata kunemata 78 parazettamon 99 Spell User Bard 1 Takoyaki kunemata kunemata 150 Sufflez 76 Spell User Sage 0 Mochi olfactory harasama 104 Harasama 64 Fighter Dark Stalker 1 Takoyaki olfactory harasama 119 Reizinixc 99 Fighter Bounty Hunter 1 Takoyaki olfactory harasama 183 ReizinixcII 36 Backpacker Tatarabe
  • 24. การทาตารางเป็น 1NF • ทุก Attribute ต้องขึ้นกับ Primary Key Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name 0 Mochi thep44 Nopakun~* 1 Adolescence 34 Fighter Archer 1 Takoyaki thep44 Nopakun~* 1 Adolescence 41 Fighter Scout 1 Takoyaki thanyapol thanyapol 15 NeoS 99 Backpacker Mechanic 1 Takoyaki kunemata kunemata 78 parazettamon 99 Spell User Bard 1 Takoyaki kunemata kunemata 150 Sufflez 76 Spell User Sage 0 Mochi olfactory harasama 104 Harasama 64 Fighter Dark Stalker 1 Takoyaki olfactory harasama 119 Reizinixc 99 Fighter Bounty Hunter 1 Takoyaki olfactory harasama 183 ReizinixcII 36 Backpacker Tatarabe
  • 25. รูปแบบบรรทัดฐานที่ 2 • รูปแบบบรรทัดฐานที่ 2 = Second Normal Form (2NF) • มีหลายเหตุผลที่ต้องทาตารางให้เป็น 2NF – ปัญหาความซ้าซ้อนของข้อมูล • ตาราง 2NF ต้องผ่านคุณสมบัติทั้งหมดของ 1NF มาก่อน • 2NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับบางส่วนของ Primary Key – ไม่มี Partial Dependency
  • 26. การทาตารางเป็น 2NF • พิจารณา Partial Dependency ของตาราง Serv Server Board Charac Character ID LV Class Name Job Name ID Name Name ter ID Name {Serv ID, Character ID}  {Server Name, ID, Board Name, Character Name, LV, Class Name, Job Name} {Serv ID}  {Server Name}
  • 27. การทาตารางเป็น 2NF • แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้ ตารางใหม่มี PK คือ Determinant Set • ตั้งชื่อ Schema ใหม่ที่แยกออกมา Serv Server ตารางรายชื่อเซิร์ฟเวอร์ ID Name ตารางลักษณะตัวละคร Serv Board Character Character ID LV Class Name Job Name ID Name ID Name
  • 28. รูปแบบบรรทัดฐานที่ 3 • รูปแบบบรรทัดฐานที่ 3 = Third Normal Form (3NF) • ในบางครั้ง การทาตาราง 2NF ยังไม่พอ – ปัญหาความซ้าซ้อนของข้อมูลอีกแล้ว • ตาราง 3NF ต้องผ่านคุณสมบัติทั้งหมดของ 2NF มาก่อน • 3NF จะไม่มี Dependent Set ใด ๆ ขึ้นกับ Attribute ใด ๆ ที่ไม่เป็น Primary Key – ไม่มี Transitive Dependency
  • 29. การทาตารางเป็น 3NF • พิจารณา Transitive Dependency ของตาราง • อย่าลืมพิจารณาตารางที่ถูกแยกจาก 2NF ด้วย Serv Server ตารางรายชื่อเซิร์ฟเวอร์ ID Name ตารางลักษณะตัวละคร Serv Board Character Character ID LV Class Name Job Name ID Name ID Name {ID}  {Board Name} {Job Name}  {Class Name}
  • 30. ECO Job System[2] 1st Class 2nd Class 3rd Class 1st Class 2nd Class 3rd Class 1st Class 2nd Class 3rd Class Blademaster Sorcerer Blacksmith Swordman Gladiator Wizard Force Master Tatarabe Maestro Bounty Hunter Sage Machinery Knight Elementer Alchemist Fencer Guardian Shaman Astralist Farmer Harvest Dark Stalker Enchanter Marionette Assasin Druid Explorer Scout Eraser Vates Cardinal Ranger Strider Commando Bard Treasure Hunter Striker Cabalist Trader Archer Hawker Warlock Soultaker Merchant Royal Dealer Gunner Warlock Gambler Fighter Class Spell User Class Backpacker Class
  • 31. การทาตารางเป็น 3NF • แยกตาราง โดยย้าย Dependent Set ให้ไปอยู่ที่ตารางใหม่ และให้ ตารางใหม่มี PK คือ Determinant Set • ตั้งชื่อ Schema ใหม่ที่แยกออกมา ตารางลักษณะตัวละคร Serv Character Character ID LV Job Name ID ID Name ตารางรายชื่อเซิร์ฟเวอร์ ตารางชื่อในเว็บบอร์ด ตารางคลาสอาชีพ Serv ID Server Name ID Board Name Job Name Class Name
  • 32. รูปแบบบรรทัดฐานบอยซ์คอดด์ • ในเชิงธุรกิจ การทาตารางถึง 3NF นั้นเพียงพอแล้ว แต่บางครั้งก็ยังไม่พอ • การพิจารณา BCNF ไม่ต้องพิจารณา 1NF, 2NF, 3NF ก็ได้ • ลักษณะของ Relation ที่สามารถนามาพิจารณา BCNF – มี Candidate Key ตั้งแต่ 2 ตัวขึ้นไป – Primary Key เป็น Composite Key – Candidate Key บางตัวมีการใช้ Attribute เดียวกันเป็นส่วนหนึ่งของ Candidate Key • BCNF จะไม่มี Attribute บางส่วนที่เป็น PK ขึ้นกับบาง Attribute ที่ไม่ เป็น PK
  • 33. การทาตารางเป็น BCNF • ผู้ พั ฒ นาระบบคนหนึ่ ง อยากให้ พิ จ ารณาว่ า ตารางการสอนของ มหาวิทยาลัย S นั้นอยู่ใน BCNF หรือไม่ Teacher Name Semester Year Course ID sec Capacity Mera Meiji 1 2001 02358230 1 300 Mera Meiji 2 2001 02358230 2 300 Keiseiie Kune 1 2001 02358101 1 300 Edogawa Asaki 1 2002 01411103 1 40 Inoue Shuichi 1 2002 01411103 2 40 Keiseiie Hara 2 2002 01999610 1 30 Inoue Fumiko 2 2002 01420101 1 300
  • 34. การทาตารางเป็น BCNF • ภายในตารางไม่พบ Transitive Dependency, Partial Dependency ดังนั้นตารางนี้เป็นตาราง 3NF • ตารางนี้ไม่เป็น BCNF เพราะ {Semester, Year, Course ID, sec} เป็น ตัวกาหนดให้กับ {Teacher Name} Teacher Name Semester Year Course ID sec Capacity
  • 35. การทาตารางเป็น BCNF • การเปลี่ยนให้เป็น BCNF ทาได้โดยเปลี่ยน Determinant Set ที่ไม่ใช่ PK มาเป็น PK แทน ส่วน Dependent Set นั้นเปลี่ยนเป็น Attribute ธรรมดา Teacher Name Semester Year Course ID sec Capacity Teacher Name Semester Year Course ID sec Capacity
  • 36. การทาตารางเป็น BCNF • ในกรณีที่ Determinant Set เป็น Attribute ที่ไม่ได้อยู่ใน PK ทั้งหมด การเปลี่ยนเป็น BCNF อาจทาให้เกิด Partial Dependency ได้ A B C D E C B D A E B C A B C D E
  • 37. รูปแบบบรรทัดฐานที่ 4 • รูปแบบบรรทัดฐานที่ 4 = Fourth Normal Form (4NF) • ส่วนใหญ่ไม่นิยมทากัน • ตาราง 4NF ต้องผ่านคุณสมบัติทั้งหมดของ BCNF มาก่อน • คอร์สนี้ไม่มีเรื่อง 4NF
  • 38. Denormalization • ข้อมูลที่ผ่าน Normalization แล้ว จะทาให้ข้อมูลซ้าซ้อนลดลง และ Schema มากขึ้น • การคืนสภาพของตาราง schema ที่ Normalized แล้ว จะใช้วิธี Natural Join – ยิ่ง schema มาก record ที่ใช้ในการ Natural Join จะยิ่งมากขึ้นเรื่อย ๆ • Denormalization ช่วยเพิ่มความเร็วในการ query ยิ่งขึ้น • การตัดสินใจ Denormalization ขึ้นกับจุดประสงค์ที่ใช้งานตาราง
  • 39. Denormalization • ข้อขัดแย้งระหว่าง Time กับ Space • เป้าหมายคือประสิทธิภาพระบบโดยรวมที่ดีที่สุด
  • 40. ประเภทของ Physical Storage • Physical = ทางกายภาพ, Storage = หน่วยเก็บ • Volatile – เมื่อไฟดับ ข้อมูลภายในหายทั้งหมด • Non-Volatile – เมื่อไฟดับ ข้อมูลที่เก็บไว้ภายในยังอยู่คงเดิม – เหมาะสาหรับการสารองข้อมูล, ทา Backup
  • 41. Volatile Physical Storage Media • Cache – หน่วยความจาที่มีความเร็วสูงสุด – แต่ราคาแพงสุดเหมือนกัน – จัดการโดย Hardware ของ Computer • Main Memory – เวลาในการเข้าถึงช้ากว่า Cache แต่ยังถือว่าเร็วมาก (ระดับนาโนวินาที) – ปัจจุบันราคาเริ่มถูกลงและความจุมากขึ้นเรื่อย ๆ • เมื่อไฟดับ ข้อมูลใน Cache และ Main Memory จะหายทั้งหมด
  • 42. Non-Volatile Physical Storage Media • Flash Memory – สามารถเขียนแล้วลบใหม่ในจานวนครั้งที่จากัด – การอ่านไว แต่เขียนและลบช้า โดยเฉพาะการลบ – นิยมใช้ในกล้องดิจิทัล, USB Drive, โทรศัพท์ • Magnetic Disk – ข้อมูลถูกเก็บในจานหมุน ใช้อานาจแม่เหล็กในการอ่าน/เขียน – ใช้สาหรับเก็บ DB ทั้งหมด – สามารถเข้าถึงข้อมูลได้โดยตรง – มีความจุข้อมูลมาก และมากขึ้นไปอีกในอนาคต
  • 43. Non-Volatile Physical Storage Media • CD-Rom, DVD, Blu-ray Disk – ใช้แสงในการอ่านข้อมูล – ความเร็วในการอ่านและเขียนต่ากว่า Magnetic Disk • Tape Storage – สมัยก่อนนิยมใช้กับการ Backup ข้อมูล – สามารถเข้าถึงข้อมูลแบบลาดับ – มีความจุข้อมูลมาก – เทปสามารถดึงออกจาก Drive ได้ – เทปราคาถูก แต่ Drive ราคาแพง
  • 44. Storage Hierarchy • Primary Storage – รวดเร็ว แต่ Volatile – Cache, Main Memory • Secondary Storage (On-line Storage) – เร็วในโดยรวม และ Non-Volatile – Flash Memory, Magnetic Disk • Tertiary Storage (Off-line Storage) – เวลาในการเข้าถึงช้า Non-Volatile – Magnetic Tape, Optical Disk
  • 47. กลไกของ Magnetic HDD • หัวอ่าน/เขียน – อยู่ใกล้มาก ๆ กับผิวของจานแม่เหล็ก (เกือบจะสัมผัสกัน) – สาหรับการอ่าน/เขียนข้อมูลในรูปแม่เหล็ก – 1 หัวต่อ 1 จานแม่เหล็ก • Tracks – ส่วนที่แบ่งจานแม่เหล็กออกเป็นส่วน ๆ – Tracks แบ่งเป็นวงกลมย่อย ๆ ตามวงของจานแม่เหล็ก – 1 Tracks ใช้ได้ทั้งด้านบนและล่าง – HDD 1 จาน มี Track 50K ~ 100K
  • 48. กลไกของ Magnetic HDD • Sectors – หน่วยที่เล็กที่สุดที่สามารถอ่าน/เขียนได้ – ส่วนใหญ่มีขนาด 512 bytes – Tracks ภายในมี Sector ประมาณ 0.5 ~ 1K ภายนอกมีประมาณ 2 เท่า • วิธีการอ่าน/เขียน Sector – แขนจะขยับไปยังตาแหน่ง Track ที่ถูกต้อง ขณะที่จานแม่เหล็กหมุนไปเรื่อย ๆ – ข้อมูลถูกอ่าน/เขียนผ่าน Sector ที่อยู่ใต้หัวอ่าน/เขียน – สาเหตุที่ทาให้การเข้าถึงข้อมูลช้า
  • 49. กลไกของ Magnetic HDD • ความคงทนของ HDD – สมัยก่อนผิวบนจานแม่เหล็กประกอบด้วยเหล็กออกไซด์ – แตก, พัง, สลายได้ หากได้รับการกระเทือน – HDD ปัจจุบันนี้มีความไวต่อการกระทบกระเทือนน้อยลง – ส่วนใหญ่เสียเพราะ Bad Sector, Sector พัง
  • 50. Disk Controller • ตัวกลางเชื่อมต่อระหว่างระบบคอมพิวเตอร์กับ HDD ส่วน Hardware – รับคาสั่งอ่าน/เขียนจากระบบคอมพิวเตอร์ – ควบคุมให้แขนขยับไปยัง Track ที่ต้องการและอ่าน/เขียนข้อมูล – คานวณและใส่ Checksum ลงไปในแต่ละ Sector เพื่อความถูกต้องเมื่ออ่าน ข้อมูลกลับ – มีการอ่านข้อมูลที่เขียนไปแล้วเพื่อตรวจสอบความถูกต้องอีกครั้ง • สาเหตุที่ทาให้การอ่าน/เขียนช้า – Remapping of Bad Sector • หากมี HDD หลายตัว ทุกตัวจะเชื่อมต่อกับ Disk Controller ทั้งหมด
  • 51. Disk Controller • หากมี HDD หลายตัว ทุกตัวจะเชื่อมต่อกับ Disk Controller ทั้งหมด – แต่หน้าที่ของ Controller ส่วนใหญ่ HDD จะจัดการของตนเอง • ลดภาระให้กับ Controller • มาตรฐานตัวกลางในการเชื่อมต่อ – ATA (AT Adaptor) – SATA (Serial ATA) – SCSI (Small Computer System Interconnect) – SAS (Serial Attached SCSI) • ปัจจุบันนิยมใช้ SATA
  • 52. การสร้างที่เก็บไฟล์ไว้ใช้ร่วมกัน[3] • SAN (Storage Area Network) – ระบบเครือข่ายของที่เก็บข้อมูล โดยการนาอุปกรณ์ที่เก็บข้อมูลมาต่อกันเป็น เครือข่าย – สามารถดึงข้อมูล และเก็บข้อมูลปริมาณมากได้ในเวลาสั้น ๆ – มีความยืดหยุ่นสูง สามารถปรับระบบให้ทางานตามการใช้งานได้ • NAS (Network Attached Storage) – ระบบไฟล์เซิร์ฟเวอร์ที่เข้าถึงทาง TCP/IP – ดูแลรักษาง่าย สามารถจัดการผ่าน GUI บน Web Browser ได้ – ไม่เหมาะกับข้อมูลที่มีขนาดใหญ่
  • 53. ตัววัดประสิทธิภาพ HDD • เวลาเข้าถึงข้อมูล (Access Time) เกิดจาก – เวลาแสวงหา (Seek Time) = เวลาที่ Arm ขยับหาตาแหน่ง Track ที่ถูกต้อง – เวลาที่จานหมุนหมุน Sector ให้ไปอยู่ที่หัวอ่าน/เขียน – ใช้เวลารวมประมาณ 0.022 วินาที • อัตราการย้ายข้อมูล (Data-Transfer Rate) – ในกรณีที่มี HDD มาก ๆ Controller มีผลกับอัตรานี้ • เวลาใช้งานโดยเฉลี่ย (Mean Time to Failure (MTTF)) – เวลาเฉลี่ยที่ HDD สามารถทางานได้โดยไม่เสีย – HDD ส่วนใหญ่จะมี MTTF 3 ~ 5 ปี
  • 54. Block • Sector ที่อยู่ติดกันบน Track • ใช้ในการอ่าน/เขียนข้อมูลระหว่าง HDD กับ Main Memory – ขนาดเล็ก ใช้เวลาเพื่อย้ายข้อมูลมาก – ขนาดใหญ่ เกิดพื้นที่เหลือในกรณีข้อมูลมีความจุน้อยกว่า Block • ข้อมูลเดียวกัน ไม่จาเป็นต้องอยู่ Blocks ติดกัน – ถ้าไม่มีข้อมูลอื่นคั่น ข้อมูลเดียวกันจะเขียน Blocks ติดกันเรื่อย ๆ – ถ้ามีข้อมูลอื่นคั่น ข้อมูลเดียวกันอาจอยู่กระจัดกระจาย • มีผลต่อประสิทธิภาพ HDD – แก้ได้โดยการ Defragment ซึ่งไม่ค่อยมีใครชอบทากัน
  • 55. Redundant Arrays of Independent Disks [4] • การนา HDD หลายตัวมาต่อกัน และมองให้เป็น HDD ตัวเดียว • RAID ทาให้ประสิทธิภาพการเก็บข้อมูลดีขึ้น – ความจุมากขึ้น RAID นั้นประกอบด้วย HDD หลายตัว – ความเร็วมากขึ้น ข้อมูลเดียวกัน แบ่งกันเก็บ ทาให้อ่าน/เขียนได้เร็วขึ้น – ความน่าเชื่อถือมากขึ้น มีการเก็บข้อมูลเดียวกันไว้หลาย HDD • RAID สามารถทาสาเนาข้อมูล (Mirroring) ได้ – เกิดการซ้าซ้อนกันของข้อมูล (Redundancy) – ในกรณีที่ HDD ตัวใดตัวหนึ่งเสียหรือซ่อม ข้อมูลจะไม่สูญหายไป – สามารถใช้ข้อมูลได้จากทั้ง HDD ต้นแบบกับ HDD สาเนา
  • 56. ระดับ RAID • RAID 0: Block Striping, non-redundant – มีการแบ่งข้อมูลกันเก็บอย่างเดียว – เหมาะกับข้อมูลที่ต้องการความเร็วในการเข้าถึง – เมื่อ HDD ตัวใดเสียข้อมูลจะหายทั้งหมด • RAID 1: Mirrored Disk[4] – มีการทาสาเนา (Mirroring) เพียงอย่างเดียว – เวลาในการเข้าถึงช้ากว่า RAID 0 – เมื่อ HDD ตัวใดตัวหนึ่งเสีย ข้อมูลจะไม่หายไป – เน้นด้านความปลอดภัยของข้อมูล
  • 57. ระดับ RAID [4] • RAID 1+0 – ต้องการ 4 HDDs ขึ้นไป – นาเอาข้อดีของ RAID 0 และ RAID 1 มารวมกัน – ทาสาเนา HDD ก่อน แล้วค่อยแบ่งเก็บข้อมูลของต้นฉบับและสาเนา – เหมาะสาหรับข้อมูลที่ต้องการความเร็วในการเข้าถึงและความจุไม่มาก • RAID 2 – มี HDD สาหรับเก็บข้อมูลไว้ตรวจสอบและแก้ไขส่วนที่ผิดพลาด (ECC) – เมื่อ HDD ใดเสียหาย ข้อมูลสามารถกู้คืนได้จากไฟล์ที่เหลือกับค่า ECC – HDD ทางานช้า และต้องมีที่ HDD ไว้เก็บ ECC ด้วย – แบ่งข้อมูลเก็บเป็นระดับ Bit
  • 58. ระดับ RAID [4] • RAID 3: Bit-Interleaved Parity – ใช้ Parity แทน ECC ในการตรวจสอบข้อผิดพลาดของข้อมูล – HDD จะเก็บ Parity เพียง 1 HDD เท่านั้น – แบ่งข้อมูลเก็บเป็น Byte แทน Bit – Parity ที่มี HDD เดียว ทาให้เวลาเขียนข้อมูลมาก ๆ ทาได้ช้าลง • RAID 4: Block-Interleaved Parity – ระบบการทางานคล้าย RAID 3 – มีการแบ่งข้อมูลเป็นระดับ Block แทน Byte – ยังคงปัญหาเรื่องเวลาการเขียนข้อมูล
  • 59. ระดับ RAID [4] • RAID 5: Block-Interleaved Distributed Parity – แก้ปัญหาคอขวดของ Parity โดยให้ Parity เก็บรวมไปกับข้อมูล – Parity Block จะเก็บเรียงลาดับตาม HDD ไปเรื่อย ๆ จนครบ – การแบ่งข้อมูลและระดับการแบ่งเป็นหน่วย Block (เหมือนกับ RAID 4) – มีระบบ Hot Swap สามารถเปลี่ยน HDD ที่เสียได้ในขณะที่ระบบทางานอยู่ – เหมาะกับการเก็บข้อมูลบน Server ต่าง ๆ ทั่วไป
  • 60. ระดับ RAID [4] • RAID 6: P+Q Redundancy – คล้ายกับ RAID 5 – มีการสร้าง Parity Block เพิ่มอีก 1 Block – สามารถ Hot Swap 2 HDDs ได้ • ในกรณีที่ HDD เสียสองตัวพร้อมกัน RAID 6 ยังสามารถทางานต่อได้ – เหมาะกับข้อมูลที่ต้องการความเสถียรภาพ • RAID 7 – เหมาะสาหรับองค์กรขนาดใหญ่ – พื้นฐานมาจาก RAID 4 แต่ HDD ทางานโดยอิสระ ไม่ต้องรอกัน – มี Real-Time Operating System คอยควบคุมการทางานของ RAID
  • 61. การเลือกระดับ RAID • ปัจจัยหลักในการตัดสินใจ – ราคา – ประสิทธิภาพการอ่าน/เขียน – ประสิทธิภาพเมื่อ HDD บางตัวใน Logical Disk เกิดเสีย – ประสิทธิภาพการกู้ข้อมูลกลับคืน • RAID 0 สาหรับข้อมูลที่เน้นความเร็ว และไม่ค่อยสาคัญ • RAID 2, 4 ถูกแทนด้วย RAID 3, 5 และ RAID 3 ถูกแทนด้วย RAID 5 • RAID 5 นิยมใช้เก็บข้อมูลที่ไม่ค่อยเปลี่ยนแปลงและปริมาณมาก • RAID 1 มีความเร็วในการเขียนมากกว่า RAID 5 แต่ใช้พื้นที่มากกว่า • ระดับ RAID ที่นิยมใช้ RAID 0, 1, 1+0, 5
  • 62. ประเภทระเบียน • ระเบียนจากัดขนาด (Fixed-Length Records) – บอกขนาดที่แน่นอนแต่ละระเบียน และขนาดตารางได้ – อาจเกิดช่องว่างในกรณีที่ข้อมูลมีขนาดน้อยกว่าความจุที่กาหนดไว้ – เข้าถึงแต่ละระเบียนได้ง่าย • ระเบียนขนาดแปรผันได้ (Variable-Length Records) – ขนาดของระเบียนขึ้นกับข้อมูลที่เก็บจริง – มี Null Bitmap ไว้บอกจุดสิ้นสุดของระเบียน
  • 63. การจัดการระเบียน • Heap ระเบียนสามารถใส่ได้ทุกที่ที่มีพื้นที่ว่าง • Sequential เก็บระเบียนแบบเรียงลาดับโดยขึ้นกับ Search-Key • Hash เก็บข้อมูลโดยอาศัย Hash Function กาหนดตาแหน่ง Block • Multitable Clustering การเก็บระเบียนโดยค่าที่อยู่ใน Schema อื่น สามารถเก็บไว้ในที่เดียวกันได้ • ในคอร์สนี้ยกตัวอย่างเพียง Sequential กับ Multitable Clustering
  • 65. การจัดการระเบียนแบบลาดับ • การค้นหา อาศัยการเดินไปทีละ ระเบียน • การลบ มี ก ารอั พ เดต Pointer ของระเบียนข้างเคียง และลบ ระเบียนที่ต้องการ • การเพิ่ ม ค้ น หาที่ ว่ า งส าหรั บ ระเบียนใหม่ จากนั้นค้นหาตาแหน่ง ที่ ร ะเบี ย นใหม่ ค วรอยู่ สุ ด ท้ า ย อัพเดต Pointer ข้างเคียงเพื่อให้ สามารถอ้างอิงถึงระเบียนใหม่ได้
  • 66. การจัดการระเบียนแบบ Multitable Clustering • การเก็บระเบียนโดยหนึ่งไฟล์อาจประกอบด้วยข้อมูลจาก Schema อื่น
  • 67. การจัดการระเบียนแบบ Multitable Clustering • ข้อดี ทาให้การ Natural Join เร็วขึ้น • ข้อเสีย การสอบถามข้อมูลใน Schema เดียวกันทาได้ช้าลง • ในระเบียนอาจมี Pointer สาหรับชี้ระเบียนที่อยู่ใน Schema เดียวกัน
  • 68. Data Dictionary • ใช้เก็บข้อมูลของข้อมูล (metadata) – ข้อมูลเกี่ยวกับ Schema • ชื่อ ประเภท ความจุของ Attribute และชื่อ Schema • ชื่อและนิยามของ Views • เงื่อนไขบังคับของข้อมูล (Integrity Constrains) – User Account ที่ใช้เข้าถึงฐานข้อมูล – ข้อมูลต่าง ๆ ภายใน Schema – ข้อมูลเกี่ยวกับ Index – ข้อมูลการเก็บไฟล์ทางกายภาพ • วิธีการเก็บ Schema และที่อยู่ของไฟล์ที่เก็บ
  • 70. Buffer • ส่วนของ Main Memory ที่สามารถเก็บ Blocks ของข้อมูลได้ – ลดจานวนครั้งการอ่านจาก HDD โดยอ่านทีเดียวและเก็บไว้ที่นี่ • เกิดจากการอ่าน/เขียนของ HDD ทาได้ช้า – มีการเคลื่อนไหวของแขนและจานหมุน ซึ่งช้ามากเมื่อเทียบกับ Main Memory – ยิ่งอ่าน/เขียนหลาย ๆ ครั้ง ก็ยิ่งช้า • ทาให้การอ่าน/เขียน Blocks เร็วขึ้น – อ่าน/เขียน Blocks จาก Main Memory ได้โดยตรง • ยิ่งมีพื้นที่มาก การเขียน/อ่านกับ HDD ก็น้อยลงตาม
  • 71. Buffer Manager • ระบบย่อยในการจัดการ Buffer • ทางานเมื่อโปรแกรมต้องการข้อมูลต้องการ Blocks จาก HDD – หากใน Buffer มี Blocks ที่ต้องการ จะให้ Pointer ของ Blocks นั้นกลับไป – หากไม่มี Block ที่ต้องการใน Buffer • อาจเอาบาง Blocks ใน Buffer ออก โดย Blocks ที่เอาออกนั้นหากมีการเปลี่ยนแปลง จะเขียน Blocks นั้นลง HDD ก่อน • อ่าน Blocks ที่ต้องการจาก HDD ไว้ใน Buffer จากนั้นให้ Pointer ของ Blocks ที่ อ่านมากลับไปยังโปรแกรมที่ต้องการ Blocks นั้น • ส่วนใหญ่ Blocks ใน Buffer ที่ไม่ค่อยได้ใช้จะถูกเอาออก (LRU Strategy) เมื่อต้องการพื้นที่สาหรับ Blocks ใหม่ที่จะอ่าน
  • 72. Query Processing Parsing & Translation -> Optimization -> Evaluation
  • 73. Query Processing • Parsing & Translation – ตรวจสอบความถูกต้องของคาสั่ง SQL – เปลี่ยนคาสั่ง SQL เป็น Relational Algebra • Evaluation – Query-execution Engine เริ่มสร้าง Query-evaluation plan – ประมวลผลจากคาสั่งตาม Query-evaluation plan ที่วางไว้ – ส่งคาตอบที่ประเมินได้เป็น Result Set
  • 74. Query Optimization • การเลือกคาสั่งที่ทาให้การทางานทาได้รวดเร็วที่สุด – บางคาสั่ง SQL สามารถเขียนได้หลายแบบ และได้ผลลัพธ์ที่เหมือนกัน • ตัวอย่าง SELECT * FROM (SELECT salary FROM instructor) AS S WHERE salary < 75000 SELECT salary FROM (SELECT * FROM instructor WHERE salary < 75000) AS S – ควรเลือกคาสั่งใด เพื่อให้เวลาทางานน้อยที่สุด
  • 75. Query Cost • วัดจากเวลาที่ใช้ตั้งแต่สั่ง Query จนได้ Result Set กลับมา – การเข้าถึงข้อมูลจาก HDD + เวลาประมวลผล CPU + ความเร็วเครือข่าย + ... • ส่วนใหญ่แล้ว Cost เกิดจากการเข้าถึงข้อมูลใน HDD – เวลาโดยประมาณที่ใช้ในการเข้าถึง HDD คานวณจากเวลาที่เข้าถึง b Blocks + เวลาที่ใช้กับการ Seek S ครั้ง (b * tT) + (S * tS) – tT =เวลาที่ใช้ในการเคลื่อนย้าย 1 Block, tS = เวลาที่ใช้ Seek 1 ครั้ง – สามารถลดการเข้าถึง HDD ได้ด้วย Buffer
  • 76. Selection Operation • Linear Search Algorithm การเข้าไปอ่านแต่ละ Blocks และดูว่าแต่ละ ระเบียนนั้นตรงตามเงื่อนไขที่กาหนดหรือไม่ – Cost โดยประมาณคานวณจากจานวน Blocks ที่เก็บ Relation r ทั้งหมด + การ Seek 1 ครั้ง br blocks transferred + 1 seek – หากเงื่อนไขที่กาหนดเป็น Key Attribute สามารถจานวนได้จาก (br/2) blocks transferred + 1 seek – Linear Search สามารถนาไปใช้กับการเลือกระเบียนตามเงื่อนไขหรือการ เรียงลาดับระเบียน
  • 77. การเลือกโดยใช้ดัชนี • Index Scan การค้นหาข้อมูลโดยใช้ดัชนี (Index) • Primary Index, equality on key – เลือกระเบียนที่ตรงกับเงื่อนไขการเลือกเพียงระเบียนเดียว Cost = (hi + 1) * (tT + tS) – hi = ความสูงของต้นไม้ B-Tree • Primary Index, equality on non-key – เลือกระเบียนที่ตรงเงื่อนไขทั้งหมด โดยระเบียนจะอยู่ Block ที่ต่อเนื่อง ตามลาดับ Cost = hi * (tT + tS) + tS + (tT * b)
  • 78. การเลือกโดยใช้ดัชนี • Secondary Index, equality on nonkey – เลือกเพียงระเบียนเดียว หาก key ที่ใช้ค้นเป็น candidate key Cost = (hi + 1) * (tT + tS) – เลือกหลายระเบียน ถ้า key ที่ใช้ค้นไม่เป็น candidate key • ระเบียนที่ตรงกับเงื่อนไข n ระเบียน แต่ละระเบียนอาจไม่ได้อยู่ใน block เดียวกัน • ทุกครั้งที่อ่านข้อมูลใหม่มีการ Seek เกิดขึ้น Cost = (hi + n) * (tT + tS)
  • 79. การเรียงลาดับ • การสร้าง index ของ schema และใช้ index ในการอ่าน schema โดย อ่านแบบเรียงลาดับ สามารถทาให้ใช้เพียง 1 block ในการเข้าถึงแต่ละ ระเบียนได้ • สาหรับ schema ที่มีขนาดค่อนข้างพอดีกับหน่วยความจา จะนิยมใช้ Quicksort ในการเรียงลาดับ แต่หากไม่พอดีจะใช้ External sort-merge แทน
  • 80. Join Operation • การ Join มีหลากหลาย Algorithms – Nested-Loop-Join – Block Nested-Loop Join – Indexed Nested-Loop Join – Merge-Join – Hash-Join • เลือกวิธีใด ขึ้นกับ Cost โดยประมาณ
  • 81. Nested-Loop Join • Algorithms foreach tuple tr in r: foreach tuple ts in s: if pair (tr, ts) satisfy the join condition: add tr•ts to the result. • r = outer relation, s = inner relation • ไม่ต้องใช้ index และใช้กับการ join ได้ทุกแบบ • จะเกิดอะไรขึ้น หากใช้กับข้อมูลนี้ – Schema student ที่มี 5000 tuples และ 100 blocks – Schema takes ทีมี 10000 tuples และ 400 blocks ่
  • 82. Nested-Loop Join • กรณีแย่ที่สุด: เมื่อ buffer สามารถเก็บแต่ละ schema ได้เพียง 1 block (nr * bs) + br block transfers + nr + br seeks – หากเลือก student เป็น Outer relation • 5000 * 400 + 100 = 2,000,100 block transfers • 5000 + 100 = 5100 seeks – หากเลือก takes เป็น Outer relation • 10000 * 100 + 400 = 1,000,400 block transfers • 10000 + 400 = 5100 seeks • การเลือก Outer relation เป็น Schema ที่มีข้อมูลมากจะไวขึ้น
  • 83. Block Nested-Loop Join • วนรอบเปรียบเทียบ โดยทุก block ใน inner relation จับคู่กับทุก block ใน outer relation foreach block Br of r: foreach block Bs of s: foreach tuple tr in Br: foreach tuple ts in Bs: if (tr, ts) satisfy the join condition: add tr•ts to the result. • Algorithm นี้ให้ผลที่ดีกว่า Nested-Loop Join อย่างไร
  • 84. Block Nested-Loop Join • กรณีที่ดีที่สุดคานวณได้จาก br + bs block transfers + 2 seeks • กรณีที่แย่ที่สุดคานวณ Cost โดยประมาณได้จาก (br * bs) + br block transfers + 2 * br seeks – แต่ละ Block ใน Inner Relation อ่านเพียงครั้งเดียวสาหรับทุก Blocks ที่อยู่ ใน Outer Relation
  • 85. Transaction Concept • Transaction คือ หน่วยการทางานที่มีการเข้าถึงและเปลี่ยนแปลงข้อมูล จากข้อมูลหนึ่งเป็นอีกข้อมูลหนึ่ง – การฝากเงิน, ถอนเงิน, โอนเงิน – การลงทะเบียนเรียน, การ Drop รายวิชา • ในบางครั้งการทางานเพียงคาสั่งเดียวอาจไม่พอ
  • 86. Transaction Concept[5] 1 CREATE PROCEDURE transfer_funds (from_account INT, to_account INT, amount NUMERIC(10,2)) 2 SET AUTOCOMMIT = 0; 3 UPDATE account_balance SET balance = balance – amount WHERE account_id = from_account; 4 UPDATE account_balance SET balance = balance + amount WHERE account_id = to_account; 5 INSERT INTO journal (from_acount_id, to_account_id, transfer_amount) VALUES (from_account, to_account, amount); 6 COMMIT;
  • 87. Transaction Concept 1 read(A) 2 A := A – 50 3 write(A) 4 read(B) 5 B := B + 50 6 write(B) • สิ่งที่อาจเกิดขึ้นเมื่อทาคาสั่งนี้ – เกิดความเสียหายทางด้าน Software หรือ Hardware • ปลั๊กหลุด – มีการทา Transaction แบบเดียวกัน
  • 88. Transaction Concept • จะเกิดอะไรเมื่อมีอีก Transaction ถูกทางาน และผังทางานเป็นดังนี้ 1 read(A) 2 A := A – 50 3 write(A) 1 read(A) 4 read(B) 5 B := B + 50 2 read(B) 3 print(A + B) 6 write(B) • A + B ของ Transaction ที่ 2 เหมือนกับ Transaction ที่ 1 ?
  • 89. Transaction Concept • สมมติว่าเงินคุณ A คงเหลือ 100G และคุณเหลือเงิน 200G 1 read(A) 100 2 A := A – 50 50 3 write(A) 1 read(A) 50 4 read(B) 200 5 B := B + 50 250 2 read(B) 200 3 print(A + B) 250 6 write(B) • A + B ของ Transaction ที่ 2 เหมือนกับ Transaction ที่ 1 ไหม?
  • 90. คุณสมบัติของ ACID • เนื่องจาก Transaction อาจประกอบด้วยการทางานย่อย ๆ โดยเฉพาะ การอ่าน/เขียนข้อมูล เพื่อรักษาความบูรณภาพ (Integrity) ของข้อมูลไว้ ระบบของฐานข้อมูลต้องมีคุณสมบัติ ACID – ความเป็นอันหนึ่งอันเดียวกัน (Atomicity) • งานย่อยภายใน Transaction ต้องสาเร็จทั้งหมด ไม่เช่นนั้นจะ Roll back กลับทั้งหมด – ความเสมอต้นเสมอปลาย (Consistency) • ข้อมูลหลังจากที่ทา Translation แล้วต้องสอดคล้องกับการเปลี่ยนแปลง – ความเป็นส่วนตัว (Isolation) • Transaction ที่ยังทาไม่เสร็จจะมี Transaction อื่นเข้าถึงส่วนต่าง ๆ ไม่ได้ – ความมั่งคง (Durability) • Transaction ที่ทาเสร็จแล้ว ข้อมูลที่เปลี่ยนไปต้องคงอยู่ถาวร
  • 91. สถานะของ Transaction • Active: สถานะเมื่อ Transaction กาลังทางาน • Partially Committed: สถานะหลังจากคาสั่งสุดท้ายใน Transaction ทางานเสร็จ • Failed: สถานะเมื่อพบว่า Transaction ไม่สามารถทางานได้ • Aborted: สถานะที่ Transaction ถูก Roll back และฐานข้อมูลกลับมา เป็นเหมือนก่อน Transaction เริ่มทางาน – Transaction จะทาใหม่ (Restart) เมื่อไม่มีปัญหาด้าน Logic – เลิกทา (Kill) • Committed: สถานะที่ Transaction ทางานได้สาเร็จ
  • 93. การ Execute ร่วมกัน • Transaction หลาย ๆ ตัวสามารถรันไปพร้อมกันได้ในระบบ – เพิ่มประสิทธิภาพการทางานของ CPU และการใช้ Disk – ลดเวลาการทางานโดยรวม • Transaction จะถูกคุมโดยกลไก Concurrency Control Schemes – ช่วยควบคุมให้ Transaction ทางานเป็นส่วนตัว ไม่ให้คุณสมบัติ Consistency และ Isolation เสียไป
  • 94. ลาดับการทางาน • ลาดับการทางาน (Schedule) เป็นลาดับของงานย่อยที่จะ execute โดยเรียงตามเวลาที่ถูก execute – ลาดับการทางานของ Transaction Set ต้องประกอบด้วยงานย่อยทั้งหมดที่อยู่ ใน Transaction Set – แต่ละงานย่อยใน Transaction ต้องคงลาดับการทางานใน Transaction ของ ตนเอง • Transaction จะทาสาเร็จก็ต่อเมื่อได้สถานะ Committed – โดยปกติแล้ว การทา Transaction สุดท้ายเสร็จก็จะ Commit ทันที • Transaction ที่ทางานไม่สาเร็จจะถูกยกเลิกและได้สถานะ Aborted
  • 95. ลาดับการทางาน • สมมติ ใ ห้ ฐ านข้ อ มู ล หนึ่ ง มี 2 Transactions ที่ต้องการ Execute โดย T1 แทนการโอนเงิน 50G จาก คุณ A ไปคุณ B และ T2 แทนการ โอนเงิน 10% กลับให้คุณ A • ล าดั บ การท างานแบบต่ อ เนื่ อ ง (serial) โดยให้ T1 ทางานก่อนตาม ด้วย T2
  • 96. ลาดับการทางาน • ล าดั บ การท างานแบบต่ อ เนื่ อ ง โดยให้ T2 ทางานก่อนตามด้วย T1 • มีสิ่งใดแตกต่างไปจากลาดับการ ทางานที่แล้วหรือไม่
  • 97. ลาดับการทางาน • ลาดับการทางานแบบไม่ต่อเนื่อง แ ต่ ก า ร จั ด ล า ดั บ ก า ร ท า ง า น นี้ เหมือนกับตารางลาดับการทางาน 1 • ลาดับการทางานที่ 1, 2 และอัน นี้ เมื่อทั้ง 2 Transactions ถูก Committed แล้ว ถ้านา A + B แล้วค่าที่ได้จะเท่ากันหรือไม่
  • 98. ลาดับการทางาน • ตารางลาดับการทางานนี้ เมื่อทั้ง 2 Transactions ถูก Committed แล้ว ถ้านา A + B แล้วค่าที่ได้จะ เหมือนกันกับตารางลาดับที่ 1, 2, 3 หรือไม่
  • 99. Serializability • Serializability เป็นลาดับการทางานแบบ Concurrent ที่ให้ผล เหมือนกับ Serial Schedule – เราอยากได้ทั้งความเร็ว และความถูกต้องของข้อมูล • Serializability สามารถแบ่งได้เป็น 2 ประเภทย่อย – Conflict Serializability – View Serializability
  • 100. Conflict Serializability • การ Conflict ของงานย่อย เกิดจากงานย่อยของ 2 Transaction ขึ้นไป มีการใช้งานการอ่าน/เขียนใน Data Item เดียวกัน และเมื่อสลับงานย่อย ของ Transaction กันแล้วจะทาให้ผลลัพธ์เปลี่ยนไป – สมมติให้ Ii และ Ij แทนงานย่อยของ Ti และ Tj และพบว่า Ii มีการทางานใน ลาดับการทางานก่อน Ij • ถ้า Ii = read(Q) และ Ij = read(Q) ไม่เกิด Conflict • ถ้า Ii = read(Q) และ Ij = write(Q) เกิด Conflict • ถ้า Ii = write(Q) และ Ij = read(Q) เกิด Conflict • ถ้า Ii = write(Q) และ Ij = write(Q) เกิด Conflict
  • 101. Conflict Serializability • Conflict Serializable คือ ชื่อเรียกของลาดับการทางานแบบ Concurrent ที่มี Conflict Equivalent กับ Serial Schedule • ลาดับการทางานที่ Conflict Serializable สามารถสลับคาสั่งย่อยได้โดย ไม่ Conflict จนได้เป็น Serial Schedule
  • 102. Conflict Serializability • ตารางซ้ายมือนี้เป็น Conflict Serializable หรือไม่ – สามารถสลับจนเป็น Serial Schedule ของ <T1, T2> หรือ <T2, T1> ได้ หรือไม่
  • 103. Conflict Serializability • ลาดับการทางานนี้เป็น Conflict Serializable หรือไม่ • ลาดับการทางานนี้ไม่เป็น Conflict Serializable – ไม่สามารถสลับงานย่อยจนเป็น Serial Schedule ของ <T3, T4> หรือ <T4, T3> ได้
  • 104. View Serializability • การ View Equivalent ของลาดับการทางาน เกิดจาก 2 ลาดับการ ทางานที่มี Transactions เดียวกัน และมีคุณสมบัติ 3 ข้อดังต่อไปนี้ – หากลาดับการทางาน i ที่ Transaction t มีการอ่านค่า data item D จากค่า เริ่มต้น ลาดับการทางาน j ที่ t ต้องมีการอ่านค่า D จากค่าเริ่มต้นด้วยเช่นกัน – หากลาดับการทางาน i ใน Transaction t มีการอ่านค่า data item D จาก ค่าที่เขียนใน Transaction s ลาดับการทางานที่ j ใน t จะต้องอ่านค่า D จาก s ด้วย – หากลาดับการทางานที่ i Transaction t เป็น Transaction ที่มีการสั่งเขียน data item D ครั้งสุดท้าย ในลาดับการทางานที่ j นั้น t จะต้องเป็น Transaction ที่เขียน D เป็นครั้งสุดท้ายด้วยเช่นกัน
  • 105. View Serializability • View Serializable คือ ชื่อเรียกของลาดับการทางานแบบ concurrent ที่ View Equivalent กับ Serial Schedule • ลาดับการทางานที่เป็น View Serializable จะสามารถสลับคาสั่งย่อย โดยเมื่อสลับแล้ว View Equivalent จนได้เป็น Serial Schedule • หากลาดับการทางานเป็น Conflict Serializable แล้วจะเป็น View Serializable ทันที – ถ้าพบว่าเป็น View Serializable แล้วจะเป็น Conflict Serializable หรือไม่ – (P -> Q) ^ (Q -> P) = T ?
  • 106. View Serializability • ตารางนี้เป็น View Serializable และ Conflict Serializable หรือไม่ • ตารางนี้เป็น View Serializable แต่ไม่เป็น Conflict Serialzable – การสลับ write(Q) ของ T28 กับ write(Q) ของ T27 ไม่ผิดกฎของ View Equivalent และสลับแล้วจะได้ Serial Schedule <T27, T28, T29> – write(Q) ของ T28 กับ write(Q) ของ T27 เกิด Conflict ของคาสั่งย่อย
  • 107. View Serializability • ตารางนี้เป็น View Serializable และ Conflict Serializable หรือไม่
  • 108. Cascading Rollbacks • เหตุการณ์ที่มี Transaction หนึ่งเข้าสู่สถานะ Abort และทาให้ Transaction อื่น ที่กาลังทางานอยู่บางส่วน Abort ตามไปด้วย – Transaction ที่ Aborted จะโดน roll back • สาเหตุเกิดจากบาง Transaction ยังไม่ commit เมื่อทางานเสร็จ – การ commit Transaction เมื่อทางานเสร็จ ทาให้ข้อมูลถูกเขียนลง DB ทันที โดยที่ Transaction อื่นยังทางานไม่เสร็จ • ในบางครั้ง Transaction ที่สาคัญอาจโดน roll back โดยไม่ได้ตั้งใจ
  • 109. Cascading Rollbacks • จากลาดับการทางานนี้ T10, T11, T12 จะถูกยกเลิกการทางาน • ปัญหานี้สามารถแก้ได้ด้วย Cascadeless Schedule – หากต้องการอ่านข้อมูลที่เกิดจาก Transaction อื่นเขียน ต้องอ่านเมื่อ Transaction นั้น committed แล้วเท่านั้น
  • 110. การทดสอบ Conflict Serializable [6] • การทดสอบ Serializability ของลาดับการทางาน สามารถทดสอบด้วย การวาด Precedence Graph • Node ของ Graph เป็น Transaction ทั้งหมดในลาดับการทางาน • Edge ของ Graph เป็นความสัมพันธ์การ Conflict ของ Data Item – เมื่อ Transaction t read(D) ก่อน Transaction s write(D) – เมื่อ Transaction t write(D) ก่อน Transaction s read(D) – เมื่อ Transaction t write(D) ก่อน Transaction s write(D) • ถ้าลาดับการทางาน S สามารถเขียน Precedence Graph ได้โดยไม่เกิด Cycle จะได้ว่า S เป็น Conflict Serializable
  • 111. การทดสอบ Conflict Serializable • กราฟนี้ไม่เป็น Conflict Serializable
  • 112. การทดสอบ Conflict Serializable • กราฟนี้เป็น Conflict Serializable หรือไม่
  • 113. Concurrency Control • กลไกที่ช่วยให้ลาดับการทางานที่เกิดขึ้นมีคุณสมบัติ – Conflict Serializable หรือ View Serializable – สามารถกู้คืนได้ (Recoverable) – Cascadeless – สามารถรักษาคุณสมบัติ ACID ได้ • การทางานของ Concurrency Control จะทาผ่าน Protocol – Lock-Based Protocols – Timestamp-Based Protocols
  • 114. Lock-Base Protocol • การ Lock เป็นกลไกในการควบคุมการเข้าถึง data items พร้อม ๆ กัน – ล็อกข้อมูลที่กาลังอ่าน/เขียน ไม่ให้ Transaction อื่นมาร่วมยุ่งด้วย • Data items สามารถ lock ได้ 2 แบบ – Exclusive (X) Mode: ล็อก data items สาหรับการอ่าน/เขียน – Shared (S) Mode: ล็อก data items สาหรับอ่านอย่างเดียว • การส่งคาขอการล็อกจะส่งไปยัง Concurrency-Control Manager และ Transaction จะทางานได้ก็ต่อเมื่อคาขอได้รับการอนุญาตเท่านั้น
  • 115. Lock-Base Protocol • ตารางความเข้ากันได้ของประเภทการ lock – Transaction จะสามารถล็อก data items ได้ ถ้าประเภทการ lock ที่ร้องขอ ไปเข้ากันได้กับประเภทของ lock ที่มีอยู่ที่ data items นั้น ๆ • Shared lock สามารถล็อก data items ได้เท่าไรก็ได้ • Exclusive lock สามารถล็อก data items ได้เพียงครั้งเดียวเท่านั้น – หากไม่ได้รับอนุญาตในการล็อก Transaction ต้องรอจนกว่า Transaction อื่นจะปลดล็อกจนสามารถล็อก data item ได้
  • 116. ข้อผิดพลาดของ Lock-Base Protocol • การ lock ที่สั้นเกินไป อาจทาให้ Serializability หายไปได้ • การ lock ที่ยาวเกินไป ก็ทาให้เกิดปัญหาเช่นเดียวกัน • พิจารณาลาดับการทางานนี้ • Schedule นี้มีสิ่งที่ผิดปกติหรือไม่?
  • 117. ข้อผิดพลาดของ Lock-Base Protocol • จากตารางที่แล้วพบว่า T3 และ T4 ไม่สามารถทางานต่อไปได้ – T4 รอการปลด X-lock ของ T3 และ T3 รอการปลด S-lock ของ T4 • T3 และ T4 เกิดสภาวะ Deadlock – Transaction ที่ค้างอยู่ต้อง roll back ทั้งหมด • ในบางครั้ง Concurrency Control ที่ออกแบบมาไม่ดี อาจเกิดสภาวะ Starvation ด้วยเช่นกัน
  • 119. Deadlock Handling • สภาวะ Deadlock เกิดจาก transaction หนึ่งใน transaction set มี การรอ transaction หนึ่งที่อยู่ในเซตเดียวกัน • ปัญหา Deadlock สามารถแก้ได้ 2 รูปแบบ – Wait-Die Scheme: transaction ที่ทางานทีหลังแล้วเกิด deadlock จะถูก rollback – Wound-Wait Scheme: transaction ที่ทางานก่อนแล้วเกิด deadlock จะ ถูก rollback • rollback น้อยกว่าแบบ Wait-Die – Timeout-Based Schemes • กาหนดเวลาการร้องขอ หากใช้เวลาเกินกาหนดจะถูก rollback
  • 120. Starvation (1)
  • 121. Starvation (2)
  • 122. Two-Phase Locking Protocol • Protocol ชนิด Two-Phase Locking จะมีการ lock เป็น 2 ช่วง – Growing Phase ช่วงที่สามารถ lock ได้เท่านั้น – Shrinking Phase ช่วงที่สามารถ unlock ได้เท่านั้น • การใช้ Protocol นี้ทาให้ลาดับการทางาน serializable แต่ยังเกิด Deadlock และ Cascade rollback ได้อยู่ • Cascade rollback แก้ได้ด้วย Strict Two-Phase Locking Protocol – Exclusive Lock จะ lock จนกว่า transaction จะ committed
  • 123. Locking Conversions • Locking Conversions เป็นส่วนเพิ่มเติมของ Two-Phase Locking Protocol • มี 2 ช่วงเช่นเดียวกับ Two-Phase Locking Protocol – First Phase: สามารถล็อก S-lock, X-lock, เปลี่ยนจาก S-lock เป็น X-lock – Second Phase สามารถปลดล็อก S-lock, X-lock หรือเปลี่ยน X-lock เป็น S-lock • การใช้ Protocol นี้ทาให้ลาดับการทางาน serializable แต่ โปรแกรมเมอร์ต้องเขียนวิธีการ lock เพิ่มเติมให้กับโปรแกรมด้วย
  • 124. Automatic Acquisition of Locks • Read data item algorithm if Ti has a lock on D: read(D) else: if necessary wait until no other transaction has a lock-X on D: grant Ti a lock-S on D read(D)
  • 125. Automatic Acquisition of Locks • Write data item algorithm if Ti has a lock-X on D: write(D) else: if necessary wait until no other transaction has any lock on D: if Ti has a lock-S on D: upgrade lock on D to lock-X else: grant Ti a lock-X on D write(D)
  • 126. Implementation of Locking • การล็อกจะทาผ่าน Lock Manager – Process ถูกแยกจาก DB อย่างชัดเจน • Lock Manager มีหน้าที่คอยตอบกลับคาร้องขอการล็อกโดยการส่ง lock grant messages – อาจส่ง rollback messages ในกรณีที่เกิด deadlock • transactions ที่ส่งคาร้องแล้วจะรอจนกว่าจะได้รับการตอบกลับ • Lock Manager จะคอยปรับปรุง Lock Table เพื่อจาว่า data item ใด ได้อนุญาตให้ล็อก หรือพิจารณาคาร้องขออยู่
  • 127. Tree-Protocol • Graph-Based Protocol เป็นอีกหนึ่งวิธีนอกจาก Two-Phase Locking Protocol – อาจเรียกอีกชื่อว่า Tree-Protocol • Database Graph เป็นกราฟที่ไม่มีวัฏจักร แสดงความสัมพันธ์ระหว่าง data item – data item d -> data item e หมายถึงต้องเข้าถึง d ก่อนจึงจะเข้าถึง e ได้ • สามารถล็อกได้เพียง Exclusive lock (X-lock) เท่านั้น
  • 128. Tree-Protocol • ใน transaction ใด ๆ การล็อกครั้ง แรกสามารถล็อกได้ทุก node อย่าง อิสระ • การล็ อ กครั้ ง ที่ ส องนั้ น จ าเป็ น ต้ อ ง ล็อก parent node ของ node ที่ ต้องการล็อกก่อนจึงสามารถล็อกได้ • การปลดล็ อ กท าได้ ทุ ก เวลา แต่ node ที่ล็อกและปลดล็อกไปแล้ว จะ ไม่สามารถล็อกได้อีกใน transaction นั้น ๆ
  • 129. Tree-Protocol • Graph-Based Protocol ทาให้ลาดับการทางานเป็น conflict serializable และไม่เกิด deadlock • Graph-Based Protocol ปลดล็อกข้อมูลได้ก่อน Two-Phase Locking Protocol – ลดเวลาการทางานลง เพิ่มประสิทธิภาพมากขึ้น • Graph-Based Protocol อาจเกิด Cascade Rollback และอาจกู้คืน ข้อมูลไม่ได้ • การล็อกข้อมูลเกินจาเป็น – การล็อกต้องใช้เวลามากขึ้น
  • 130. Multiple Granularity • Granular = เป็นเม็ดเล็ก ๆ • สามารถเขียน data items เป็น node ต่าง ๆ โดยข้อมูลที่ใหญ่กว่าจะ เป็น parent node ให้กับข้อมูลที่ย่อยลงไป – ห้ามสับสนกับ Tree-Locking Protocol เด็ดขาด • เมื่อ Transaction ล็อก node ใด ๆ child node ทั้งหมดของ node นั้นจะถูกล็อกด้วย • การล็อกมี 2 ประเภท – Fine Granularity การล็อก node ที่มี level สูง – Coast Granularity การล็อก node ที่มี level ต่า
  • 132. Multiple Granularity • ใน Multiple Granularity มีวิธีการล็อกเพิ่มอีก 3 แบบ – Intention-Shared (IS) การล็อกเพื่อบ่งบอกว่า child node ลงไป มีการ S- Lock – Intention-Exclusive (IX) การล็อกเพื่อบอกว่า child node ลงไป มีการ S- Lock หรือ X-Lock – Shared and Intention-Exclusive (SIX) node ที่ล็อกด้วย SIX จะเป็น S- Lock ส่วน child node ลงไปจะเป็น IX • Intention Lock จะทาให้ node ที่เป็น coarse สามารถ S-Lock หรือ X-Lock โดยไม่ต้องตรวจสอบ child nodes
  • 133. Multiple Granularity • Intention Lock Compatibility Matrix
  • 134. Timestamp-Based Protocols • เมื่อระบบเริ่มทางาน แต่ละ transaction จะได้รับ timestamp • transaction ที่ใหม่กว่า จะมีค่าใน timestamp สูงกว่า – ถ้า transaction i มีค่าใน timestamp คือ TS(i) และ transaction j มีค่าใน timestamp คือ TS(j) ถ้า j ใหม่กว่า i จะได้ว่า TS(j) > TS(i) • Timestamp-Based Protocol สามารถทาให้ลาดับการทางานเป็น Conflict Serializable โดยการเปลี่ยนค่า timestamp ของ data item – W-Timestamp(D) มีค่าเป็น timestamp ที่มากที่สุดของ transaction ที่ สามารถ write(D) ได้สาเร็จ – R-Timestamp(D) มีค่าเป็น timestamp ที่มากที่สุดของ transaction ที่ สามารถ read(D) ได้สาเร็จ
  • 135. Timestamp-Based Protocols • สมมติให้ transaction i กาลังทาคาสั่งย่อย read(Q) • หาก TS(i) น้อยกว่า W-Timestamp(Q) จะถือว่า i กาลังอ่านข้อมูลที่ ถูกเขียนหลัง i – transaction i จะถูก reject และ roll back • หาก TS(i) มากกว่าหรือเท่ากับ W-Timestamp(Q) จะถือว่า i กาลังอ่าน ข้อมูลที่เขียนก่อน i – I จะสามารถอ่าน data item Q ได้ และ R-Timestamp จะเปลี่ยนเป็น ค่าสูงสุดระหว่าง TS(i) หรือ R-Timestamp(Q)
  • 136. Timestamp-Based Protocols • สมมติให้ transaction i กาลังทาคาสั่งย่อย write(Q) • หาก TS(i) น้อยกว่า R-Timestamp(Q) จะถือว่า i กาลังจะเขียน ข้อมูลที่มี transaction ใด ๆ ที่ทาทีหลังแต่อ่านข้อมูลไปก่อนแล้ว – transaction i จะถูก reject และ roll back • หาก TS(i) น้อยกว่า W-Timestamp(Q) จะถือว่า i กาลังเขียนข้อมูลที่ มี transaction ที่ทาทีหลังแต่เขียนข้อมูลไปก่อนหน้าแล้ว – transaction i จะถูก reject และ roll back • ถ้า TS(i) ไม่ตรงกับเงื่อนไขทั้งสอง i จะสามารถเขียนข้อมูลลงบน data item Q ได้ และ W-Timestamp(Q) จะเปลี่ยนเป็น TS(i)
  • 137. Timestamp-Based Protocols • กาหนดให้ transaction ในลาดับการทางานนี้มี timestamp เป็น 1, 2, 3, 4, 5 • เกิดอะไรขึ้นกับตารางนี้บ้าง
  • 138. Timestamp-Based Protocols • นอกจาก Timestamp-Based Protocols จะไม่มีปัญหาเรื่อง Conflict Serializable แล้ว ยังไม่มีปัญหา Deadlock อีกด้วย • Timestamp-Based Protocols ยังไม่สามารถกู้ข้อมูลได้ , เกิด Cascade rollback และ transaction อาจถูก rollback บ่อย – แก้โดยให้คาสั่งเขียนนั้นทาเมื่อคานวณค่าต่าง ๆ เสร็จแล้ว – ขณะที่มีการเขียน บังคับไม่ให้ transaction ทางาน – transaction ที่ aborted จะกลับมาทาใหม่พร้อม timestamp ใหม่ – ข้อมูลจะอ่านได้ ต้อง committed จาก transaction ก่อน
  • 139. Recovery System • ความผิดพลาดของ transaction เกิดขึ้นได้ 2 แบบ – Logical Error เกิดจากคาสั่งย่อยใน transaction หรือความผิดพลาดภายใน – System Error เกิดจากระบบ เช่น Deadlock • ระบบเสียหาย (System Crash) อันเนื่องจาก Hardware, Software, ไฟฟ้า • ความผิดพลาดของจานแม่เหล็ก (Disk Failure) – หัวอ่าน/เขียนไม่สามารถใช้งานได้ – บางส่วนของข้อมูลเสียหายจนไม่สามารถอ่านบางข้อมูลขึ้นมาได้
  • 140. Storage Structure • Volatile Storage – เมื่อระบบเสียหาย ข้อมูลจะหายทันที – Main Memory, Cache Memory • Non-Volatile Storage – ข้อมูลไม่หายไปเมื่อระบบเสียหาย แต่บางครั้งข้อมูลอาจหายบางส่วนหรือเสีย – Tape, HDD, Disk, Flash Memory • Stable Storage – ไม่ว่าอะไรจะเกิด ข้อมูลก็ไม่หายไป – สามารถทาได้จากอุปกรณ์ที่เป็น Non-Volatile
  • 141. Stable-Storage Implementation • Mirroring กับดิสก์ที่แตกต่างกัน – การทากับ Remote ดิสก์สามารถป้องกันข้อมูลหายเมื่อเกิดภัยพิบัติได้ • การใช้ระบบ RAID – ค่าใช้จ่ายน้อยกว่า Mirroring
  • 142. Data Access • Physical Blocks: Blocks ที่อยู่บนจานแม่เหล็ก • Buffer Blocks: Blocks ที่เก็บชั่วคราวอยู่บน main memory • การย้ายข้อมูลระหว่าง main memory กับ disk จะใช้ 2 คาสั่งด้วยกัน – input(B) ย้าย Blocks จากจานแม่เหล็กเข้าสู่ Main Memory – output(B) ย้าย Blocks จาก Main Memory เข้าสู่จานแม่เหล็ก • แต่ละ transaction ที่ทางานอยู่ภายใน main memory จะมี local variables เป็นของตนเอง – การทางานของ transaction กับตัวแปรจะมีการเปลี่ยนแปลงค่าที่ local variable ของ transaction ตนเอง
  • 143. Data Access • การเปลี่ยนแปลงข้อมูลระหว่าง Buffer Blocks กับ Transaction Local Variables จะใช้ 2 คาสั่งเช่นเดียวกัน – read(B) อ่าน data item B จาก Buffer Blocks มาไว้ที่ local variable – write(B) เขียน data item B ใน local variable ไว้ที่ Buffer Blocks • การ write กับ output บางครั้งอาจไม่เกิดพร้อมกัน • การทางานครั้งแรก data item จะถูกอ่านมาเก็บที่ local variables ถ้า data item เพิ่งอ่านเป็นครั้งแรก • Local variables จะถูกเขียนลง Buffer Blocks หลังจาก transaction committed
  • 144. Data Access buffer Buffer Block A input(A) X A Buffer Block B Y B output(B) read(X) write(Y) x2 x1 y1 work area work area of T1 of T2 memory disk