0% found this document useful (0 votes)
16 views193 pages

Main ADB Note

Uploaded by

Hiiirooo3 Mnmn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views193 pages

Main ADB Note

Uploaded by

Hiiirooo3 Mnmn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 193

‫ﻧﺎﻡ ﭘﺮﻭﺭﺩﮔﺎﺭ ﻳﻜﺘﺎ‬

‫ﺏ‬

‫‪1‬‬
‫ﺟﺰﻭﻩ ﺩﺭﺳﻲ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭘﻴﺸﺮﻓﺘﻪ‬

‫ﺑﺮﺍﻱ ﺩﺍﻧﺸﺠﻮﻳﺎﻥ ﻛﺎﺭﺷﻨﺎﺳﻲ ﺍﺭﺷﺪ ﻣﻬﻨﺪﺳﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ‬


‫ﮔﺮﺍﻳﺶ ﻫﺎﻱ ﻥﺭﻡ ﺍﻓﺰﺍﺭ ﻭ ﻫﻮﺵ ﻣﺼﻨﻮﻋﻲ‬

‫ﺗﺎﻟﻴﻒ ‪ :‬ﺩﻛﺘﺮ ﺭﺿﺎ ﻗﺎﺋﻤﻲ‬

‫‪2‬‬
‫ﻓﺼﻞ ‪:1‬‬
‫ﻣﺮﻭﺭﻱ ﺑﺮ ﻣﺪﻳﺮﻳﺖ‬
‫ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‬

‫‪3‬‬
‫‪ 1-1‬ﻣﻘﺪﻣﻪ ‪ :‬ﺳﻴﺴﺘﻢ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﭼﻴﺴﺖ؟‬
‫ﺳﻴﺴﺘﻢ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻳﺎ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ )‪ (Data Base‬ﺑﻪ ﻃﻮﺭ ﻋﻤﻮﻣﻲ ﻳﻚ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ‬
‫ﻧﮕﻬﺪﺍﺭﻱ ﺭﻛﻮﺭﺩﻫﺎ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﻗﻔﺴﻪ ﺑﺎﻳﮕﺎﻧﻲ ﺍﻟﻜﺘﺮﻭﻧﻴﻜﻲ ﺩﺭ ﻧﻈﺮ‬
‫ﮔﺮﻓﺖ ﻛﻪ ﻣﺨﺰﻧﻲ ﺑﺮﺍﻱ ﻓﺎﻳﻞ ﺩﺍﺩﻩ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ ﺍﺳﺖ ‪ .‬ﻛﺎﺭﺑﺮﺍﻥ ﺳﻴﺴﺘﻢ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﻋﻤﻠﻴﺎﺕ ﮔﻮﻧﺎﮔﻮﻧﻲ ﺭﺍ‬
‫ﺑﺮ ﺭﻭﻱ ﺍﻳﻦ ﻓﺎﻳﻞ ﻫﺎ ﺍﻧﺠﺎﻡ ﺩﻫﻨﺪ‪ ،‬ﻣﺎﻧﻨﺪ ‪:‬‬
‫• ﺍﻓﺰﻭﺩﻥ ﻓﺎﻳﻞ ﻫﺎﻱ ﺟﺪﻳﺪ ﺑﻪ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‬
‫• ﺍﻓﺰﻭﺩﻥ ﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﻓﺎﻳﻞ ﻫﺎﻱ ﻣﻮﺟﻮﺩ‬
‫• ﺑﺎﺯﻳﺎﺑﻲ ﺩﺍﺩﻩ ﻫﺎ ﺍﺯ ﻓﺎﻳﻞ ﻫﺎﻱ ﻣﻮﺟﻮﺩ‬
‫• ﺗﻐﻴﻴﺮ ﺩﺍﺩﻩ ﻫﺎﻱ ﻓﺎﻳﻞ ﻣﻮﺟﻮﺩ‬
‫• ﺣﺬﻑ ﺩﺍﺩﻩ ﻫﺎ ﺍﺯ ﻓﺎﻳﻞ ﻣﻮﺟﻮﺩ‬
‫• ﺣﺬﻑ ﻓﺎﻳﻞ ﻫﺎﻳﻲ ﺍﺯ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‬
‫ﻫﻤﺎﻧﻄﻮﺭ ﻛﻪ ﮔﻔﺘﻴﻢ ﺳﻴﺴﺘﻢ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‪ ،‬ﻳﻚ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ ﺑﺮﺍﻱ ﻧﮕﻬﺪﺍﺭﻱ ﺭﻛﻮﺭﺩﻫﺎ ﻣﻲ‬
‫ﺑﺎﺷﺪ ﺑﺪﻳﻦ ﻣﻌﻨﻲ ﻛﻪ ﻳﻚ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ ﻛﻪ ﻫﺪﻑ ﺁﻥ ﺫﺧﻴﺮﻩ ﺍﻃﻼﻋﺎﺕ ﺍﺳﺖ ﻭ ﻛﺎﺭﺑﺮﺍﻥ ﻣﻲ‬
‫ﺗﻮﺍﻧﻨﺪ ﺁﻥ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺑﺎﺯﻳﺎﺑﻲ ﻳﺎ ﺑﻪ ﻫﻨﮕﺎﻡ ﻛﻨﻨﺪ ‪ .‬ﻫﺮ ﭼﻴﺰﻱ ﻛﻪ ﺑﺮﺍﻱ ﻳﻚ ﻓﺮﺩ ﺑﺎ ﻳﻚ ﺳﺎﺯﻣﺎﻥ ﺑﺎ ﺍﺭﺯﺵ‬
‫ﺑﺎﺷﺪ‪ ،‬ﺍﻃﻼﻋﺎﺕ ﻧﺎﻡ ﺩﺍﺭﺩ ‪ .‬ﻳﻚ ﺳﻴﺴﺘﻢ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺯ ﭼﻬﺎﺭ ﻗﻄﻌﻪ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ ‪ :‬ﺩﺍﺩﻩ ﻫﺎ ‪،‬‬
‫ﺳﺨﺖ ﺍﻓﺰﺍﺭ‪ ،‬ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﻭ ﻛﺎﺭﺑﺮﺍﻥ‪.‬‬

‫‪4‬‬
‫ﺩﺍﺩﻩ ﻫﺎ )‪(Data‬‬
‫ﻫﺮﭼﻴﺰﻱ ﻛﻪ ﺑﺮﺍﻱ ﻳﻚ ﻓﺮﺩ ﻳﺎ ﺳﺎﺯﻣﺎﻥ ﺑﺎ ﺍﺭﺯﺵ ﺑﺎﺷﺪ ‪ ،‬ﺩﺍﺩﻩ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫ﻗﺎﺑﻠﻴﺖ ﻫﺎﻳﻲ ﻛﻪ ﻳﻚ ﺳﻴﺴﺘﻢ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺭﺍﺋﻪ ﻣﻲ ﻛﻨﺪ‪ ،‬ﺗﺎ ﺣﺪ ﺯﻳﺎﺩﻱ ﺑﻪ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ ﺑﺴﺘﮕﻲ ﺩﺍﺭﺩ‬
‫‪ .‬ﺳﻴﺴﺘﻢ ﻫﺎ ﺑﺮ ﺭﻭﻱ ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎﻱ ﺑﺰﺭگ‪ ،‬ﻣﻌﻤﻮﻻ‬ ‫ﻛﻪ ﺍﻳﻦ ﺳﻴﺴﺘﻢ ﺑﺮ ﺭﻭﻱ ﺁﻥ ﻛﺎﺭ ﻣﻲ ﻛﻨﺪ‬
‫ﭼﻨﺪﻛﺎﺭﺑﺮﻩ ﻫﺴﺘﻨﺪ‪ ،‬ﺩﺭ ﺣﺎﻟﻴﻜﻪ ﺳﻴﺴﺘﻢ ﻫﺎ ﺩﺭ ﻛﺎﻣﭙﻴﻮﺗﺮﻫﺎﻱ ﻛﻮﭼﻚ‪ ،‬ﺗﻚ ﻛﺎﺭﺑﺮﻩ ﻫﺴﺘﻨﺪ ‪ .‬ﺳﻴﺴﺘﻢ‬
‫ﺗﻚ ﻛﺎﺭﺑﺮﻩ ﺳﻴﺴﺘﻤﻲ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺁﻥ‪ ،‬ﺩﺭ ﺁﻥِ ﻭﺍﺣﺪ ﻓﻘﻂ ﻳﻚ ﻧﻔﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺯ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﺪ ﻭ ﺳﻴﺴﺘﻢ ﭼﻨﺪﻛﺎﺭﺑﺮﻩ ﺳﻴﺴﺘﻤﻲ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺁﻥِ ﻭﺍﺣﺪ ﭼﻨﺪ ﻧﻔﺮ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺍﺯ ﻳﻚ‬
‫ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻦﺩ ‪‍.‬‬
‫*ﻫﺪﻑ ﺍﺻﻠﻲ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭼﻨﺪﻛﺎﺭﺑﺮﻩ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺑﻪ ﻛﺎﺭﺑﺮ ﺍﺟﺎﺯﻩ ﺩﻫﻨﺪ‪ ،‬ﺍﺯ ﺁﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ‬
‫ﺳﻴﺴﺘﻢ ﺗﻚ ﻛﺎﺭﺑﺮﻩ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﺎﻳﺪ‪.‬‬
‫ﺑﻪ ﻃﻮﺭ ﻛﻞ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‪ ،‬ﺑﺨﺼﻮﺹ ﺩﺭ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺑﺰﺭگ‪ ،‬ﻫﻢ ﺑﻪ ﺻﻮﺭﺕ ﻣﺠﺘﻤﻊ ﻭ‬
‫ﻫﻢ ﺑﻪ ﺻﻮﺭﺕ ﺍﺷﺘﺮﺍﻛﻲ ﻫﺴﺘﻨﺪ )‪ (Integration & Sharing‬ﻛﻪ ﺩﺭ ﺍﺩﺍﻣﻪ ﺗﻮﺿﻴﺢ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﻧﺪ‪:‬‬
‫ﺟﺎﻣﻌﻴﺖ )‪ :(Integration‬ﻣﻔﻬﻮﻡ ﺟﺎﻣﻌﻴﺖ ﻳﺎ ﻣﺠﺘﻤﻊ ﺑﻮﺩﻥ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻣﺠﻤﻮﻋﻪ‬
‫ﺍﻱ ﺍﺯ ﻓﺎﻳﻞ ﻫﺎﺳﺖ ﻛﻪ ﺑﺨﺸﻲ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ﺍﺿﺎﻓﻲ ﺍﺯ ﺑﻴﻦ ﺁﻥ ﻫﺎ ﺣﺬﻑ ﺷﺪﻩ ﺍﺳﺖ ‪ .‬ﺍﺯﺩﻳﺪﮔﺎﻩ ﻫﺎﻱ ﺩﻳﮕﺮ‪،‬‬
‫ﺟﺎﻣﻌﻴﺖ ﺑﻪ ﻣﻌﻨﺎﻱ ﺻﺤﺖ ﺩﺍﺩﻩ ﻫﺎ‪ ،‬ﭘﺮﺩﺍﺯﺵ ﻫﺎ ﻭ ﭘﻴﺮﻭﻱ ﺍﺯ ﻣﻘﺮﺭﺍﺕ ﺳﻴﺴﺘﻢ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﻩﺏ ﻋﻨﻮﺍﻥ‬
‫ﻣﺜﺎﻝ‪ ،‬ﻣﻮﺟﻮﺩﻱ ﻭﺍﻗﻌﻲ ﺣﺴﺎﺏ ﻫﺎﻱ ﺑﺎﻧﻜﻲ ﻧﺒﺎﻳﺪ ﻣﻨﻔﻲ ﺑﺎﺷﺪ‪.‬‬
‫ﺍﺷﺘﺮﺍﻙ )‪ :(Sharing‬ﻣﻔﻬﻮﻡ ﻣﺸﺘﺮﻙ ﺑﻮﺩﻥ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻣﻲ‬
‫ﺗﻮﺍﻧﺪ ﺑﻴﻦ ﻛﺎﺭﺑﺮﺍﻥ ﻡ ﺧﺘﻠﻒ ﺑﻪ ﺍﺷﺘﺮﺍﻙ ﮔﺬﺍﺷﺘﻪ ﺷﻮﻧﺪ‪ ،‬ﻳﻌﻨﻲ ﻫﺮ ﻳﻚ ﺍﺯ ﻛﺎﺭﺑﺮﺍﻥ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺍﺯ ﻳﻚ‬
‫ﺑﺨﺶ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﺑﺮﺍﻱ ﺍﻫﺪﺍﻑ ﺧﺎﺻﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻨﺪ ‪ .‬ﻫﻤﻴﻨﻄﻮﺭ ﻣﻴﺘﻮﺍﻥ ﮔﻔﺖ ﻛﺎﺭﺑﺮﺍﻥ ﺑﻪ ﻃﻮﺭ ﻫﻤﺰﻣﺎﻥ‬
‫ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺑﻪ ﻳﻚ ﺑﺨﺶ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﺩﺳﺘﻴﺎﺑﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ ‪ .‬ﻫﺮ ﻛﺎﺭﺑﺮ ﻓﻘﻂ ﺑﺨﺸﻲ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎﻱ ﺑﺎﻧﻚ‬
‫ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ ﻣﻲ ﺩﻫﺪ ﻭ ﺗﻮﺳﻂ ﺩﻳﺪﮔﺎﻩ ﻫﺎﻱ ﻣﺨﺘﻠﻔﻲ ﺑﺎ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺩﺭ ﺗﻌﺎﻣﻞ‬
‫ﺍﺳﺖ‪ .‬ﺍﮔﺮ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻣﺸﺘﺮﻙ ﻧﺒﺎﺷﺪ‪ ،‬ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺷﺨﺼﻲ ﻳﺎ ﻛﺎﺭﺑﺮ ﻭﻳﮋﻩ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪5‬‬
‫ﺳﺨﺖ ﺍﻓﺰﺍﺭ )‪(Hardware‬‬
‫ﻗﻄﻌﺎﺕ ﺳﺨﺖ ﺍﻓﺰﺍﺭﻱ ﺳﻴﺴﺘﻢ ﺷﺎﻣﻞ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫‪ ‬ﺣﺎﻓﻈﻪ ﻫﺎﻱ ﺟﺎﻧﺒﻲ ‪ :‬ﻛﻪ ﻣﻌﻤﻮﻻ ﺩﻳﺴﻚ ﻫﺎ ﻫﺴﺘﻨﺪ‪ ،‬ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﻛﺎﺭ ﻣﻲ ﺭﻭﻧﺪ ﻭ‬
‫ﺩﺳﺘﮕﺎﻩ ﻫﺎﻱ ﻭﺭﻭﺩﻱ‪/‬ﺧﺮﻭﺟﻲ ﻣﺎﻧﻨﺪ ﮔﺮﺩﺍﻧﻨﺪﻩ ﻫﺎ‪ ،‬ﻛﻨﺘﺮﻟﮕﺮﻫﺎﻱ ﺩﺳﺘﮕﺎﻩ ﻫﺎ ﻭ ‪...‬‬
‫‪ ‬ﭘﺮﺩﺍﺯﻧﺪﻩ ﻫﺎﻱ ﺳﺨﺖ ﺍﻓﺰﺍﺭﻱ ﻭ ﺣﺎﻓﻈﻪ ﻫﺎﻱ ﺍﺻﻠﻲ ﻛﻪ ﺑﺮﺍﻱ ﭘﺸﺘﻴﺒﺎﻧﻲ ﺍﺯ ﺍﺟﺮﺍﻱ ﻧﺮﻡ ﺍﻓﺰﺍﺭ‬
‫ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺑﻪ ﻛﺎﺭ ﻣﻲ ﺭﻭﻧﺪ‪.‬‬

‫ﻧﺮﻡ ﺍﻓﺰﺍﺭ)‪(Software‬‬
‫ﺳﻪ ﻧﻮﻉ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﺭﺍﻳﺞ ﺩﺭ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ‪ :‬ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ )‪،(DBMS‬‬
‫ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﻭ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺩﻱ‪ .‬ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻻﻳﻪ ﺍﻱ ﺍﺯ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﺑﻴﻦ ﺩﺍﺩﻩ‬
‫ﻫﺎﻱ ﻓﻴﺰﻳﻜﻲ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﻭﻛﺎﺭﺑﺮﺍﻥ ﺳﻴﺴﺘﻢ ﻣﻲ ﺑﺎﺷﺪ ﻛﻪ ﺑﻪ ﺁﻥ ﻛﺎﺭﮔﺰﺍﺭ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‬
‫)‪(Database Server‬ﮔﻔﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﻛﺎﺭﺑﺮﺍﻥ)‪(Users‬‬
‫ﻛﺎﺭﺑﺮﺍﻥ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺳﻪ ﺩﺳﺘﻪ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺖ ‪:‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﺎﻥ ﻛﺎﺭﺑﺮﺩﻱ ﻛﻪ ﻣﺴﺌﻮﻝ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺩﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﻧﺪ ‪.‬‬
‫‪ ‬ﻛﺎﺭﺑﺮﺍﻥ ﻧﻬﺎﻳﻲ ﻛﻪ ﺍﺯ ﻃﺮﻳﻖ ﺍﻳﺴﺘﮕﺎﻩ ﻫﺎﻱ ﻛﺎﺭﻱ ﻳﺎ ﭘﺎﻳﺎﻧﻪ ﻫﺎ ﺑﻪ ﺳﻴﺴﺘﻢ ﺩﺳﺘﺮﺳﻲ ﺩﺍﺭﻧﺪ‪.‬‬
‫‪ ‬ﺍﻳﻦ ﺩﺳﺘﻪ ﺍﺯ ﻛﺎﺭﺑﺮﺍﻥ ﻛﻪ ﺩﻳﺪﻩ ﻧﻤﻴﺸﻮﺩ‪ ،‬ﻣﺪﻳﺮ ﻳﺎ ﺳﺮﭘﺮﺳﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ )‪ (DBA‬ﺍﺳﺖ ﻛﻪ‬
‫ﻭﻇﻴﻔﻪ ﺳﺮﭘﺮﺳﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻭ ﺳﺮﭘﺮﺳﺖ ﺩﺍﺩﻩ ﻫﺎﺳﺖ ‪.‬‬

‫‪6‬‬
‫ﺍﺟﺰﺍﻱ ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‪:‬‬

‫ﻭﻇﺎﻳﻒ ‪ DBMS‬ﺗﻮﺳﻂ ﺗﻌﺪﺍﺩﻱ ﻣﻮﻟﻔﻪ ﻧﺮﻡ ﺍﻓﺰﺍﺭﻱ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ‪ .‬ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺍﻳﻦ ﻣﻮﻟﻔﻪ ﻫﺎ ﻣﻤﻜﻦ‬
‫ﺍﺳﺖ ﻣﺮﻛﺐ ﺍﺯ ﭼﻨﺪ ﻭﺍﺣﺪ ﻛﻮﭼﻜﺘﺮ ﺑﺎﺷﻨﺪ ‪ .‬ﺗﻌﺪﺍﺩﻱ ﺍﺯ ﺳﺮﻭﻳﺲ ﻫﺎﻱ ﻛﻪ ﺗﻮﺳﻂ ﻣﻮﻟﻔﻪ ﻫﺎﻱ ‪DBMS‬‬
‫ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﻧﺪ ﺩﺭ ﺯﻳﺮ ﻟﻴﺴﺖ ﺷﺪﻩ ﺍﺳﺖ‪:‬‬

‫‪ .1‬ﭘﺮﺩﺍﺯﺵ ﺗﺮﺍﻛﻨﺶ )‪(Transaction Processing‬‬

‫ﭘﺮﺩﺍﺯﺵ ﺗﺮﺍﻛﻨﺶ ﻋﻤﻠﻴﺎﺗﻲ ﻛﻪ ﺍﺯ ﻣﻨﺎﺑﻊ ﻣﺨﺘﻠﻒ ﻣﻲ ﺭﺳﺪ ﺭﺍ ﺭﻭﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺟﺮﺍ ﻣﻲ ﻛﻨﺪ ﺑﻪ ﻧﺤﻮﻱ‬
‫ﻛﻪ ﺧﻮﺍﺹ ﻣﻄﻠﻮﺏ ﺗﺮﺍﻛﻨﺶ ﺧﺪﺷﻪ ﺩﺍﺭ ﻧﺸﻮﺩ ‪ .‬ﺳﺮﻭﻳﺲ ﻫﺎﻱ ﻛﻨﺘﺮﻝ ﻫﻤﺮﻭﻧﺪﻱ ﻭ ﺗﺮﻣﻴﻢ ﺑﻪ ﺍﻳﻦ ﻣﻮﻟﻔﻪ‬
‫ﺑﺮﺍﻱ ﺑﺮﻗﺮﺍﺭﻱ ﺧﻮﺍﺹ ‪ ACID‬ﻛﻤﻚ ﻣﻲ ﻛﻨﻨﺪ ‪ .‬ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﺍﺟﺮﺍﻱ ﻫﻤﺮﻭﻧﺪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻭ‬
‫ﺳﺎﺯﮔﺎﺭﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺣﺘﻲ ﺩﺭ ﺻﻮﺭﺕ ﻭﻗﻮﻉ ﺷﻜﺴﺘﻲ ﺩﺭ ﺳﻴﺴﺘﻢ ﺗﻀﻤﻴﻦ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ .2‬ﻛﻨﺘﺮﻝ ﻫﻤﺮﻭﻧﺪﻱ )‪(Concurrency Control‬‬

‫ﻣﺪﻳﺮﻳﺖ ﺍﺟﺮﺍﻱ ﻫﻤﺮﻭﻧﺪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺭﻭﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺩﺭ ﺣﻴﻦ ﺑﺮﻗﺮﺍﺭﻱ ﺳﺎﺯﮔﺎﺭﻱ ﺭﺍ ﺑﻪ ﻋﻬﺪﻩ ﺩﺍﺭﺩ ‪.‬‬

‫‪ .3‬ﺗﺮﻣﻴﻢ )‪(Recovery‬‬

‫ﺗﺮﻣﻴﻢ ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺍﮔﺮ ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ﺑﺎ ﻋﺪﻡ ﻣﻮﻓﻘﻴﺖ ﻳﺎ ﺳﻖ ﻁ ﺭﻭﺑﺮﻭ ﺷﺪ‪ ،‬ﺗﺎﺛﻴﺮ ﻧﺎﻣﻄﻠﻮﺑﻲ‬
‫ﺭﻭﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻳﺎ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺩﻳﮕﺮ ﻧﮕﺬﺍﺭﺩ ﻭ ﺣﺎﻟﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﻫﻤﻴﺸﻪ ﺳﺎﺯﮔﺎﺭ ﻧﮕﻪ ﺩﺍﺭﺩ ‪.‬‬

‫‪ .4‬ﻣﺪﻳﺮﻳﺖ ﺛﺒﺖ ﺍﺣﻮﺍﻝ)‪(Log Management‬‬

‫ﻫﺮ ﺍﺗﻔﺎﻗﻲ ﺩﺭ ﺳﻴﺴﺘﻢ ﺩﺭ ﻳﻚ ﻓﺎﻳﻞ ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﺗﻮﺳﻂ ﻣﺪﻳﺮﻳﺖ ﺗﺮﻣﻴﻢ ﺑﺮﺍﻱ ﺣﻔﻆ ﺻﺤﺖ ﻭ‬
‫ﺍﻋﺘﺒﺎﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﻨﮕﺎﻡ ﺧﺮﺍﺑﻲ ﻳﺎ ﺳﻘﻂ ﺳﻴﺴﺘﻢ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪7‬‬
‫‪ .5‬ﻭﺍﺳﻄﻪ ﺯﺑﺎﻧﻲ )‪(Language Interface‬‬

‫ﺩﺳﺘﻮﺭﺍﺗﻲ ﺭﺍ ﺑﺮﺍﻱ ﺗﻌﺮﻳﻒ ﺩﺍﺩﻩ‪ ،‬ﻛﺎﺭ ﻛﺮﺩﻥ ﺑﺎ ﺁﻥ ﺩﺭﺍﺧﺘﻴﺎﺭ ﻛﺎﺭﺑﺮﺍﻥ ﻭ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺩﻱ ﻗﺮﺍﺭ ﻣﻲ‬
‫ﺩﻫﺪ‪.‬‬

‫‪ .6‬ﺗﺤﻤﻞ ﭘﺬﻳﺮﻱ ﺧﻄﺎ)‪(Fault Tolerance‬‬

‫ﺗﻮﺍﻧﺎﺋﻲ ﺍﺭﺍﺋﻪ ﺳﺮﻭﻳﺲ ﻫﺎﻱ ﻗﺎﺑﻞ ﺍﻃﻤﻴﻨﺎﻥ ﺗﻮﺳﻂ ‪ DBMS‬ﺣﺘﻲ ﺩﺭ ﺻﻮﺭﺕ ﺑﺮﻭﺯ ﻧﻘﺺ ﺭﺍ ﺗﺤﻤﻞ‬
‫ﭘﺬﻳﺮﻱ ﺧﻄﺎ ﻣﻲ ﮔﻮﻳﻨﺪ‪ .‬ﺍﻧﻮﺍﻉ ﺧﻄﺎﻫﺎﺋﻲ ﻛﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﭘﻴﺶ ﺑﻴﺎﻳﺪ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ ‪:‬‬

‫• ﺧﻄﺎﻱ ﻣﻨﻄﻘﻲ‪ :‬ﺗﺮﺍﻛﻨﺶ ﻣﻮﻓﻖ ﻧﻤﻲ ﺷﻮﺩ ﻣﺜﻼ ﺑﻪ ﺩﻟﻴﻞ ﻭﺭﻭﺩﻱ ﺑﺪ‪ ،‬ﺳﺮﺭﻳﺰﻱ‬
‫• ﺧﻄﺎﻱ ﺳﻴﺴﺘﻤﻲ‪ :‬ﺗﺮﺍﻛﻨﺶ ﻣﻮﻓﻖ ﻧﻤﻲ ﺷﻮﺩ ﻣﺜﻼ ﺑﻪ ﺩﻟﻴﻞ ﺑﻦ ﺑﺴﺖ‬
‫• ﺳﻘﻂ ﺳﻴﺴﺘﻢ‪ :‬ﻗﻄﻊ ﺑﺮﻕ‪ ،‬ﭘﺎﻙ ﺷﺪﻥ ﺣﺎﻓﻈﻪ ﺍﺻﻞﻱ‪ ،‬ﭘﺮ ﺷﺪﻥ ﺩﻳﺴﻚ‬
‫• ﻧﺎﺗﻮﺍﻧﻲ ﺩﻳﺴﻚ ‪ :‬ﺧﺮﺍﺑﻲ ﻫﺪ‪ ،‬ﺧﺮﺍﺑﻜﺎﺭﻱ ﻋﻤﺪﻱ‪ ،‬ﺁﺗﺶ ﺳﻮﺯﻱ‪،‬‬

‫‪ .7‬ﻛﺎﺗﺎﻟﻮگ ﺩﺍﺩﻩ )‪(Data Catalog‬‬

‫ﻳﺎ ﺩﻳﻜﺸﻨﺮﻱ ﺩﺍﺩﻩ ﻳﻚ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺳﻴﺴﺘﻤﻲ ﺷﺎﻣﻞ ﺍﻃﻼﻋﺎﺗﻲ ﺩﺭﺑﺎﺭﻩ ﺩﺍﺩﻩ‪ ،‬ﺍﺭﺗﺒﺎﻃﺎﺕ ﻭ ﻗﻴﺪﻫﺎ ﺩﺭ‬
‫ﭘﺎﻳﮕﺎﻩ ﺍﺻﻠﻲ ﺍﺳﺖ‪ .‬ﮔﺎﻫﻲ ﺑﻪ ﺁﻥ ﻣﺘﺎﺩﺍﺩﻩ ﻫﻢ ﮔﻔﺘﻪ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ .8‬ﺍﻣﻨﻴﺖ )‪(Security‬‬

‫ﺍﻣﻨﻴﺖ ﺑﻪ ﻣﺤﺎﻓﻈﺖ ﺩﺍﺩﻩ ﺩﺭ ﻣﻘﺎﺑﻞ ﺍﻓﺸﺎﺷﺪﻥ‪ ،‬ﺗﻐﻴﻴﺮ ﻭ ﺧﺮﺍﺑﻲ ﺍﺷﺎﺭﻩ ﺩﺍﺭﺩ ‪ .‬ﻫﺮ ﻛﺎﺑﺮ ﻭ ﺑﺮﻧﺎﻣﻪ ﻛﺎﺭﺑﺮﺩﻱ‬
‫ﺍﻣﺘﻴﺎﺯ ﻭﻳﮋﻩ ﺍﻱ ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺩﺍﺩﻩ ﺩﺍﺭﺩ ‪ .‬ﻛﺎﺭﺑﺮﺍﻥ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﻳﺪﮔﺎﻩ ﻫﺎﻱ ﻣﺨﺘﻠﻔﻲ ﻧﺴﺒﺖ ﺑﻪ‬
‫ﺩﺍﺩﻩ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎ ﺗﻮﺟﻪ ﺍﻣﺘﻴﺎﺯﺍﺕ ﻭﻳﮋﻩ ﺧﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ ‪ .‬ﺳﻴﺴﺘﻢ ﺍﻣﻨﻴﺘﻲ ﻫﻤﭽﻨﻴﻦ‪ ،‬ﺗﻮﺳﻂ‬
‫ﺭﻭﻳﻪ ﻫﺎﻱ ﺷﻨﺎﺳﺎﺋﻲ ﻭ ﻣﺠﻮﺯ‪ ،‬ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﻣﺤﺪﻭﺩ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪8‬‬
‫‪ .9‬ﻣﺪﻳﺮﻳﺖ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ )‪(Storage Management‬‬

‫‪ DBMS‬ﻣﻜﺎﻧﻴﺴﻢ ﻫﺎﻱ ﺧﺎﺻﻲ ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﺩﺍﺋﻤﻲ ﺩﺍﺩﻩ ﻭ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻣﻨﺒﻊ ﻓﻴﺰﻳﻜﻲ ﻭ ﺑﺎﺯﻳﺎﺑﻲ ﺩﺍﺩﻩ‬
‫ﺩﺍﺭﺩ‪ .‬ﻣﺪﻳﺮ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﺑﻴﻦ ﺩﺍﺩﻩ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻭ ﺑﺮﻥ ﺍﻣﻪ ﻛﺎﺭﺑﺮﺩﻱ ﻭ ﭘﺮﺱ ﻭ ﺟﻮﻫﺎﻱ‬
‫ﺍﺭﺳﺎﻝ ﺷﺪﻩ ﺑﻪ ﺳﻴﺴﺘﻢ ﻭﺍﺳﻄﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ .10‬ﻣﺪﻳﺮﻳﺖ ﻗﻔﻞ )‪(Lock Management‬‬

‫)ﻣﺜﻞ ‪Read‬‬ ‫ﻫﻨﮕﺎﻡ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺷﺘﺮﺍﻛﻲ ﺍﺯ ﺩﺍﺩﻩ ﺍﻧﻮﺍﻉ ﻣﺨﺘﻠﻔﻲ ﺍﺯ ﻗﻔﻞ ﺭﻭﻱ ﺩﺍﺩﻩ ﮔﺬﺍﺷﺘﻪ ﻣﻲ ﺷﻮﺩ‬
‫‪ Lock‬ﻭ ‪.(Write Lock‬‬

‫‪ .11‬ﻣﺪﻳﺮﻳﺖ ﺑﻦ ﺑﺴﺖ )‪(Deadlock Management‬‬

‫ﺑﻦ ﺑﺴﺖ ﻭﻗﺘﻲ ﺍﺗﻔﺎﻕ ﻣﻲ ﺍﻓﺘﺪ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﺮﺍﻱ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﻣﻨﺎﺑﻊ ﺩﺭ ﻳﻚ ﺩﺍﻳﺮﻩ ﺑﺴﺘﻪ ﻗﺮﺍﺭ‬
‫ﮔﻴﺮﻧﺪ ﻳﻌﻨﻲ ﻫﺮ ﻳﻚ ﻣﻨﺒﻌﻲ ﺩﺭ ﺍﺧﺘﻴﺎﺭ ﺩﺍﺭﺩ ﻛﻪ ﻣﻮﺭﺩ ﺗﻘﺎﺿﺎﻱ ﺩﻳﮕﺮﻱ ﺍﺳﺖ ﻭ ﺩﺭﺧﻮﺍﺳﺖ ﻣﻨﺒﻌﻲ ﺭﺍ‬
‫ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺩﺭ ﺍﺧﺘﻴﺎﺭ ﺗﺮﺍﻛﻨﺶ ﻣﻨﺘﻈﺮ ﻣﻨﺒﻊ ﺍﺳﺖ ‪ .‬ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻣﻨﺎﺑﻊ ﺭﻛﻮﺭﺩﻫﺎ ﻫﺴﺘﻨﺪ ‪ .‬ﻣﺪﻳﺮﻳﺖ‬
‫ﻣﻨﺒﻊ ﻣﺴﺌﻮﻝ ﺭﻓﻊ ﺍﻳﻦ ﻣﺸﻜﻞ ﻫﺴﺘﻨﺪ‪.‬‬

‫ﻣﻌﻤﺎﺭﻱ ‪:ANSI-SPARC‬‬
‫ﻫﺮ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺑﺎ ﺗﺒﻌﻴﺖ ﺍﺯ ﻳﻚ ﻧﻮﻉ ﻣﻌﻤﺎﺭﻱ ﻃﺮﺍﺣﻲ ﻣﻲ ﮔﺮﺩﺩ‪ .‬ﻃﺒﻖ ﺍﻳﻦ ﻧﻮﻉ ﻣﻌﻤﺎﺭﻱ ﺑﺎﻧﻚ‬
‫ﺍﻃﻼﻋﺎﺗﻲ ﺩﺍﺭﺍﻱ ﺳﻪ ﺳﻄﺢ ﺍﺳﺖ‪.‬‬
‫ﺳﻪ ﺳﻄﺢ ﻣﻌﻤﺎﺭﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‪:‬‬
‫‪ ‬ﺳﻄﺢ ﺩﺍﺧﻠﻲ ‪ :‬ﻛﻪ ﺳﻄﺢ ﻓﻴﺰﻳﻜﻲ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﺑﻪ ﺣﺎﻓﻈﻪ ﻓﻴﺰﻳﻜﻲ ﻧﺰﺩﻳﻚ ﺍﺳﺖ‬
‫ﻳﻌﻨﻲ ﻣﺮﺑﻮﻁ ﺑﻪ ﺫﺧﻴﺮﻩ ﻓﻴﺰﻳﻜﻲ ﻣﻴﺸﻮﺩ‪.‬‬
‫‪ ‬ﺳﻄﺢ ﺧﺎﺭﺟﻲ ‪ :‬ﻛﻪ ﺳﻄﺢ ﻣﻨﻄﻘﻲ ﻛﺎﺭﺑﺮ ﻧﻴﺰ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﺑﻪ ﻛﺎﺭﺑﺮ ﻧﺰﺩﻳﻚ ﺍﺳﺖ ﻭ‬
‫ﺑﺎ ﻣﺸﺎﻫﺪﻩ ﺩﺍﺩﻩ ﻫﺎ ﺗﻮﺳﻂ ﻛﺎﺭﺑﺮﺍﻥ ﺳﺮﻭﻛﺎﺭ ﺩﺍﺭﺩ‪.‬‬

‫‪9‬‬
‫‪ ‬ﺳﻄﺢ ﺍﺩﺭﺍﻛﻲ‪ :‬ﻛﻪ ﺳﻄﺢ ﻣﻨﻄﻘﻲ ﺍﺟﺘﻤﺎﻉ ﺍﺳﺖ ﻳﻌﻨﻲ ﺳﻄﺢ ﻏﻴﺮﻣﺴﺘﻘﻴﻢ ﺑﻴﻦ ﺩﻭ ﺳﻄﺢ‬
‫ﺩﻳﮕﺮ ﺍﺳﺖ‪.‬‬

‫ﺑﺮﺭﺳﻲ ﺩﻳﺪﮔﺎﻩ ﺧﺎﺭﺟﻲ ‪:‬‬


‫ﺳﻄﺢ ﺧﺎﺭﺟﻲ ‪ ،‬ﺳﻂﺡ ﻫﺮﻛﺎﺭﺑﺮ ﺍﺯﺟﻤﻠﻪ ﻣﺤﺼﻮﻻﺕ ﺧﺎﺹ ‪ SQL‬ﻣﺜﻞ‪ Oracle‬ﺍﺳﺖ ﻛﺎﺭﺑﺮ ﻣﻲ ﺗﻮﺍﻧﺪ‬
‫ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻛﺎﺭﺑﺮﺩﻱ ﻳﺎ ﻳﻚ ﻛﺎﺭﺑﺮ ﻧﻬﺎﻳﻲ ﺑﺎ ﻫﺮ ﺩﺭﺟﻪ ﺍﻱ ﺍﺯ ﺗﺨﺼﺺ ﺑﺎﺷﺪ )ﻣﺪﻳﺮ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‬
‫‪ ،‬ﻓﺮﺩ ﺧﺎﺻﻲ ﺍﺳﺖ ﻭ ﺑﺎﻳﺪ ﺑﻪ ﺳﻄﻮﺡ ﺩﺍﺧﻠﻲ ﻭ ﺍﺩﺭﺍﻛﻲ ﻋﻼﻗﻪ ﻣﻨﺪ ﺑﺎﺷﺪ(‪.‬‬
‫ﻫﺮﻛﺎﺭﺑﺮ ﺩﺍﺭﺍﻱ ﻳﻚ ﺯﺑﺎﻥ ﺍﺳﺖ‪:‬‬
‫ﺑﺮﺍﻱ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲﺍﻥ ﻛﺎﺭﺑﺮﺩﻱ ‪ ،‬ﺍﻳﻦ ﺯﺑﺎﻥ ﻣﻤﻜﻦ ﺍﺳﺖ ﻳﻚ ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ )ﻣﺜﻞ ‪ ،C++‬ﺟﺎﻭﺍ ﻳﺎ‬
‫‪ ( PL/I‬ﺑﺎﺷﺪ ﻳﺎ ﻳﻚ ﺯﺑﺎﻥ ﺍﺧﺘﺼﺎﺻﻲ ﺑﺎ ﺷﺪ ﻛﻪ ﻣﺮﺑﻮﻁ ﺑﻪ ﺧﻮﺩ ﺁﻥ ﺳﻴﺴﺘﻢ ﺍﺳﺖ ‪ .‬ﺍﻳﻦ ﺯﺑﺎﻥ ﻫﺎﻱ‬
‫ﺍﺧﺘﺼﺎﺻﻲ ﺭﺍ ﻣﻌﻢ ﻭﻻ ﺯﺑﺎﻥ ﻫﺎﻱ ﻧﺴﻞ ﭼﻬﺎﺭﻡ ﻣﻲ ﮔﻮﻳﻨﺪ ‪ .‬ﺯﺑﺎﻥ ﻣﺎﺷﻴﻦ ‪ ،‬ﺯﺑﺎﻥ ﺍﺳﻤﺒﻠﻲ ﻭ ﺯﺑﺎﻥ ﻫﺎﻳﻲ‬
‫ﻣﺜﻞ ‪ C++‬ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺟﺰء ﺯﺑﺎﻥ ﻫﺎﻱ ﺳﻪ ﻧﺴﻞ ﻗﺒﻠﻲ ﺩﺍﻧﺴﺖ ‪ .‬ﺯﺑﺎﻥ ﻫﺎﻱ ﻧﺴﻞ ﭼﻬﺎﺭﻡ ﺑﺎ ﺗﻐﻴﻴﺮﺍﺗﻲ ﺑﺮ‬
‫ﺭﻭﻱ ﺯﺑﺎﻥ ﻫﺎﻱ ‪ 3‬ﻧﺴﻞ ﻗﺒﻠﻲ ﺍﻳﺠﺎﺩ ﻣﻲ ﺷﻮﻧﺪ ‪.‬‬
‫ﺯﺑﺎﻥ ﻛﺎﺭﺑﺮ ﻧﻬﺎﻳﻲ ‪ ،‬ﺯﺑﺎﻥ ﺗﻘﺎﺿﺎ ﻳﺎ ﺯﺑﺎﻥ ﺧﺎﺻﻲ ﻣﺜﻞ ﻣﻨﻮﮔﺮﺍ ﻭ ﻓﺮﻡ ﮔﺮﺍ ﺍﺳﺖ ﻛﻪ ﺧﻮﺍﺳﺘﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺍﻥ‬
‫ﺭﺍ ﺑﺮﺁﻭﺭﺩﻩ ﻣﻲ ﻛﻨﺪ ﻭ ﺗﻮﺳﻂ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺩﻱ ﺁﻧﻼﻳﻦ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲ ﺷﻮﺩ ‪.‬‬
‫ﺑﺨﺸﻲ ﺍﺯ ﺍﻳﻦ ﺯﺑﺎﻥ ﻫﺎ ﻛﻪ ﺑﺎ ﺍﺷﻴﺎ ﻭ ﻋﻤﻠﻴﺎﺕ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺳﺮﻭﻛﺎﺭ ﺩﺍﺭﺩ‪ ،‬ﻣﻬﻢ ﺍﺳﺖ ‪ .‬ﺍﻳﻦ ﺑﺨﺶ ﺭﺍ‬
‫‪ Data Sub Language‬ﻳﺎ ‪ DSL‬ﺩﺭ ﺯﺑﺎﻥ ﻣﻴﺰﺑﺎﻥ ﻣﺘﻨﺎﻇﺮ ﺗﻌﺒﻴﻪ ﺷﺪﻩ ﺍﺳﺖ ‪ .‬ﺯﺑﺎﻥ ﻣﻴﺰﺑﺎﻥ ﻣﺴﺌﻮﻝ‬
‫ﺗﻬﻴﻪ ﺍﻣﻜﺎﻧﺎﺕ ﮔﻮﻧﺎﮔﻮﻥ ﻏﻴﺮ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ‪ ،‬ﻣﺜﻞ ﻣﺘﻐﻴﺮﻫﺎﻱ ﻣﺤﻠﻲ‪ ،‬ﺍﻋﻤﺎﻝ ﻣﺤﺎﺳﺒﺎﺗﻲ‪ ،‬ﻣﻨﻄﻖ‬
‫ﺗﺼﻤﻴﻢ ﮔﻴﺮﻱ ﻭ ﻏﻴﺮﻩ ‪ .‬ﻳﻚ ﺳﻴﺴﺘﻢ ﻣﻤﻜﻦ ﺍﺳﺖ ﻫﺮﺗﻌﺪﺍﺩﻱ ﺍﺯ ﺯﺑﺎﻥ ﻫﺎﻱ ﻣﻴﺰﺑﺎﻥ ﻭ ﺗﻌﺪﺍﺩﻱ ﺍﺯ ‪DSL‬‬
‫ﺭﺍ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻛﻨﺪ ‪ .‬ﺍﻣﺎ ﻳﻚ ‪ DSL‬ﺧﺎﺹ ﻛﻪ ﺗﻮﺳﻂ ﺍﻏﻠﺐ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﻓﻌﻠﻲ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲ ﺷﻮﺩ‬
‫‪ SQL‬ﺍﺳﺖ‪ .‬ﺩﺭ ﺍﻏﻠﺐ ﺍﻳﻦ ﺳﻴﺴﺘﻢ ﻫﺎ ﻣﻲ ﺗﻮﺍﻥ ﺍﺯ ‪ SQL‬ﻫﻢ ﺑﻪ ﺻﻮﺭﺕ ﻣﺤﺎﻭﺭﻩ ﺍﻱ ﻭ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ‬
‫ﺯﺑﺎﻥ ﻣﺴﺘﻘﻞ ﺗﻘﺎﺿﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻭ ﻫﻢ ﺑﻪ ﻋﻨﻮﺍﻥ ﺯﺑﺎﻥ ﺗﻌﺒﻴﻪ ﺷﺪﻩ ﺩﺭ ﺯﺑﺎﻥ ﻫﺎﻳﻲ ﻣﺜﻞ ﺟﺎﻭﺍ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﻧﻤﻮﺩ‪.‬‬
‫ﻫﺮ ‪ DSL‬ﺗﺮﻛﻴﺒﻲ ﺍﺯ ﺩﻭ ﺯﺑﺎﻥ ﺩﻳﮕﺮ ﺍﺳﺖ ‪ :‬ﺯﺑﺎﻥ ﺗﻌﺮﻳﻒ ﺩﺍﺩﻩ ﻫﺎ )‪ (DDL‬ﻛﻪ ﺗﻌﺮﻳﻒ ﻳﺎ ﺍﻋﻼﻥ ﺍﺷﻴﺎﻱ‬
‫ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻲ ﻛﻨﺪ ﻭ ﺯﺑﺎﻥ ﺩﺳﺘﻜﺎﺭﻱ ﺩﺍﺩﻩ ﻫﺎ )‪ (DML‬ﻛﻪ ﭘﺮﺩﺍﺯﺵ ﺍﻳﻦ ﺍﺷﻴﺎ ﺭﺍ‬
‫ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﻣﻲ ﺳﺎﺯﺩ ‪ DSL .‬ﺍﻳﻦ ﻛﺎﺭﺑﺮ ﻣﺘﺸﻜﻞ ﺍﺯ ﻭﻳﮋﮔﻲ ﻫﺎﻳﻲ ﺍﺯ ‪ PL/I‬ﺍﺳﺖ ﻛﻪ ﺑﺮﺍﻱ ﺑﺮﻗﺮﺍﺭﻱ‬
‫ﺍﺭﺗﺒﺎﻁ ﺑﺎ ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺑﻪ ﻛﺎﺭ ﻣﻲ ﺭﻭﺩ‪:‬‬

‫‪10‬‬
‫ﺑﺨﺶ‪ DDL‬ﺣﺎﻭﻱ ﺳﺎﺧﺘﺎﺭﻫﺎﻱ ﺍﻋﻼﻧﻲ ‪ PL/I‬ﺍﺳﺖ ﻛﻪ ﺑﺮﺍﻱ ﺗﻌﺮﻳﻒ ﺍﺷﻴﺎﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺿﺮﻭﺭﻱ‬
‫ﺍﺳﺖ – ﺩﺳﺘﻮﺭ ‪ ) DECLARE‬ﻳﺎ ‪ ،( DCL‬ﺑﻌﻀﻲ ﺍﺯ ﺍﻧﻮﺍﻉ ﺩﺍﺩﻩ ‪ PL/I‬ﻳﺎ ﺗﻮﺳﻌﻪ ﺍﻱ ﺍﺯ ‪ PL/I‬ﻛﻪ‬
‫ﺩﺭ ‪ PL/I‬ﻓﻌﻠﻲ ﻣﻮﺟﻮﺩ ﻧﻴﺴﺖ‪.‬‬
‫ﺑﺨﺶ ‪ DML‬ﺷﺎﻣﻞ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺟﺮﺍﻳﻲ ‪ PL/I‬ﺍﺳﺖ ﻛﻪ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺑﻪ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﻥﺗﻘﺎﻝ ﺩﺍﺩﻩ‪ ،‬ﺍﺯ‬
‫ﺁﻥ ﺑﺎﺯﻳﺎﺑﻲ ﻣﻲ ﻛﻨﺪ‪ .‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺳﺘﻮﺭﺍﺕ ﺧﺎﺻﻲ ﮔﻨﺠﺎﻧﺪﻩ ﺷﻮﻧﺪ ‪.‬‬
‫‪ PL/I‬ﺩﺭﺣﺎﻝ ﺣﺎﺿﺮ ﻓﺎﻗﺪ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ ‪ .‬ﺩﺳﺘﻮﺭﺍﺕ‪ DML‬ﻫﻤﺎﻥ ﺩﺳﺘﻮﺭ‬
‫‪ CALL‬ﺍﺳﺖ ﻛﻪ ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲ ﻛﻨﺪ )ﮔﺮﭼﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﻳﻦ‬
‫ﺩﺳﺘﻮﺭ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻃﻮﺭﻱ ﺗﻐﻴﻴﺮ ﻛﻨﺪ ﻛﻪ ﺍﺯ ﻧﻈﺮ ﻛﺎﺭﺑﺮ ﻗﺎﺑﻞ ﻗﺒﻮﻝ ﻭ ﺭﺍﺣﺖ ﺑﺎﺷﺪ (‪.‬‬
‫ﺗﺎ ﻛﻨﻮﻥ ﻣﺘﻮﺟﻪ ﺷﺪﻳﻢ ﻛﻪ ﻫﺮ ﻛﺎﺭﺑﺮ ﻓﻘﻂ ﺑﻪ ﺑﺨﺸﻲ ﺍﺯ ﻛﻞ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻋﻼﻗﻤﻨﺪ ﺍﺳﺖ ‪ .‬ﺩﻳﺪﮔﺎﻩ‬
‫ﻛﺎﺭﺑﺮ ﺑﻪ ﺁﻥ ﺑﺨﺶ‪ ،‬ﺩﺭ ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﺭﻭﺵ ﺫﺧﻴﺮﻩ ﻓﻴﺰﻳﻜﻲ ﺩﺍﺩﻩ ﻫﺎ‪ ،‬ﺗﺎ ﺣﺪﻱ ﺍﻧﺘﺰﺍﻋﻲ ﺍﺳﺖ ‪ .‬ﺩﺭ ﺍﺻﻄﻼﺡ‬
‫‪ ،ANSI/SPARC‬ﺩﻱﺩﮔﺎﻩ ﻛﺎﺭﺑﺮ‪ ،‬ﺩﻳﺪﮔﺎﻩ ﺧﺎﺭﺟﻲ ﻧﺎﻡ ﺩﺍﺭﺩ‪ .‬ﻟﺬﺍ ﺩﻳﺪﮔﺎﻩ ﺧﺎﺭﺟﻲ ﻫﻤﺎﻥ ﻣﺤﺘﻮﻳﺎﺕ‬
‫) ﻳﻌﻨﻲ ‪ ،‬ﺍﺯ ﻧﻈﺮ ﺁﻥ ﻛﺎﺭﺑﺮ‪ ،‬ﺩﻳﺪﮔﺎﻩ‬ ‫ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ ﻛﻪ ﺗﻮﺳﻂ ﻛﺎﺭﺑﺮﺍﻥ ﻗﺎﺑﻞ ﻣﺸﺎﻫﺪﻩ ﺍﺳﺖ‬
‫ﺧﺎﺭﺟﻲ ‪ ،‬ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ (‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪ ،‬ﻛﺎﺭﺑﺮﻱ ﺍﺯ ﺑﺨﺶ ﭘﺮﺳﻨﻠﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺎﻧﻚ‬
‫ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺭﻭﻱﺩﺍﺩﻫﺎﻱ ﺭﻛﻮﺭﺩ ﻛﺎﺭﻛﻨﺎﻥ ﻭ ﻣﺤﻞ ﻛﺎﺭ ﺁﻧﺎﻥ ﺑﺪﺍﻧﺪ ﻭ ﺍﺯ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﺭﻛﻮﺭﺩ‬
‫ﻗﻄﻌﺎﺕ ﻭ ﻋﺮﺿﻪ ﻛﻨﻨﺪﻩ ﻫﺎ ﻛﻪ ﺗﻮﺳﻂ ﻛﺎﺭﺑﺮﺍﻥ ﻓﺮﻭﺵ ﺩﺳﺘﻴﺎﺑﻲ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺑﻲ ﺧﺒﺮ ﺑﺎﺷﺪ ‪.‬‬
‫ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ‪ ،‬ﺩﻳﺪﮔﺎﻩ ﺧﺎﺭﺟﻲ ﺷﺎﻣﻞ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﻣﺘﻌﺪﺩﻱ ﺍﺯ ﻫﺮﻳﻚ ﺍﺯ ﺍﻧﻮﺍﻉ ﺭﻛﻮﺭﺩ ﺧﺎﺭﺟﻲ ﺍﺳﺖ )ﻛﻪ‬
‫ﺍﻟﺰﺍﻣﺎ ﻫﻤﺎﻥ ﺭﻛﻮﺭﺩ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﻧﻴﺴﺖ (‪ .‬ﻓﺮﺽ ﻣﻴﻜﻨﻴﻢ ﺗﻤﺎﻡ ﺍﻃﻼﻋﺎﺗﻲ ﻛﻪ ﺩﺭ ﺳﻄﺢ ﺧﺎﺭﺟﻲ ﻧﻤﺎﻳﺶ‬
‫ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﻧﺪ ﺑﻪ ﺷﻜﻞ ﺭﻛﻮﺭﺩﻫﺎﺳﺖ ‪ .‬ﺩﺭ ﺣﺎﻟﻴﻜﻪ ﺩﺭ ﺑﻌﻀﻲ ﺍﺯ ﺳﻴﺴﺘﻢ ﻫﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﻃﻼﻋﺎﺕ ﺑﻪ‬
‫ﺷﻜﻞ ﺭﻛﻮﺭﺩ ﺫﺧﻴﺮﻩ ﻧﺸﻮﺩ ‪ DSL .‬ﻛﺎﺭﺑﺮ‪ ،‬ﺑﺮﺍﺳﺎﺱ ﺭﻛﻮﺭﺩﻫﺎﻱ ﺧﺎﺭﺟﻲ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ ‪ :‬ﺑﻪ ﻋﻨﻮﺍﻥ‬
‫ﻣﺜﺎﻝ‪ ،‬ﻋﻤﻞ ﺑﺎﺯﻳﺎﺑﻲ ﻣﺮﺑﻮﻁ ﺑﻪ ‪ DML‬ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﺭﻛﻮﺭﺩ ﺧﺎﺭﺟﻲ ﺭﺍ ﺑﺎﺯﻳﺎﺑﻲ ﻣﻲ ﻛﻨﺪ‪ ،‬ﻧﻪ ﺭﻭﻳﺪﺍﺩ‬
‫ﺭﻛﻮﺭﺩ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺭﺍ‪.‬‬
‫‪ .‬ﺍﺯ ﺍﻳﻨﺠﺎ ﺑﻪ ﺑﻌﺪ ﺍﺯ‬ ‫ﺗﻮﺟﻪ ‪ :‬ﻣﻲ ﺑﻴﻨﻴﻢ ﻛﻪ ﺍﺻﻄﻼﺡ ﺭﻛﻮﺭﺩ ﻣﻨﻄﻘﻲ ﺑﻪ ﺭﻛﻮﺭﺩ ﺧﺎﺭﺟﻲ ﺍﺷﺎﺭﻩ ﺩﺍﺭﺩ‬
‫ﺍﺻﻄﻼﺡ ﺭﻛﻮﺭﺩ ﻣﻨﻄﻘﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻲ ﻛﻨﻴﻢ‪.‬‬
‫ﻫﺮ ﺩﻳﺪﮔﺎﻩ ﺧﺎﺭﺟﻲ ﺑﻪ ﻭﺳﻴﻠﻪ ﺷﻤﺎﻱ ﺧﺎﺭﺟﻲ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺣﺎﻭﻱ ﺗﻌﺎﺭ ﻳﻒ ﺍﻧﻮﺍﻉ ﻫﺮ ﻳﻚ ﺍﺯ‬
‫ﺭﻛﻮﺭﺩﻫﺎﻱ ﺧﺎﺭﺟﻲ ﺩﺭ ﺁﻥ ﺩﻳﺪﮔﺎﻩ ﺧﺎﺭﺟﻲ ﺍﺳﺖ ‪ .‬ﺷﻤﺎﻱ ﺧﺎﺭﺟﻲ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﺨﺶ ‪ DDL‬ﻣﺮﺑﻮﻁ‬
‫ﺑﻪ ‪ DSL‬ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ ‪ .‬ﻟﺬﺍ ‪ DDL‬ﺭﺍ ﮔﺎﻫﻲ ‪ DDL‬ﺧﺎﺭﺟﻲ ﻧﻴﺰ ﻣﻲ ﮔﻮﻳﻨﺪ ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﻧﻮﻉ‬

‫‪11‬‬
‫ﺭﻛﻮﺭﺩ ﺧﺎﺭﺟﻲ ﻛﺎﺭﻣﻨﺪ ﻣﻤﻜﻦ ﺍﺳﺖ ﺷﺎﻣﻞ ﺍﻳﻦ ﻓﻴﻠﺪﻫﺎ ﺑﺎﺷﺪ ‪ :‬ﺷﻤﺎﺭﻩ ﻛﺎﺭﻣﻨﺪﻱ ‪ 6‬ﻛﺎﺭﺍﻛﺘﺮﻱ ‪ ،‬ﻓﻴﻞﺩ‬
‫ﺣﻘﻮﻕ ‪ 5‬ﺭﻗﻤﻲ ﻭ ﻏﻴﺮﻩ‪.‬‬

‫ﺑﺮﺭﺳﻲ ﺳﻄﺢ ﺍﺩﺭﺍﻛﻲ ‪:‬‬


‫ﺩﻳﺪﮔﺎﻩ ﺍﺩﺭﺍﻛﻲ ﻧﻤﺎﻳﺸﻲ ﺍﺯ ﻛﻞ ﺍﻃﻼﻋﺎﺕ ﻣﻮﺟﻮﺩ ﺩﺭ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ )ﻫﻤﭽﻮﻥ ﺩﻳﺪﮔﺎﻩ ﺧﺎﺭﺟﻲ ( ﻭ‬
‫ﺩﺭ ﻣﻘﺎﻳﺴﻪ ﺑﺎ ﺭﻭﺵ ﺫﺧﻴﺮﻩ ﻓﻴﺰﻳﻜﻲ ﺩﺍﺩﻩ ﻫﺎ‪ ،‬ﺗﺎ ﺣﺪﻱ ﺍﻧﺘﺰﺍﻋﻲ ﺍﺳﺖ ‪ .‬ﺑﻄﻮﺭ ﻛﻠﻲ‪ ،‬ﺑﺎ ﻧﮕﺮﺵ ﻛﺎﺭﺑﺮ ﺑﻪ‬
‫ﺩﺍﺩﻩ ﻫﺎ ﻣﺘﻔﺎﻭﺕ ﺍﺳﺖ‪ .‬ﺩﺭ ﺩﻳﺪﮔﺎﻩ ﺍﺩﺭﺍﻛﻲ‪ ،‬ﺑﻪ ﺩ ﺍﺩﻩ ﻫﺎ ﺑﻪ ﻫﻤﺎﻥ ﺷﻜﻠﻲ ﻛﻪ ﻫﺴﺘﻨﺪ ﻧﮕﺎﻩ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻧﻪ ﺑﻪ‬
‫ﺷﻜﻠﻲ ﻛﻪ ﻛﺎﺭﺑﺮﺍﻥ ﺑﻪ ﺩﻟﻴﻞ ﻣﺤﺪﻭﺩﻳﺖ ﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﻳﻚ ﺯﺑﺎﻥ ﻳﺎ ﺳﺨﺖ ﺍﻓﺰﺍﺭ‪ ،‬ﻣﺠﺒﻮﺭ ﺑﻪ ﺩﻳﺪﻥ ﺁﻥ‬
‫ﻫﺎ ﻣﻲ ﺷﻮﻧﺪ ‪.‬‬
‫ﺩﻳﺪﮔﺎﻩ ﺍﺩﺭﺍﻛﻲ ﺷﺎﻣﻞ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﻣﺘﻌﺪﺩﻱ ﺍﺯ ﻫﺮﻳﻚ ﺍﺯ ﺍﻧﻮﺍﻉ ﺭﻛﻮﺭﺩ ﺍﺩﺭﺍﻛﻲ ﺍﺳﺖ ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪،‬‬
‫ﻣﻤﻜﻦ ﺍﺳﺖ ﺷﺎﻣﻞ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﺭﻛﻮﺭﺩ ﺳﺎﺯﻣﺎﻥ‪ ،‬ﺑﻪ ﻋﻼﻭﻩ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﺭﻛﻮﺭﺩ ﻛﺎﺭﻣﻨﺪ‪ ،‬ﺑﻪ‬
‫ﻋﻼﻭﻩ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﺭﻛﻮﺭﺩ ﻋﺮﺿﻪ ﻛﻨﻨﺪﻩ‪ ،‬ﺑﻪ ﻋﻼﻭﻩ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﺭﻛﻮﺭﺩ‬
‫ﻗﻄﻌﺎﺕ ﻭ ﻏﻴﺮﻩ ﺑﺎﺷﺪ‪ .‬ﺭﻛﻮﺭﺩ ﺍﺩﺭﺍﻛﻲ‪ ،‬ﺍﻟﺰﺍﻣﺎ ﺑﺎ ﺭﻛﻮﺭﺩ ﺧﺎﺭﺟﻲ ﻳﺎ ﺭﻛﻮﺭﺩ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﻳﻜﺴﺎﻥ ﻧﻴﺴﺖ ‪.‬‬
‫ﺩﻳﺪﮔﺎﻩ ﺍﺩﺭﺍﻛﻲ ﺑﻪ ﻭﺳﻲﻟﻪ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺣﺎﻭﻱ ﺗﻌﺎﺭﻳﻒ ﻫﺮﻳﻚ ﺍﺯ ﺍﻧﻮﺍﻉ ﻣﺨﺘﻠﻒ‬
‫ﺭﻛﻮﺭﺩ ﺍﺩﺭﺍﻛﻲ ﺍﺳﺖ ‪ .‬ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﻚ ﺯﺑﺎﻥ ﺗﻌﺮﻳﻒ ﺩﺍﺩﻩ ﺑﻪ ﻧﺎﻡ ‪ DDL‬ﺍﺩﺭﺍﻛﻲ ﻧﻮﺷﺘﻪ‬
‫‪ DDL‬ﺍﺩﺭﺍﻛﻲ ﻧﺒﺎﻳﺪ ﺷﺎﻣﻞ‬ ‫ﻣﻲ ﺷﻮﺩ ‪ .‬ﺍﮔﺮ ﺍﺳﺘﻘﻼﻝ ﻓﻴﺰﻳﻜﻲ ﺩﺍﺩﻩ ﻫﺎ ﺣﻔﻆ ﺷﻮﺩ‪ ،‬ﺍﻳﻦ ﺗﻌﺮﻳﻒ‬
‫ﻣﻼﺣﻈﺎﺗﻲ ﺩﺭ ﺧﺼﻮﺹ ﻧﻤﺎﻳﺶ ﻓﻴﺰﻳﻜﻲ ﻳﺎ ﺗﻜﻨﻴﻚ ﻫﺎﻱ ﺩﺳﺘﻴﺎﺑﻲ ﺑﺎﺷﺪ ‪ .‬ﻓﻘﻂ ﺑﺎﻳﺪ ﻣﺤﺘﻮﻳﺎﺕ ﺍﻃﻼﻋﺎﺕ‬
‫ﺭﺍ ﺗﻌﺮﻳﻒ ﻛﻨﻨﺪ ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ‪ ،‬ﺩﺭ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﻧﺒﺎﻳﺪ ﺑﻪ ﻧﻤﺎﻳﺶ ﻓﻴﻠﺪ ﺫﺧﻴﺮﻩ ﺷﺪﻩ‪ ،‬ﺩﻧﺒﺎﻟﻪ ﺭﻛﻮﺭﺩ ﺫﺧﻴﺮﻩ‬
‫ﺷﺪﻩ‪ ،‬ﺷﺎﺧﺺ ﻫﺎ‪ ،‬ﺭﻭﺵ ﻫﺎﻱ ﺩﺭﻫﻢ ﺳﺎﺯﻱ‪ ،‬ﺍﺷﺎﺭﻩ ﮔﺮﻫﺎ ﻭ ﺟﺰﺋﻴﺎﺕ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﻭ ﺩﺳﺘﻴﺎﺑﻲ‪ ،‬ﺍﺭﺟﺎﻉ‬
‫ﺷﻮﺩ‪ .‬ﺍﮔﺮ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﻛﺎﻣﻼ ﻣﺴﺘﻘﻞ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﺳﺎﺧﺘﻪ ﺷﻮﺩ‪ ،‬ﺁﻧﮕﺎﻩ ﺷﻤﺎﻱ ﺧﺎﺭﺟﻲ‪ ،‬ﻛﻪ ﺑﺮﺣﺴﺐ‬
‫ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ‪ ،‬ﻣﺴﺘﻘﻞ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ‪.‬‬
‫ﭘﺲ‪ ،‬ﺩﻳﺪﮔﺎﻩ ﺍﺩﺭﺍﻛﻲ‪ ،‬ﺩﻳﺪﮔﺎﻫﻲ ﻧﺴﺒﺖ ﺑﻪ ﻛﻞ ﻣﺤﺘﻮﻳﺎﺕ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ ﻭ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ‪ ،‬ﺁﻥ‬
‫ﺩﻳﺪﮔﺎﻩ ﺭﺍ ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﺪ ‪ .‬ﻧﻤﻴﺘﻮﺍﻥ ﮔﻔﺖ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﻫﻤﺎﻥ ﺗﻌﺎﺭﻳﻒ ﺭﻛﻮﺭﺩ ﺩﺭ ﺯﺑﺎﻥ ﻛﻮﺑﻮﻝ ﺍﺳﺖ ‪.‬‬
‫ﺗﻌﺎﺭﻳﻒ ﺩﺭ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﺷﺎﻣﻞ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﻣﺘﻌﺪﺩﻱ ﺍﺳﺖ ‪ .‬ﺑﻌﻀﻲ ﺍﺯ ﻣﺆﻟﻔﻴﻦ ﭘﻴﺸﻨﻬﺎﺩ ﻣﻲ ﻛﻨﻨﺪ ﻛﻪ‬
‫ﻫﺪﻑ ﻧﻬﺎﻳﻲ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ‪ ،‬ﺗﻮﺻﻴﻒ ﻛﻞ ﻣﺆﺳﺴﻪ ﺍﺳﺖ – ﻧﻪ ﻓﻘﻂ ﺧﻮﺩ ﺩﺍﺩﻩ ﻫﺎ‪ ،‬ﺑﻠﻜﻪ ﭼﮕﻮﻧﮕﻲ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﻧﻴﺰ ﻫﺴﺖ ‪ :‬ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﻣﺆﺳﺴﻪ‪ ،‬ﭼﮕﻮﻧﻪ ﺍﺯ ﻧﻘﻄﻪ ﺍﻱ ﺑﻪ ﻧﻘﻄﻪ ﺩﻳﮕﺮ ﻣﻲ ﺭﻭ ﻧﺪ ﻭ ﻏﻴﺮﻩ‪.‬‬

‫‪12‬‬
‫ﻳﺎﺩﺁﻭﺭﻱ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻫﻴﭽﻜﺪﺍﻡ ﺍﺯ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺍﻣﺮﻭﺯﻱ ﺍﺯ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﻛﻪ ﺍﻳﻦ ﺩﺭﺟﻪ ﺍﺯ ﺗﻤﺎﻣﻴﺖ ﺭﺍ‬
‫ﺷﺎﻣﻞ ﺷﻮﺩ‪ ،‬ﭘﺸﺘﻴﺒﺎﻧﻲ ﻧﻤﻲ ﻛﻨﻨﺪ ‪ .‬ﺩﺭ ﺍﻏﻠﺐ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﻣﻮﺟﻮﺩ ‪ ،‬ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﻛﻤﻲ ﺑﻴﺸﺘﺮ ﺍﺯ‬
‫ﺍﺟﺘﻤﺎﻉ ﺗﻤﺎﻡ ﺷﻤﺎﻫﺎﻱ ﺧﺎﺭﺟﻲ‪ ،‬ﺑﻪ ﺍﺿﺎﻓﻪ ﻗﻴﺪﻫﺎﻱ ﺍﻣﻨﻴﺘﻲ ﻭ ﺟﺎﻣﻌﻴﺖ ﺍﺳﺖ ‪ .‬ﺍﻣﺎ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺁﻱﻧﺪﻩ‬
‫ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺷﻤﺎﻱ ﺍﺩﺭﺍﻛﻲ ﺗﺨﺼﺺ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ ‪.‬‬

‫ﺑﺮﺭﺳﻲ ﺳﻄﺢ ﺩﺍﺧﻠﻲ ‪:‬‬


‫ﺩﻳﺪﮔﺎﻩ ﺍﺩﺭﺍﻛﻲ‪ ،‬ﻧﻤﺎﻳﺶ ﺳﻄﺢ ﭘﺎﻳﻴﻨﻲ ﺍﺯ ﻛﻞ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ ﻭ ﺷﺎﻣﻞ ﺭﻭﻳﺪﺍﺩﻫﺎﻱ ﻣﺘﻌﺪﺩﻱ ﺍﺯ‬
‫ﺍﻧﻮﺍﻉ ﻣﺨﺘﻠﻒ ﺭﻛﻮﺭﺩ ﺩﺍﺧﻠﻲ ﺍﺳﺖ ‪ .‬ﺭﻛﻮﺭﺩ ﺩﺍﺧﻠﻲ ﺍﺻﻄﻼﺡ ‪ ANSI/SPARC‬ﺑﺮﺍﻱ ﺳﺎﺧﺘﺎﺭﻱ ﺍﺳﺖ‬
‫ﻛﻪ ﺁﻥ ﺭﺍ ﺭﻛﻮﺭﺩ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﻧﺎﻣﻴﺪﻳﻢ ‪ .‬ﺩﻳﺪﮔﺎﻩ ﺩﺍﺧﻠﻲ ﺑﺎﻻﺗﺮ ﺍﺯ ﺳﻄﺢ ﻓﻴﺰﻳﻜﻲ ﺍﺳﺖ‪ ،‬ﺯﻳﺮﺍ ﺑﺎ ﺍﺻﻄﻼﺡ‬
‫‪ .‬ﻫﻤﭽﻨﻴﻦ ﺑﺎ‬ ‫ﺭﻛﻮﺭﺩﻫﺎﻱ ﻓﻴﺰﻳﻜﻲ ﻛﻪ ﺑﻠﻮﻙ ﻫﺎ ﻳﺎ ﺻﻔﺤﺎﺕ ﻧﻴﺰ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﻧﺪ‪ ،‬ﺳﺮﻭﻛﺎﺭ ﻧﺪﺍﺭﺩ‬
‫‪ .‬ﺑﻌﺒﺎﺭﺕ ﺩﻳﮕﺮ‪ ،‬ﺩﻳﺪﮔﺎﻩ‬ ‫ﻣﻼﺣﻈﺎﺕ ﺩﺳﺘﮕﺎﻩ ﻫﺎ ﻣﺜﻞ ﺍﻧﺪﺍﺯﻩ ﺳﻴﻠﻨﺪﺭﻫﺎ ﻭ ﺷﻴﺎﺭﻫﺎ ﻧﻴﺰ ﺳﺮﻭﻛﺎﺭ ﻧﺪﺍﺭﺩ‬
‫ﺩﺍﺧﻠﻲ‪ ،‬ﻓﻀﺎﻱ ﺧﻄﻲ ﻧﺎﻣﺤﺪﻭﺩﻱ ﺭﺍ ﻓﺮﺽ ﻣﻲ ﻛﻨﺪ‪ ،‬ﺟﺰﺋﻴﺎﺕ ﭼﮕﻮﻧﮕﻲ ﻧﮕﺎﺷﺖ ﻓﻀﺎﻱ ﺁﺩﺭﺱ ﺑﻪ ﺣﺎﻓﻈﻪ‬
‫ﻓﻴﺰﻳﻜﻲ ﻛﺎﻣﻼ ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﺳﻴﺴﺘﻢ ﺍﺳﺖ ﻭ ﺍﺯ ﻣﻌﻤﺎﺭﻱ ﻛﻠﻲ ﺣﺬﻑ ﺷﺪﻩ ﺍﺳﺖ ‪.‬‬
‫‪ I/O‬ﺑﻴﻦ‬ ‫ﺗﻮﺟﻪ ‪ :‬ﺑﻠﻮﻙ ﻳﺎ ﺻﻔﺤﻪ ‪ ،‬ﻭﺍﺣﺪ ‪ I/O‬ﺍﺳﺖ ‪ ،‬ﻳﻌﻨﻲ ﻣﻴﺰﺍﻥ ﺍﻃﻼﻋﺎﺗﻲ ﻛﻪ ﺩﺭ ﻳﻚ ﻋﻤﻞ‬
‫ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ﻭ ﺣﺎﻓﻈﻪ ﺛﺎ ﻧﻮﻳﻪ ﺗﺒﺎﺩﻝ ﻣﻲ ﺷﻮﺩ‪ .‬ﺻﻔﺤﺎﺕ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﺯ ‪ 1k‬ﺗﺎ ‪ 64k‬ﺑﺎﺷﻨﺪ )‪k=1024‬‬
‫ﺑﺎﻳﺖ(‪.‬‬
‫ﺩﻳﺪﮔﺎﻩ ﺩﺍﺧﻠﻲ ﺑﻪ ﻭﺳﻴﻠﻪ ﺷﻤﺎﻱ ﺩﺍﺧﻠﻲ ﺗﻮﺻﻴﻒ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻧﻪ ﺗﻨﻬﺎ ﺍﻧﻮﺍﻉ ﺭﻛﻮﺭﺩ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺭﺍ‬
‫ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﺪ ﺑﻠﻜﻪ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ ﭼﻪ ﺷﺎﺧﺺ ﻫﺎﻳﻲ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ ،‬ﻓﻴﻠﺪﻫﺎﻱ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﭼﮕﻮﻧﻪ‬
‫ﻧﻤﺎﻳﺶ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﻧﺪ‪ ،‬ﺗﺮﺗﻴﺐ ﻑ ﻳﺰﻳﻜﻲ ﺫﺧﻴﺮﻩ ﺭﻛﻮﺭﺩﻫﺎ ﭼﮕﻮﻧﻪ ﺍﺳﺖ ﻭ ﻏﻴﺮﻩ ‪ .‬ﺷﻤﺎﻱ ﺩﺍﺧﻠﻲ ﺑﺎ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﻚ ﺯﺑﺎﻥ ﺗﻌﺮﻳﻒ ﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﻧﺎﻡ ‪ DDL‬ﺩﺍﺧﻠﻲ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫ﺗﻮﺟﻪ ‪ :‬ﺩﺭﺍﻳﻨﺠﺎ ﺍﺯ ﺍﺻﻄﻼﺡ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺑﺠﺎﻱ ﺩﻳﺪﮔﺎﻩ ﺩﺍﺧﻠﻲ ﻭ ﺍﺯ ﺍﺻﻄﻼﺡ ﺗﻌﺮﻳﻒ‬
‫ﺳﺎﺧﺘﺎﺭ ﺣﺎﻓﻈﻪ ﺑﻪ ﺟﺎﻱ ﺷﻤﺎﻱ ﺩﺍﺧﻠﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ ‪.‬‬
‫ﺩﺭ ﺣﺎ ﻟﺖ ﻫﺎﻳﻲ‪ ،‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺩﻱ )ﺑﻪ ﺧﺼﻮﺹ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺳﻮﺩﻣﻨﺪ (‪ ،‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﻳﻦ ﺍﻣﻜﺎﻥ ﺭﺍ‬
‫ﻓﺮﺍﻫﻢ ﻛﻨﻨﺪ ﻛﻪ ﺑﺠﺎﻱ ﻛﺎﺭﻛﺮﺩﻥ ﺩﺭ ﺳﻄﺢ ﺧﺎﺭﺟﻲ‪ ،‬ﺑﺘﻮﺍﻥ ﻣﺴﺘﻘﻴﻤﺎ ﺩﺭ ﺳﻄﺢ ﺩﺍﺧﻠﻲ ﻛﺎﺭﻛﺮﺩ ‪ .‬ﺍﻳﻦ ﻛﺎﺭ‬
‫ﭘﻴﺸﻨﻬﺎﺩ ﻧﻤﻲ ﺷﻮﺩ ‪ .‬ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﺧﻄﺮ ﺍﻣﻨﻴﺘﻲ ﻭ ﺧﻄﺮ ﺟﺎﻣﻌﻴﺖ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﺯﻳﺮﺍ ﻣﺤﺪﻭﺩﻳﺖ ﻫﺎﻱ‬
‫ﺁﻧﻬﺎ ﻧﺎﺩﻳﺪﻩ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﺑﺮﻧﺎﻣﻪ ﻧﻴﺰ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ ﻭﺍﺑﺴﺘﻪ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ‪ .‬ﺍﻣﺎ ﮔﺎﻫﻲ‪ ،‬ﺍﻳﻦ ﺭﻭﺵ‪ ،‬ﺗﻨﻬﺎ ﺭﺍﻩ‬

‫‪13‬‬
‫ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﻋﻤﻠﻜﺮﺩ ﻛﺎﺭﺍﻳﻲ ﻣﻄﻠﻮﺏ ﺍﺳﺖ ‪ .‬ﻣﺜﻞ ﺣﺎﻟﺘﻲ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﺎﻥ ﺩﺭ ﺯﺑﺎﻥ ﻫﺎﻱ ﺳﻄﺢ ﺑﺎﻻ‬
‫ﻣﺠﺒﻮﺭ ﻣﻲ ﺷﻮﻧﺪ ﺍﺯ ﺯﺑﺎﻥ ﺍﺳﻤﺒﻠﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻨﺪ ﺗﺎ ﻛﺎﺭﺍﻳﻲ ﻣﻄﻠﻮﺏ ﺭﺍ ﺑﻪ ﺩﺳﺖ ﺁﻭﺭﻧﺪ ‪.‬‬

‫ﻧﺮﻣﺎﻝﺳﺎﺯﻱ‬

‫ﻫﺪﻑ ﺍﺯ ﻧﺮﻣﺎﻝ ﺳﺎﺯﻱ ﻛﺎﻫﺶ ﺟﺪﺍﻭﻝ ﭘﻴﭽﻴﺪﻩ ﺑﻪ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﻛﻮﭼﻚ ﻭ ﭘﺎﻳﺪﺍﺭ ﺍﺯ ﺳﺎﺧﺘﺎﺭ ﺩﺍﺩﻩ ﻫﺎ ﻣﻲ ‪-‬‬
‫ﺑﺎﺷﺪ‪ .‬ﺳﺎﺧﺘﺎﺭ ﻧﺮﻣﺎﻝ ﺷﺪﻩ ﺍﻧﻌﻄﺎﻑ ﭘﺬﻳﺮﺗﺮ‪ ،‬ﭘﺎﻳﺪﺍﺭﺗﺮ ﻭ ﺍﺯ ﻟﺤﺎﻅ ﻧﮕﻬﺪﺍﺭﻱ ﺭﺍﺣﺖ ﺗﺮ ﺍﺯ ﺳﺎﺧﺘﺎﺭ ﻏﻴﺮﻧﺮﻣﺎﻝ‬
‫ﺍﺳﺖ‪.‬‬
‫ﺳﻄﻮﺡ ﻧﺮﻣﺎﻝﺳﺎﺯﻱ‪:‬‬
‫• ‪ :1NF‬ﺣﺬﻑ ﮔﺮﻭﻩﻫﺎﻱ ﺗﻜﺮﺍﺭﺷﻮﻧﺪﻩ‬
‫• ‪ :2NF‬ﺣﺬﻑ ﻭﺍﺑﺴﺘﮕﻲﻫﺎﻱ ﺟﺰﺋﻲ‬
‫• ‪ :3NF‬ﺣﺬﻑ ﻭﺍﺑﺴﺘﮕﻲﻫﺎﻱ ﺗﺎﺑﻌﻲ ﺑﺎ ﻭﺍﺳﻄﻪ‬
‫)ﺗﺎ ‪ 3NF‬ﺿﺮﻭﺭﺕ ﺩﺍﺭﺩ(‪.‬‬

‫ﺿﺮﻭﺭﺕ ﻧﺮﻣﺎﻝﺳﺎﺯﻱ‪:‬‬
‫• ﻛﺎﻫﺶ ﺍﻓﺰﻭﻧﮕﻲ ﺩﺍﺩﻩ‬
‫• ﻛﺎﻫﺶ ﺑﻲﻧﻈﻤﻲ‬
‫• ﻛﺎﻫﺶ ﻣﻘﺎﺩﻳﺮ ﺗﻬﻲ‬

‫ﺁﺷﻨﺎﻳﻲ ﺑﺎ ﺩﺍﺩﻩﻛﺎﻭﻱ )‪(Data Mining‬‬

‫ﺩﺍﺩﻩﻛﺎﻭﻱ ﻋﺒﺎﺭﺕ ﺍﺳﺖ ﺍﺯ ﻓﺮﺁﻳﻨﺪ ﺍﺳﺘﺨﺮﺍﺝ ﺩﺍﻧﺶ ﺍﺯ ﺣﺠﻢ ﺍﻧﺒﻮﻩ ﺩﺍﺩﻩﻫﺎ‪.‬‬


‫ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﻣﺜﺎﻝ ﺩﻳﮕﺮ ﺩﺭ ﻳﻚ ﺑﻴﻤﺎﺭﺳﺘﺎﻥ‪ ،‬ﺍﻃﻼﻋﺎﺕ ‪ 100‬ﺑﻴﻤﺎﺭ ﻳﻚ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫ﺩﺍﺩﻩﻛﺎﻭﻱ ﺍﺯ ﺍﻳﻦ ﺩﺍﺩﻩ ﻫﺎ ﺩﺍﻧﺶ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ‪ .‬ﻣﺜﻼ ‪ 95‬ﺩﺭﺻﺪ ﺧﺎﻧﻢ ﻫﺎﻳﻲ ﻛﻪ ﺩﻳﺎﺑﺖ ﺩﺍﺷﺘﻪ ﺍﻧﺪ ﺑﻌﺪ ﺍﺯ‬

‫‪14‬‬
‫ﻋﻤﻞ ﻓﻮﺕ ﻧﻤﻮﺩﻩ ﺍﻧﺪ‪ .‬ﺍﻳﻦ ﺩﺍﻧﺶ ﺑﻪ ﻣﺎ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ ﻛﻪ ﺍﮔﺮ ﭼﻨﻴﻦ ﺑﻴﻤﺎﺭﻱ ﻣﺠﺪﺩﺍ ﺁﻣﺪ ﻛﺎﺩﺭ ﭘﺰﺷﻜﻲ‬
‫ﺑﺪﺍﻧﻨﺪ ﻛﻪ ﭼﮕﻮﻧﻪ ﺑﺎﻳﺪ ﻋﻤﻞ ﻛﻨﻨﺪ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺍﺩﻩﻛﺎﻭﻱ ﻳﻚ ﺍﺳﺘﻨﺘﺎﺝ ﺍﺯ ﺩﺍﺩﻩﻫﺎ ﻭ ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﭘﻴﺪﺍﻛﺮﺩﻥ ﺍﻟﮕﻮ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ ﻣﻲﺑﺎﺷﺪ‪.‬‬
‫)‪ (task‬ﺍﺻﻠﻲ‬ ‫ﺩﺭ ﺩﺍﺩﻩ ﻛﺎﻭﻱ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﺪﻟﻬﺎﻱ ﻫﻮﺵ ﻣﺼﻨﻮﻋﻲ ﻣﺎﻧﻨﺪ ﺗﺌﻮﺭﻱ ﻓﺎﺯﻱ‪ ،‬ﺳﻪ ﻛﺎﺭ‬
‫ﺻﻮﺭﺕ ﻣﻲﮔﻴﺮﺩ‪:‬‬
‫• ‪ :Association‬ﻳﻚ ﺳﺮﻱ ﻗﻮﺍﻧﻴﻦ ﺍﻧﺠﻤﻨﻲ )ﺍﻟﮕﻮ ﻳﺎ ‪ (Pattern‬ﺍﻳﺠﺎﺩ ﻣﻲﻛﻨﺪ ﻭ ﻳﻚ ﺩﺍﻧﺶ ﻭ‬
‫ﺍﻟﮕﻮﻱ ﺧﺎﺹ ﺑﻪ ﻣﺎ ﻣﻲ ﺩﻫﺪ‪ .‬ﻳﻌﻨﻲ ﺍﺯ ﺭﻭﻱ ﺩﺍﺩﻩ ﻫﺎ ﻳﻚ ﻣﺪﻝ ﻫﻮﺷﻤﻨﺪ ﭘﻴﺶ ﺑﻴﻨﻲ ﺍﻳﺠﺎﺩ ﻣﻲ ‪-‬‬
‫ﺷﻮﺩ‪.‬‬
‫• ‪ :Clustering‬ﺑﻪ ﻣﻌﻨﻲ ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﻤﻮﻧﻪ ﺍﮔﺮ ﺑﻴﻤﺎﺭﺍﻥ ﺭﺍ ﺑﺮﺍﺳﺎﺱ ﺻﻔﺘﻬﺎ‬
‫ﻳﺎ ﻭﻳﮋﮔﻴﻬﺎ‪ 1‬ﺑﺪﻭﻥ ﻫﻴﭻ ﮔﻮﻧﻪ ﺑﺮﭼﺴﺒﻲ ‪ 2‬ﮔﺮﻭﻩﺑﻨﺪﻱ ﻛﻨﻴﻢ‪ ،‬ﻋﻤﻞ ﺧﻮﺷﻪﺑﻨﺪﻱ ﺍﻧﺞﺍﻡ ﺩﺍﺩﻩ ﺍﻳﻢ‪.‬‬
‫‪F1‬‬ ‫‪F0‬‬

‫• ‪ :Classification‬ﺑﻪ ﻣﻌﻨﻲ ﺩﺳﺘﻪ ﺑﻨﺪﻱ ﻳﺎ ﻛﻼﺱ ﺑﻨﺪﻱ ﺍﺳﺖ ‪ .‬ﻣﺜﻼ ﺍﮔﺮ ﻫﻤﺎﻥ ﺑﻴﻤﺎﺭﺍﻥ ﺭﺍ ﺍﻳﻦ‬
‫ﺑﻨﺪﻱ ﻛﻨﻴﻢ‪ ،‬ﺩﺳﺘﻪ ﺑﻨﺪﻱ‬ ‫ﺑﺎﺭ ﺑﺮﺍﺳﺎﺱ ﻳﻚ ﺳﺮﻱ ﺑﺮﭼﺴﺒﻬﺎﻱ ﺍﺯﭘﻴﺶ ﻣﺸﺨﺺ ﺷﺪﻩ ﮔﺮﻭﻩ‬
‫ﻣﺤﺴﻮﺏ ﻣﻲﺷﻮﺩ‪ .‬ﻳﻜﻲ ﺍﺯ ﺭﻭﺷﻬﺎﻱ ﺩﺳﺘﻪﺑﻨﺪﻱ ﺩﺭﺧﺖ ﺗﺼﻤﻴﻢ ‪ 3‬ﺍﺳﺖ‪.‬‬
‫‪F2‬‬

‫ﺩﺭ ﺣﻘﻴﻘﺖ ﻛﺎﺭ ﭘﻴﺸﮕﻮﻳﻲ ‪ 4‬ﺩﺭ ﻛﻼﺱﺑﻨﺪﻱ ﺍﻧﺠﺎﻡ ﻣﻲﺷﻮﺩ ﻳﻌﻨﻲ ﻓﺮﺁﻳﻨﺪ ‪ classification‬ﺍﻓﺮﺍﺩ ﺟﺪﻳﺪ‬
‫‪F3‬‬

‫ﺭﺍ ﭘﻴﺸﮕﻮﻳﻲ ﻣﻲ ﻛﻨﺪ ﻭ ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺁﻳﺎ ﺑﻴﻤﺎﺭ ﺍﺳﺖ ﻳﺎ ﺳﺎﻟﻢ ‪ .‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﻣﺸﺨﺺ ﻣﻲ ﺷﻮﺩ‬
‫ﻛﻪ ﻓﺮﺩﻱ ﻛﻪ ﺟﺪﻳﺪﺍً ﻭﺍﺭﺩ ﻣﺪﻝ ﺷﺪﻩ ﺍﺳﺖ ﺩﺭ ﻛﺪﺍﻡ ﺩﺳﺘﻪ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ‪ .‬ﺍﻣﺎ ﺩﺭ ﺧﻮﺷﻪﺑﻨﺪﻱ ﻧﻤﻮﻧﻪﻫﺎﻱ‬
‫ﻗﺪﻳﻤﻲ ﮔﺮﻭﻩﺑﻨﺪﻱ ﻣﻲ ﺷﻮﺩ ﻭ ﺁﻧﻬﺎﻳﻲ ﻛﻪ ﺩﺭ ﻳﻚ ﻛﻼﺳﺘﺮ ﻫﺴﺘﻨﺪ ﺑﻪ ﺍﻳﻦ ﻣﻌﻨﻲ ﺍﺳﺖ ﻛﻪ ﻭﻳﮋﮔﻴﻬﺎﻳﺸﺎﻥ‬
‫ﻧﺰﺩﻳﻚ ﺑﻪ ﻫﻢ ﻣﻲﺑﺎﺷﺪ‪.‬‬
‫ﺩﺍﺩﻩﻛﺎﻭﻱ ﻛﺎﺭﺑﺮﺩﻫﺎﻱ ﺯﻳﺎﺩﻱ ﺩﺍﺭﺩ ﻣﺎﻧﻨﺪ ﭘﺰﺷﻜﻲ‪ ،‬ﻣﺎﻟﻲ ﻭ ‪....‬‬
‫ﻳﺎﺩﮔﻴﺮﻱ ﻣﺎﺷﻴﻦ ‪ :5‬ﺳﻴﺴﺘﻢﻫﺎﻱ ﺧﻮﺩﻳﺎﺩﮔﻴﺮﻧﺪﻩ ﻛﻪ ﺑﻪ ﻃﻮﺭ ﺧﻮﺩﻛﺎﺭ ﻳﺎﺩ ﻣﻲ ﮔﻴﺮﻧﺪ )ﻣﺜﻼ ﻳﻚ ﻣﺎﺷﻴﻦ‬
‫‪F4‬‬

‫ﻛﻪ ﺷﻄﺮﻧﺞ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺍﺗﻮﻣﺎﺗﻴﻚ ﻳﺎﺩ ﻣﻲ ﮔﻴﺮﺩ(‪.‬‬


‫ﺳﻴﺴﺘﻤﻬﺎﻱ ﭘﻴﺸﻨﻬﺎﺩﺩﻫﻨﺪﻩ ‪ :6‬ﺍﻳﻦ ﺳﻴﺴﺘﻢ ﻫﺎ ﺑﺮﺍﺳﺎﺱ ﻣﻌﻴﺎﺭﻫﺎﻱ ﺷﺒﺎﻫﺖ‪ ،‬ﺁﻳﺘﻤﻬﺎﻱ ﻣﻮﺭﺩ ﻋﻼﻗﻪ ﻛﺎﺭﺑﺮ‬
‫‪F5‬‬

‫ﺭﺍ ﺣﺪﺱ ﻣﻲ ﺯﻧﺪ ﻭ ﺑﻪ ﺍﻭ ﭘﻴﺸﻨﻬﺎﺩ ﻣﻲ ﺩﻫﺪ‪ .‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮﻱ ﺍﻓﺮﺍﺩ ﺷﺒﻴﻪ ﺑﻪ ﻫﻢ ﺭﺍ ﺷﻨﺎﺳﺎﻳﻲ ﻣﻲ ﻛﻨﺪ ﻭ‬

‫‪1‬‬
‫‪Features‬‬
‫‪2‬‬
‫‪label‬‬
‫‪3‬‬
‫‪Decision Tree‬‬
‫‪4‬‬
‫‪prediction‬‬
‫‪5‬‬
‫‪Machine Learning‬‬
‫‪6‬‬
‫‪Recommender System‬‬

‫‪15‬‬
‫ﺑﻪ ﻳﻚ ﻛﺎﺭﺑﺮ ﺁﻳﺘﻤﻬﺎﻳﻲ ﺭﺍ ﭘﻴﺸﻨﻬﺎﺩ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﻛﺎﺭﺑﺮﺍﻥ ﻣﺸﺎﺑﻪ ﺑﺎ ﻭﻱ ﺁﻧﻬﺎ ﺑﻪ ﺁﻧﻬﺎ ﺍﻣﺘﻴﺎ ﺯ ﺑﺎﻻﻳﻲ ﺩﺍﺩﻩﺍﻧﺪ‪.‬‬
‫ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﻴﺸﻨﻬﺎﺩﺩﻫﻨﺪﻩ ﺍﺯ ﻧﻈﺮﻛﺎﻭﻱ ﺑﺮﺍﻱ ﭘﻴﺸﻨﻬﺎﺩ ﺁﻳﺘﻤﻬﺎﻱ ﻣﻨﺎﺳﺐ ﺑﻪ ﻛﺎﺭﺑﺮ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﻛﻨﻨﺪ‪.‬‬

‫ﭘﻴﺶﺍﺭﺯﻳﺎﺑﻲ ﻛﻼﺱ ﺑﺮﺍﺳﺎﺱ ﻣﻔﺎﻫﻴﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻣﻘﺪﻣﺎﺗﻲ‬

‫‪ - 1‬ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭼﻴﺴﺖ؟‬


‫ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻳﻚ ﻣﺤﻞ ﻧﮕﻬﺪﺍﺭﻱ ﺭﻛﻮﺭﺩﻫﺎ ﻭ ﺩﺍﺩﻩ ﻫﺎﺳﺖ ﻛﻪ ﻛﺎﺭﺑﺮﺍﻥ ﺑﻪ ﻃﻮﺭ ﻣﺸﺘﺮﻙ ﺍﺯ ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﻣﻲﻛﻨﻨﺪ ﻣﺜﻞ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺯﺭﻭﺍﺳﻴﻮﻥ ﻓﺮﻭﺩﮔﺎﻩ ﻭ ﺭﺍﻩﺁﻫﻦ‬
‫ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻓﻘﻂ ﺩﺍﺩﻩﻫﺎ ﺭﺍ ﻧﮕﻬﺪﺍﺭﻱ ﻣﻲ ﻛﻨﺪ ﻭ ﻋﻤﻠﻴﺎﺕ ﺍﺻﻠﻲ ﺭﻭﻱ ﺩﺍﺩﻩ ﻫﺎ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ ﺫﺧﻴﺮﻩ ﻭ ﺑﺎﺯﻳﺎﺑﻲ‬
‫ﻛﻪ ﺩﺭ ﻗﺎﻟﺐ ﻳﻚ ﺳﺮﻱ ﭘﺮﺱ ﻭﺟﻮﻫﺎ ﺻﻮﺭﺕ ﻣﻲﮔﻴﺮﺩ‪.‬‬

‫‪ - 2‬ﻣﺤﺒﻮﺑﺘﺮﻳﻦ ﻧﻮﻉ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭼﻴﺴﺖ؟ ﭼﺮﺍ؟‬


‫ﻧﻮﻉ ﺭﺍﺑﻄﻪﺍﻱ ﻛﻪ ﺍﺯ ﺟﺪﻭﻝ )‪ (Table‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﻛﻨﺪ‪ .‬ﺯﻳﺮﺍ ﺍﺯ ﺳﺎﺩﻩﺗﺮ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﺍﻳﻦ ﻧﻮﻉ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‪:‬‬
‫ﺍﺯ ‪ Join‬ﺑﺎﺭﻱ ﭘﺮﺱﻭﺟﻮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ‪.‬‬ ‫•‬
‫ﺍﺯ ﺁﺩﺭﺱ ﻓﻴﺰﻳﻜﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻲﺷﻮﺩ‪.‬‬ ‫•‬
‫ﺟﺪﺍﻭﻝ ﻣﺴﺘﻘﻞ ﺍﺯ ﻫﻢ ﻫﺴﺘﻨﺪ ﻭ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪object‬ﻫﺎ ﺳﺎﺧﺘﻤﺎﻥ ﺩﺍﺩﻩ ﻫﺎ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﻣﺪﻝ ‪-‬‬ ‫•‬
‫ﺳﺎﺯﻱ ﻧﻤﻮﺩ ﻭ ﺑﺎ ﻋﻤﻞﮔﺮﻫﺎ ﻭ ‪function‬ﻫﺎ ﺭﻓﺘﺎﺭ ﺳﻴﺴﺘﻢ ﺭﺍ ﻣﺪﻳﺮﻳﺖ ﻛﺮﺩ‪.‬‬

‫‪ - 3‬ﻣﻬﻤﺘﺮﻳﻦ ﻭﻳﮋﮔﻲ ﻳﻚ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭼﻴﺴﺖ؟‬


‫ﻣﻬﻤﺘﺮﻳﻦ ﻭﻳﮋﮔﻲ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻋﺒﺎﺭﺕ ﺍﺳﺖ ﺍﺯ ﺍﺳﺘﻘﻼﻝ ﺩﺍﺩﻩ ﻫﺎ‪ ،‬ﻣﺼﻮﻧﻴﺖ )ﺍﻳﻤﻨﻲ( ﺑﺮﻧﺎﻣﻪ ﻛﺎﺭﺑﺮﺩﻱ‬
‫ﻧﺴﺒﺖ ﺑﻪ ﺗﻐﻴﻴﺮ ﺭﻭﺵ ﻧﻤﺎﻳﺶ ﻓﻴﺰﻳﻜﻲ ﻭ ﺭﻭﺵ ﻫﺎﻱ ﺩﺳﺘﺮﺳﻲ ﺩﺍﺩﻩ‬

‫‪ - 4‬ﺳﻴﺴﺘﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭼﻴﺴﺖ؟‬

‫‪16‬‬
‫‪-‬‬ ‫ﻳﻚ ﺳﻴﺴﺘﻢ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ ﺑﺮﺍﻱ ﻧﮕﻬﺪﺍﺭﻱ ﺭﻛﻮﺭﺩﻫﺎﺳﺖ ﻭ ﻫﺪﻑ ﺍﺻﻠﻲ ﺁﻥ ﺫﺧﻴﺮﻩ ﺍﻃﻼﻋﺎﺕ ﻭ ﻓﺮﺍﻫﻢ‬
‫ﻧﻤﻮﺩﻥ ﺍﻣﻜﺎﻧﺎﺗﻲ ﺑﺮﺍﻱ ﺑﺎﺯﻳﺎﺑﻲ ﻭ ﺑﻬﻨﮕﺎﻡ ﺳﺎﺯﻱ ﺍﻃﻼﻋﺎﺕ ﻛﺎﺭﺑﺮﺍﻥ ﺍﺳﺖ ‪ .‬ﺳﻴﺴﺘﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺯ ﭼﻬﺎﺭ‬
‫ﻋﻨﺼﺮ ﺍﺻﻠﻲ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﺳﺖ‪:‬‬
‫ﺩﺍﺩﻩﻫﺎ‬ ‫•‬
‫ﻧﺮﻡﺍﻓﺰﺍﺭ‬ ‫•‬
‫ﺳﺨﺖﺍﻓﺰﺍﺭ‬ ‫•‬
‫ﻛﺎﺭﺑﺮﺍﻥ‬ ‫•‬

‫‪ - 5‬ﻣﻬﻤﺘﺮﻳﻦ ﻋﻨﺼﺮ ﻳﻚ ﺳﻴﺴﺘﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭼﻴﺲﺕ؟‬


‫‪) DBMS‬ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﺎ(‪ DBMS .‬ﻳﻚ ﻻﻳﻪ ﻧﺮﻡ ﺍﻓﺰﺍﺭﻱ ﺍﺳﺖ ﻛﻪ ﻫﺮ ﻧﻮﻉ ﺩﺭﺧﻮﺍﺳﺖ‬
‫ﻛﻪ ﺍﺯ ﻛﺎﺭﺑﺮﺍﻥ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﺷﻮﺩ ﻣﺜﻞ ‪ DDL‬ﻳﺎ ‪ DML‬ﻳﺎ ‪ DCL‬ﻭ ‪ ،...‬ﺁﻥ ﺭﺍ ﺟﻮﺍﺏ ﻣﻲ ﺩﻫﺪ ﻭ ﺍﻣﻨﻴﺖ ﺭﺍ‬
‫ﻛﻨﺘﺮﻝ ﻣﻲﻛﻨﺪ‪.‬‬

‫‪ - 6‬ﻧﺮﻣﺎﻝﺳﺎﺯﻱ ﻳﻚ ﺿﺮﻭﺭﺕ ﺍﺳﺖ؟ ﺗﺎ ﭼﻪ ﺳﻄﺤﻲ ﺍﺯ ﻧﺮﻣﺎﻝ ﺳﺎﺯﻱ؟‬


‫ﺗﺎ ﺳﻄﺢ ﺳﻮﻡ )‪.(3NF‬‬

‫‪ - 7‬ﺕﺭﺍﻛﻨﺶ ﭼﻴﺴﺖ؟ ﺁﻳﺎ ﻳﻚ ﺿﺮﻭﺭﺕ ﺍﺳﺖ؟‬


‫ﻳﻚ ﻭﺍﺣﺪ ﺍﺟﺮﺍﻳﻲ ﺑﺮﻧﺎﻣﻪ ﻛﻪ ﺍﻧﻮﺍﻉ ﺁﻳﺘﻤﻬﺎﻱ ﺩﺍﺩﻩ ﺍﻱ ﺭﺍ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﻭ ﺑﺮﻭﺯﺭﺳﺎﻧﻲ ﻣﻲ ﻛﻨﺪ‪ .‬ﺑﻠﻪ‪،‬‬
‫ﺗﺮﺍﻛﻨﺶ ﻳﻚ ﺿﺮﻭﺭﺕ ﻣﺤﺴﻮﺏ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ - 8‬ﺧﻮﺍﺹ ﺗﺮﺍﻛﻨﺶ )‪ (ACID‬ﭼﻴﺴﺖ؟‬


‫ﺧﻮﺍﺹ ‪ ACID‬ﺷﺎﻣﻞ ﭼﻬﺎﺭ ﺧﺎﺻﻴﺖ ﻣﻬﻢ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺳﺖ ﻛﻪ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ ‪:‬‬
‫• ‪ :Atomicity‬ﺍﺗﻤﻴﻚ )ﻏﻴﺮﻗﺎﺑﻞﺗﺠﺰﻳﻪ( ﺑﻮﺩﻥ‪ .‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻳﺎ ﺑﺎﻳﺪ ﺑﻪ ﻃﻮﺭ ﻛﺎﻣﻞ ﺍﺟﺮﺍ ﺷﻮﺩ ﻭ‬
‫ﻳﺎ ﺍﻳﻦ ﻛﻪ ﺍﺻﻼ ﺍﺟﺮﺍ ﻧﺸﻮﺩ )ﻳﻌﻨﻲ ﺍﮔﺮ ﺑﺨﺸﻲ ﺍﺯ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺍﺟﺮﺍ ﺷﺪﻩ ﻭ ﺑﻘﻴﻪ ﺍﺵ ﺑﻪ ﺩﻻﻳﻠﻲ ﻧﻤﻲ ‪-‬‬
‫ﺗﻮﺍﻧﺪ ﻛﺎﻣﻞ ﺷﻮﺩ‪ ،‬ﻻﺯﻡ ﺍﺳﺖ ﻋﻤﻠﻴﺎﺕ ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﺗﺮﺍﻛﻨﺶ ﻫﻢ ﺑﺮﮔﺮﺩﺍﻧﺪﻩ ﺷﻮﺩ(‬
‫• ‪ :Consistency‬ﺳﺎﺯﮔﺎﺭﻱ‪ .‬ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺪ ﻭﺿﻊﻳﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﺍﺯ ﻳﻚ ﻭﺿﻌﻴﺖ ﺳﺎﺯﮔﺎﺭ‬
‫ﺑﻪ ﻳﻚ ﻭﺿﻌﻴﺖ ﺳﺎﺯﮔﺎﺭ ﺩﻳﮕﺮ ﻣﻨﺘﻘﻞ ﻛﻨﺪ‪.‬‬
‫• ‪ :Isolation‬ﺟﺎﻣﻌﻴﺖ‪ .‬ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺪ ﺻﺤﺖ ﻭ ﺟﺎﻣﻌﻴﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﺣﻔﻆ ﻛﻨﺪ ‪.‬‬

‫‪17‬‬
‫• ‪ :Durabilty‬ﻣﺎﻧﺪﮔﺎﺭﻱ ﻳﺎ ﭘﺎﻳﺪﺍﺭﻱ ‪ .‬ﺩﺭﺻﻮﺭﺗﻲ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﭘﺎﻳﺎﻥ ﻳﺎﺑﺪ‪ ،‬ﺍﺛﺮﺍﺕ ﺁﻥ‬
‫ﺭﻭﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮﺭﺕ ﺩﺍﺋﻤﻲ ﻣﺎﻧﺪﮔﺎﺭ ﺑﻤﺎﻧﺪ‪.‬‬

‫‪ - 9‬ﻓﺮﻣﺎﻥﻫﺎﻱ ‪ Commit & Rollback‬ﭼﻪ ﻧﻘﺸﻲ ﺩﺭ ﻣﺪﻳﺮﻳﺖ ﺗﺮﺍﻛﻨﺸﻬﺎ ﺩﺍﺭﻧﺪ؟‬


‫ﺯﻣﺎﻧﻲ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺑﻪ ﺍﻧﺠﺎﻡ ﻣﻲ ﺭﺳﺪ ‪ commit‬ﻣﻲﻛﻨﺪ ﺩﺭﻏﻴﺮﺍﻳﻦﺻﻮﺭﺕ ‪Rollback‬‬
‫ﻣﻲﺷﻮﺩ ﺗﺎ ﺍﺛﺮ ﺗﻤﺎﻡ ﺩﺳﺘﻮﺍﺭﺕ ﺭﺍ ﺧﻨﺜﻲ ﻛﻨﺪ ﻳﻌﻨﻲ ﺍﮔﺮ ﻳﻜﻲ ﺍﺯ ﺧﺎﺻﻴﺖ ﻫﺎﻱ ﺗﺮﺍﻛﻨﺶ ﺑﺮﻗﺮﺍﺭ ﻧﺒﺎﺷﺪ‬
‫‪ Rollback‬ﻣﻲﻛﻨﻢ‪ Rollback .‬ﻓﻘﻂ ‪ Abort‬ﻧﻴﺴﺖ ﺑﻠﻜﻪ ﺷﺎﻣﻞ ﻋﻤﻠﻴﺎﺗﻲ ﻣﺎﻧﻨﺪ ‪ Undo‬ﻭ ‪Redo‬‬
‫ﻫﻢ ﻣﻲﺑﺎﺷﺪ‪.‬‬

‫‪ - 10‬ﻣﺪﻳﺮﻳﺖ ﺗﺮﻣﻴﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭼﻴﺴﺖ؟‬


‫ﻣﻨﻈﻮﺭ ﻋﻤﻠﻴﺎﺗﻲ ﺍﺳﺖ ﻛﻪ ﭘﺎﻳﺪﺍﺭﻱ ﻭ ﺍﺗﻤﻴﻚ ﺑﻮﺩﻥ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﺗﻀﻤﻴﻦ ﻣﻲﻛﻨﺪ‪.‬‬

‫‪ - 11‬ﻣﺸﻜﻼﺕ ﺍﻧﺠﺎﻡ ﻫﻤﺮﻭﻧﺪ ﺗﺮﺍﻛﻨﺸﻬﺎ )‪ (Concurrency Control‬ﭼﻴﺴﺖ؟‬


‫ﻣﺸﻜﻞ ﺍﺻﻠﻲ ﺩﺭ ﺍﺟﺮﺍﻱ ﻫﻤﺮﻭﻧﺪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﺩﺍﺩﻩ ﻫﺎ ﭘﻴﺶ ﺁﻳﺪ ‪.‬‬
‫ﺭﺍﻩ ﺣﻞ ﻣﻘﺎﺑﻠﻪ ﺑﺎ ﺍﻳﻦ ﻣﺸﻜﻞ ﻧﻈﺎﺭﺕ ﺑﺮ ﺍﺟﺮﺍﻱ ﻫﻤﺮﻭﻧﺪ ﺗﺮﺍﻛﻨﺸﻬﺎ ﺍﺳﺖ ‪.‬‬

‫ﻧﻜﺎﺕ ﺁﺧﺮ ﻓﺼﻞ‪:‬‬


‫‪ ‬ﺳﻪ ﻧﻮﻉ ﻧﺤﻮﻩ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪Public, Protected, Private :‬‬
‫‪ DBMS ‬ﺳﺮﻭﻳﺲ ﻫﺎ ﻱﻱ ﺟﻬﺖ ﺩﺳﺘﺮﺳﻲ ﺩﺍﺩﻩ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻓﺮﺍﻫﻢ ﻣﻲ ﻛﻨﺪ ﺑﻨﺤﻮﻱ ﻛﻪ ﺍﺯ‬
‫ﻛﻠﻲ‪‬ﻩ ﺧﻮﺍﺹ ﺩﺍﺩﻩ ﻣﺤﺎﻓﻈﺖ ﺷﻮﺩ ‪.‬‬
‫‪ ‬ﻛﻠﻴﺪﻫﺎ‪:‬‬
‫‪ Primary Key‬ﻳﺎ ﻛﻠﻴﺪ ﺍﺻﻠﻲ‬ ‫‪.1‬‬
‫ﻛﻠﻴﺪ ﺧﺎﺭﺟﻲ‪ :‬ﻛﻪ ﺩﺭ ﺟﺪﺍﻭﻝ ﺩﻳﮕﺮ ﻧﻘﺶ ﻛﻠﻴﺪ ﺍﺻﻠﻲ ﺭﺍ ﺩﺍﺭﺩ ‪.‬‬ ‫‪.2‬‬
‫‪ :Alternative Key‬ﻛﻠﻴﺪﻱ ﺍﺳﺖ ﻛﻪ ﻣﻴﺘﻮﺍﻥ ﺁﻧﺮﺍ ﺑﺮ ﺣﺴﺐ ﻳﻚ ﻣﻌﻴﺎﺭﻱ ﻣﺜﻞ ﻣﻌﺪﻝ‬ ‫‪.3‬‬
‫ﻃﺒﻘﻪ ﺑﻨﺪﻱ ﻛﺮﺩ‪.‬‬
‫‪ :Super Key‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺻﻔﺎﺕ ﻛﻪ ﺧﺎﺻﻴ‪‬ﺖ ﻛﻠﻴﺪ ﺭﺍ ﺩﺍﺭﺩ ﻭﻟﻲ ﻛﻤﻴﻨﻪ ﻧﻴﺴﺖ ﻳﻌﻨﻲ‬ ‫‪.4‬‬
‫ﺗﺎ ﺯﻣﺎﻧﻴﻜﻪ ﺻﻔﺎﺕ ﻫﻤﺮﺍﻩ ﺁﻧﺮﺍ ﺣﺬﻑ ﻛﻨﻴﻢ ﻫﻨﻮﺯ ﺻﻔﺖ ﻣﻨﺤﺼﺮ ﺑﻔﺮﺩﻱ ﺭﺍ ﺩﺍﺭﺩ ‪.‬‬

‫‪18‬‬
‫‪ ‬ﺑﺮﻗﺮﺍﺭﻱ ﺟﺎﻣﻌ‪‬ﻴﺖ ﻭﻇﻴﻔﻪ ‪ DBMS‬ﻣﻴﺒﺎﺷﺪ ﻛﻪ ﻣﻲ ﺗﻮﺍﻥ ﺁﻧﺮﺍ ﺑﻪ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﺩﺳﺘﻪ ﺑﻨﺪﻱ ﻛﺮﺩ‪:‬‬
‫‪ .1‬ﺩﺍﻣﻨﻪ ﺍﻱ( ﺩﺭ ﺍﻳﻨﺠﺎ ﻛﻠﻴ‪‬ﻪ ﺻﻔﺎﺕ ﺩﺭ ﺗﻤﺎﻣﻲ ﺭﺍﺑﻄﻪ ﻫﺎ ﻫﻤﻨﻮﻉ ﺩﺍﻣﻨﻪ ﻣﻴﺒﺎﺷﺪ ‪.‬‬
‫‪ .2‬ﺍﺭﺟﺎﻋﻲ( ﺍﻳﻨﺠﺎ ﻛﻠﻴﺪ ﺧﺎﺭﺟﻲ ﺑﺎﻳﺪ ﺩﺭﺳﺖ ﺑﺎﺷﺪ ﻭ ﺗﻬﻲ ﻧﺒﺎﺷﺪ ‪.‬‬
‫‪ .3‬ﺩﺭﻭﻥ ﺭﺍﺑﻄﻪ ﺍﻱ ( ﺍﻳﻨﺠﺎ ﻧﺒﺎﻳﺪ ﻋﻀﻮ ﺗﻜﺮﺍﺭﻱ ﻣﻮﺟﻮﺩ ﺑﺎﺷﺪ‪ ،‬ﻫﻤﭽﻨﻴﻦ ﻛﻠﻴﺪﻫﺎ ‪Null‬‬
‫ﻧﺒﺎﺷﺪ‪.‬‬
‫‪ ‬ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺯ ﺩﻳﺪ ﻛﺎﺭﺑﺮﺍﻥ‪:‬‬
‫‪- 1‬ﻫﺪﻑ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺍﺯ ﺗﻚ ﻛﺎﺭﺑﺮﻩ ﺑﻪ ﭼﻨﺪﻛﺎﺭﺑﺮﻩ ﺑﺮﺳﺪ ‪ .‬ﺑﺪﻳﻦ ﻣﻌﻨﻲ ﻛﻪ‬
‫ﻫﺮ ﻛﺎﺭﺑﺮ ﺣﺲ ﻛﻨﺪ ﻓﻘﻂ ﺧﻮﺩﺵ ﺩﺭ ﺣﺎﻝ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺍﺳﺖ ﻭ ﻭﺟﻮﺩ‬
‫ﺳﺎﻳﺮ ﻛﺎﺭﺑﺮﺍﻥ ﺭﺍ ﺣﺲ ﻧﻜﻨﺪ‪.‬‬
‫‪- 2‬ﻫﻴﭻ ﻛﺪﺍﻡ ﺍﺯ ﻛﺎﺭﺑﺮﺍﻥ ﺣﻴﻦ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﺗﻀّﺎﺩ )‪(Conflict‬‬
‫ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪.‬‬

‫‪19‬‬
‫ﻓﺼﻞ ‪:2‬‬
‫ﺗﺮﺍﻛﻨﺶ ﻫﺎ‬

‫‪20‬‬
‫ﻣﻔﻬﻮﻡ ﺗﺮﺍﻛﻨﺶ‪:‬‬

‫ﺗﺮﺍﻛﻨﺶ )‪ (Transaction‬ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻓﻌﺎﻝ ﺍﺳﺖ ﻛﻪ ﺩﻧﺒﺎﻟﻪ ﺍﻱ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﺭﺍ ﺷﺎﻣﻞ ﻣﻲ ﺷﻮﺩ ﻭ ﺑﻪ‬
‫ﻃﻮﺭ ﺧﺎﺹ ﺑﻌﻀﻲ ﻋﻤﻠﻴﺎﺕ ﺁﻥ ﺭﻭﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺳﺖ ‪.‬‬

‫ﺗﺮﺍﻛﻨﺶ ﻭﺍﺣﺪﻱ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺍﺟﺮﺍﻳﻲ ﺍﺳﺖ ﻛﻪ ﺁﻳﺘﻢ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺩﺍﺩﻩ ﺭﺍ ﺑﺎﺯﻳﺎﺑﻲ ﻳﺎ ﺑﺮﻭﺯ ﺭﺳﺎﻧﻲ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫• ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺪ ﻳﻚ ﺩﺍﺩﻩ ﺭﺍ ﺳﺎﺯﮔﺎﺭ ﺑﺒﻴﻨﺪ‪.‬‬


‫• ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﻪ ﻃﻮﺭ ﻣﻮﻗﺖ ﻧﺎﺳﺎﺯﮔﺎﺭ ﺑﺎﺷﺪ ‪.‬‬
‫• ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺗﻜﻤﻴﻞ ﺷﺪ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎﻳﺪ ﺳﺎﺯﮔﺎﺭ ﺑﺎﺷﺪ ‪.‬‬
‫• ﭘﺲ ﺍﺯ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ ﺗﻐﻴﻴﺮﺍﺕ ﺁﻥ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎﻗﻲ ﺑﻤﺎﻧﺪﺣﺘﻲ ﺍﮔﺮ ﺧﻄﺎ ﺩﺭ‬
‫ﺳﻴﺴﺘﻢ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬
‫• ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﭼﻨﺪ ﮔﺎﻧﻪ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺑﻪ ﻃﻮﺭ ﻣﻮﺍﺯﻱ ﺑﺎ ﻫﻢ ﺍﺟﺮﺍ ﺷﻮﻧﺪ ‪.‬‬

‫ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺍﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﺗﺤﻮﻳﻞ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺍﻳﻦ‬
‫ﺳﻴﺴﺘﻢ ﭼﻬﺎﺭ ﻛﻨﺘﺮﻝ ﻣﻮﺳﻮﻡ ﺑﻪ ‪ ASID‬ﺭﺍ ﺭﻭﻱ ﺁﻧﻬﺎ ﺍﻋﻤﺎﻝ ﻭ ﺩﺭ ﻧﻬﺎﻳﺖ ﺍﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻳﺎ ﺑﻪ‬
‫ﺧﻮﺑﻲ ﺍﺟﺮﺍ ﺷﺪﻩ ﻭﭘﺎﻳﺎﻥ ﻣﻲ ﻳﺎﺑﻨﺪ ﻛﻪ ﺑﻪ ﺍﻳﻦ ﺣﺎﻟﺖ ﻣﻲ ﺷﻮﻧﺪ ﺍﻧﺠﺎﻡ ﻳﺎ ﺗﺜﺒﻴﺖ )‪ (commit‬ﻣﻲ‬
‫ﮔﻮﻳﻨﺪ ﻭ ﻳﺎ ﺍﻳﻨﻜﻪ ﺳﺎﻗﻂ )‪ (abort‬ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫ﭘﺲ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﻋﻤﻠﮕﺮﻫﺎﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﻛﻪ ﺍﺯ ﺩﻳﺪ ﻛﺎﺭﺑﺮ ﻳﻚ ﻭﺍﺣﺪ ﻣﻨﻄﻘﻲ ﻛﺎﺭ ﺭﺍ ﺗﺸﻜﻴﻞ‬
‫ﻣﻲ ﺩﻫﻨﺪ‪ ،‬ﺗﺮﺍﻛﻨﺶ ﻧﺎﻡ ﺩﺍﺭﺩ‪.‬‬
‫ﻣﺜﻼ ﻭﻗﺘﻲ ﺍﺯ ﻳﻚ ﺣﺴﺎﺏ ‪ A‬ﻣﺒﻠﻐﻲ ﺭﺍ ﺑﻪ ﺣﺴﺎﺏ ‪ B‬ﻣﻨﺘﻘﻞ ﻣﻲﻛﻨﺪ‪ ،‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺍﺳﺖ ﻛﻪ ﺷﺎﻣﻞ‬
‫ﺩﻭ ﻛﺎﺭ ﺍﺳﺖ‪:‬‬
‫‪- 1‬ﻣﺒﻠﻎ ﻣﻮﺭﺩ ﻧﻈﺮ ﺍﺯ ﺣﺴﺎﺏ ‪ A‬ﻛﻢ ﺷﻮﺩ‬
‫‪- 2‬ﻫﻤﺎﻥ ﻣﺒﻠﻎ ﺑﻪ ﺣﺴﺎﺏ ‪ B‬ﺍﺿﺎﻓﻪ ﺷﻮﺩ‪.‬‬

‫‪21‬‬
‫ﺑﺮﺭﺳﻲ ﺧﻮﺍﺹ ‪:ACID‬‬
‫‪.‬‬ ‫ﺍﮔﺮ ﺍﻳﻦ ﺧﻮﺍﺹ ﺭﺍ ﺭﻭﻱ ﺗﻤﺎﻡ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﻋﻤﺎﻝ ﻛﻨﻴﻢ‪ ،‬ﺟﺎﻣﻌﻴﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺣﻔﻆ ﻣﻲ ﺷﻮﺩ‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﻫﺪﻑ ﺍﺻﻠﻲ ﺩﺭ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‪ ،‬ﺣﻔﻆ ﺟﺎﻣﻌﻴﺖ ﺍﺳﺖ ‪ .‬ﺍﻳﻦ ﺧﻮﺍﺹ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ‪:‬‬
‫‪ Atomicity .1‬ﻳﻜﭙﺎﺭﭼﮕﻲ‬
‫‪ Consistency .2‬ﻫﻤﺨﻮﺍﻧﻲ ﻳﺎ ﺳﺎﺯﮔﺎﺭﻱ‬
‫‪ Isolation .3‬ﺍﻳﺰﻭﻟﮕﻲ‬
‫‪ Durability .4‬ﭘﺎﻳﺪﺍﺭﻱ ﻳﺎ ﭘﺎﻳﺎﻳﻲ‬
‫‪ :Atomicity‬ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﺗﻤﻴﻚ ﻫﺴﺘﻨﺪ ﻳﺎ ﺍﺻﻼ ﺷﺮﻭﻉ ﻧﻤﻲ ﺷﻮﻧﺪ ﻳﺎ ﻭﻗﺘﻲ ﺁﻏﺎﺯ ﺷﺪﻧﺪ ﺣﺘﻤﺎ ﺑﻪ‬
‫ﭘﺎﻳﺎﻥ ﻣﻲ ﺭﺳﻨﺪ ‪ .‬ﻳﺎ ﻫﻤﻪ ﺩﺳﺘﻮﺭﺍﺕ ﺑﻪ ﻃﻮﺭ ﻛﺎﻣﻞ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﻳﺎ ﻫﻴﭽﻜﺪﺍﻡ ‪ .‬ﻧﮕﻬﺪﺍﺷﺘﻦ ﺧﺎﺻﻴﺖ‬
‫ﺍﺗﻮﻣﻴﻚ ﺑﻮﺩﻥ ﺑﻪ ﻋﻬﺪﻩ ﻛﻨﺘﺮﻝ ﻫﻤﺮﻭﻧﺪﻱ ﻭ ﺗﺮﻣﻴﻢ ﺍﺳﺖ ‪ .‬ﭘﺲ ﺍﺗﻮﻣﻴﻚ ﺑﻮﺩﻥ ﺗﺮﺍﻛﻨﺶ ﻳﻌﻨﻲ ﺍﻳﻨﻜﻪ ﻳﻚ‬
‫ﺗﺮﺍﻛﻨﺶ ﻳﺎ ﺑﻄﻮﺭ ﻛﺎﻣﻞ ﺍﺟﺮﺍ ﺷﻮﺩ ﻳﺎ ﺍﺻﻼ ﺍﻧﺠﺎﻡ ﻧﺸﻮﺩ ‪.‬‬
‫‪ :Consistency‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻳﺎ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﺑﻪ ﺣﺎﻟﺖ ﺳﺎﺯﮔﺎﺭ ﺟﺪﻳﺪﻱ ﻣﻲ ﺑﺮﺩ ﻳﺎ ﺍﮔﺮ ﺷﻜﺴﺘﻲ ﺭﺥ‬
‫ﺩﺍﺩ ﻛﻠﻴﻪ ﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﺣﺎﻟﺖ ﻗﺒﻞ ﺍﺯ ﺷﺮﻭﻉ ﺗﺮﺍﻛﻨﺶ ﺑﺮﻣﻲ ﮔﺮﺩﻧﺪ ‪ .‬ﺍﮔﺮ ﺗﺮﺍﻛﻨﺸﻲ ﺗﺜﺒﻴﺖ ﺷﺪ‪ ،‬ﻧﺒﺎﻳﺪ ﺑﺎﻧﻚ‬
‫ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺧﺮﺍﺏ ﻛﻨﺪ‪ .‬ﻣﺜﻼً ﺍﮔﺮ ﺗﺮﺍﻛﻨﺸﻲ ﻧﻤﺮﻩ ﺍﻱ ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﺍﺩ‪ ،‬ﺑﺎﻳﺪ ﺁﻧﺮﺍ ﺑﻪ ﻳﻚ ﻣﻘﺪﺍﺭ ﻣﺠﺎﺯ ﺗﺒﺪﻳﻞ‬
‫ﻛﻨﺪ‪.‬‬
‫‪ :Isolation‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻫﻤﺮﻭﻧﺪ ﻳﺎ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻛﻪ ﻃﻮﻝ ﻋﻤﺮﺷﺎﻥ ﻫﻤﭙﻮﺷﺎﻧﻲ ﺩﺍﺭﺩ‪ ،‬ﻧﺒﺎﻳﺪ ﺗﺄﺛﻴﺮ‬
‫ﻣﺨﺮﺏ ﺭﻭﻱ ﻫﻢ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪ .‬ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺍﺯ ﻭﺟﻮﺩ ﻫﻤﺪﻳﮕﺮ ﺑﻲ ﺧﺒﺮ‬
‫ﻫﺴﺘﻨﺪ‪.‬‬
‫‪ :Durability‬ﺍﮔﺮ ﺗﺮﺍﻛﻨﺸﻲ ﺗﺜﺒﻴﺖ ﺷﺪ‪ ،‬ﺗﺄﺛﻴﺮ ﺁﻥ ﺑﻪ ﻃﻮﺭ ﺍﺗﻔﺎﻗﻲ ﺍﺯ ﺑﻴﻦ ﻧﺨﻮﺍﻫﺪ ﺭﻓﺖ‪ .‬ﻳﻌﻨﻲ‬
‫ﺗﺮﺍﻛﻨﺶ ﺗﺜﺒﻴﺖ ﺷﺪﻩ ﺗﺎﺛﻴﺮﺵ ﺩﺍﺋﻤﻲ ﺍﺳﺖ‪ ،‬ﺣﺘﻲ ﺍﮔﺮ ﺳﻴﺴﺘﻢ ﺧﺮﺍﺏ ﺷﻮﺩ ﺩﺍﺩﻩ ﺩﺭ ﺣﺎﻟﺖ ﺩﺭﺳﺖ ﺑﺎﻗﻲ‬
‫ﻣﻲ ﻣﺎﻧﺪ‪.‬‬

‫‪22‬‬
‫ﻭﺿﻌﻴﺖ ﺗﺮﺍﻛﻨﺶ‪:‬‬

‫ﻣﺜﺎﻟﻲ ﺑﺮﺍﻱ ﭼﻬﺎﺭ ﺧﺎﺻﻴﺖ ﺗﺮﺍﻛﻨﺶ‪:‬‬

‫ﻓﺮﺽ ﻛﻨﻴﻢ ﻣﻲ ﺧﻮﺍﻫﻴﻢ ‪50‬ﺩﻻﺭ ﺍﺯ ﺣﺴﺎﺏ‪ A‬ﻛﺎﺳﺘﻪ ﻭ ﺑﻪ ﺣﺴﺎﺏ‪ B‬ﺍﺿﺎﻓﻪ ﻛﻨﻴﻢ‪(A=200,B=100) .‬‬

‫‪ :Atomicity .1‬ﺍﮔﺮ ﺧﻄﺎﻳﻲ ﺑﻌﺪ ﺍﺯ ﺧﻂ‪ 3‬ﻳﺎ ﻗﺒﻞ ﺍﺯ ﺧﻂ‪ 6‬ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪ ،‬ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺯ ﺣﺎﻟﺖ‬
‫ﺳﺎﺯﮔﺎﺭ ﺧﺎﺭﺝ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺯﻳﺮﺍ ﺑﺎﻳﺪ ﺣﺎﺻﻞ‪ A+B‬ﺩﺭ ﻗﺒﻞ ﻭ ﺑﻌﺪ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻣﻘﺪﺍﺭﻱ ﻳﻜﺴﺎﻥ‬
‫ﺧﻂ‪ 3‬ﺧﻄﺎ ﺭﺥ ﺩﻫﺪ )ﻳﻌﻨﻲ ‪ A+B=150+100‬ﺣﺎﺻﻞ ﺷﻮﺩ (‬ ‫ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﺍﮔﺮ ﺑﻌﺪ ﺍﺯ‬

‫‪23‬‬
‫ﺩﺳﺘﻮﺭﺍﺕ ﺧﻂ‪ ،4‬ﺧﻂ‪ 5‬ﻭ ﺧﻂ‪ 6‬ﺍﺟﺮﺍ ﻧﺨﻮﺍﻫﻨﺪ ﺷﺪ ﻭ ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﭘﺪﻳﺪ ﻣﻲ ﺁﻳﺪ ‪) .‬ﺩﺭ ﻭﺍﻗﻊ ﺩﺭ‬
‫ﺧﺎﺻﻴﺖ ﺍﺗﻮﻣﻴﻚ ﺑﻮﺩﻥ ﺑﻴﺎﻥ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻳﺎ ﻫﻤﻪ ﻱ ﺩﺳﺘﻮﺭﺍﺕ ﺑﺎﻳﺪ ﺍﺟﺮﺍ ﺷﻮﻧﺪ ﻳﺎ ﻫﻴﭻﻛﺪﺍﻡ (‪.‬‬
‫‪ :Consistency .2‬ﭼﻮﻥ ﻣﻘﺪﺍﺭ ‪ A+B‬ﻗﺒﻞ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ‪ 200+100=300‬ﻣﻲ ﺷﻮﺩ ﻭ ﺑﻌﺪ ﺍﺯ‬
‫ﺁﻥ ﻫﻢ ‪ 150+150=300‬ﻣﻲ ﺷﻮﺩ‪ ،‬ﭘﺲ ﺳﺎﺯﮔﺎﺭﻱ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬
‫‪ :Isolation .3‬ﺍﮔﺮ ﺑﻴﻦ ﺧﻂ‪ 3‬ﻭ ﺧﻂ ‪ ،6‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺩﻳﮕﺮ ﺑﻴﺎﻳﺪ ﻭ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎﻱ ﺑﻴﻦ ﺍﻳﻦ ﺩﻭ‬
‫ﺧﻂ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﺪ‪ ،‬ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻣﺸﺎﻫﺪﻩ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺩﺭ ﺣﻘﻴﻘﺖ‬
‫ﺧﺎﺻﻴﺖ ﺍﻳﺰﻭﻟﮕﻲ ﺍﻳﻦ ﺍﻃﻤﻴﻨﺎﻥ ﺭﺍ ﺣﺎﺻﻞ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻱ ﺍﺟﺮﺍ ﺷﻮﻧﺪ ‪.‬‬
‫‪ :Durability .4‬ﺑﻌﺪ ﺍﺯ ﺍﻳﻨﻜﻪ ﻫﻤﻪ ﻱ ﺩﺱﺗﻮﺭﺍﺕ ﺗﺮﺍﻛﻨﺶ ﺍﺟﺮﺍ ﺷﺪﻧﺪ‪ ،‬ﺗﻤﺎﻡ ﺗﻐﻴﻴﺮﺍﺕ ﺩﺭ ﭘﺎﻳﮕﺎﻩ‬
‫ﺩﺍﺩﻩ ﺍﻋﻤﺎﻝ ﻣﻲ ﺷﻮﻧﺪ‪) ،‬ﺑﻌﺪ ﺍﺯ ﺍﻳﻨﻜﻪ ﭼﻚ ﺷﺪ ﻛﻪ ﺩﺭ ﺗﺮﺍﻛﻨﺶ ﺧﻄﺎﻳﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪ ،‬ﺁﻥ‬
‫ﺗﺮﺍﻛﻨﺶ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺗﻤﺎﻡ ﺷﺪﻩ ﻭ ﺑﻌﺪ ﺍﺯ ﺁ ﻥ ﺑﺮ ﺭﻭﻱ ﺩﻳﺴﻚ ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﺩ(‪.‬‬

‫ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﻣﻬ‪‬ﻢ ﺩﺭ ﺗﺮﺍﻛﻨﺶ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﺍﺷﺎﺭﻩ ﻛﺮﺩ‪:‬‬


‫‪ :Commit‬ﺫﺧﻴﺮﻩ ﺗﻤﺎﻡ ﺗﻐﻴﻴﺮﺍﺕ ﺑﺪﺭﺳﺘﻲ ﻭ ﻛﺎﻣﻞ ‪ .‬ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺍﻧﺘﻬﺎﻱ ﻣﻮﻓّﻘﻴﺖ ﺁﻣﻴﺰ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺭﺍ‬
‫ﺑﻪ ﻣﺪﻳﺮ ﺗﺮﺍﻛﻨﺶ ﺍﻋﻼﻡ ﻣﻲ ﻛﻨﺪ ﻟﺬﺍ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺩﺭ ﺣﺎﻟﺘﻲ ﭘﺎﻳﺪﺍﺭ ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﻭ ﺗﻤﺎﻣﻲ ﺍﻋﻤﺎﻝ ﺍﻧﺠﺎﻡ ﺷﺪﻩ‬
‫ﺗﻮﺳﻂ ﺗﺮﺍﻛﻨﺶ ﻗﺒﻮﻝ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ :Roll back‬ﺑﺎﺯﻳﺎﺑﻲ ﺗﻐﻴﻴﺮﺍﺕ ﺑﻪ ﻋﻠّﺖ ﻋﺪﻡ ﺩﺭﺳﺘﻲ ﻭ ﻧﻘﺺ ‪ .‬ﺍﻳﻦ ﺩﺳﺖﻭﺭ ﺍﻧﺘﻬﺎﻱ ﻧﺎﻣﻮ‪‬ﻓﻖ ﻳﻚ ﺗﺮﺍﻛﻨﺶ‬
‫ﺭﺍ ﺑﻪ ﻣﺪﻳﺮ ﺗﺮﺍﻛﻨﺶ ﺍﻋﻼﻡ ﻣﻲ ﻛﻨﺪ ﻟﺬﺍ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺩﺭ ﺣﺎﻟﺘﻲ ﻧﺎﭘﺎﻳﺪﺍﺭ ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﻭ ﺗﻤﺎﻣﻲ ﺍﻋﻤﺎﻝ ﺍﻧﺠﺎﻡ‬
‫ﺷﺪﻩ ﺗﻮﺳﻂ ﺍﻳﻦ ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺴﺘﻲ ﻟﻐﻮ ﮔﺮﺩﺩ‪.‬‬

‫*ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺍﮔﺮ ﺗﺮﺍﻛﻨﺸﻲ ﺳﺎﻗﻂ ﺷﻮﺩ‪ ،‬ﻣﻲ ﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﻣﺠﺪﺩﺍً ﺁﻏﺎﺯ ﻛﺮﺩ ﻭ ﺍﮔﺮ ﺗﺮﺍﻛﻨﺸﻲ ﺁﻣﺎﺩﻩ‬
‫ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪ ،‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺎﺯ ﻫﻢ ﺳﻘﻮﻁ ﻛﻨﺪ‪.‬‬
‫ﺩﻭ ﺭﻭﺵ ﺑﺮﺍﻱ ‪ Abort‬ﻛﺮﺩﻥ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ‪:‬‬
‫‪ Restart .1‬ﻛﺮﺩﻥ‪ :‬ﺯﻣﺎﻧﻲ ﺍﺯ ﺍﻳﻦ ﺭﻭﺵ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺧﻄﺎﻱ ﻣﻨﻄﻘﻲ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪.‬‬

‫‪24‬‬
‫‪ Kill .2‬ﻛﺮﺩﻥ‪ :‬ﺯﻣﺎﻧﻲ ﺍﺯ ﺍﻳﻦ ﺭﻭﺵ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺧﻄﺎﻱ ﺳﻴﺴﺘﻤﻲ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪.‬‬

‫ﺷﻤﺎﻱ ‪: shadow data base‬‬

‫ﻓﺮﺽ ﺍﻭﻝ‪ :‬ﻛﻪ ﺩﺭ ﻫﺮ ﻟﺤﻈﻪ ﻓﻘﻂ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﺣﺎﻟﺖ ﺍﺟﺮﺍ ﺍﺳﺖ ‪.‬‬

‫ﻓﺮﺽ ﺩﻭﻡ ‪ :‬ﻳﻚ ﺍﺷﺎﺭﻩ ﮔﺮ ﺑﻪ ﻧﺎﻡ ‪ db-pointer‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺑﻪ ﺁﺧﺮﻳﻦ ﻛﭙﻲ ﺩﺭﺳﺖ ﺍﺯ ﭘﺎﻳﮕﺎﻩ‬
‫ﺩﺍﺩﻩ ﻛﻪ ﺩﺭ ﺣﺎﻟﺖ ﺳﺎﺯﮔﺎﺭﻱ ﺍﺳﺖ‪ ،‬ﺍﺷﺎﺭﻩ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫ﻗﺒﻞ ﺍﺯ ﺍﻳﻨﻜﻪ ﺑﺮﻭﺯ ﺭﺳﺎﻧﻲ ﺍﻧﺠﺎﻡ ﺷﻮﺩ ﻳﻚ ﻛﭙﻲ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ﻣﻮﺟﻮﺩ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ‬
‫ﻭ ‪ db-pointer‬ﺑﻪ ﺍﻳﻦ ﻛﭙﻲ ﺍﺷﺎﺭﻩ ﻣﻲ ﻛﻨﺪ ‪ .‬ﺁﻧﺮﺍ ‪ shadow‬ﻣﻲ ﻧﺎﻣﻴﻢ ‪ .‬ﺑﻌﺪ ﺍﺯ ﺍﺗﻤﺎﻡ ﺗﺮﺍﻛﻨﺶ‬
‫ﺗﻐﻴﻴﺮﺍﺕ ﺭﺍ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﻋﻤﺎﻝ ﻣﻲ ﺷﻮﺩ ﻭ ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ﺩﻳﮕﺮﻱ ﺑﻌﺪ ﺍﺯ ﺁﻥ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪ ،‬ﻣﺠﺪﺩﺍ ﺍﺯ‬
‫ﺁﺧﺮﻳﻦ ﺣﺎﻟﺖ ﺳﺎﺯﮔﺎﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻳﻚ ﻛﭙﻲ ﺟﺪﻳﺪ ﮔﺮﻓﺘﻪ ﻭ ﺩﺭ‪ shadow‬ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ‪ .‬ﻫﻤﻪ ﻱ‬
‫ﺑﺮﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ ﺑﺮﻭﻱ ‪ shadow copy‬ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﻧﺪ ﻭ ﺍﺷﺎﺭﻩ ﮔﺮ ‪ db-pointer‬ﺑﻪ‬
‫‪ shadow copy‬ﺍﻱ ﻛﻪ ﺑﻪ ﻣﺮﺣﻠﻪ ‪ partially committed‬ﺭﺳﻴﺪﻩ ﺍﺳﺖ ﺍﺷﺎﺭﻩ ﻣﻲ ﻛﻨﺪ ‪.‬‬
‫ﻫﻤﻪ ﻱ ﺍﻳﻦ ﺗﻐﻴﻴﺮﺍﺕ ﺩﺭ ﻧﻬﺎﻳﺖ ﭘﺲ ﺍﺯ ﺍﺗﻤﺎﻡ ﺗﺮﺍﻛﻨﺶ ﺭﻭﻱ ﺩﻳﺴﻚ ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬

‫ﻧﻜﺘﻪ‪ :‬ﺍﻳﻦ ﺭﻭﺵ ﺑﺪﻟﻴﻞ ﺍﻳﻨﻜﻪ ﺗﻌﺪﺍﺩ ﺯﻱﺍﺩﻱ ﻛﭙﻲ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺭﻭﺵ ﻛﺎﺭﺁﻣﺪ ﻭ ﻣﻔﻴﺪﻱ ﻧﻴﺴﺖ ‪.‬‬

‫ﺍﺟﺮﺍﻫﺎﻱ ﻫﻤﺮﻭﻧﺪ )ﻫﻤﺰﻣﺎﻥ(‪ :‬ﺩﺭ ﺍﻳﻦ ﻣﺪﻝ ‪ ،‬ﭼﻨﺪ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﻳﻚ ﺳﻴﺴﺘﻢ ﺍﺟﺎﺯﻩ ﺩﺍﺭﻧﺪ ﺑﻪ‬
‫ﻃﻮﺭ ﻫﻤﺰﻣﺎﻥ )ﺩﺭ ﻳﻚ ﻟﺤﻈﻪ( ﺍﺟﺮﺍ ﺷﻮﻧﺪ‪.‬‬

‫ﻣﺰﺍﻳﺎﻱ ﺍﻳﻦ ﻣﺪﻝ‪:‬‬

‫‪25‬‬
‫‪ .1‬ﺍﻓﺰﺍﻳﺶ ﭘﺮﺩﺍﺯﺷﮕﺮ ﻭ ﺑﻬﺮﻩ ﻭﺭﻱ ﺍﺯ ﺩﻳﺴﻚ‪ :‬ﺍﻳﻦ ﺑﻬﺮﻩ ﻭﺭﻱ ﺑﻪ ﻣﻌﻨﺎﻱ ﺑﺎﻻ ﺑﺮﺩﻥ ﺗﻮﺍﻥ‬
‫ﻋﻤﻠﻴﺎﺗﻲ ﺗﺮﺍﻛﻨﺶ ﺍﺳﺖ‪ .‬ﻳﻌﻨﻲ ﺗﺮﺍﻛﻨﺶ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺯ ﻭﺍﺣﺪ ﭘﺮﺩﺍﺯﺷﮕﺮ ﻣﺮﻛﺰﻱ ﺩﺭ‬
‫ﺩﻳﺴﻚ ﻭ ﻳﺎ ﻧﻮﺷﺘﻦ ﺑﺮﻭﻱ‬ ‫ﻟﺤﻈﻪ ﺍﻱ ﻛﻪ ﺳﺎﻳﺮ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺩﺭ ﺣﺎﻝ ﺧﻮﺍﻧﺪﻥ ﺍﺯ‬
‫ﺩﻳﺴﻚ ﻣﻲ ﺑﺎﺷﻨﺪ‪ ،‬ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﺪ‪.‬‬
‫‪ .2‬ﻛﺎﻫﺶ ﺯﻣﺎﻥ ﭘﺎﺳﺦ ‪ :‬ﺑﻪ ﺍﻳﻦ ﻣﻌﻨﺎ ﺳﺖ ﻛﻪ ﻧﻴﺎﺯﻱ ﻧﻴﺴﺖ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻛﻮﭼﻚ ﺑﺮﺍﻱ‬
‫ﺍﺟﺮﺍ ﺷﺪﻥ ﺯﻣﺎﻥ ﻃﻮﻻﻧﻲ ﺭﺍ ﻣﻨﺘﻈﺮ ﺑﻤﺎﻧﻨﺪ‪.‬‬

‫ﻋﻴﺐ ﺍﻳﻦ ﺭﻭﺵ‪ :‬ﻭﺟﻮﺩ ﺑﺮﺧﻮﺭﺩ ﻫﺎﻱ ﺯﻳﺎﺩ ﺍﻳﺮﺍﺩ ﺍﻳﻦ ﻣﺪﻝ ﺍﺳﺖ ﻛﻪ ﺑﺎﻳﺪ ﻛﻨﺘﺮﻝ ﺷﻮﻧﺪ‪.‬‬

‫ﺯﻣﺎﻧﺒﻨﺪﻫﺎ )‪:(Schedules‬‬
‫ﺯﻣﺎﻧﺒﻨﺪ ﻳﻚ ﺗﻮﺍﻟﻲ ﺍﺯ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ﻫﺎﺳﺖ ﻛﻪ ﺗﺮﺗﻴﺐ ﻭﻗﻮﻉ )ﺍﺯ ﻧﻈﺮ ﺯﻣﺎﻧﻲ ( ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ﻫﺎﻱ ﺗﺮﺍﻛﻨﺶ‬
‫ﻫﺎﻱ ﻫﻤﺮﻭﻧﺪ ﺍﺟﺮﺍ ﺷﺪﻩ ﺭﺍ ﺗﻌﺮﻳﻒ ﻭ ﻣﺸﺨﺺ ﻣﻲ ﻧﻤﺎﻳﺪ ‪ .‬ﻳﻚ ﺯﻣﺎﻧﺒﻨﺪ ﺑﺮﺍﻱ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺍﺯ ﺗﺮﺍﻛﻨﺶ‬
‫ﻫﺎ ﺑﺎﻳﺪ ﺷﺎﻣﻞ ﻫﻤﻪ ﻱ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ﻫﺎﻱ ﺁﻥ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﺎﺷﺪ ‪ .‬ﻫﻤﭽﻨﻴﻦ ﻳﻚ ﺯﻣﺎﻧﺒﻨﺪ ﺑﺎﻳﺪ ﺗﺮﺗﻴﺐ‬
‫ﺯﻣﺎﻧﻲ ﺩﺳﺘﻮﺍﻟﻌﻤﻞ ﻫﺎﻳﻲ ﺭﺍ ﻛﻪ ﺩﺭ ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﻇﺎﻫﺮ ﺷﺪﻩ ﺭﺍ ﺣﻔﻆ ﻭ ﻧﮕﻬﺪﺍﺭﻱ ﻛﻨﺪ ‪.‬‬
‫ﺍﺟﺮﺍﻱ ﻫﻤﺮﻭﻧﺪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺭﺍ ﺩﺭ ﻗﺎﻟﺐ ﺳﺎﺧﺘﺎﺭﻱ ﺑﻪ ﻧﺎﻡ ﺯﻣﺎﻧﺒﻨﺪ )‪ (Schedule‬ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫ﺩﺭ ﻳﻚ ﺯﻣﺎﻧﺒﻨﺪ ﻣﻲ ﺗﻮﺍﻥ ﺗﺮﺍﻛﻨﺸﻲ ﺭﺍ ﻣﻨﺘﻈﺮ ﺗﺮﺍﻛﻨﺶ ﺩﻳﮕﺮﻱ ﮔﺬﺍﺷﺖ ﻳﺎ ﻣﻲ ﺗﻮﺍﻥ ﺍﺟﺮﺍﻱ ﻳﻚ‬
‫ﺗﺮﺍﻛﻨﺶ ﺭﺍ ﺑﻪ ﺗﻌﻮﻳﻖ ﺍﻧﺪﺍﺧﺖ‪ .‬ﺍﻣﺎ ﺩﺭﻭﻥ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻧﻤﻲ ﺗﻮﺍﻥ ﺩﺳﺘﻮﺭﻫﺎ ﺭﺍ ﺟﺎﺑﻪ ﺟﺎ ﻛﺮﺩ ﺑﻪ ﺩﻟﻴﻞ‬
‫ﺍﻳﻨﻜﻪ ﻣﻨﻄﻖ ﺁﻥ ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﻫﻢ ﻣﻲ ﺭﻳﺰﺩ‪.‬‬
‫ﻣﻲ ﺩﺍﻧﻴﻢ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺍﮔﺮ ﺧﺎﺻﻴﺖ ‪ ACID‬ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻧﺘﻴﺠﻪ ﺍﺵ ﺩﺭﺳﺖ ﺍﺳﺖ ﻭ ﻧﻴﺰ ﺍﮔﺮ ﭼﻨﺪ‬
‫ﺗﺮﺍﻛﻨﺶ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﻛﻪ ﺳﺮﻳﺎﻟﻲ ﺑﺎﺷﻨﺪ‪ ،‬ﺍﻳﻦ ﺯﻣﺎﻧﺒﻨﺪ ﻛﻪ ﺑﻪ ﺁﻥ ﺯﻣﺎﻧﺒﻨﺪ ﺳﺮﻳﺎﻟﻲ ﻣﻲ ﮔﻮﻳﻴﻢ ﻧﻴﺰ‬
‫ﻧﺘﻴﺠﻪ ﺍﺵ ﺩﺭﺳﺖ ﺍﺳﺖ‪.‬‬
‫ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﻳﻌﻨﻲ ﻣﻌﺎﺩﻝ ﺳﺮﻳﺎﻟﻲ‪ ،‬ﻳﻌﻨﻲ ﺍﮔﺮ ﺯﻣﺎﻧﺒﻨﺪﻱ ﻫﺎﻱ ﻫﻤﺮﻭﻧﺪﻱ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﻛﻪ ﺳﺮﻳﺎﻝ‬
‫ﻧﻴﺴﺘﻨﺪ ﺍﻣﺎ ﻣﻌﺎﺩﻝ ﺳﺮﻳﺎﻟﻲ ﻩ ﺳﺘﻨﺪ‪ ،‬ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻧﺘﻴﺠﻪ ﻛﺎﺭ ﺩﺭﺳﺖ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ‪.‬‬
‫‪:Schedule 1‬‬
‫ﻓﺮﺽ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﻭﻇﻴﻔﻪ ﻱ ﺗﺮﺍﻛﻨﺶ ‪ T1‬ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ‪ 50‬ﺩﻻﺭ ﺍﺯ ﺣﺴﺎﺏ ‪ A‬ﺑﻪ ﺣﺴﺎﺏ ‪ B‬ﺍﻧﺘﻘﺎﻝ‬
‫ﺩﻫﺪ‪ ،‬ﻭ ﻭﻇﻴﻔﻪ ﻱ ﺗﺮﺍﻛﻨﺶ ‪ T2‬ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺍﺯ ‪10‬ﺩﺭﺻﺪ ﺍﺯ ﺣﺴﺎﺏ ‪ A‬ﺭﺍ ﺑﻪ ﺣﺴﺎﺏ ‪ B‬ﺍﻧﺘﻘﺎﻝ ﺩﻫﺪ ‪.‬‬
‫ﺍﻳﻦ ﺯﻣﺎﻧﺒﻨﺪ ﺳﺮﻳﺎﻝ ﺍﺳﺖ ﺯﻳﺮﺍ ‪ T2‬ﺑﻌﺪ ﺍﺯ ﺍﺗﻤﺎﻡ ﻛﺎﻣﻞ ‪ T1‬ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫‪26‬‬
‫‪:Schedule 2‬‬

‫ﺍﻳﻦ ﺯﻣﺎﻧﺒﻨﺪ ﻧﻴﺰ ﺳﺮﻳﺎﻝ ﺍﺳﺖ ﻭ ﺗﻔﺎﻭﺗﺶ ﺑﺎ ‪ schedule1‬ﺩﺭ ﺗﻮﺍﻟﻲ ﺍﺟﺮﺍ ﺍﺳﺖ ‪ .‬ﻳﻌﻨﻲ ﺍﺑﺘﺪﺍ ‪ T2‬ﻛﺎﻣﻼ‬
‫ﺍﺟﺮﺍ ﻭ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﻳﻪ ﺍﺗﻤﺎﻡ ﺭﺳﻴﺪﻩ ﺳﭙﺲ ‪ T1‬ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪:Schedule 3‬‬

‫ﺍﻳﻦ ﺯﻣﺎﻧﺒﻨﺪ ﺳﺮﻳﺎﻝ ﻧﻴﺴﺖ ﻭﻟﻲ ﻧﺘﻴﺠﻪ ﺁﻥ ﻫﻴﭻ ﺗﻔﺎﻭﺗﻲ ﺑﺎ ﻧﺘﻴﺠﻪ ‪ Schedule1‬ﻧﺪﺍﺭﺩ‪ .‬ﺍﮔﺮ ‪ A+B‬ﺩﺭ‬
‫ﺍﺑﺘﺪﺍ ﻭ ﺍﻧﺘﻬﺎ ﺗﻔﺎﻭﺕ ﻛﻨﺪ ﺳﺎﺯﮔﺎﺭﻱ ﺍﺯ ﺑﻴﻦ ﻣﻲ ﺭﻭﺩ )ﺩﺭ ﻭﺍﻗﻊ ﺑﺎ ﺍﻳﻨﻜﻪ ﺯﻣﺎﻧﺒﻨﺪ ﺳﺮﻳﺎﻝ ﻧﻴﺴﺖ ﺍﻣﺎ ﻣﻌﺎﺩﻝ‬
‫ﻳﻚ ﺯﻣﺎﻧﺒﻨﺪ ﺳﺮﻳﺎﻝ ﻋﻤﻞ ﻣﻲ ﻛﻨﺪ(‪.‬‬

‫‪27‬‬
‫‪:Schedule 4‬‬
‫ﺩﺭ ﺍﻳﻦ ﺯﻣﺎﻧﺒﻨﺪ ﻣﻘﺪﺍﺭ ‪ A+B‬ﺭﺍ ﺣﻔﻆ ﻧﻤﻲ ﺷﻮﺩ ﻳﻌﻨﻲ ﺍﺑﺘﺪﺍ ﻭ ﺍﻧﺘﻬﺎﻱ ﺯﻣﺎﻧﺒﻨﺪﻫﺎﻱ ‪T1‬ﻭ ‪ ،T2‬ﻣﻘﺪﺍﺭ‬
‫‪ A‬ﺩﺭ‬ ‫‪ A+B‬ﻳﻜﺴﺎﻥ ﻧﻴﺴﺖ ‪ .‬ﭼﻮﻥ ﺩﺳﺘﻮﺭ )‪ write(A‬ﺩﺭ ﺑﺎﻻ ﺯﻣﺎﻧﺒﻨﺪ ‪ T1‬ﻧﻴﺎﻣﺪﻩ ﻭ ﻣﻘﺪﺍﺭ‬
‫‪ Shadow‬ﺛﺒﺖ ﻧﻤﻲ ﺷﻮﺩ ﻳﻌﻨﻲ ﻣﻘﺪﺍﺭ ‪ A‬ﻫﻤﺎﻥ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﻧﻜﺘﻪ‪:‬‬

‫‪28‬‬
‫ﺩﻭ ﺭﻭﺵ ﺍﺻﻠﻲ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮﻱ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ‪:‬‬
‫‪ - 1‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺑﺮﺧﻮﺭﺩ ﻳﺎ ‪(Conflict Serializability) CSR‬‬
‫‪ - 2‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺩﻳﺪ ﻳﺎ ‪(View Serializability) VSR‬‬
‫ﺑﺮﺧﻮﺭﺩ )‪(Conflict‬‬
‫ﭼﻨﺎﻧﭽﻪ ‪ qj ,pi‬ﺑﻪ ﺗﺮﺗﻴﺐ ﺩﺳﺘﻮﺭﺍﺕ ﺗﺮﺍﻛﻨﺸﻬﺎﻱ ‪ tj ,ti‬ﺑﺎﺷﻨﺪ‪ ،‬ﮔﻮﻳﻴﻢ ‪ qj ,pi‬ﺑﺎ ﻫﻢ ﺑﺮﺧﻮﺭﺩ ﺩﺍﺭﻧﺪ‬
‫ﺍﮔﺮ ﻭ ﺗﻨﻬﺎ ﺍﮔﺮ‪:‬‬
‫‪ .1‬ﺍﻳﻦ ﺩﻭ ﻋﻤﻠﮕﺮ ﻣﺮﺑﻮﻁ ﺑﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻣﺘﻤﺎﻳﺰ ﺑﺎﺷﻨﺪ ) ‪ ti‬ﻧﺎﻣﺴﺎﻭﻱ ‪( tj‬‬
‫‪ .2‬ﻫﺮ ﺩﻭ ﻋﻤﻠﮕﺮ ﺑﻪ ﻳﻚ ﺩﺍﺩﻩ ﺩﺳﺘﺮﺳﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪.‬‬
‫‪ .3‬ﺣﺪﺍﻗﻞ ﻳﻜﻲ ﺍﺯ ﺍﻳﻦ ﺩﻭ ﻋﻤﻠﮕﺮ‪ ،‬ﻋﻤﻠﮕﺮ ﻧﻮﺷﺘﻦ ))(‪(write‬ﺑﺎﺷﺪ‪.‬‬

‫ﺯﻣﺎﻧﺒﻨﺪ ﻣﻌﺎﺩﻝ ﺩﺭ ﺑﺮﺧﻮﺭﺩ )‪(conflict equivalent‬‬

‫‪29‬‬
‫ﺯﻣﺎﻧﺒﻨﺪﻫﺎﻱ '‪ s‬ﻭ‪ s‬ﻣﻌﺎﺩﻝ ﺩﺭ ﺑﺮﺧﻮﺭﺩ ﻫﺴﺘﻨﺪ‪ ،‬ﺍﮔﺮ ﻫﺮ ﺩﻭ ﺭﻭﻱ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﻭ ﺗﺮﺍﻛﻨﺶ‬
‫ﻫﺎ ﻛﺎﺭ ﻛﻨﻨﺪ ﻭ ﺑﺎ ﺟﺎﺑﺠﺎ ﻛﺮﺩﻥ ﺩﺳﺘﻮﺭﺍﺕ ﺑﺪﻭﻥ ﺑﺮﺧﻮﺭﺩ ﺩﺭ ﺯﻣﺎﻧﺒﻨﺪ ‪ ،s‬ﺑﺘﻮﺍﻧﻴﻢ ﺯﻣﺎﻧﺒﻨﺪ'‪ s‬ﺭﺍ ﺗﻮﻟﻴﺪ ﻛﻨﻴﻢ‬
‫‪.‬‬
‫ﻧﻜﺘﻪ ﻣﻬﻢ‪ :‬ﺑﻪ ﻫﻴﭻ ﻋﻨﻮﺍﻥ ﻧﻤﻲ ﺗﻮﺍﻧﻴﻢ ﺗﺮﺗﻴﺐ ﺩﺳﺘﻮﺭﺍﺕ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺭﺍ ﻋﻮﺽ ﻛﻨﻴﻢ ﭼﻮﻥ ﻣﻨﻄﻖ ﺁﻥ‬
‫ﺗﺮﺍﻛﻨﺶ ﻋﻮﺽ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺗﻌﺮﻳﻒ‪ :‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮﻱ ﺩﺭ ﺑﺮﺧﻮﺭﺩ‬


‫ﺍﮔﺮ ﺩﺳﺘﻮﺭﺍﺕ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﻣﺮﺑﻮﻁ ﺑﻪ ﺗﺮﺍﻛﻨﺶ ﻩ ﺍﻱ ﻣﺨﺘﻠﻒ ﺑﻪ ﺻﻮﺭﺕ ﻫﻤﺮﻭﻧﺪ ﺍﺟﺮﺍ ﺷﻮﻧﺪ‪ ،‬ﺑﻌﻀﺎً‬
‫ﺑﺎ ﻫﻢ ﺑﺮﺧﻮﺭﺩ ﺩﺍﺭﻧﺪ ﻭ ﺑﻌﻀﺎً ﻧﺪﺍﺭﻧﺪ‪ .‬ﺑﺮﺧﻮﺭﺩ ﺩﺍﺷﺘﻦ ﻳﻌﻨﻲ ﺗﺎﺛﻴﺮ ﻣﺨﺮﺏ ﺭﻭﻱ ﻫﻢ ﮔﺬﺍﺷﺘﻦ ‪ .‬ﻣﺎ‬
‫ﺩﺳﺘﻮﺭﺍﺗﻲ ﺭﺍ ﻛﻪ ﺑﺎ ﻫﻢ ﺑﺮﺧﻮﺭﺩ ﻧﺪﺍﺭﻧﺪ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﻫﻤﺮﻭﻧﺪ ﺍﺟﺮﺍ ﻛﻨﻴﻢ ﻭ ﺁﻧﻬﺎﻳﻲ ﺭﺍ ﺑﺮﺧﻮﺭﺩ ﺩﺍﺭﻧﺪ‪ ،‬ﺑﺎﻳﺪ‬
‫ﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻳﺎﻟﻲ ﺍﺟﺮﺍ ﻛﻨﻴﻢ‪.‬‬

‫ﺗﺸﺨﻴﺺ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮﻱ ﺩﺭ ﺑﺮﺧﻮﺭﺩ )‪:(Conflict Serializability‬‬

‫ﺩﺭ ﻣﻔﻬﻮﻡ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮﻱ ﺩﺭ ﺑﺮﺧﻮﺭﺩ ﺍﮔﺮ ﺯﻣﺎﻧﺒﻨﺪﻱ ﺑﺎ ‪ n‬ﺗﺮﺍﻛﻨﺶ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ‪ ،‬ﺩﺳﺘﻮﺭﻫﺎﻱ ﺑﺪﻭﻥ‬
‫ﺑﺮﺧﻮﺭﺩ ﺭﺍ ﺁﻥ ﻗﺪﺭ ﺟﺎﺑﺠﺎ ﻣﻴﻜﻨﻴﻢ ﺗﺎ ﺑﺒﻴﻨﻴﻢ ﺑﻪ ﻳﻚ ﺗﺮﻛﻴﺐ ﺳﺮﻳﺎﻟﻲ ﻣﻲ ﺭﺳﻴﻢ ﻳﺎ ﻧﻪ ‪ .‬ﺍﻳﻦ ﻛﺎﺭ ﺑﺴﻴﺎﺭ‬
‫ﺯﻣﺎﻧﺒﺮ ﺍﺳﺖ ﺯﻳﺮﺍ ﺯﻣﺎﻧﺒﻨﺪﻫﺎ ﻧﻮﻋﺎ ﺍﺯ ﺗﻌﺪﺍﺩ ﺯﻳﺎﺩﻱ ﺗﺮﺍﻛﻨﺶ ﺗﺸﻜﻴﻞ ﺷﺪﻩ ﺍﻧﺪ ﻛﻪ ﺩﺳﺘﻮﺭﺍﺕ ﮔﻮﻧﺎﮔﻮﻥ‬
‫ﺧﻮﺩ ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻣﻲ ﻛﻨﻨﺪ ‪ .‬ﺧﻮﺷﺒﺨﺘﺎﻧﻪ ﺭﺍﻩ ﺣﻞ ﺑﺴﻴﺎﺭ ﺳﺎﺩﻩ ﺍﻱ ﺑﺮﺍﻱ ﺍﻳﻦ ﻣﺴﺌﻠﻪ ﭘﻴﺪﺍ ﺷﺪﻩ ﻛﻪ ﺁﻥ ﺭﺍ‬
‫ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬

‫ﮔﺮﺍﻑ ﺍﻭﻟﻮﻳﺖ ﺩﺍﺭ )‪:(Serializability Graph‬‬

‫ﺭﺍﺱ ﻫﺎﻱ ﺍﻳﻦ ﮔﺮﺍﻑ ﻫﻤﺎﻥ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻓﻌﺎﻝ ﺩﺭ ﺳﻴﺴﺘﻢ ﻫﺴﺘﻨﺪ ﻭ ﻳﺎﻟﻬﺎﻱ ﺁﻥ ﺟﻬﺖ ﺩﺍﺭ ﻣﻲ ﺑﺎﺷﻨﺪ ‪.‬‬
‫ﭘﺲ ﺍﻳﻦ ﮔﺮﺍﻑ‪ ،‬ﻳﻚ ﮔﺮﺍﻑ ﺟﻬﺖ ﺩﺍﺭ ﺍﺳﺖ ﻛﻪ ﺭﺍﺱ ﻫﺎﻱ ﺁﻥ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎﺳﺖ ﻭ ﻛﻤﺎﻥ‬
‫ﻫﺎﻱ ﺁﻥ ﺑﺮﺧﻮﺭﺩﻫﺎﻱ ﺑﻴﻦ ﺗﺮﺍﻛﻨﺸﻬﺎﺳﺖ ﻭ ﻟﻴﺒﻞ )‪ (Label‬ﻛﻤﺎﻥ ﻫﺎﻱ ﺟﻬﺖ ﺩﺍﺭ‪ ،‬ﺩﻳﺘﺎﺁﻳﺘﻢ ﺍﻱ ﺍﺳﺖ‬
‫ﻛﻪ ﺭﻭﻱ ﺁﻥ ﺑﺮﺧﻮﺭﺩ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪30‬‬
‫ﮔﺮﺍﻑ ﻫﺎ ﺑﻪ ﻃﻮﺭ ﻣﺮﺗﺐ ﺗﻐﻴﻴﺮ ﻣﻲ ﻛﻨﻨﺪ؛ ﻳﻌﻨﻲ ﺑﻪ ﻣﺤﺾ ﺍﻳﻨﻜﻪ ﻳﻚ ﺩﺳﺘﻮﺭ ﺧﻮﺍﻧﺪﻥ ﻭ ﻳﺎ ﻧﻮﺷﺘﻦ‬
‫ﻭﺍﺭﺩﺳﻴﺴﺘﻢ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻣﻤﻜﻦ ﺍﺳﺖ ﻳﻚ ﻳﺎﻝ ﺭﺍ ﺑﻪ ﮔﺮﺍﻑ ﺍﺿﺎﻓﻪ ﻛﻨﺪ ﻭ ﺯﻣﺎﻧﻲ ﻛﻪ ﺗﺮﺍﻛﻨﺸﻲ ﺳﺎﻗﻂ ﻭ ﻳﺎ‬
‫ﺗﺜﺒﻴﺖ ﺷﺪﻩ ﻭ ﺍﺯ ﺳﻴﺴﺘﻢ ﺧﺎﺭﺝ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻳﺎﻝ ﻫﺎﻳﻲ ﻭ ﻧﻴﺰ ﮔﺮﻩ ﺍﻱ ﺍﺯ ﮔﺮﺍﻑ ﺣﺬﻑ ﺧﻮﺍﻫﺪ ﺷﺪ‪.‬‬

‫‪x‬‬

‫‪y‬‬
‫ﻫﺮﮔﺎﻩ ﺩﺭ ﮔﺮﺍﻑ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ‪ ،‬ﺣﻠﻘﻪ )‪ (Cycle‬ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﺁﻧﮕﺎﻩ ﺯﻣﺎﻧﺒﻨﺪﻱ ﺁﻥ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ‬
‫ﻧﻴﺴﺖ ﻭ ﺑﺎﻟﻌﻜﺲ‪.‬‬

‫ﻣﺜﺎﻝ‪ :‬ﻛﻤﺎﻧﻲ ﺍﺯ ‪ T1‬ﺑﻪ ‪ T2‬ﺭﺳﻢ ﺷﺪﻩ ﺍﺳﺖ ﻳﻌﻨﻲ ﺍﻳﻦ ﺩﻭ ﺗﺮﺍﻛﻨﺶ ﺑﺎ ﻫﻢ ﺑﺮﺧﻮﺭﺩ ﺩﺍﺭﻧﺪ ﻣﺜﻼً ‪ T1‬ﻃﺒﻖ‬
‫ﺍﻳﻦ ﺷﻜﻞ ﺭﻭﻱ ﺩﻳﺘﺎﺁﻳﺘﻢ ‪ Y‬ﺑﺎ ‪ ، T2‬ﺑﺮﺧﻮﺭﺩ ﺩﺍﺭﻧﺪ‪.‬‬

‫‪31‬‬
‫ﺑﺮﺍﺳﺎﺱ ﮔﺮﺍﻑ ﻓﻮﻕ‪ ،‬ﺑﻪ ﺩﻭ ﺷﻜﻞ ﻣﻲ ﺗﻮﺍﻥ ﺗﺮﺗﻴﺐ ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻳﺎﻝ )ﻣﺘﻮﺍﻟﻲ(‬
‫ﻧﻮﺷﺖ‪:‬‬
‫)‪1‬‬ ‫‪T1 , T 2 , T 3 , T 4‬‬
‫)‪2‬‬ ‫‪T1 , T3 , T2 , T4‬‬

‫ﺯﻣﺎﻧﺒﻨﺪ ﻣﻌﺎﺩﻝ ﺩﺭ ﺩﻱﺩ )‪(view equivalent‬‬

‫ﺯﻣﺎﻧﺒﻨﺪﻫﺎﻱ ‪ s‬ﻭ`‪ s‬ﻣﻌﺎﺩﻝ ﺩﺭ ﺩﻳﺪ ﻫﺴﺘﻨﺪ ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻭ ﻣﺠﻤﻮﻋﻪ ﻋﻤﻠﮕﺮﻫﺎﻱ ‪ s‬ﻭ `‪ s‬ﻳﻜﺴﺎﻥ ﺑﺎﺷﺪ‬
‫ﻭ ﺳﻪ ﺷﺮﻁ ﺯﻳﺮ ﺑﺮﻗﺮﺍﺭ ﺑﺎﺷﺪ‪:‬‬

‫‪ (1‬ﺑﺮﺍﻱ ﻫﺮ ﺩﺍﺩﻩ ‪ ،Q‬ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ‪ Q‬ﺭﺍ ﺩﺭ ‪ s‬ﻣﻲ ﺧﻮﺍﻧﺪ‪ ،‬ﺁﻧﮕﺎﻩ ‪ Tj‬ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ‪Q‬‬
‫ﺭﺍ ﺩﺭ `‪ s‬ﻧﻴﺰ ﺑﺨﻮﺍﻧﺪ‪.‬‬
‫‪ (2‬ﺑﺮﺍﻱ ﻫﺮ ﺩﺍﺩﻩ ‪ Q‬ﺍﮔﺮ ‪ Ti‬ﺩﺭ ‪ s‬ﺩﺍﺩﻩ ‪ Q‬ﺭﺍ ﺍﺯ ‪ Tj‬ﻣﻲ ﺧﻮﺍﻧﺪ‪ ،‬ﺩﺭ`‪ s‬ﻧﻴﺰ ﺩﺍﺩﻩ ‪ Q‬ﺭﺍ ﺍﺯ ‪ Tj‬ﺑﺨﻮﺍﻧﺪ‪.‬‬
‫‪ (3‬ﺑﺮﺍﻱ ﻫﺮ ﺩﺍﺩﻩ ‪ ،Q‬ﺁﺧﺮﻳﻦ ﺗﺮ ﺍﻛﻨﺸﻲ ﺍﺯ ﺯﻣﺎﻧﺒﻨﺪ ‪ s‬ﻛﻪ ﺭﻭﻱ ‪ Q‬ﻣﻲ ﻧﻮﻳﺴﺪ‪ ،‬ﻫﻤﺎﻥ ﺗﺮﺍﻛﻨﺸﻲ‬
‫ﺑﺎﺷﺪ ﻛﻪ ﺩﺭ ﺯﻣﺎﻧﺒﻨﺪ `‪ s‬ﺁﺧﺮﻳﻦ ﺑﺎﺭ ﺭﻭﻱ ‪ Q‬ﻣﻲ ﻧﻮﻳﺴﺪ‪.‬‬

‫ﻭﻗﺘﻲ ﺍﺯ ﺩﻳﺪﮔﺎﻩ ﻳﻜﺴﺎﻧﻲ ﺑﻪ ﺍﻳﻦ ﺩﻭ ﺯﻣﺎﻧﺒﻨﺪ ﻧﮕﺎﻩ ﻛﻨﻴﻢ ﻭ ﺍﮔﺮ ﻳﻜﺴﺎﻥ ﺑﻮﺩﻧﺪ ﻣﻲ ﮔﻮﻳﻴﻢ ﻣﻌﺎﺩﻝ ﺩﺭ ﺩﻳﺪ‬
‫ﻫﺴﺘﻨﺪ‪.‬‬

‫ﺗﻌﺮﻳﻒ‪ :‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮﻱ ﺩﺭ ﺩﻳﺪ‬


‫ﺯﻣﺎﻧﺒﻨﺪ ‪ S‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺩﻳﺪ ﺍﺳﺖ ﺍﮔﺮ ﻣﻌﺎﺩﻝ ﺩﺭ ﺩﻳﺪ ﺑﺎ ﻳﻚ ﺯﻣﺎﻧﺒﻨﺪ ﺳﺮﻳﺎﻟﻲ ﺑﺎﺷﺪ ‪.‬‬
‫ﻣﺜﺎﻝ‪ :‬ﺁﻳﺎ ﺯﻣﺎﻧﺒﻨﺪ ﺯﻳﺮ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺑﺮﺧﻮﺭﺩ ﻣﻲ ﺑﺎﺷﺪ؟ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺩﻳﺪ ﭼﻄﻮﺭ؟‬

‫ﺣﻞ‪ :‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺑﺮﺧﻮﺭﺩ ﻧﻴﺴﺖ ﻭﻟﻲ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺩﻳﺪ ﻣﻲ ﺑﺎﺷﺪ ‪ .‬ﺑﺮﺍﻱ ﺗﺸﺨﻴﺺ ﺳﺮﻳﺎﻟﻲ‬
‫ﭘﺬﻳﺮ ﺑﻮﺩﻥ ﺩﺭ ﺩﻳﺪ‪ ،‬ﻓﻘﻂ ﻳﻚ ﺩﺍﺩﻩ ﺑﻪ ﻧﺎﻡ ‪ Q‬ﺩﺍﺭﻳﻢ ﻛﻪ‪:‬‬

‫‪32‬‬
‫‪ .1‬ﺩﺭ ﻫﺮ ﺩﻭ ﺯﻣﺎﻧﺒﻨﺪ‪ T3 ،‬ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ‪ Q‬ﺭﺍ ﻣﻲ ﺧﻮﺍﻧﺪ‪.‬‬
‫‪ .2‬ﻫﻴﭻ ﺗﺮﺍﻛﻨﺸﻲ ﻣﻘﺪﺍﺭﻱ ﺑﺮﺍﻱ ‪ Q‬ﺍﺯ ﺗﺮﺍﻛﻨﺸﻲ ﺩﻳﮕﺮ ﻧﻤﻲ ﺧﻮﺍﻧﺪ‪.‬‬
‫‪ .3‬ﺩﺭ ﻫﺮ ﺩﻭ ﺯﻣﺎﻧﺒﻨﺪ‪ ،‬ﺗﺮﺍﻛﻨﺶ ‪ T5‬ﺁﺧﺮﻳﻦ ﻋﻤﻞ ﻧﻮﺷﺘﻦ ﺭﻭﻱ ‪ Q‬ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ‪.‬‬
‫** ﭘﺲ ﺍﻳﻦ ﺯﻣﺎﻧﺒﻨﺪ ‪ CSR‬ﻧﻴﺴﺖ ﺍﻣﺎ ‪ VSR‬ﻫﺴﺖ **‬

‫ﻣﺤﺪﻭﺩﻩ ﻋﻤﻠﻜﺮﺩ ﺩﻭ ﺭﻭﺵ ﺍﺻﻠﻲ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮﻱ ‪:‬‬

‫ﻣﻔﻬﻮﻡ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ‪: SQL‬‬


‫ﺩﺭ ﺍﻳﻨﺠﺎ ﺗﺮﺍﻛﻨﺶ ﺑﺎ "‪ "begin‬ﺷﺮﻭﻉ ﻭ ﺑﺎ "‪ "end‬ﺷﺮﻭﻉ ﻣﻴﺸﻮﺩ‪ ،‬ﻋﻤﻞ "‪ "end‬ﻣﻴﺘﻮﺍﻧﺪ ﺑﻪ‬ ‫‪‬‬
‫ﺩﻭ ﺷﻜﻞ ﺯﻳﺮ ﺑﺎﺷﺪ‪:‬‬
‫‪Commit Work‬‬ ‫•‬
‫‪Rollback Work‬‬ ‫•‬
‫‪Undo .1‬‬
‫‪Redo .2‬‬
‫ﻣﺮﺍﺣﻞ ﺳﺎﺯﮔﺎﺭﻱ ﺩﺭ ‪:SQL‬‬ ‫‪‬‬
‫‪Serializable‬‬ ‫•‬
‫‪Repeatable read‬‬ ‫•‬
‫‪Read committed‬‬ ‫•‬
‫‪Read uncommitted‬‬ ‫•‬

‫ﺳﻄﻮﺡ ﺳﺎﺯﮔﺎﺭﻱ ﺩﺭ ‪: SQL-22‬‬


‫ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ‪ SQL‬ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺩﻳﺪ ﺳﺎﺯﮔﺎﺭ ﺑﻮﺩﻥ ﭼﻬﺎﺭ ﺣﺎﻟﺖ ﺑﺮﺍﻱ ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﻧﻈﺮ ﻣﻲ ‌ﮔﻴﺮﺩ‪:‬‬
‫‪33‬‬
‫‪ .1‬ﺳﺮﻳﺎﻟﻲ ﺑﻮﺩﻥ)‪ :(Serializabale‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻳﺎﻟﻲ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫‪ .2‬ﺧﻮﺍﻧﺪﻥ ﻫﺎﻱ ﻣﻜﺮّﺭ )‪ :(Repeatable Read‬ﻓﻘﻂ ﺭﻛﻮﺭﺩﻫﺎ ﻭ ﺍﻃﻼﻋﺎﺕﻱ ﻛﻪ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺑﻪ‬
‫ﺍﺗﻤﺎﻡ ﺭﺳﻴﺪﻩ ﺍﺳﺖ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﺧﻮﺍﻧﺪﻥ ﻫﺎﻱ ﻣﻜﺮﺭ ﺑﻌﺪ ﺍﺯ ﺁﻥ ﻫﻤﺎﻥ ﻣﻘﺪﺍﺭﻱ ﻛﻪ ﺍﻭﻝ‬
‫ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺍﺳﺖ ﺭﺍ ﺑﺮ ﻣﻲ ﮔﺮﺩﺍﻧﺪ‪.‬‬
‫‪ .3‬ﺧﻮﺍﻧﺪﻥ ﺭﻛﻮﺭﺩ ﭘﺬﻳﺮﻓﺘﻪ ﺷﺪﻩ )‪ :(Read Committed‬ﻳﻚ ﺭﻛﻮﺭﺩ ﻱ ﻛﻪ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺗﻤﺎﻡ‬
‫ﺷﺪﻩ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﺩ ﻭﻟﻲ ﻣﻘﺪﺍﺭ ﺑﻌﺪﻱ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺑﺮ ﺭﻭﻱ ﻫﻤﺎﻥ ﺭﻛﻮﺭﺩ ﻣﻤﻜﻦ ﺍﺳﺖ‬
‫ﻣﻘﺎﺩﻳﺮ ﻣﺨﺘﻠﻔﻲ ﺭﺍ ﺑﺮﮔﺮﺩﺍﻧﺪ‪.‬‬
‫‪ .4‬ﺧﻮﺍﻧﺪﻥ ﺭﻛﻮﺭﺩﻫﺎﻱ ﭘﺬﻳﺮﻓﺘﻪ ﻧﺸﺪﻩ )‪ :(Read Uncommitted‬ﺍﻳﻨﺠﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﺧﺘﻲ‬
‫ﺭﻛﻮﺭﺩﻫﺎﻳﻲ ﻛﻪ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺗﻤﺎﻡ ﻧﺸﺪﻩ ﻧﻴﺰ ﺧﻮﺍﻧﺪﻩ ﺷﻮﺩ ‪.‬‬

‫ﺳﻄﻮﺡ ﭘﺎﻳﻴﻦ ﺳﺎﺯﮔﺎﺭﻱ‪:‬‬


‫ﺩﺭ ﺣﺎﻻﺕ ﻣﺨﺘﻠﻒ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻛﻪ ﺳﺎﺯﮔﺎﺭﻱ ﺩﺭ ﺳﻄﺢ ﭘﺎﻳﻴﻦ ﺩﺍﺭﻧﺪ ﺍﻣﻜﺎﻥ ﺩﺍﺭﺩ ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﺑﻮﺟﻮﺩ ﺁﻳﺪ ‪.‬‬

‫‪ .‬ﺳﻄﻮﺡ ﺿﻌﻴﻒ‬ ‫ﺑﻌﻀﻲ ﻛﺎﺭﺑﺮﺩﻫﺎ ﺗﻤﺎﻳﻞ ﺑﺮ ﺍﻳﻦ ﺩﺍﺭﻧﺪ ﻛﻪ ﺩﺭ ﺳﻄﺢ ﺳﺎﺯﮔﺎﺭﻱ ﺿﻌﻴﻔﻲ ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ‬
‫ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﺍﺯ ﺯﻣﺎﻥ ﺑﻨﺪ ﻫﺎﻳﻲ ﻛﻪ ﺳﺮﻳﺎﻝ ﻧﻴﺴﺘﻨﺪ ﺑﻪ ﻭﺟﻮﺩ ﻣﻲ ﺁﻳﺪ‪.‬‬

‫ﻣﺎﻧﻨﺪ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﻓﻘﻂ ﺩﺳﺘﻮﺭﺍﺕ ﺧﻮﺍﻧﺪﻥ ﺩﺍﺭﺩ‪ ،‬ﻣﺎﻧﻨﺪ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﺩﺭ ﺁﻥ ﻣﻲ ﺧﻮﺍﻩ ﻳﻢ ﺑﺎﻻﻧﺲ ﻛﻠﻲ‬
‫ﻱ‪.‬‬
‫ﺍﺯ ﻫﻤﻪ ﻱ ﺣﺴﺎﺏ ﻫﺎﻳﻲ ﻛﻪ ﺩﺭ ﺑﺎﻧﻚ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﺭﺍ ﺑﺪﺳﺖ ﺁ ﺩ‬

‫" ﺍﻳﻦ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﺣﺘﻴﺎﺝ ﻧﺪﺍﺭﻧﺪ ﻛﻪ ﺩﺭ ﻣﻘﺎﺑﻞ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺩﻳﮕﺮ ﺳﺮﻳﺎﻝ ﺑﺎﺷﻨﺪ ‪ .‬ﺍﮔﺮ ﺳﺮﻳﺎﻝﻱ ﻧﺒﺎﺷﺪ‬
‫ﺳﺎﺯﮔﺎﺭﻱ ﺿﻌﻴﻒ ﻣﻲ‌ﺷﻮﺩ‪" .‬‬

‫ﺟﺎﻣﻌﻴﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺑﺎﻳﺪ ﺩﻭ ﺷﺮﻁ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪:‬‬


‫‪ .1‬ﺍﺯ ﻧﻈﺮ ﻛﻨﺘﺮﻝ ﻫﻤﺮﻭﻧﺪﻱ ﻣﺸﻜﻠﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪ .‬ﺍﺯ ﻃﺮﻓﻲ ﻧﻴﺰ ﻣﻲ ﺩﺍﻧﻴﻢ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮﻱ‬
‫ﻳﻜﻲ ﺍﺯ ﺭﻭﺵ ﻫﺎﻱ ﻛﻨﺘﺮﻝ ﻫﻤﺮﻭﻧﺪﻱ ﺍﺳﺖ ‪.‬‬
‫‪ .2‬ﺗﺮﻣﻴﻢ ﭘﺬﻳﺮ ﺑﺎﺷﺪ‪.‬‬

‫‪34‬‬
‫ﻧﻜﺘﻪ‪ :‬ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺧﺎﺻﻴ‪‬ﺖ ﻫﺎﻱ ﺍﺗﻮﻣﻴﻚ ﺑﻮﺩﻥ ﻭ ﭘﺎﻳﺪﺍﺭﻱ ﺗﻮﺳﻂ ﻣﻮﻟﻔﻪ ﺍﻱ ﺩﺭ ﻳﻚ ﺳﻴﺴﺘﻢ ﺑﺎﻧﻚ‬
‫ﺍﻃﻼﻋﺎﺗﻲ ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ ﻛﻪ ﻣﺪﻳﺮﻳﺖ ﺗﺮﻣﻴﻢ )‪ (Recovery management‬ﻧﺎﻡ ﺩﺍﺭﺩ‪.‬‬

‫ﺗﺮﻣﻴﻢ ﭘﺬﻳﺮﻱ‪:‬‬
‫ﺯﻣﺎﻧﺒﻨﺪﻱ ﺭﺍ ﺗﺮﻣﻴﻢ ﭘﺬﻳﺮ ﮔﻮﻳﻨﺪ ﻛﻪ ﺑﺮﺍﻱ ﺗﻤﺎﻡ ‪ Tj‬ﻫﺎ ﻛﻪ ﺍﺯ ‪ Ti‬ﻣﻲ ﺧﻮﺍﻧﻨﺪ‪ ،‬ﺗﺜﺒﻴﺖ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻗﺒﻞ ﺍﺯ‬
‫ﺗﺜﺒﻴﺖ ﺗﺮﺍﻛﻨﺶ ‪ Tj‬ﺻﻮﺭﺕ ﮔﻴﺮﺩ‪.‬‬

‫‪Ti‬‬ ‫‪Tj‬‬
‫)‪Read (Q‬‬

‫)‪Write (Q‬‬
‫‪commit‬‬
‫‪Commit‬‬

‫ﺍﻳﻦ ﺗﺮﺍﻛﻨﺶ ﻗﺎﺑﻞ ﺗﺮﻣﻴﻢ ﺍﺳﺖ ﭼﻮﻥ ﻋﻤﻞ ﺧﻮﺍﻧﺪﻥ ﺩﻳﺘﺎﺁﻳﺘﻢ ‪ Q‬ﺩﺭ ﺗﺮﺍﻛﻨﺶ ‪ Tj‬ﻗﺒﻞ ﺍﺯ ﻧﻮﺷﺘﻪ ﺷﺪﻥ‬
‫‪ Q‬ﺗﻮﺳﻂ ‪ Tj‬ﺍﻧﺠﺎﻡ ﻣﻲ ‌ﺷﻮﺩ ﻭ ﺍﺗﻤﺎﻡ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻗﺒﻞ ﺍﺯ ﺍﺗﻤﺎﻡ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ ﺗﺮﺍﻛﻨﺶ‬
‫‪ Tj‬ﺍﻧﺠﺎﻡ ﻣﻲ‌ﺷﻮﺩ‪.‬‬

‫ﺑﺮﮔﺸﺖ ﻫﺎﻱ ﺁﺑﺸﺎﺭﻱ )ﭘﺸﺖ ﺳﺮ ﻫﻢ (ﻳﺎ ‪: Cascading Rollbacks‬‬

‫ﺧﻄﺎﻱ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻣﻨﻔﺮﺩ ﺑﺎﻋﺚ ﺑﺮﮔﺸﺖ)‪ (Rollback‬ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﻲ ﺷﻮﺩ ‪.‬‬
‫ﺯﻣﺎﻧﺒﻨﺪ ﺯﻳﺮ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻛﻪ ﻫﻨﻮﺯ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺑﻪ ﺍﺗﻤﺎﻡ ﻧﺮﺳﻴﺪﻩ ﺍﺳﺖ ﺭﺍ ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﺪ ﺑﻨﺎﺑﺮﺍﻳﻦ‬
‫ﺯﻣﺎﻧﺒﻨﺪ ﻗﺎﺑﻞ ﺗﺮﻣﻴﻢ ﺍﺳﺖ‪.‬‬

‫ﺍﮔﺮ ﺩﺭ ‪ ،T10‬ﺧﻄﺎ ﺭﺥ ﺩﻫﺪ ‪ T11‬ﻭ ‪ T12‬ﺑﺎﻳﺪ ﺑﺮﮔﺸﺖ ﺩﺍﺩﻩ ﺷﻮﻧﺪ‪.‬‬

‫‪35‬‬
‫ﺍﻳﻦ ﺯﻣﺎﻧﺒﻨﺪ ﻛﺎﻣﻼً ﺳﺮﻳﺎﻝ ﺍﻧﺠﺎﻡ ﻣﻲ ‌ﺷﻮﺩ‪ .‬ﭼﻮﻥ ‪ T12, T11‬ﺩﻳﺘﺎﺁﻳﺘﻢ ‪ A‬ﺭﺍ ﺍﺯ ﺭﻭﻱ ﺩﻳﺴﻚ ﻣﻲ‌ﺧﻮﺍﻧﺪ ﻭ‬
‫ﭼﻮﻥ ‪ A‬ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﺍﺩﻩ ﻭ ﻫﻨﻮﺯ ﺭﻭﻱ ﺩﻳﺴﻚ ﻧﻮﺷﺘﻪ ﻧﺸﺪﻩ ﺑﺎﻳﺪ ﺑﺮﮔﺸﺖ ﻛﻨﺪ ﻭ ﻛﻪ ﺑﺎﻋﺚ ﺍﻳﺠﺎﺩ ﺑﺮﺧﻮﺭﺩ‬
‫ﺧﻮﺍﻫﺪ ﺷﺪ‪.‬‬

‫ﻣﻲﮔﺬﺍﺭﺩ ﻭ ﺑﻌﺪ ﺩﺭ ‪T10‬‬


‫‪ T10‬ﺩﻳﺘﺎﺁﻳﺘﻢ ﻫﺎﻱ ‪A‬ﻭ‪ B‬ﺭﺍ ﭘﺲ ﺍﺯ ﺧﻮﺍﻧﺪﻥ ﺍﺯ ﺭﻭﻱ ﺩﻳﺴﻚ ﺭﻭﻱ ‪‌ shadow‬‬
‫ﺭﻭﻱ ﻫﻤﺎﻥ ‪ shadow‬ﻋﻤﻞ ﻧﻮﺷﺘﻦ ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ ﻭ ﭘﺲ ﺍﺯ ﺍﺗﻤﺎﻡ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ ﺭﻭﻱ ﺩﻳﺴﻚ‬
‫ﻣﻲﻧﻮﻳﺴﺪ‪ .‬ﻋﻤﻞ ﺧﻮﺍﻧﺪﻥ ‪ A‬ﺩﺭ ‪ T11‬ﻭ ‪ T12‬ﺍﺯ ﺭﻭﻱ ﺩﻳﺴﻚ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﻧﻪ ﺍﺯ ﺭﻭﻱ ‪.shadow‬‬ ‫‌‬
‫ﭼﻮﻥ ﺭﺍﻳﺖ ‪ A‬ﺩﺭ ﺗﺮﺍﻛﻨﺶ ﻗﺒﻞ ﻫﻨﻮﺯ ﺭﻭﻱ ﺩﻳﺴﻚ ﻧﻮﺷﺘﻪ ﻧﺸﺪﻩ ﻣﺸﻜﻞ ﭘﻴﺶ ﻣﻲ ‌ﺁﻳﺪ‪ .‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ‬
‫‪ T11‬ﻭ ‪ T12‬ﺑﺎﻳﺪ ﺑﻪ ﺷﻜﻞ ﺁﺑﺸﺎﺭﻱ ﺑﺮﮔﺸﺖ ﻛﻨﺪ‪.‬‬

‫ﺯﻣﺎﻧﺒﻨﺪﻱ ﻏﻴﺮ ﺁﺑﺸﺎﺭﻱ ﻳﺎ ‪: Cascade less Schedules‬‬

‫ﺯﻣﺎﻥﺑﻨﺪﻱ ﻛﻪ ﻏﻴﺮﺁﺑﺸﺎﺭﻱ ﺍﺳﺖ ﻗﺎﺑﻞ ﺗﺮﻣﻴﻢ ﻣﻲ ﺑﺎﺷﺪ ‪ .‬ﻫﺪﻑ ﻧﻴﺰ ﻫﻤﻴﻦ ﺍﺳﺖ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﺭﺍ ﺩﻭﺑﺎﺭﻩ‬
‫‪ redo‬ﻧﻜﻨﻴﻢ ﻭ ‪ undo‬ﻭ ‪ redo‬ﻫﺎ ﺭﺍ ﻛﻤﺘﺮ ﻛﻨﻴﻢ ‪.‬ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺁﺑﺸﺎﺭﻱ ﺟﻠﻮﮔﻴﺮﻱ ﻛﻨﻴﻢ‬
‫)ﻭﺍﺑﺴﺘﮕﻲ ﺑﻴﻦ ﺗﺮﺍﻛﻨﺶ ‌ﻫﺎ ﺭﺍ ﻛﻢ ﻛﻨﻴﻢ (‪ .‬ﺗﻘﺮﻳﺒﺎً ﻏﻴﺮﺁﺑﺸﺎﺭﻱ ﺑﻮﺩﻥ ﻭ ﻗﺎﺑﻞ ﺗﺮﻣﻴﻢ ﺑﻮﺩﻥ ﺑﻪ ﻳﻚ ﻣﻌﻨﻲ‬
‫ﻣﻲﺑﺎﺵﻥﺩ ‪.‬‬
‫‌‬

‫ﻛﻨﺘﺮﻝ ﻫﻤﺮﻭﻧﺪﻱ‪:‬‬

‫ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎﻳﺪ ﻣﻜﺎﻧﻴﺰﻣﻲ ﺍﻳﺠﺎﺩ ﻛﻨﺪ ﻛﻪ ﻫﻤﻪ ﻱ ﺯﻣﺎﻧﺒﻨﺪﻫﺎ ‪:‬‬

‫ﺍﻟﻒ ‪ -‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺑﺮﺧﻮﺭﺩ ﻭ ﻳﺎ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺩﻳﺪ ﺑﺎﺷﺪ‪.‬‬

‫ﺏ – ﻗﺎﺑﻞ ﺗﺮﻣﻴﻢ ﻭ ﻏﻴﺮﺁﺑﺸﺎﺭﻱ ﺑﺎﺷﺪ‪ .‬ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺑﺮﺧﻮﺭﺩ ﻳﻌﻨﻲ ﺯﻣﺎﻧﺒﻨﺪﻱ ‌ﻫﺎ ﺑﺎ ﻭﺟﻮﺩ ﺍﻳﻨﻜﻪ‬
‫ﻫﻤﺮﻭﻧﺪ ﺍﻧﺠﺎﻡ ﻣﻲ ‌ﺷﻮﻧﺪ ﺳﺮﻳﺎﻟﻲ ﭘﺬﻳﺮ ﺩﺭ ﺩﻳﺪ ﺑﺎﺷﻨﺪ‪ .‬ﺍﮔﺮ ﻣﻜﺎﻧﻴﺰﻡ ﻫﺎﻳﻲ ﺑﺎ ﺯﻣﺎﻧﺒﻨﺪﻱ ﺳﻴﺎﻝ ﻭﻗﺎﺑﻞ‬

‫‪36‬‬
‫ﺗﺮﻣﻴﻢ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﺩﺭ ﻭﺍﻗﻊ ﻣﻲ ‌ﺗﻮﺍﻥ ﺑﺎ ﺍﻳﻦ ﻣﻜﺎﻧﻴﺰﻡ ﻫﺎ ﻛﻨﺘﺮﻝ ﻫﻤﺮﻭﻧﺪﻱ ﺍﻧﺠﺎﻡ ﺩﻫﻴﻢ ﻭ ﻫﻴﭻ‬
‫ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﻳﺠﺎﺩ ﻧﺸﻮﺩ‪ ،‬ﺍﻳﻦ ﺭﻭﺵ ﻳﻜﻲ ﺍﺯ ﺳﺎﺩﻩ ‌ﺗﺮﻳﻦ ﺭﻭﺵﻫﺎﻱ ﺳﻴﺎﻟﻲ ﺍﺳﺖ ﻛﻪ‬
‫ﻣﻲﺗﻮﺍﻧﻴﻢ ﺍﻧﺠﺎﻡ ﺩﻫﻴﻢ ﻛﻪ ﻫﻢ ﺳﺮﻳﺎﻝ ﻭ ﻫﻢ ﻗﺎﺑﻞ ﺗﺮﻣﻴﻢ ﺑﺎﺷﺪ ‪.‬‬
‫‌‬

‫ﻳﻚ ﺳﻴﺎﺳﺖ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﻓﻘﻂ ﺩﺭ ﻫﺮ ﻟﺤﻈﻪ ﺑﺘﻮﺍﻥ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﺷﻜﻞ ﺱﺭﻳﺎﻝ ﺍﺟﺮﺍ ﺷﻮﺩ ﻛﻪ ﺍﻟﺒﺘﻪ‬
‫ﺩﺭ ﻭﺍﻗﻊ ﺩﺭ ﺍﻳﻦﺻﻮﺭﺕ ﻫﻤﺮﻭﻧﺪﻱ ﻧﺪﺍﺭﻳﻢ ‪.‬‬

‫ﻣﺼﺎﻟﺤﻪ ﺑﻴﻦ ﻫﻤﺮﻭﻧﺪﻱ ﺑﻴﺸﺘﺮ ﻭ ﺗﺮﻣﻴﻢ ﻛﻤﺘﺮ‬


‫ﺩﺭ ﺯﻣﺎﻧﺒﻨﺪﻱ ﻫﻤﺮﻭﻧﺪ ﺗﺮﺍﻛﻨﺶﻫﺎ ﺩﻭ ﻫﺪﻑ ﺑﺎﻳﺪ ﻫﻤﺰﻣﺎﻥ ﻣﻮﺭﺩ ﺗﻮﺟﻪ ﻗﺮﺍﺭ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪:‬‬

‫)ﻣﺎﻛﺰﻳﻤﻢ ﻛﺮﺩﻥ‬ ‫‪- 1‬ﺣﺪﺍﻛﺜﺮ ﻛﺮﺩﻥ ﺗﻌﺪﺍﺩ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻛﻪ ﺑﻪ ﺻﻮﺭﺕ ﻫﻤﺰﻣﺎﻥ ﻓﻌﺎﻝ ﻫﺴﺘﻨﺪ‬
‫ﻫﻤﺮﻭﻧﺪ(‬
‫‪- 2‬ﺣﺪﺍﻗﻞ ﻛﺮﺩﻥ ﻧﻴﺎﺯ ﺑﻪ ﺗﺮﻣﻴﻢ‬

‫ﺍﻳﻦ ﺩﻭ ﻫﺪﻑ ﺑﺎ ﻫﻢ ﺩﺭ ﺗﻨﺎﻗﺾ ﻫﺴﺘﻨﺪ‪ ،‬ﺑﻪ ﻃﻮﺭﻱ ﻛﻪ ﻫﺮ ﭼﻪ ﺗﻌﺪﺍﺩ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻏﻴﺮﻓﻌﺎﻝ ﺑﻴﺸﺘﺮ‬
‫ﺷﻮﺩ‪ ،‬ﻣﻴﺰﺍﻥ ﻧﻴﺎﺯ ﺑﻪ ﺗﺮﻣﻴﻢ ﻧﻴﺰ ﺍﻓﺰﺍﻳﺶ ﻣﻲ ﻳﺎﺑﺪ ﻭ ﺑﺮﻋﻜﺲ ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺮﺍﻱ ﺑﺮﻃﺮﻑ ﻛﺮﺩﻥ ﺍﻳﻦ ﺗﻨﺎﻗﻀﺎﺕ‬
‫ﻧﻴﺎﺯ ﺑﻪ ﻧﻮﻋﻲ ﻣﺼﺎﻟﺤﻪ ‪ 1‬ﺑﻴﻦ ﺍﻳﻦ ﺩﻭ ﻫﺪﻑ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺍﻳﻦ ﻛﺎﺭ ﻣﺴﺘﻠﺰﻡ ﻫﻮﺷﻤﻨﺪﻱ ﺍﺳﺖ ‪.‬‬
‫‪F6‬‬

‫‪1‬‬
‫‪Tradeoff‬‬

‫‪37‬‬
‫ﻓﺼﻞ ‪:3‬‬
‫ﻣﺪﻳﺮﻳﺖ ﺗﺮﻣﻴﻢ‬

‫‪38‬‬
‫ﻣﻘﺪﻣﻪ‪:‬‬
‫ﺩﺭ ﻣﺪﻳﺮﻳﺖ ﺗﺮﺍﻛﻨﺶ ﻫﺎ‪،‬ﺍﻳﻦ ﺍﻣﻜﺎﻥ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺩﺭ ﻫﺮ ﻟﺤﻈﻪ ﺍﺯ ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ‪ ،‬ﻳﻚ ﺧﺮﺍﺑﻲ ﻳﺎ‬
‫ﺑﻲﻓﺘﺪ ﻭ ﺗﺮﺍﻛﻨﺶ ﻧﺘﻮﺍﻧﺪ ﺍﺩﺍﻣﻪ ﻳﺎﺑﺪ‪ .‬ﺑﻪ ﻋﺒﺎﺭﺗﻲ ﺑﺮﺧﻲ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﺁﻥ ﺍﺟﺮﺍ ﺷﺪﻩ‬‫ﺧﻄﺎ)‪ (failure‬ﺍﺗﻔﺎﻕ ﺍ‬
‫ﻭ ﺑﻘﻴﻪ ﺑﻪ ﺩﻟﻴﻞ ﻭﻗﻮﻉ ﺧﺮﺍﺑﻲ ﻣﺘﻮﻗﻒ ﺷﻮﻧﺪ‪ .‬ﻫﻤﭽﻨﻴﻦ ﺯﻣﺎﻧﻲ ﻛﻪ ﺗﺮﺍﻛﻨﺸﻲ ﺍﻧﺠﺎﻡ )‪ (commit‬ﻣﻲ‬
‫ﺑﻲﻓﺘﺪ ﻛﻪ ﺗﺄﺛﻴﺮ ﺁﻥ ﺭﺍ ﺍﺯ ﺑﻴﻦ ﺑﺒﺮﺩ‪.‬‬
‫ﺷﻮﺩ‪ ،‬ﺑﻌﺪﺍً ﺍﺗﻔﺎﻗﻲ ﺍ‬

‫ﺍﻧﻮﺍﻉ ﺧﺮﺍﺑﻲ )‪:(failure‬‬


‫ﺧﺮﺍﺑﻲ ﻫﺎﻳﻲ ﻛﻪ ﺩﺭ ﻳﻚ ﺳﻴﺴﺘﻢ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﺗﻔﺎﻕ ﺑﻴﺎﻓﺘﺪ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﺳﻪ ﺩﺳﺘﻪ‬
‫ﺗﻘﺴﻴﻢ ﺑﻨﺪﻱ ﻧﻤﻮﺩ‪:‬‬

‫‪ - 1‬ﺧﺮﺍﺑﻲ ﺗﺮﺍﻛﻨﺶ )‪(transaction failure‬‬

‫ﻣﻤﻜﻦ ﺍﺳﺖ ﺟﺎﻳﻲ ﺩﺭ ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ‪ ،‬ﻣﻨﻄﻖ ﺁﻥ ﺩﭼﺎﺭ ﺧﻄﺎ ﺷﻮﺩ ‪ .‬ﻟﺬﺍ ﺧﺮﺍﺑﻲ ﺗﺮﺍﻛﻨﺶ ﺷﺎﻣﻞ ﺩﻭ‬
‫ﻣﻮﺭﺩ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬

‫‪ ‬ﺧﻄﺎﻱ ﻣﻨﻄﻘﻲ‪ :‬ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﺩﻟﻴﻞ ﺷﺮﺍﻳﻂ ﺩﺍﺧﻠﻲ ﺧﻮﺩ ﻧﺘﻮﺍﻧﺪ ﻛﺎﻣﻞ ﺍﺟﺮﺍ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﺧﻄﺎﻱ ﺳﻴﺴﺘﻤﻲ‪ :‬ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﺧﻮﺩﻱ ﺧﻮﺩ ﺩﺭﺳﺖ ﻛﺎﺭ ﻣﻲ ﻛﻨﺪ ﺍﻣﺎ ﺩﺭ ﺳﻴﺴﺘﻢ ﺷﺮﺍﻳﻄﻲ ﭘﻴﺶ‬
‫ﻣﻲ ﺁﻳﺪ ﻛﻪ ﺍﻳﻦ ﺗﺮﺍﻛﻨﺶ ﺭﺍ ﺍﺯ ﻛﺎﺭ ﻣﻲ ﺍﻥﺩﺍﺯﺩ ‪ .‬ﻣﺎﻧﻨﺪ ﺑﻦ ﺑﺴﺖ‬
‫‪- 2‬ﺧﺮﺍﺑﻲ ﺳﻴﺴﺘﻢ )‪(system crash‬‬

‫ﺧﺮﺍﺑﻲ ﻫﺎﻱ ﺳﺨﺖ ﺍﻓﺰﺍﺭﻱ ﻳﺎ ﻧﺮﻡ ﺍﻓﺰﺍﺭﻱ ﻛﻪ ﺳﺒﺐ ﺍﺯ ﻛﺎﺭ ﺍﻓﺘﺎﺩﻥ ﺳﻴﺴﺘﻢ ﻣﻲ ﺷﻮﺩ ﻣﺎﻧﻨﺪ ﻗﻄﻊ‬
‫ﺑﺮﻕ‪ ،‬ﺩﺭ ﺍﻳﻦ ﻧﻮﻉ ﺧﺮﺍﺑﻲ ﻫﺎ ﺍﻃﻼﻋﺎﺕ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ﺳﻴﺴﺘﻢ ﺍﺯ ﺑﻴﻦ ﻣﻲ ﺭﻭﺩ ﻭﻟﻲ ﺁﺳﻴﺒﻲ ﺑﻪ‬
‫ﺍﻃﻼﻋﺎﺕ ﺭﻭﻱ ﺩﻳﺴﻚ ﻭﺍﺭﺩ ﻧﻤﻲ ﺷﻮﺩ‪.‬‬

‫‪- 3‬ﺧﺮﺍﺑﻲ ﺭﺳﺎﻧﻪ‬

‫‪39‬‬
‫ﺧﺮﺍﺑﻲ ﻛﻪ ﺳﺒﺐ ﺷﻮﺩ ﺍﻃﻼﻋﺎﺕ ﺭﻭﻱ ﺭﺳﺎﻧﻪ ﺍﺯ ﺑﻴﻦ ﺑﺮﻭﺩ ﻳﺎ ﻗﺎﺑﻞ ﺑﺎﺯﻳﺎﺑﻲ ﻧﺒﺎﺷﺪ‪ ،‬ﻣﺎﻧﻨﺪ ﺧﺮﺍﺑﻲ‬
‫ﺩﻳﺴﻚ ﻳﺎ ﺧﺮﺍﺑﻲ ﻫﺪ‪.‬‬

‫ﺍﻧﻮﺍﻉ ﺭﺳﺎﻧﻪ ﻫﺎﻱ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ‬


‫ﺍﺯ ﺟﻬﺖ ﻗﺎﺑﻠﻴﺖ ﻧﮕﻬﺪﺍﺭﻱ ﺍﻃﻼﻋﺎﺕ ﺩﺭ ﺻﻮﺭﺕ ﻭﻗﻮﻉ ﺧﺮﺍﺑﻲ‪ ،‬ﺭﺳﺎﻧﻪ ﻫﺎﻱ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﺑﻪ ﺳﻪ ﺩﺳﺘﻪ‬
‫ﺗﻘﺴﻴﻢ ﺑﻨﺪﻱ ﻣﻲ ﺷﻮﺩ‪:‬‬

‫‪ ‬ﺭﺳﺎﻧﻪ ﻫﺎﻱ ﻓﺮﺍﺭ )‪(volatile storage‬‬


‫ﺭﺳﺎﻧﻪ ﺍﻱ ﻛﻪ ﺩﺭ ﺻﻮﺭﺕ ﻭﻗﻮﻉ ﺧﺮﺍﺑﻲ ﺳﻴﺴﺘﻢ‪ ،‬ﺍﻃﻼﻋﺎﺕ ﺁﻥ ﺍﺯ ﺑﻴﻦ ﻣﻲ ﺭﻭﺩ‪ ،‬ﻣﺎﻧﻨﺪ ﺛﺒﺎﺕ‪.‬‬
‫‪ ‬ﺭﺳﺎﻧﻪ ﻫﺎﻱ ﻏﻴﺮﻓﺮﺍﺭ )‪(non-volatile storage‬‬
‫ﺩﺭ ﺻﻮﺭﺕ ﺧﺮﺍﺑﻲ ﺳﻴﺴﺘﻢ‪ ،‬ﺍﻃﻼﻋﺎﺕ ﺁﻧﻬﺎ ﻗﺎﺑﻞ ﺑﺎﺯﻳﺎﺑﻲ ﺍﺳﺖ ‪ .‬ﻣﺎﻧﻨﺪ ﺩﻳﺴﻚ ﻭ ﻧﻮﺍﺭﻣﻐﻨﺎﻃﻴﺴﻲ‬
‫‪ ‬ﺭﺳﺎﻧﻪ ﭘﺎﻳﺪﺍﺭ )‪(stable storage‬‬
‫ﺍﻳﻦ ﺭﺳﺎﻧﻪ ﺩﺭ ﺑﺮﺍﺑﺮ ﺗﻤﺎﻡ ﺧﺮﺍﺑﻲ ﻫﺎ ﻣﺺﻭﻥ ﻣﻲ ﺑﺎﺷﺪ ‪ .‬ﺍﻳﻦ ﻧﻮﻉ ﺭﺳﺎﻧﻪ ﺩﺭ ﻭﺍﻗﻊ ﻳﻚ ﻣﻔﻬﻮﻡ‬
‫ﻣﻨﻄﻘﻲ ﺍﺳﺖ ﻧﻪ ﻓﻴﺰﻳﻜﻲ ﻭ ﻫﻨﻮﺯ ﭼﻨﻴﻦ ﺭﺳﺎﻧﻪ ﺍﻱ ﻭﺟﻮﺩ ﺧﺎﺭﺟﻲ ﻧﺪﺍﺭﺩ ‪ .‬ﻣﺘﺪﺍﻭﻝ ﺗﺮﻳﻦ ﺭﺍﻫﻜﺎﺭ‪‌ ،‬‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭼﻨﺪﻳﻦ ﻛﭙﻲ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎ )‪ (backup‬ﺭﻭﻱ ﺭﺳﺎﻧﻪ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺍﺳﺖ ‪ .‬ﺑﺎ ﺍﻳﻦ ﻛﺎﺭ‬
‫ﺍﺣﺘﻤﺎﻝ ﺍﺯ ﺩﺳﺖ ﺭﻓﺘﻦ ﺍﻃﻼﻋﺎﺕ ﺩﺭ ﺻﻮﺭﺕ ﻭﻗﻮﻉ ﺧﺮﺍﺑﻲ ﻛﻤﺘﺮ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﺣﺎﻓﻈﻪ ﺫﺧﻴﺮﻩﺳﺎﺯﻱ ﭘﺎﻳﺪﺍﺭ‬


‫ﻧﺴﺨﻪﻫﺎﻳﻲ ﺍﺯ ﻳﻚ ﺑﻼﻙ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﻃﻮﻝ ﻋﻤﻠﻴﺎﺕ ﺧﺮﻭﺟﻲ‪ ،‬ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺧﻄﺎﻫﺎﻱ ﻣﻮﺟﻮﺩ ﺩﺭ ﺁﻥ‬
‫ﻣﺘﻔﺎﻭﺕ ﺑﺎﺷﻨﺪ‪ .‬ﺑﺮﺍﻱ ﺗﺮﻣﻴﻢ ﻣﺮﺍﺣﻞ ﺯﻳﺮ ﺑﺎﻳﺪ ﺍﻧﺠﺎﻡ ﺷﻮﺩ ‪:‬‬

‫‪- 1‬ﭘﻴﺪﺍ ﻧﻤﻮﺩﻥ ﺑﻼﻛﻬﺎﻱ ﻧﺎﺳﺎﺯﮔﺎﺭ‬

‫ﺳﺎﺩﻩﺗﺮﻳﻦ ﺭﺍﻩ ﺑﺮﺍﻱ ﺍﻳﻦ ﻣﻨﻈﻮﺭ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺩﻭ ﺑﻼﻙ ﺑﺎ ﻫﻢ ﻣﻘﺎﻳﺴﻪ ﺷﻮﻧﺪ ﺗﺎ ﺑﺒﻴﻨﻴﻢ ﺩﻭ ﻧﺴﺨﻪ ﺑﺎ‬
‫ﻫﻢ ﻓﺮﻕ ﺩﺍﺭﻧﺪ ﻳﺎ ﻧﻪ‪ .‬ﺍﻳﻦ ﺭﻭﺵ ﺯﻣﺎﻧﺒﺮ ﺍﺳﺖ ﭼﻮﻥ ﺍﺯ ﺣﺎﻓﻈﻪ ﺩﻳﺴﻚ ﻭﺍﻛﺸﻲ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫ﺭﺍﻩ ﺣﻞ ﺑﻬﺘﺮ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺯﻣﺎﻧﻲ ﻛﻪ ﺍﻧﺘﻘﺎﻝ ﺩﺍﺩﻩ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺁﻥ ﺍﻧﺘﻘﺎﻝ ﺩﺍﺩﻩ ﺭﺍ ﺭﻭﻱ ﺩﻳﺴﻚ‬
‫ﺛﺒﺖ ﻛﻨﺪ ‪ .‬ﺭﻛﻮﺭﺩﻫﺎ ﺛﺒﺖ ﻣﻲ ﺷﻮﻧﺪ ﻭ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺁﻧﻬﺎ ﻣﻘﺎﻳﺴﻪ ﻣﻲ ﮔﺮﺩﺩ‪ .‬ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺍﺯ ﺍﺑﺘﺪﺍ‬

‫‪40‬‬
‫ﻓﻘﻂ ﺟﺎﻫﺎﻳﻲ ﻣﻘﺎﻳﺴﻪ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺑﺎ ﻫﻢ ﺍﺧﺘﻼﻑ ﺩﺍﺭﻧﺪ ‪ acknowledge .‬ﺩﺭﻳﺎﻓﺖ ﻧﺸﺪﻩ ﺍﺳﺖ‬
‫)ﺍﻃﻼﻋﺎﺕ ﻣﺘﻨﺎﻗﺾ(‪.‬‬

‫ﭼﻨﺪ ﻋﻤﻞ ﺑﺎ ﻫﻢ ﺩﺭ ﺻﻒ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ ﻭ ﺑﻼﻙ ﺑﻪ ﺑﻼﻙ ﺩﺭ ﺩﻳﺴﻚ ﺛﺒﺖ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪- 2‬ﺍﮔﺮ ﻫﺮ ﺩﻭ ﻛﭙﻲ ﺍﺯ ﺑﻼﻙ‪ ،‬ﻣﺘﻨﺎﻗﺺ ﻭ ﺩﺍﺭﺍﻱ ﻳﻚ ﺧﻄﺎ )‪ (Bad Checksum‬ﺗﺸﺨﻴﺺ ﺩﺍﺩﻩ‬
‫ﺵﺩ‪ ،‬ﺁﻥ ﺭﺍ ﺭﻭﻱ ﻳﻚ ﻛﭙﻲ ﺩﻳﮕﺮ ﺑﺎﺯﻧﻮﻳﺴﻲ ﻣﻲ ﻛﻨﻴﻢ‪ .‬ﺍﮔﺮ ﻫﺮ ﺩﻭ ﺑﺪﻭﻥ ﺧﻄﺎ ﺍﻣﺎ ﻣﺘﻔﺎﻭﺕ‬
‫ﻫﺴﺘﻨﺪ‪ ،‬ﺑﺎﺯﻧﻮﻳﺴﻲ ﺑﻼﻙ ﺩﻭﻡ ﺗﻮﺳﻂ ﺑﻼﻙ ﺍﻭﻝ ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ )ﺍﻃﻼﻋﺎﺕ ‪ overwrite‬ﻣﻲ‪-‬‬
‫ﺷﻮﺩ(‪.‬‬

‫‪) RAID‬ﻧﺴﺨﻪﻫﺎﻱ ﻣﺘﻌﺪﺩ ﺍﺯ ﻳﻚ ﺑﻼﻙ (‪ :‬ﺍﺯ ﺩﻳﺴﻚ ﻫﺎﻱ ﻣﺴﺘﻘﻞ ﺍﺯ ﻫﻢ )ﺁﺭﺍﻳﻪ( ﻛﻪ ﺍﻓﺰﻭﻧﮕﻲ ﺩﺍﺩﻩ‬
‫ﺩﺍﺭﺩ‪ ،‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﺪ‪ .‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺗﻜﻨﻴﻚ ‪ RAID‬ﺍﺯ ﭼﻨﺪﻳﻦ ﺩﻳﺴﻚ ﺳﺨﺖ ﺩﺭ ﺟﻬﺖ‬
‫ﺑﺎﻻﺑﺮﺩﻥ ﻛﻴﻔﻴﺖ ﻭ ﺍﻃﻤﻴﻨﺎﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﻃﺒﻖ ﻗﺎﻋﺪﻩ ﺧﺎﺻﻲ ﺑﻪ ﻫﻢ ﻣﺮﺗﺒﻂ ﻣﻲ ﺷﻮﻧﺪ ﻭ‬
‫ﻇﺮﻓﻴﺖ ﺑﺎﻻﻳﻲ ﺭﺍ ﺍﺯ ﺣﺎﻓﻈﻪ ﺑﺎ ﻛﻴﻔﻴﺖ ﺑﺎﻻ ﻣﻲ ﺳﺎﺯﻧﺪ‪.‬‬

‫ﻣﺰﺍﻳﺎﻱ ‪:RAID‬‬

‫• ﺍﻓﺰﻭﻧﮕﻲ‪ :‬ﺩﺭ ﻭﺍﻗﻊ ﺍﻓﺰﻭﻧﮕﻲ ﻛﭙﻲﻫﺎﻳﻲ ﻛﻪ ﺩﺍﺭﻳﻢ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ ﻭ ﻧﻪ ﺍﻓﺰ ﻭﻧﮕﻲ ﺩﺍﺩﻩﻫﺎ‪ .‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ‬
‫ﺍﻳﻦ ﻭﻳﮋﮔﻲ‪ ،‬ﺍﮔﺮ ﺩﺭ ﻳﻚ ﻫﺎﺭﺩ ﺧﻄﺎ ﭘﻴﺶ ﺁﻳﺪ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻳﮕﺮ ﺩﻳﺴﻜﻬﺎ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﺑﺎﺯﻳﺎﺑﻲ‬
‫ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫• ﺑﺎﻻﺑﺮﺩﻥ ﻛﻴﻔﻴﺖ‬
‫• ﻫﺰﻳﻦ ﭘﺎﻳﻴﻦ‬

‫ﺭﻭﺍﻝ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﺗﺮﺍﻛﻨﺶ‬


‫ﺩﺍﺩﻩ ﻫﺎﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﺭﻭﻱ ﺭﺳﺎﻧﻪ ﻫﺎ ﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ ﻛﻪ ﻣﻌﻤﻮﻝ ﺗﺮﻳﻦ ﺁﻧﻬﺎ ﺩﻳﺴﻚ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﻋﻤﺪﻩ‬
‫ﺗﺮﻳﻦ ﻋﺎﻣﻞ ﺳﺮﻋﺖ ﺩﺭ ﭘﺮﺩﺍﺯﺵ ﺍﻃﻼﻋﺎﺕ‪ ،‬ﺗﻌﺪﺍﺩ ﺩﻓﻌﺎﺕ ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺭﺳﺎﻧﻪ ﺍﺳﺖ‪ .‬ﺩﺭ ﺑﺎﻧﻚ ﻫﺎﻱ‬
‫ﺍﻃﻼﻋﺎﺕ ﻧﺎﻣﺘﻤﺮﻛﺰ ﻋﻼﻭﻩ ﺑﺮ ﺍﻳﻦ ﻋﺎﻣﻞ‪ ،‬ﭘﻬﻨﺎﻱ ﺑﺎﻧﺪ ﻧﻴﺰ ﺍﻫﻤﻴﺖ ﺩﺍﺭﺩ‪.‬‬
‫‪41‬‬
‫ﺑﺮﺍﻱ ﻛﺎﻫﺶ ﺗﻌﺪﺍﺩ ﺩﻓﻌﺎﺕ ﻣﺮﺍﺟﻌﻪ ﺑﻪ ﺩﻳﺴﻚ‪ ،‬ﺭﻛﻮﺭﺩﻫﺎ ﺑﺎ ﻫﻢ ﺑﻠﻮﻙ ﺑﻨﺪﻱ ﻣﻲ ﺷﻮﻧﺪ ﻭ ﺩﺭ ﻫﺮ ﺑﺎﺭ‬
‫ﻣﺮﺍﺟﻌﻪ ﺑﻪ ﺩﻳﺴﻚ ﺑﺮﺍﻱ ﺧﻮﺍﻧﺪﻥ ﻳﺎ ﻧﻮﺷﺘﻦ‪ ،‬ﺑﻪ ﺟﺎﻱ ﻳﻚ ﺭﻛﻮﺭﺩ‪ ،‬ﻳﻚ ﺑﻠﻮﻙ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﺩ‪ .‬ﭘﺲ ﺍﺯ‬
‫ﺧﻮﺍﻧﺪﻥ ﻳﻚ ﺑﻠﻮﻙ‪ ،‬ﺍﻃﻼﻋﺎﺕ ﺁﻥ ﺑﻠﻮﻙ ﺑﻪ ﺑﺨﺸﻲ ﺍﺯ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮﻧﺪ ﻛﻪ ﺑﺎﻓﺮ‬
‫)‪ (buffer‬ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ‪ .‬ﺳﭙﺲ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﺯ ﺑﺎﻓﺮ ﻛﻪ ﺑﻪ ﺻﻮﺭﺕ ‪ RAM‬ﻫﺴﺘﻨﺪ ﻭ ﺳﺮﻋﺖ ﺧﻴﻠﻲ‬
‫ﺑﺎﻻﻳﻲ ﺩﺍﺭﻧﺪ‪ ،‬ﺭﻛﻮﺭﺩﻫﺎ ﺭﺍ ﺑﺮﺩﺍﺷﺘﻪ ﻭ ﻋﻤﻠﻴﺎﺕ ﻫﺎ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﻨﺪ‪ .‬ﺧﺮﻭﺟﻲ ﺑﺮﻋﻜﺲ ﺍﻳﻦ ﻓﺮﺍﻳﻨﺪ‬
‫ﺍﺳﺖ؛ ﻳﻌﻨﻲ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﺯ ﻧﺎﺣﻴﻪ ﻛﺎﺭﻱ )‪ (work area‬ﺧﻮﺩ‪ ،‬ﺭﻛﻮﺭﺩﻫﺎ ﺭﺍ ﺭﻭﻱ ﺑﺎﻓﺮﻫﺎ ﻧﻮﺷﺘﻪ ﻭ ﺑﺎ‬
‫ﭘﺮﺷﺪﻥ ﺑﺎﻓﺮ‪ ،‬ﺑﻪ ﻳﻜﺒﺎﺭﻩ ﺑﻪ ﺩﻳﺴﻚ ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫ﻣﺮﺣﻠﻪ ﺍﻭﻝ ﺍﻳﻦ ﻛﺎﺭ ﻳﻌﻨﻲ ﺍﻧﺘﻘﺎﻝ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﺩﻳﺴﻚ ﺑﻪ ﺑﺎﻓﺮ ﻭ ﺑﺎﻟﻌﻜﺲ‪ input() ،‬ﻭ )(‪ output‬ﻧﺎﻡ‬
‫ﺩﺍﺭﺩ ﻭ ﻣﺮﺣﻠﻪ ﺩﻭﻡ ﻳﻌﻨﻲ ﺍﻧﺘﻘﺎﻝ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﺑﺎﻓﺮﻫﺎ ﺑﻪ ﻧﺎﺣﻴﻪ ﻫﺎﻱ ﻛﺎﺭﻱ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻭ ﺑﺎﻟﻌﻜﺲ ﺑﻪ ﻧﺎﻡ‬
‫)(‪ read‬ﻭ )(‪ write‬ﻣﺮﺳﻮﻡ ﺍﺳﺖ‪.‬‬
‫ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺗﻌﺪﺍﺩﻱ ﺑﺎﻓﺮ ﺩﺍﺭﻧﺪ ﻛﻪ ﺩﺍﺭﺍﻱ ﺳﺎﻳﺰ ﻣﺸﺨﺼﻲ ﻫﺴﺘﻨﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺳﺎﻳﺰ ﺑﻠﻮﻙ ﻫﺎﻳﻲ‬
‫ﻛﻪ ﺗﻌﻴﻴﻦ ﻣﻲ ﻛﻨﻴﻢ‪ ،‬ﻳﻌﻨﻲ ﺗﻌﺪﺍﺩ ﺭﻛﻮﺭﺩﻫﺎﻳﻲ ﻛﻪ ﺩﺭ ﺑﻠﻮﻙ ﻫﺎ ﻗﺮﺍﺭ ﻣﻲ ﺩﻫﻴﻢ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺳﺎﻳﺰ ﺑﺎﻓﺮ‬
‫ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺍﮔﺮ ﺳﺎﻳﺰ ﺑﻠﻮﻙ ﻫﺎ ﺍﺯ ﺳﺎﻳﺰ ﺑﺎﻓﺮﻫﺎ ﻛﻤﺘﺮ ﺑﺎﺷﺪ ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻓﻀﺎﻱ ﺑﺎﻓﺮ ﺭﺍ ﺍﺯ ﺩﺳﺖ ﺩﺍﺩﻩ‬
‫ﺍﻳﻢ ﻭ ﺍﮔﺮ ﺳﺎﻳﺰ ﺑﻠﻮﻙ ﻫﺎ ﺍﺯ ﺳﺎﻳﺰ ﺑﺎﻓﺮﻫﺎ ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ‪ ،‬ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺑﺎﻳﺪ ﺑﺎﻓﺮﻫﺎ ﺭﺍ ﺑﻪ ﻫﻢ ﭼﺴﺒﺎﻧﺪ ﻭ‬
‫ﺁﻧﻬﺎ ﺭﺍ ﺧﻮﺍﻧﺪ ﻛﻪ ﻛﺎﺭ ﺑﺴﻴﺎﺭ ﺳﺨﺘﻲ ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺳﺎﻳﺰ ﺑﻠﻮﻙ ﻫﺎ ﺑﺎﻳﺪ ﻫﺮ ﭼﻪ ﻧﺰﺩﻳﻜﺘﺮ ﺑﻪ ﺳﺎﻳﺰ ﺑﺎﻓﺮﻫﺎ‬
‫ﺑﺎﺷﺪ ﻭ ﻧﻪ ﺑﻴﺸﺘﺮ‪.‬‬

‫‪42‬‬
‫‪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‬‬

‫ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ‪:‬‬


‫‪ ‬ﺑﻼﻛﻬﺎﻱ ﻓﻴﺰﻳﻜﻲ ﻛﻪ ﺭﻭﻱ ﺩﻳﺴﻚ ﻣﻘﻴﻢ ﻫﺴﺘﻨﺪ‪.‬‬
‫‪ ‬ﺑﻼﻙ ﻫﺎﻱ ﺑﺎﻓﺮﻱ ﻛﻪ ﺩﺭ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ﺑﺼﻮﺭﺕ ﻣﻮﻗﺖ ﻣﻘﻴﻢ ﺷﺪﻩ ﺍﻧﺪ ‪.‬‬
‫‪ ‬ﺍﻟﺒﺘﻪ ﺍﻧﺘﻘﺎﻝ ﺩﺍﺩﻩ ﺑﻴﻦ ﺩﻳﺴﻚ ﻭ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ﺍﺯ ﺩﻭ ﻃﺮﻳﻖ ﺻﻮﺭﺕ ﻣﻴﮕﻴﺮﺩ ‪:‬‬
‫‪ :Input ‬ﺍﻧﺘﻘﺎﻝ ﺑﻼﻙ ﻓﻴﺰﻳﻜﻲ )ﺑﻄﻮﺭ ﻣﺜﺎﻝ ﺑﻼﻙ ‪ (B‬ﺑﻪ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ‪.‬‬

‫‪43‬‬
‫‪ :Output ‬ﺍﻧﺘﻘﺎﻝ ﺑﻼﻙ ﻓﻴﺰﻳﻜﻲ )ﺑﻄﻮﺭ ﻣﺜﺎﻝ ﺑﻼﻙ ‪ (B‬ﺍﺯ ﺭﻭﻱ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ‬
‫ﺑﺮﻭﻱ ﺩﻳﺴﻚ‪.‬‬
‫‪ ‬ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺩﻳﺘﺎﺁﻳﺘﻢ ﻫﺎ ﺭﺍ ﺑﻴﻦ ﺑﻼﻛﻬﺎﻱ ﺑﺎﻓﺮ ﺩﺭ ﺳﻴﺴﺘﻢ ﺑﻪ ﻛﻤﻚ ﺩﻭ ﻋﻤﻠﻜﺮﺩ ﺯﻳﺮ ﺟﺎﺑﺠﺎ‬
‫ﻣﻴﻜﻨﺪ‪:‬‬
‫‪ ‬ﺧﻮﺍﻧﺪﻥ)‪ :(Read‬ﻣﻘﺪﺍﺭ ﺩﻳﺘﺎﺁﻳﺘﻢ )ﻣﺜﻼ ﺩﻳﺘﺎﺁﻳﺘﻢ ‪ (X‬ﺭﺍ ﺑﻪ ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ )ﻣﺜﻼ‬
‫ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ‪ (Xi‬ﺗﻌﻠﻖ ﻣﻴﺪﻫﺪ‪.‬‬
‫‪ ‬ﻧﻮﺷﺘﻦ)‪ :(Write‬ﻣﻘﺪﺍﺭ ﻣﺤﻠﻲ )ﻣﺜﻼ ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ‪ (Xi‬ﺭﺍ ﺑﺮﻭﻱ ﺩﻳﺘﺎﺁﻳﺘﻢ‬
‫)ﻣﺜﻼ ﺩﻳﺘﺎﺁﻳﺘﻢ ‪ (X‬ﻣﻮﺟﻮﺩ ﺩﺭ ﺑﺎﻓﺮ ﻧﺴﺒﺖ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﺗﺮﻣﻴﻢ‬


‫ﺑﺮﺍﻱ ﺗﻀﻤﻴﻦ ﺟﺎﻣﻌﻴﺖ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﻭ ﺍﻋﻤﺎﻝ ﺧﻮﺍﺹ ﻳﻜﭙﺎﺭﭼﮕﻲ ﻭ ﭘﺎﻳﺎﻳﻲ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺩﺭ ﺻﻮﺭﺕ‬
‫ﻭﻗﻮﻉ ﺧﺮﺍﺑﻲ‪ ،‬ﺍﺯ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻳﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﻋﻤﻮﻣﺎً ﺷﺎﻣﻞ ﺩﻭ ﻣﺮﺣﻠﻪ ﺯﻳﺮ ﻣﻲ ﺑﺎﺷﻨﺪ‪:‬‬

‫‪ .1‬ﻣﺮﺣﻠﻪ ﺍﻭﻝ ‪ :‬ﺩﺭ ﺣﻴﻦ ﻋﻤﻠﻜﺮﺩ ﻋﺎﺩﻱ ﺳﻴﺴﺘﻢ‪ ،‬ﺍﻃﻼﻋﺎﺗﻲ ﻛﻪ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﺗﺮﻣﻴﻢ ) ﭘﺲ ﺍﺯ ﻭﻗﻮﻉ‬
‫ﺧﺮﺍﺑﻲ( ﺑﻪ ﺁﻧﻬﺎ ﻧﻴﺎﺯ ﺩﺍﺭﻳﻢ ﺩﺭ ﺟﺎﻳﻲ ﺛﺒﺖ ﺷﻮﻧﺪ ‪ .‬ﺑﻪ ﺍﻳﻦ ﻣﻜﺎﻥ ﻟﻮگ )‪ (log‬ﻣﻲ ﮔﻮﻳﻴﻢ‪.‬‬
‫‪ .2‬ﻣﺮﺣﻠﻪ ﺩﻭﻡ ‪ :‬ﭘﺲ ﺍﺯ ﻭﻗﻮﻉ ﺧﺮﺍﺑﻲ ) ﻭﻗﺘﻲ ﺳﻴﺴﺘﻢ ﺩﻭﺑﺎﺭﻩ ﺑﺎﻻ ﻣﻲ ﺁﻳﺪ (‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻃﻼﻋﺎﺕ‬
‫ﺛﺒﺖ ﺷﺪﻩ ﺩﺭ ﻣﺮﺣﻠﻪ ﻗﺒﻞ ﻭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻳﻲ ﻛﻪ ﺍﺯ ﭘﻴﺶ ﺗﻬﻴﻪ ﺷﺪﻩ ﺍﻧﺪ‪ ،‬ﺳﻴﺴﺘﻢ ﺭﺍ ﺑﻪ ﺣﺎﻟﺖ‬
‫ﺍﻭﻝ ﺑﺮﻣﻲ ﮔﺮﺩﺍﻧﻴﻢ‪.‬‬
‫ﭘﺲ ﺩﺭ ﻣﺮﺣﻠﻪ ﺩﻭﻡ ﺍﺯ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺗﺮﻣﻴﻢ‪ ،‬ﻫﺮ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺍﻧﺠﺎﻡ )‪ (commit‬ﺷﺪﻩ ﺍﺳﺖ‬
‫ﺭﺍ ﺗﻜﺮﺍﺭ )‪ (redo‬ﻛﺮﺩﻩ‪ ،‬ﻳﻌﻨﻲ ﺩﻭﺑﺎﺭﻩ ﺍﺟﺮﺍ ﻣﻲ ﻛﻨﻴﻢ ﺗﺎ ﺍﺛﺮﺍﺗﺶ ﺭﻭﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﺩﺍﺋﻤﻲ ﺷﻮﺩ ﻭ‬
‫ﻫﺮ ﺗﺮﺍﻛﻦﺷﻲ ﻛﻪ ﺳﺎﻗﻂ ﺷﺪﻩ ﺭﺍ ﺧﻨﺜﻲ )‪ (undo‬ﻣﻲ ﻛﻨﻴﻢ‪ .‬ﻓﺮﺽ ﻣﻲ ﻛﻨﻴﻢ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺳﺮﻳﺎﻟﻲ‬
‫ﻫﺴﺘﻨﺪ‪.‬‬
‫ﺷﻮﻥ ‪ :‬ﺭﻭﻳﻜﺮﺩ ﻛﺎﺭﻧﺎﻣﻪ )‪ (log-based‬ﻭ‬
‫ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﺗﺮﻣﻴﻢ ﺑﻪ ﺩﻭ ﺭﻭﻳﻜﺮﺩ ﻛﻠﻲ ﺗﻘﺴﻴﻢ ﻣﻲ ﺩ‬
‫ﺭﻭﻳﻜﺮﺩ ﺭﻭﻧﻮﺷﺖ )‪.(shadow paging‬‬

‫ﺭﻭﻳﻜﺮﺩ ﻛﺎﺭﻧﺎﻣﻪ )‪(log-based‬‬

‫‪44‬‬
‫ﺩﺭ ﺍﻳﻦ ﺭﻭﻳﻜﺮﺩ ﺍﻃﻼﻋﺎﺕ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﺗﺮﻣﻴﻢ ﺭﺍ ﺩﺭﺣﺎﻓﻈﻪ ﭘﺎﻳﺪﺍﺭ ﺛﺒﺖ ﻣﻲ ﻛﻨﻴﻢ‪ .‬ﺑﺮﺍﻱ ﻫﺮ ﻳﻚ‬
‫ﻧﺎﻡ ﺭﻛﻮﺭﺩ ﻛﺎﺭﻧﺎﻣﻪ )‪ (log‬ﺑﺎ ﺳﺎﺧﺘﺎﺭ ﺯﻳﺮﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ‪:‬‬
‫ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﻳﻚ ﺗﺮﺍﻛﻨﺶ‪ ،‬ﺭﻛﻮﺭﺩﻱ ﺏ‬
‫‪ -‬ﺑﺮﺍﻱ ﺷﺮﻭﻉ ﺗﺮﺍﻛﻨﺶ ‪ ، Ti‬ﺭﻛﻮﺭﺩ > ‪< Ti , start‬‬
‫‪ -‬ﺑﺮﺍﻱ ﺩﺳﺘﻮﺭ )‪ write(x‬ﺍﺯ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺩﺭ ﺣﺎﻟﺖ ﻛﻠﻲ ﺭﻛﻮﺭﺩ > ‪ <Ti ,x,V1,V2‬ﻛﻪ‬
‫‪ V2 , V1‬ﺑﻪ ﺗﺮﺗﻴﺐ ﻣﻘﺎﺩﻳﺮ ﻗﺒﻞ ﻭ ﺑﻌﺪ ﺍﺯ ﺍﻧﺠﺎﻡ ﻧﻮﺷﺘﻦ ‪ x‬ﻣﻲ ﺑﺎﺷﻨﺪ‪.‬‬
‫‪ -‬ﺑﺎ ﺍﺟﺮﺍﻱ ﺁﺧﺮﻳﻦ ﺩﺳﺘﻮﺭ ﺗﺮﺍﻛﻨﺶ ‪ ،Ti‬ﺭﻛﻮﺭﺩ> ‪ <Ti, Commit‬ﺩﺭ ﻛﺎﺭﻧﺎﻣﻪ ﺛﺒﺖ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺭﻭﻳﻜﺮﺩ ﺭﻭﻧﻮﺷﺖ )‪(shadow paging‬‬


‫ﺑﺮﺍﻱ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺍﻳﻦ ﺭﻭﻳﻜﺮﺩ ﺭﻭﻧﻮﺷﺖ ﻧﻴﺎﺯ ﺑﻪ ﻛﺎﺭﻧﺎﻣﻪ)‪ (log‬ﻣﻲ ﺑﺎﺷﺪ ‪ .‬ﻗﺒﻞ ﺍﺯ ﺍﻧﺠﺎﻡ ﺗﻐﻴﻴﺮﺍﺕ )ﻗﺒﻞ‬
‫ﺍﺯ ﺷﺮﻭﻉ ﺑﻪ ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻦﺵ ( ﻳﻚ ﻛﭙﻲ ﺍﺯ ﺻﻔﺤﺎﺕ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺁﻥ ﺗﺮﺍﻛﻨﺶ ﺍﺯ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﺗﻬﻴﻪ ﻣﻲ‬
‫ﻛﻨﻴﻢ‪ .‬ﺑﻪ ﺍﻳﻦ ﻧﺴﺨﻪ‪ ،‬ﻧﺴﺨﻪ ﺟﺎﺭﻱ )‪ (current‬ﻣﻲ ﮔﻮﻳﻴﻢ‪ .‬ﺗﻐﻴﻴﺮﺍﺕ ﻣﻮﺭﺩﻧﻈﺮ ﺗﺮﺍﻛﻨﺶ ﺭﻭﻱ ﻧﺴﺨﻪ‬
‫ﺟﺎﺭﻱ ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ ﺑﻨﺎﺑﺮﺍﻳﻦ ﻧﺴﺨﻪ ﺍﺻﻠﻲ ﺩﺳﺖ ﻧﺨﻮﺭﺩﻩ ﺑﺎﻗﻲ ﻣﻲ ﻣﺎﻧﺪ‪.‬‬
‫ﭘﺲ ﻣﺎ ﺩﻭ ﻧﺴﺨﻪ ﺩﺍﺭﻳﻢ‪ :‬ﻧﺴﺨﻪ ﺍﺻﻠﻲ ﻛﻪ ﻧﺴﺨﻪ ﺳﺎﻳﻪ )‪ (shadow‬ﻧﻴﺰ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﺩﻟﻴﻞ‬
‫ﺍﻳﻨﻜﻪ ﻭﻗﺘﻲ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﻮﻓﻖ ﻣﻲ ﺷﻮﻧﺪ‪ ،‬ﺁﻥ ﻧﺴﺨﻪ ﺩﻭﺭ ﺭﻳﺨﺘﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﻧﺴﺨﻪ ﺩﻳﮕﺮ‪ ،‬ﻧﺴﺨﻪ ﺟﺎﺭﻱ‬
‫ﻛﻪ ﺗﻐﻴﻴﺮﺍﺕ ﺭﺍ ﺭﻭﻱ ﺁﻥ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﻴﻢ‪ .‬ﭼﻨﺎﻧﭽﻪ ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﺍﻧﺠﺎﻡ ﺭﺳﻴﺪ‪ ،‬ﺍﻳﻦ ﻧﺴﺨﻪ ﺟﺎﺭﻱ ﺭﺍ ﺑﻪ‬
‫ﻋﻨﻮﺍﻥ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﺟﺪﻳﺪ ﺗﻠﻘﻲ ﻣﻲ ﻛﻨﻴﻢ ﻭ ﻧﺴﺨﻪ ﺳﺎﻳﻪ ﺭﺍ ﺍﺯ ﺑﻴﻦ ﻣﻲ ﺑﺮﻳﻢ‪ .‬ﺍﻣﺎ ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ‬
‫ﻧﺘﻮﺍﻧﺴﺖ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪ ،‬ﻧﺴﺨﻪ ﺟﺎﺭﻱ ﺭﺍ ﺍﺯ ﺑﻴﻦ ﺑﺮﺩﻩ ﻭ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﻣﻌﺎﺩﻝ ﻫﻤﺎﻥ ﻧﺴﺨﻪ ﺳﺎﻳﻪ ﺧﻮﺍﻫﺪ‬
‫ﺑﻮﺩ‪.‬‬

‫ﻣﺰﺍﻳﺎﻱ ﺭﻭﻳﻜﺮﺩ ﺭﻭﻧﻮﺷﺖ‪:‬‬


‫‪ (1‬ﺳﺮﺑﺎﺭ ﻣﺮﺑﻮﻁ ﺑﻪ ﻧﻮﺷﺘﻦ ﺭﻛﻮﺭﺩﻫﺎﻱ ﻛﺎﺭﻧﺎﻣﻪ ﺭﺍ ﻧﺪﺍﺭﺩ‪.‬‬
‫‪ (2‬ﺍﻧﺠﺎﻡ ﻋﻤﻠﻴﺎﺕ ﺗﺮﻣﻴﻢ ﺑﺴﻴﺎﺭ ﺳﺎﺩﻩ ﻭ ﻧﺎﭼﻴﺰ ﺍﺳﺖ‪.‬‬
‫ﻣﻌﺎﻳﺐ ﺭﻭﻳﻜﺮﺩ ﺭﻭﻧﻮﺷﺖ ‪:‬‬
‫‪ . 1‬ﺑﺮﺍﻱ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺁﻥ ﻧﻴﺎﺯ ﺑﻪ ﻛﺎﺭﻧﺎﻣﻪ ﺩﺍﺭﻳﻢ‪.‬‬

‫‪45‬‬
‫‪ . 2‬ﻛﭗﻱ ﻛﺮﺩﻥ ﺍﻃﻼﻋﺎﺕ ﻣﺮﺑﻮﻃﻪ ﺍﺯ ﺑﺎﻧﻚ ﺑﺴﻴﺎﺭ ﭘﺮﻫﺰﻳﻨﻪ ﺍﺳﺖ )ﺣﺘﻲ ﺑﺎ ﻭﺟﻮﺩ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﻫﺎﻱ‬
‫ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﺩﺭ ﺍﻳﻦ ﺯﻣﻴﻨﻪ(‬
‫‪ . 3‬ﺗﻮﺳﻌﻪ ﺍﻳﻦ ﺭﻭﺵ ﺑﺮﺍﻱ ﺣﺎﻟﺘﻲ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﺘﻮﺍﻧﻨﺪ ﻫﻤﺮﻭﻧﺪ ﺍﺟﺮﺍ ﺷﻮﻧﺪ ﺑﺴﻴﺎﺭ ﻣﺸﻜﻞ ﺍﺳﺖ )ﺑﺮ‬
‫ﺧﻼﻑ ﺭﻭﺵ ﻛﺎﺭﻧﺎﻣﻪ(‪.‬‬
‫‪ . 4‬ﺳﺮﺑﺎﺭ ﺍﻧﺠﺎﻡ ﻋﻤﻠﻴﺎﺕ ﺍﻧﺠﺎﻡ ﺯﻳﺎﺩ ﺍﺳﺖ‪.‬‬
‫ﻧﺘﻴﺠﻪ‪ :‬ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻣﻘﺎﻳﺴﻪ ﺍﺟﻤﺎﻟﻲ ﺍﻳﻦ ﺩﻭ ﺭﻭﻳﻜﺮﺩ‪ ،‬ﺩﺭ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﺭﻭﻳﻜﺮﺩ ﻛﺎﺭﻧﺎﻣﻪ‬
‫ﺍﺯ ﺭﻭﻳﻜﺮﺩ ﺭﻭﻧﻮﺷﺖ ﺑﻬﺘﺮ ﺍﺳﺖ ﻭ ﻋﻤﻮﻣﺎً ﺍﺯ ﺭﻭﺵ ﻛﺎﺭﻧﺎﻣﻪ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﺗﺮﻣﻴﻢ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺭﻭﻳﻜﺮﺩ ﻛﺎﺭﻧﺎﻣﻪ ﻣﻌﺎﻳﺒﻲ ﺩﺍﺭﺩ ﻛﻪ ﻣﻬﻤﺘﺮﻳﻦ ﺁﻧﻬﺎ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ‪:‬‬


‫‪ .1‬ﺑﺰﺭگ ﺷﺪﻥ ﺍﻧﺪﺍﺯﻩ ﻓﺎﻳﻞ ﻛﺎﺭﻧﺎﻣﻪ‪.‬‬
‫‪ .2‬ﺯﻣﺎﻥ گﻳﺮ ﺑﻮﺩﻥ ﺟﺴﺘﺠﻮ ﺩﺭ ﻛﺎﺭﻧﺎﻣﻪ‪.‬‬
‫‪ .3‬ﺍﺣﺘﻤﺎﻝ ﺗﻜﺮﺍﺭ ﻣﺠﺪﺩ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻛﻪ ﻗﺒﻼً ﺁﻧﻬﺎ ﺭﺍ ﺗﻜﺮﺍﺭ ﻛﺮﺩﻩ ﺍﻳﻢ‪.‬‬
‫ﺭﻭﺯﺭﺳﺎﻧﻲ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ ﺑﻪ ﺩﻟﻴﻞ ﻛﺎﺭ ﺑﺎ ﺭﺳﺎﻧﻪ ﻫﺎ‪.‬‬ ‫‪ .4‬ﺍﻓﺰﺍﻳﺶ ﻫﺰﻳﻨﻪ ﺏ‬
‫ﺑﺮﺍﻱ ﺑﻬﺒﻮﺩ ﺍﻳﻦ ﻣﻌﺎﻳﺐ ﺭﻭﺷﻬﺎﻳﻲ ﺍﺭﺍﺋﻪ ﺷﺪﻩ ﻛﻪ ﺍﺯ ﺑﻬﺘﺮﻳﻦ ﺁﻥﻫﺎ‪ ،‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﻘﻄﻪ ﺑﺎﺯﺭﺳﻲ‬
‫)‪ (checkpoint‬ﻣﻲ ﺑﺎﺷﺪ‪.‬‬

‫ﻧﻘﻄﻪ ﺑﺎﺯﺭﺳﻲ )‪(checkpoint‬‬


‫ﻃﻮﺭ ﻣﺘﻨﺎﻭﺏ )‪ (periodic‬ﺩﺭ ﺑﺮﻫﻪ ﻫﺎﻱ ﺯﻣﺎﻧﻲ ﻣﻌﻴﻨﻲ ﺍﺯ ﻋﻤﻠﻜﺮﺩ ﻋﺎﺩﻱ ﺳﻴﺴﺘﻢ‪،‬‬ ‫ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ‪ ،‬ﺏ‬
‫ﻛﺎﺭﻫﺎﻱ ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﺭﻭﻱ ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺕ )ﺗﺎ ﺁﻥ ﺯﻣﺎﻥ( ﺭﺍ ﻗﻄﻌﻲ ﻭ ﻧﻬﺎﻳﻲ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﺍﻳﻦ ﻟﺤﻈﺎﺕ‬
‫ﻧﻘﺎﻁ ﺑﺎﺯﺭﺳﻲ ﺳﻴﺴﺘﻢ ﻧﺎﻡ ﺩﺍﺭﻧﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺍﮔﺮ ﺍﺗﻔﺎﻗﻲ ﺩﺭ ﺳﻴﺴﺘﻢ ﺭﺥ ﺑﺪﻫﺪ‪ ،‬ﻧﺒﺎﻳﺪ ﺗﺎ ﺍﺑﺘﺪﺍﻱ ‪ log‬ﺭﺍ‬
‫ﺑﺮﺭﺳﻲ ﻛﻨﻴﻢ‪ ،‬ﺑﻠﻜﻪ ﻛﺎﻓﻴﺴﺖ ﺗﺎ ﺍﻭﻟﻴﻦ ﻧﻘﻄﻪ ﺑﺎﺯﺭﺳﻲ )‪ (checkpoint‬ﺍﻳﻦ ﻛﺎﺭ ﺭﺍ ﺍﻧﺠﺎﻡ ﺩﻫﻴﻢ‪.‬‬
‫ﺑﻌﺒﺎﺭﺕ ﺩﻳﮕﺮ ﻛﺎﻓﻴﺴﺖ ‪ log‬ﺭﺍ ﺍﺯ ﺁﺧﺮ ﺷﺮﻭﻉ ﻛﻨﻴﻢ‪ ،‬ﺍﻃﻼﻋﺎﺕ ﺁﻧﺮﺍ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ ﺩﻫﻴﻢ‪ ،‬ﺳﻴﺴﺘﻢ‬
‫ﺭﺍ ﺗﺮﻣﻴﻢ ﻛﻨﻴﻢ ﻭ ﺯﻣﺎﻧﻲ ﻛﻪ ﺑﻪ ﺍﻭﻟﻴﻦ ﻧﻘﻄﻪ ﺑﺎﺯﺭﺳﻲ ﺭﺳﻴﺪﻳﻢ ﻣﺘﻮﻗﻒ ﺷﻮﻳﻢ‪.‬‬

‫ﺩﺭ ﻫﺮ ﻧﻘﻄﻪ ﺑﺎﺯﺭﺳﻲ ﻣﺠﻤﻮﻋﻪ ﻋﻤﻠﻴﺎﺕ ﺯﻳﺮ ﺑﻪ ﺍﻧﺠﺎﻡ ﻣﻲ ﺭﺳﻨﺪ‪:‬‬

‫‪46‬‬
‫‪ .1‬ﺭﻛﻮﺭﺩﻫﺎﻱ ﻛﺎﺭﻧﺎﻣﻪ )ﻛﻪ ﺩﺭ ﺣﻴﻦ ﻋﻤﻠﻜﺮﺩ ﻋﺎﺩﻱ ﺳﻴﺴﺘﻢ ﺩﺭ ﺑﺎﻓﺮ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﺪﻧﺪ ( ﺑﻪ ﺣﺎﻓﻈﻪ‬
‫ﭘﺎﻳﺪﺍﺭ ﻣﻨﺘﻘﻞ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫‪ .2‬ﺩﺍﺩﻩ ﻫﺎﻱ ﺗﻐﻴﻴﺮ ﻳﺎﻓﺘﻪ ﺩﺭ ﺑﺎﻓﺮ ﺑﻪ ﺩﻳﺴﻚ ﻣﻨﺘﻘﻞ ﻣﻲ ﮔﺮﺩﻧﺪ‪.‬‬
‫ﻧﺎﻡ ﺭﻛﻮﺭﺩ ﺑﺎﺯﺭﺳﻲ ﺑﺎ ﺳﺎﺧﺘﺎﺭ >‪ <checkpoint‬ﺛﺒﺖ ﻣﻲ ﺷﻮﺩ‪.‬‬ ‫‪ .3‬ﺭﻛﻮﺭﺩﻱ ﺏ‬

‫ﻣﺜﺎﻝ‪ :‬ﺩﺭ ﺍﻳﻦ ﺷﻜﻞ ﭘﺲ ﺍﺯ ﻭﻗﻮﻉ ﺧﺮﺍﺑﻲ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻋﻤﻞ ﻣﻲ ﺷﻮﺩ‪:‬‬

‫‪ -‬ﺗﺮﺍﻛﻨﺶ ‪ T1‬ﺩﺭ ﺯﻣﺎﻥ ‪ T2‬ﻧﻬﺎﻳﻲ ﺷﺪﻩ ﺍﺳﺖ ﻭ ﻧﻴﺎﺯ ﺑﻪ ﺗﺮﻣﻴﻢ ﻧﺪﺍﺭﺩ‪.‬‬


‫‪ -‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ‪ T2‬ﻭ ‪ T3‬ﺭﺍ ﺑﻨﺎ ﺑﻪ ﺧﺎﺻﻴﺖ ﭘﺎﻳﺎﻳﻲ ﺑﺎﻳﺪ ﺗﻜﺮﺍﺭ ﻧﻤﻮﺩ ﺗﺎ ﺍﺛﺮ ﺁﻧﻬﺎ ﺩﺭ ﺳﻴﺴﺘﻢ ﻧﻬﺎﻳﻲ‬
‫ﻭ ﺩﺍﺋﻤﻲ ﺷﻮﺩ ) ﺑﺮﺍﻱ ‪ T2‬ﻓﻘﻂ ﺑﺨﺸﻲ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﻛﻪ ﭘﺲ ﺍﺯ ‪ Tc‬ﺍﺟﺮﺍ ﺷﺪﻩ ﺍﻧﺪ ﺭﺍ ﺗﻜﺮﺍﺭ ﻣﻲ‬
‫ﻛﻨﻴﻢ(‪.‬‬
‫‪ -‬ﺗﺮﺍﻛﻨﺶ ‪ T4‬ﻛﻪ ﻧﻴﻤﻪ ﻛﺎﺭﻩ ﻣﺎﻧﺪﻩ ﺍﺳﺖ ﺭﺍ ﺑﻨﺎ ﺑﻪ ﺧﺎﺻﻴﺖ ﻳﻜﭙﺎﺭﭼﮕﻲ‪ ،‬ﺧﻨﺜﻲ ﻣﻲ ﻛﻨﻴﻢ ‪.‬‬

‫‪Fuzzy Checkpoint‬‬

‫ﺗﺎ ﻛﻨﻮﻥ ﻓﺮﺽ ﺑﺮ ﺍﻳﻦ ﺑﻮﺩ ﻛﻪ ﺗﺮﺍﻛﻨﺶﻫﺎ ﺩﺭ ﺣﻴﻦ ﺍﻳﺠﺎﺩ ﻧﻘﻄﻪ ﺑﺮﺭﺳﻲ )ﭼﻚﭘﻮﻳﻨﺖ( ﻓﻌﺎﻝ ﻧﻴﺴﺘﻨﺪ‪ .‬ﺍﻣﺎ‬
‫ﺩﺭ ﺑﺮﺧﻲ ﺍﺯ ﺳﻴﺴﺘﻤﻬﺎ ﻳﻚ ﺳﺮﻱ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﺟﺎﺯﻩ ﺩﺍﺭﻧﺪ ﺩﺭ ﺣﻴﻦ ﭼﻚ ﭘﻮﻳﻨﺖ ﻓﻌﺎﻝ ﺑﺎﺷﻨﺪ ‪ .‬ﻫﺪﻑ‬
‫ﭼﻚﭘﻮﻳﻨﺖ ﻓﺎﺯﻱ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺍﻳﻦ ﺗﺮﺍﻛﻨﺸﻬﺎ ﺭﺍ ﺗﺸﺨﻴﺺ ﺩﻫﺪ ﻳﻌﻨﻲ ﺧﺮﻭﺟﻲ ﺗﺮﺍﻛﻨﺸﻬﺎ ﻣﺠﺎﺯ ﺍﺳﺖ ‪.‬‬
‫ﻗﺒﻞ ﺍﺯ ﺁﺧﺮﻳﻦ ﭼﻚﭘﻮﻳﻨﺖ ﻫﻨﻮﺯ ﺑﻌﻀﻲﻫﺎ ﺍﺟﺮﺍ ﻧﺸﺪﻩﺍﻧﺪ‪.‬‬
‫‪47‬‬
‫ﺑﺮﺍﺳﺎﺱ ﻓﺎﻛﺘﻮﺭﻫﺎﻱ ﺗﺮﺍﻛﻨﺶ‪ ،‬ﺁﻧﻬﺎﻳﻲ ﻛﻪ ﺩﺭﮔﻴﺮ ﻫﺴﺘﻨﺪ‪ ،‬ﺑﺎﻳﺪ ﻣﺘﻮﻗﻒ ﺷﻮﻧﺪ ‪ .‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﮔﺮﺍﻓﻬﺎﻱ‬
‫ﻧﺎﻫﻤﺒﻨﺪ ﻣﻲﺗﻮﺍﻥ ﺗﺮﺍﻛﻨﺸﻬﺎ ﺭﺍ ﺑﻪ ﺩﻭ ﺩﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻛﺮﺩ‪.‬‬

‫ﺧﻄﺎ ﺑﺎ ﺍﺯ ﺩﺳﺖ ﺩﺍﺩﻥ ﺣﺎﻓﻈﻪ ﺫﺧﻴﺮﻩﺳﺎﺯﻱ ﻏﻴﺮﻓﺮﺍﺭ‬

‫ﺩﺭﺻﻮﺭﺗﻲ ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﺑﺎ ﻣﺸﻜﻞ ﺍﺯ ﺩﺳﺖ ﺩﺍﺩﻥ ﺩﺍﺩﻩ ﻫﺎﻱ ﺣﺎﻓﻈﻪ ﻏﻴﺮﻓﺮﺍﺭ ﻣﻘﺎﺑﻠﻪ ﻛﻨﻴﻢ‪ ،‬ﺗﻜﻨﻴﻜﻲ‬
‫)‪ (Dumping‬ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ ‪.‬‬ ‫ﻣﺸﺎﺑﻪ ﻧﻘﺎﻁ ﻭﺍﺭﺳﻲ ﻗﺎﺑﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺳﺖ ﻛﻪ ﺍﺻﻄﻼﺣﺎً ﺭﻭﺑﺮﺩﺍﺭﻱ‬
‫ﺏ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ ‪:‬‬ ‫ﻣﺮﺍﺣﻞ ﺍﻳﻦ ﺗﻜﻨﻴﻚ ﺑﻪ ﻃﻮﺭ ﺧﻼﺻﻪ ﻩ‬
‫‪- 1‬ﻫﺮ ﭼﻪ ﺭﻛﻮﺭﺩ ﺩﺭ ‪ log‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ ،‬ﺩﺭ ﺣﺎﻓﻈﻪ ﭘﺎﻳﺪﺍﺭ ﺛﺒﺖ ﺷﻮﺩ ‪.‬‬
‫‪- 2‬ﺩﺍﺩﻩﻫﺎ ﺛﺒﺖ ﺷﻮﺩ )ﻛﻠﻴﻪ ﺑﻼﻛﻬﺎﻱ ﺑﺎﻓﺮ ﺑﺮﺭﻭﻱ ﺩﻳﺴﻚ ﺛﺒﺖ ﺷﻮﺩ (‪.‬‬
‫‪- 3‬ﺍﻧﺠﺎﻡ ﻋﻤﻠﻴﺎﺕ ‪) Dumping‬ﺭﻭﺑﺮﺩﺍﺭﻱ( ﺭﻭﻱ ﺩﻳﺴﻚ‬
‫‪- 4‬ﺛﺒﺖ ﻳﻚ ﻛﻮﺭﺩ ﺑﻪ ﺷﻜﻞ >‪ <Dump‬ﺑﺮﺭﻭﻱ ﺣﺎﻓﻈﻪ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﭘﺎﻳﺪﺍﺭ‬
‫ﻧﻜﺘﻪ‪ :‬ﺗﺮﺗﻴﺐ ﺍﺟﺮﺍﻱ ‪ Checkpoint‬ﻭ ‪ Dumping‬ﻫﻴﭻ ﺍﺭﺗﺒﺎﻃﻲ ﺑﺎ ﻫﻢ ﻧﺪﺍﺭﻧﺪ ‪ .‬ﺩﺭ ‪Checkpoint‬‬
‫ﺍﻧﺘﻘﺎﻝ ﺍﺯ ﺑﺎﻓﺮ ﺑﻪ ﺩﻳﺴﻚ ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ ﺍﻣﺎ ﺩﺭ ‪ Dumping‬ﺍﻧﺘﻘﺎﻝ ﺍﺯ ﺩﻳﺴﻚ ﺑﻪ ﺩﻳﺴﻚ ﺻﻮﺭﺕ ﻣﻲ ‪-‬‬
‫ﮔﻴﺮﺩ‪.‬‬

‫‪(Algorithms for Recovery and Isolation Exploiting Semantics) ARIES‬‬


‫ﺑﺪﻳﻬﻲ ﺍﺳﺖ ﻛﻪ ﺁﻧﭽﻪ ﺩﺭ ﻣﻮﺭﺩ ﺭﻭﻳﻪ ﺗﺮﻣﻴﻢ ﺳﻴﺴﺘﻢ ﮔﻔﺘﻪ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺑﺴﻴﺎﺭ ﺳﺎﺩﻩ ﺍﺳﺖ ‪ .‬ﺩﺭ ﺁﻥ ﺭﻭﻳﻪ‪،‬‬
‫ﻋﻤﻞ "ﻟﻐﻮ ﻛﺮﺩﻥ " ﻗﺒﻞ ﺍﺯ ﻋﻤﻞ "ﻛﺎﺭ ﻣﺠﺪﺩ " ﺻﻮﺭﺕ ﻣﻲ ﮔﻴﺮﺩ ‪ .‬ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺍﻭﻟﻴﻪ ﺑﻪ ﺍﻳﻦ ﺭﻭﺵ ﻛﺎﺭ‬
‫ﻣﻲ ﻛﺮﺩﻧﺪ‪ ،‬ﺍﻣﺎ ﺑﺪﻟﻴﻞ ﻛﺎﺭﺍﻳﻲ‪ ،‬ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺟﺪﻳﺪ ﺍﺯ ﺭﻭﺵ ﺩﻳﮕﺮﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻨﺪ ‪ .‬ﺩﺭ ﻭﺍﻗﻊ‪ ،‬ﺍﻏﻠﺐ‬
‫ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺍﻣﺮﻭﺯﻱ‪ ،‬ﺍﺯ ﺭﻭﺵ ‪ ARIES‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﺪ‪ ARIES .‬ﺩﺭ ﺳﻪ ﻣﺮﺣﻠﻪ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ‪:‬‬
‫‪ - 1‬ﺗﺤﻠﻴﻞ‪ ،‬ﻟﻴﺴﺖ ﻫﺎﻱ ‪ UNDO‬ﻭ ‪ REDO‬ﺭﺍ ﺗﺸﻜﻴﻞ ﻣﻲ ﺩﻫﺪ‪.‬‬
‫‪ - 2‬ﻛﺎﺭ ﻣﺠﺪﺩ ‪ ،‬ﺍﺯ ﻣﻜﺎﻧﻲ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺩﺭ ﻣﺮﺣﻠﻪ ﺗﺤﻠﻴﻞ ﻣﺸﺨﺺ ﺷﺪﻩ ﺍﺳﺖ ﻭ‬
‫ﺑﺎﻧﻚ ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﺩﺭ ﺣﺎﻟﺘﻲ ﻗﺮﺍﺭ ﻣﻲ ﺩﻫﺪ ﻛﻪ ﻗﺒﻞ ﺍﺯ ﺧﺮﺍﺑﻲ ﺩﺭ ﺁﻥ ﺑﻮﺩﻩ ﺍﺳﺖ ‪.‬‬
‫‪ - 3‬ﻟﻐﻮ‪ ،‬ﺍﺛﺮﺍﺕ ﺗﺮﺍﻛﻨﺶ ﻧﺎﻣﻮﻓﻖ ﺭﺍ ﻟﻐﻮ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪48‬‬
‫ﻓﺼﻞ ‪:4‬‬
‫ﺍﻣﻨﻴﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‬

‫‪49‬‬
‫ﺗﻌﺮﻳﻒ ﺍﻳﻤﻨﻲ‪:‬‬
‫ﺍﻳﻤﻨﻲ ﻋﺒﺎﺭﺗﺴﺖ ﺍﺯ ﺣﻔﺎﻇﺖ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﻗﺒﺎﻝ ﺩﺳﺘﻴﺎﺑﻲ ﻏﻴﺮﻣﺠﺎﺯ‪ ،‬ﺗﻐﻴﻴﺮ ﻏﻴﺮ ﻣﺠﺎﺯ ﻳﺎ ﺗﺨﺮﻳﺐ ﺁﻧﻬﺎ ﻭ‬
‫ﻧﻴﺰ ﺩﺭ ﻗﺒﺎﻝ ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ ﺑﺎ ﺳﻮء ﻧﻴﺖ‪.‬‬

‫ﺗﻔﺎﻭﺕ ﺍﻳﻤﻨﻲ ﺑﺎ ﺟﺎﻣﻌﻴﺖ‪:‬‬

‫ﺩﺭ ﺍﻳﻤﻨﻲ ‪ :‬ﻣﺴﺌﻠﻪ ﺣﻔﺎﻇﺖ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﻣﻘﺎﺑﻞ ﻛﺎﺭﺑﺮ ﻏﻴﺮ ﻣﺠﺎﺯ ﻣﻄﺮﺡ ﺍﺳﺖ ﻭ ﺣﺼﻮﻝ ﺍﻃﻤﻴﻨﺎﻥ ﺍﺯ‬
‫ﺍﻳﻨﻜﻪ ﻛﺎﺭﺑﺮﺍﻥ ﺑﻪ ﺍﻧﭽﻪ ﻛﻪ ﺑﺪﺍﻥ ﺍﻗﺪﺍﻡ ﻣﻲ ﻭﺭﺯﻧﺪ ﻣﺠﺎﺯﻧﺪ‪.‬‬

‫ﺩﺭ ﺟﺎﻣﻌﻴﺖ ‪ :‬ﻧﻮﻋﻲ ﺣﻔﺎﻇﺖ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﻣﻘﺎﺑﻞ ﻋﻤﻠﻴﺎﺕ ﻛﺎﺭﺑﺮ ﻣﺠﺎﺯ ﺍﻋﻤﺎﻝ ﻣﻲ ﺷﻮﺩ ﻭ ﺣﺼﻮﻝ‬
‫ﺍﻃﻤﻴﻨﺎﻥ ﺍﺯ ﺍﻳﻨﻜﻪ ﺍﻗﺪﺍﻡ ﻛﺎﺭﺑﺮ ﻣﺠﺎﺯ‪ ،‬ﺻﺤﻴﺢ ﺍﺳﺖ ﻭ ﺻﺤﺖ ﻭ ﺩﻗﺖ ﺩﺍﺩﻩ ﻫﺎ ﺭﺍ ﺧﺪﺷﻪ ﺩﺍﺭ ﻧﻤﻲ ﻛﻨﺪ ‪.‬‬

‫ﻧﻤﻮﻧﻪﺍﻱ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﺳﺎﺯﮔﺎﺭﻱ ﻳﺎ ﺟﺎﻣﻌﻴﺖ‪:‬‬

‫‪Create table EV‬‬


‫‪S# NN‬‬
‫‪C# NN‬‬
‫‪P# NN‬‬
‫)‪Score decimal (2,2‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫)‪Check (score>=00.00 and score<=20.00‬‬

‫ﻗﻮﺍﻧﻴﻦ ﺟﺎﻣﻌﻴﺖ ﺩﺭ ﺍﺣﻜﺎﻡ ‪ DDL‬ﺑﻴﺎﻥ ﻣﻲﺷﻮﻧﺪ‪.‬‬

‫‪50‬‬
‫ﺷﺒﺎﻫﺖ ﺍﻳﻤﻨﻲ ﺑﺎ ﺟﺎﻣﻌﻴﺖ‪:‬‬
‫‪ ‬ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﺎ ﺍﺯ ﻭﺟﻮﺩ ﭘﺎﺭﻩ ﺍﻱ ﻗﻮﺍﻋﺪ ﻣﺤﺪﻭﺩﻳﺘﻬﺎ ﻛﻪ ﻛﺎﺭﺑﺮﺍﻥ ﻧﺒﺎﻳﺪ ﻧﻘﺾ‬
‫ﻛﻨﻨﺪ‪ ،‬ﺑﺎﻳﺪ ﺁﮔﺎﻩ ﺑﺎﺷﺪ‪.‬‬

‫‪ ‬ﻣﺤﺪﻭﺩﻳﺘﻬﺎ ﻭ ﻗﻮﺍﻋﺪ ﺑﺎﻳﺪ ﺑﻪ ﻧﺤﻮﻱ ﺗﻮﺻﻴﻒ ﺷﻮﻧﺪ ﻭ ﺩﺭ ﻛﺎﺗﺎﻟﻮگ ﻧﮕﻬﺪﺍﺭﻱ ﮔﺮﺩﻧﺪ ‪.‬‬

‫‪ ‬ﺑﺎﻳﺪ ﺭﻭﻱ ﻋﻤﻠﻴﺎﺕ ﻛﺎﺭﺑﺮ ﻧﻈﺎﺭﺕ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪.‬‬

‫ﺧﻄﺮﺍﺕ‪ :Threats‬ﺧﻄﺮ ﻫﺮ ﻭﺿﻌﻴﺖ ﻭ ﺭﻭﻳﺪﺍﺩﻱ ﺍﺳﺖ ﻛﻪ ﻋﻤﺪﺍ ﻳﺎ ﺳﻬﻮﺍ ﺭﻭﻱ ﺳﻴﺴﺘﻢ ﻭ ﺩﺭ‬
‫ﻧﺘﻴﺠﻪ ﺭﻭﻱ ﺳﺎﺯﻣﺎﻥ ﺗﺎﺛﻴﺮ ﻧﺎﻣﺴﺎﻋﺪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬

‫ﺭﺩﻩ ﺑﻨﺪﻱ ﺧﻄﺮﺍﺕ‪:‬‬


‫‪ ‬ﺧﻄﺮﺍﺕ ﻓﻴﺰﻳﻜﻲ‬

‫‪ ‬ﺧﻄﺮﺍﺕ ﻣﻨﻄﻘﻲ‬

‫ﺍﻧﻮﺍﻉ ﺧﻄﺮﺍﺕ‪:‬‬

‫‪ ‬ﺧﻄﺮﺍﺕ ﻏﻴﺮﻋﻤﺪﻱ)ﺍﺗﻔﺎﻗﻲ(‬

‫‪ ‬ﺩﺭﺧﻮﺍﺳﺖ ﺳﻬﻮﻱ ﺩﺍﺩﻩ ﺍﺯ ﺳﻮﻱ ﻛﺎﺭﺑﺮ ﻏﻴﺮ ﻣﺠﺎﺯ‬

‫‪ ‬ﺑﺮﻭﺯ ﺧﺮﺍﺑﻲ ﺳﺨﺖ ﺍﻓﺰﺍﺭﻱ‬

‫‪ ‬ﻗﻄﻊ ﺑﺮﻕ ﻭ ﺍﺯ ﺑﻴﻦ ﺭﻓﺘﻦ ﺩﺍﺩﻩ ﻫﺎ ﻭ ‪....‬‬

‫‪ ‬ﺧﻄﺮﺍﺕ ﻋﻤﺪﻱ‬

‫‪ ‬ﺍﺳﺘﺮﺍﻕ ﺳﻤﻊ‬

‫‪ ‬ﺳﻮء ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﮔﺬﺭﻭﺍژﻩ ﻳﻚ ﻛﺎﺭﺑﺮ ﻣﺠﺎﺯ‬

‫‪ ‬ﺗﻬﺪﻳﺪ ﻭ ﺍﺭﻋﺎﺏ ﻛﺎﺭﺑﺮﺍﻥ ﻣﺠﺎﺯ ﻭ ‪....‬‬

‫‪51‬‬
‫ﺷﻲء ﺍﻳﻤﻨﻲ‪:‬‬
‫‪ ‬ﺩﺍﺩﻩ ﻫﺎ )ﺍﺯ ﺳﻄﺢ ﺻﻔﺖ ﺗﺎ ﻛﻞ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﺎ(‬

‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻭ ﺗﺮﺍﻛﻨﺶ ﻫﺎ‬

‫‪ ‬ﻛﺎﺗﺎﻟﻮگ ﺳﻴﺴﺘﻢ‬

‫‪ ‬ﻧﺴﺨﻪ ﻫﺎﻱ ﭘﺸﺘﻴﺒﺎﻥ‬

‫‪ ‬ﻓﺎﻳﻞ ﻫﺎﻱ ﺛﺒﺖ‬

‫‪ ‬ﺧﻮﺩ ﺳﻴﺴﺘﻢ ﻣﺪﻳﺮﻳﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﺎ‬

‫‪ ‬ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ‬

‫‪ ‬ﺳﺨﺖ ﺍﻓﺰﺍﺭ‬

‫‪ ‬ﺷﺒﻜﻪ‬

‫‪ ‬ﻣﺤﻴﻂ ﻓﻴﺰﻳﻜﻲ‬

‫‪ ‬ﺍﻋﻀﺎ ﺗﻴﻢ ﻫﺎﻱ ﻣﺪﻳﺮﻳﺘﻲ‬

‫‪ ‬ﻛﺎﺭﺑﺮﺍﻥ ﺳﻴﺴﺘﻢ ﻫﺎ‬

‫ﺗﺪﺍﺑﻴﺮ ﺍﻳﻤﻨﻲ‪:‬‬

‫‪ ‬ﺗﺪﺍﺑﻴﺮ ﻏﻴﺮ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ‬

‫‪ ‬ﻭﺿﻊ ﺳﻴﺎﺳﺖ ﻫﺎﻱ ﺍﻳﻤﻨﻲ ﻭ ﺗﻌﻴﻴﻦ ﻃﺮﺡ ﻣﻘﺎﺑﻠﻪ‬

‫‪ ‬ﻛﻨﺘﺮﻝ ﺍﻓﺮﺍﺩ‬

‫‪ ‬ﺟﺎﻳﺪﻫﻲ ﺗﺠﻬﻴﺰﺍﺕ ﺩﺭ ﻣﻜﺎﻥ ﻫﺎﻱ ﺍﻣﻦ‬

‫‪ ‬ﺗﻨﻈﻴﻢ ﺗﻮﺍﻓﻖ ﻧﺎﻣﻪ ﻫﺎ ﺍﺯ ﺳﻮﻱ ﻃﺮﻑ ﺛﺎﻟﺚ‬

‫‪52‬‬
‫‪ ‬ﺗﻨﻈﻴﻢ ﺗﻮﺍﻓﻖ ﻧﺎﻣﻪ ﻫﺎﻱ ﻧﮕﻬﺪﺍﺭﻱ‬

‫‪ ‬ﻛﻨﺘﺮﻝ ﺩﺳﺘﻴﺎﺑﻲ ﻓﻴﺰﻳﻜﻲ ﺍﻓﺮﺍﺩ‬

‫‪ ‬ﺗﺪﺍﺑﻴﺮ ﻛﺎﻣﭙﻴﻮﺗﺮﻱ‬

‫‪ ‬ﺷﻨﺎﺳﺎﻳﻲ ﻛﺎﺭﺑﺮ‬

‫‪ ‬ﺗﺸﺨﻴﺺ ﺍﺻﻠﻴﺖ ﻛﺎﺭﺑﺮ‬

‫‪ ‬ﻣﺠﺎﺯ ﺷﻤﺎﺭﻱ ﻭ ﻣﺪﻳﺮﻳﺖ ﺁﻥ‬

‫‪ ‬ﻛﻨﺘﺮﻝ ﺩﺳﺘﻴﺎﺑﻲ‬

‫‪ ‬ﻛﻨﺘﺮﻝ ﺩﺳﺘﻴﺎﺑﻲ ﺍﺯ ﻃﺮﻳﻖ ﻗﻒﻝ ﮔﺬﺍﺭﻱ‬

‫‪ ‬ﻧﻬﺎﻥ ﻧﮕﺎﺭﻱ‬

‫‪ ‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﻔﻬﻮﻡ ﺩﻳﺪ ﺧﺎﺭﺟﻲ‬

‫‪ ‬ﻓﺮﺍﻳﻨﺪ ﺭﺩ ﮔﻴﺮﻱ‬

‫‪ ‬ﻛﻨﺘﺮﻝ ﮔﺮﺩﺵ ﺍﻃﻼﻋﺎﺕ‬

‫‪ ‬ﻛﻨﺘﺮﻝ ﺍﺳﺘﻨﺘﺎﺝ‬

‫ﺷﻨﺎﺳﺎﻳﻲ ﻛﺎﺭﺑﺮ) ‪( User Identification‬‬


‫‪ ‬ﺑﻪ ﻫﺮ ﻛﺎﺭﺑﺮ ﻳﻚ ﺷﻨﺎﺳﻪ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﺍﺯ ﻃﺮﻳﻖ ﺁﻥ ﺳﻴﺴﺘﻢ‪ ،‬ﻛﺎﺭﺑﺮ ﺭﺍ ﻣﻲ ﺷﻨﺎﺳﺪ ‪.‬‬

‫‪ ‬ﻛﺎﺭﺑﺮ ﻣﻤﻜﻦ ﺍﺳﺖ‪ :‬ﻣﻨﻔﺮﺩ‪ ،‬ﮔﺮﻭﻩ ﻛﺎﺭﺑﺮﺍﻥ ﻳﺎ ﺳﻠﺴﻠﻪ ﻣﺮﺍﺗﺐ ﻛﺎﺭﺑﺮﺍﻥ ﺑﺎﺷﺪ‪.‬‬

‫ﺗﺸﺨﻴﺺ ﺍﺻﻠﻴﺖ ﻛﺎﺭﺑﺮ)‪(User Authentication‬‬

‫‪ ‬ﺁﻳﺎ ﻛﺎﺭﺑﺮ ﻫﻤﺎﻥ ﺍﺳﺖ ﻛﻪ ﺍﺩﻋﺎ ﻣﻲ ﻛﻨﺪ ﻳﺎ ﺍﺣﻴﺎﻧﺎ ﻣﺠﻌﻮﻝ ﺍﺳﺖ!!!‬

‫‪ ‬ﻣﺒﺘﻨﻲ ﺑﺮ ﻳﻚ ﻳﺎ ﭼﻨﺪ ﻣﻮﺭﺩ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬


‫‪53‬‬
‫‪ ‬ﭼﻴﺰﻱ ﻛﻪ ﻛﺎﺭﺑﺮ ﺑﺪﺍﻧﺪ‪.‬‬

‫‪ ‬ﭼﻴﺰﻱ ﻛﻪ ﻛﺎﺭﺑﺮ ﻣﺎﻟﻚ ﺁﻥ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﭼﻴﺰﻱ ﻛﻪ ﻛﺎﺭﺑﺮ ﺍﺯ ﻧﻈﺮ ﺑﻴﻮﻟﻮژﻳﻚ ﺩﺍﺭﺩ‪.‬‬

‫‪ ‬ﺍﻳﻦ ﺍﻣﻜﺎﻧﺎﺕ ﻭﺟﻮﺩ ﺩﺍﺭﻧﺪ‪:‬‬

‫‪ ‬ﮔﺬﺭ ﻭﺍژﻩ‬

‫‪ ‬ﺍﺛﺮ ﺍﻧﮕﺸﺖ‬

‫‪ ‬ﺍﻟﮕﻮﻱ ﺷﺒﻜﻪ ﭼﺸﻢ‬

‫‪ ‬ﻛﺎﺭﺕ ﺍﻟﻜﺘﺮﻭﻧﻴﻜﻲ‬

‫‪ ‬ﭘﺮﺳﺸﻨﺎﻣﻪ‬

‫‪ ‬ﻧﺸﺎﻥ‬

‫‪ ‬ﺑﻌﻀﻲ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﻓﻴﺰﻳﻮﻟﻮژﻳﻚ‬

‫ﻣﺠﺎﺯ ﺷﻤﺎﺭﻱ)‪(Authorization‬‬
‫ﻋﺒﺎﺭﺗﺴﺖ ﺍﺯ ﺍﻋﻄﺎﻱ ﻳﻚ ﺣﻖ ﻳﺎ ﺍﻣﺘﻴﺎﺯ ﻳﺎ ﻣﺠﻮﺯ ﺑﻪ ﻛﺎﺭﺑﺮ ﺑﻪ ﻧﺤﻮﻱ ﻛﻪ ﻛﺎﺭﺑﺮ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﻥ ﺩﺭ‬
‫ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﻮﺭﺩ ﻧﻈﺮﺵ ﻣﺠﺎﺯ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﺑﺮﺍﻱ ﺍﻗﺪﺍﻣﺎﺕ ﺯﻳﺮ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﻛﺎﺭﺑﺮ ﺍﻣﺘﻴﺎﺯ ﺩﺍﺩ‪:‬‬


‫‪ ‬ﺍﻳﺠﺎﺩ ﻭ ﺣﺬﻑ ﻣﻴﺪﺍﻥ‬

‫‪ ‬ﺍﻳﺠﺎﺩ ﻭ ﺣﺬﻑ ﺭﺍﺑﻄﻪ )ﺟﺪﻭﻝ( ﻣﺒﻨﺎ‬

‫‪ ‬ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﻳﺎ ﺣﺬﻑ ﻛﺮﺩﻥ ﺳﺘﻮﻧﻲ ﺍﺯ ﺟﺪﻭﻝ ﻣﺒﻨﺎ‬

‫‪ ‬ﺍﻳﺠﺎﺩ ﻭ ﺣﺬﻑ ﺩﻳﺪ‬

‫‪54‬‬
‫‪ ‬ﺍﻳﺠﺎﺩ ﻭ ﺣﺬﻑ ﻳﻚ ﻣﺤﺪﻭﺩﻳﺖ ﺟﺎﻣﻌﻴﺘﻲ‬

‫‪ ‬ﺍﻳﺠﺎﺩ ﻭ ﺣﺬﻑ ﻳﻚ ﺍﺳﺘﺮﺍﺗﮋﻱ ﺩﺳﺘﻴﺎﺑﻲ‬

‫‪ ‬ﺍﻋﻄﺎ ﻳﺎ ﺳﻠﺐ ﻳﻚ ﺣﻖ ﺩﺳﺘﻴﺎﺑﻲ ﺑﺎ ﻣﻨﻈﻮﺭ ﻣﺸﺨﺺ‬

‫‪ ‬ﺩﺭﺧﻮﺍﺱﺕ ﻳﻚ ﺟﺪﻭﻝ ﻟﺤﻈﻪ ﺍﻱ‬

‫‪ ‬ﺑﺎﺯﻳﺎﺑﻲ ﺍﺯ ﺟﺪﻭﻝ ﻣﺒﻨﺎ ﻳﺎ ﺟﺪﻭﻝ ﻣﺸﺘﻖ‬

‫‪ ‬ﺩﺭﺝ ﺩﺭ ﺟﺪﻭﻝ‬

‫‪ ‬ﺣﺬﻑ ﺍﺯ ﺟﺪﻭﻝ‬

‫‪ ‬ﺑﻬﻨﮕﺎﻡ ﺳﺎﺯﻱ ﺟﺪﻭﻝ‬

‫‪ ‬ﺗﻮﻟﻴﺪ ﺁﺭﺷﻴﻮ ﺍﺯ ﺭﻭﻱ ﺟﺪﻭﻝ‬

‫ﺩﺳﺘﻮﺭﻫﺎﻱ ‪ GRANT‬ﻭ ‪REVOKE‬‬


‫‪ Grant‬ﻭ ‪ Revoke‬ﭘﻴﺎﺩﻩﺳﺎﺯﻱ ﻣﻲ ﺷﻮﺩ‪ .‬ﺑﺮﺍﻱ ﺍﻋﻄﺎﻱ‬ ‫ﻣﺠﺎﺯﺷﻤﺎﺭﻱ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ‬
‫ﻣﺠﻮﺯﻫﺎﻱ ﻣﻮﺭﺩ ﻧﻈﺮ ﺑﻪ ﻛﺎﺭﺑﺮﺍﻥ ﺍﺯ ﺩﺳﺘﻮﺭ ‪ Grant‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲﺷﻮﺩ‪ .‬ﻧﻤﻮﻧﻪﺍﻱ ﺍﺯ ﻛﺎﺭﺑﺮﺩ ﺍﻳﻦ ﺩﺳﺘﻮﺭ ﺑﻪ‬
‫ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬

‫;‪Grant select (Name, Avg) , Delete on (student) to Ali‬‬


‫ﺩﺳﺘﻮﺭ ﻓﻮﻕ ﺑﻪ ﺍﻳﻦ ﻣﻌﻨﻲ ﺍﺳﺖ ﻛﻪ ﻣﺠﻮﺯ ﺑﺎﺯﻳﺎﺑﻲ ﻓﻴﻠﺪﻫﺎﻱ ﻧﺎﻡ ﻭ ﻣﻌﺪﻝ ﻭ ﻧﻴﺰ ﻣﺠﻮﺯ ﺣﺬﻑ ﺭﻛﻮﺭ ﺩ ﺍﺯ‬
‫ﺟﺪﻭﻝ ‪ student‬ﺑﻪ ﻛﺎﺭﺑﺮ ‪ Ali‬ﺍﻋﻄﺎ ﺷﻮﺩ‪.‬‬
‫ﺑﺮﺍﻱ ﺳﻠﺐ )ﻟﻐﻮ ﻳﺎ ﺑﺎﺯﭘﺲ ﮔﻴﺮﻱ( ﻣﺠﻮﺯﻫﺎﻱ ﺍﻋﻄﺎﺷﺪﻩ ﺍﺯ ﻛﺎﺭﺑﺮﺍﻥ ﺍﺯ ﺩﺳﺘﻮﺭ ‪ Revoke‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ‪-‬‬
‫ﺷﻮﺩ‪.‬‬

‫‪55‬‬
:‫ﻧﻤﻮﻧﻪ ﺍﻱ ﺍﺯ ﻗﻮﺍﻋﺪ ﻳﺎ ﻣﺤﺪﻭﺩﻳﺖ ﻫﺎﻱ ﺍﻳﻤﻨﻲ‬

:‫ﻛﻨﺘﺮﻝ ﺩﺳﺘﻴﺎﺑﻲ‬
DAC (Discretionary Access Control) ‫ ﺭﻭﺵ‬

MAC (Mandatory Access Control) ‫ ﺭﻭﺵ‬

RBAC (Role Based Access Control) ‫ ﺭﻭﺵ ﻣﺒﺘﻨﻲ ﺑﺮ ﻧﻘﺶ‬

56
‫ﺭﻭﺵ ﺍﺧﺘﻴﺎﺭﻱ )‪(DAC‬‬

‫‪ ‬ﺍﻳﻦ ﺭﻭﺵ ﺑﺮﺍﻱ ﻛﻨﺘﺮﻝ ﺩﺳﺘﻴﺎﺑﻲ ﺍﻣﺘﻴﺎﺯﺍﺗﻲ ﺑﻪ ﻛﺎﺭﺑﺮﺍﻥ ﺍﻋﻄﺎ ﻣﻲ ﻛﻨﺪ ﻭ ﻫﺮﮔﺎﻩ ﻻﺯﻡ‬
‫ﺑﺎﺷﺪ ﺍﺯ ﺁﻧﻬﺎ ﺳﻠﺐ ﻣﻲ ﻧﻤﺎﻳﺪ‪.‬‬

‫‪ ‬ﻛﺎﺭﺑﺮﺍﻥ ﻣﺨﺘﻠﻒ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺣﻘﻮﻕ ﻣﺘﻔﺎﻭﺕ ﺭﻭﻱ ﺷﻴﺊ ﻭﺍﺣﺪ ﺩﺍﺩﻩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪.‬‬

‫‪ ‬ﻣﺪﻳﺮﻳﺖ ﻣﺠﺎﺯ ﺷﻤﺎﺭﻱ ﻟﺰﻭﻣﺎ ﺣﺎﻟﺖ ﻣﺘﻤﺮﻛﺰ ﻧﺪﺍﺭﺩ ﻭ ﺣﺎﻻﺕ ﺯﻳﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﻭﺟﻮﺩ‬
‫ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪:‬‬

‫‪ .1‬ﻣﺪﻳﺮﻳﺖ ﻣﺘﻤﺮﻛﺰ‪ :‬ﻳﻚ ﻧﻔﺮ ﺍﺟﺎﺯﻩ ﺩﻫﻨﺪﻩ ﻣﺠﻮﺯﻫﺎ ﺭﺍ ﻣﻲ ﺩﻫﺪ ﻭ ﺳﻠﺐ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪ .2‬ﻣﺪﻳﺮﻳﺖ ﺳﻠﺴﻠﻪ ﻣﺮﺍﺗﺒﻲ ‪ :‬ﻳﻚ ﻧﻔﺮ ﻣﺴﺌﻮﻝ ﻭﺍﮔﺬﺍﺭﻱ ﻣﺴﺌﻮﻟﻴﺘﻬﺎﻱ ﻣﺪﻳﺮﻳﺘﻲ ﺑﻪ ﺳﺎﻳﺮ‬
‫ﻣﺪﻳﺮﺍﻥ ﺍﺳﺖ ‪ .‬ﺍﻳﻦ ﻣﺪﻳﺮﺍﻥ ﺧﻮﺩ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﻣﺠﻮﺯ ﻫﺎ ﺭﺍ ﺑﻪ ﻛﺎﺭﺑﺮﺍﻥ ﺑﺪﻫﻨﺪ ﻳﺎ ﺳﻠﺐ‬
‫ﻛﻨﻨﺪ‪.‬‬

‫‪ .3‬ﻣﺪﻳﺮﻳﺖ ﺟﻤﻌﻲ )ﺗﻌﺎﻭﻧﻲ(‪ :‬ﺑﺎ ﻫﻤﻴﺎﺭﻱ ﻭ ﻫﻤﻜﺎﺭﻱ ﭼﻨﺪ ﻧﻔﺮ ﺍﻋﻄﺎ ﻣﺠﻮﺯ ﺍﻧﺠﺎﻡ ﻣﻲ‬
‫ﺷﻮﺩ‪.‬‬

‫‪ .4‬ﻣﺪﻳﺮﻳﺖ ﺗﻤﻠﻜﻲ ‪ :‬ﻛﺎﺭﺑﺮ ﺍﻳﺠﺎﺩ ﻛﻨﻨﺪﻩ ﻫﺮ ﺷﻴﺊ ﻣﺎﻟﻚ ﺁﻥ ﺍﺳﺖ ﻭ ﻣﺠﻮﺯﻫﺎ ﺭﺍ ﺍﻭ ﻣﻲ‬
‫ﺩﻫﺪ‪.‬‬

‫‪ .5‬ﻣﺪﻳﺮﻳﺖ ﻧﺎﻣﺘﻤﺮﻛﺰ ‪ :‬ﻣﺎﻟﻚ ﺷﻴﺊ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺧﺘﻴﺎﺭ ﻣﺪﻳﺮﻳﺖ ﻣﺠﺎﺯ ﺷﻤﺎﺭﻱ ﺁﻥ ﺭﺍ ﺑﻪ‬
‫ﺩﻳﮕﺮﺍﻥ ﺗﻔﻮﻳﺾ ﻛﻨﺪ‪.‬‬

‫‪ .6‬ﺗﺮﻛﻴﺐ ﺣﺎﻻﺕ ﻗﺒﻠﻲ‪.‬‬

‫ﻗﻮﺍﻋﺪ ﻛﻨﺘﺮﻝ ﺍﻳﻤﻨﻲ‪:‬‬

‫‪ ‬ﻫﺮ ﻗﺎﻋﺪﻩ ﺩﺍﺭﺍﻱ ﺍﺟﺰﺍﻱ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬

‫‪ ‬ﻧﺎﻡ ﻗﺎﻋﺪﻩ‬

‫‪57‬‬
‫ ﻳﻚ ﻳﺎ ﺑﻴﺶ ﺍﺯ ﻳﻚ ﺍﻣﺘﻴﺎﺯ‬

‫ ﺣﻴﻄﻪ ﺍﻋﻤﺎﻝ ﻗﺎﻋﺪﻩ‬

‫ ﻳﻚ ﻳﺎ ﺑﻴﺶ ﺍﺯ ﻳﻚ ﻛﺎﺭﺑﺮ‬

‫ ﺍﻗﺪﺍﻡ ﺩﺭ ﺻﻮﺭﺕ ﻋﺪﻡ ﺭﻋﺎﻳﺖ ﻗﺎﻋﺪﻩ‬

CREATE SECURITY RULE <rule name>


GRANT <privileges list>
ON <expression>
TO <users>
ON VIOLATION <action>

:‫ﺑﺮﺍﻱ ﺣﺬﻑ ﻗﺎﻋﺪﻩ ﺍﺯ ﺩﺳﺘﻮﺭ ﺯﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‬


DESTROY SECURITY RULE <rule name>

:‫ﻣﺜﺎﻝ‬
CREATE SECURITY RULE SR1
CREDIT) COTITLE, RETRIEVE (COID, GRANT
COT.CEID=D202 COT WHERE COT.DEID=D101 OR ON
U2 U1, TO
ON VIOLATION REJECT

:‫ﻣﺰﺍﻳﺎ ﻭ ﻣﻌﺎﻳﺐ‬

58
‫‪ ‬ﻣﺰﻳﺖ ﺭﻭﺵ ﺍﺧﺘﻴﺎﺭﻱ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺑﺴﻴﺎﺭ ﺍﻧﻌﻄﺎﻑ ﭘﺬﻳﺮ ﺍﺳﺖ ‪.‬‬

‫‪ ‬ﻋﻴﺐ ﺁﻥ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﻛﺎﺭﺑﺮ ﻏﻴﺮﻣﺠﺎﺯ ﺍﺯﻃﺮﻳﻖ ﻛﺎﺭﺑﺮ ﻣﺠﺎﺯ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﻣﺘﻴﺎﺯﺍﺗﻲ ﺭﺍ ﻛﺴﺐ ﻛﻨﺪ ‪.‬‬
‫ﺍﺯ ﺍﻳﻦ ﻧﻈﺮ ﺭﻭﺵ ﻗﺎﺑﻞ ﺍﻃﻤﻴﻨﺎﻧﻲ ﻧﻴﺴﺖ ‪ .‬ﺑﻌﻼﻭﻩ ﻛﺎﺭﺑﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﻣﺘﻴﺎﺯ ﺧﻮﺩ ﺭﺍ ﺑﻪ ﻛﺎﺭﺑﺮ ﺩﻳﮕﺮ‬
‫ﺍﻋﻄﺎ ﻛﻨﺪ‪) ،‬ﺍﻧﺘﺸﺎﺭ ﺍﻣﺘﻴﺎﺯ( ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﻋﻤﻠﻴﺎﺕ ﺳﻠﺐ ﺍﻣﺘﻴﺎﺯ ﺑﺎ ﻣﺸﻜﻼﺗﻲ ﻣﻮﺍﺟﻪ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﺍﻋﻄﺎ ﻭ ﺳﻠﺐ ﺍﻣﺘﻴﺎﺯ‪:‬‬


‫‪ U1‬ﺍﻣﺘﻴﺎﺯ ‪ p1‬ﺭﺍ ﺑﻪ ‪ U2‬ﻭ‪ U3‬ﻣﻲ ﺩﻫﺪ‪ U2.‬ﻭ ‪ U3‬ﻣﺘﻘﺎﺑﻼ ﺍﻳﻦ ﺍﻣﺘﻴﺎﺯ ﺭﺍ ﺑﻪ ﻫﻢ ﻣﻲ ﺩﻫﻨﺪ ‪.‬‬

‫ﺣﺎﻝ ‪ U1‬ﺍﻣﺘﻴﺎﺯ ‪ p1‬ﺭﺍ ﺍﺯ ‪ U2‬ﺳﻠﺐ ﻣﻲ ﻛﻨﺪ‪ U2 .‬ﻫﻨﻮﺯ ﺍﺯ ﻃﺮﻳﻖ ‪ U3‬ﺍﻳﻦ ﺍﻣﺘﻴﺎﺯ ﺭﺍ ﺩﺭ ﺍﺧﺘﻴﺎﺭ ﺩﺍﺭﺩ‪.‬‬

‫ﺣﺘﻲ ﺍﮔﺮ ‪ U1‬ﺍﺯ ‪ U3‬ﻧﻴﺰ ﺳﻠﺐ ﺍﻣﺘﻴﺎﺯ ﻧﻤﺎﻳﺪ‪ ،‬ﺑﺎﺯ ﻫﻢ ﺍﻣﺘﻴﺎﺯ ﺍﺯ ‪ U2‬ﻭ ‪ U3‬ﺳﻠﺐ ﻧﻤﻲ ﺷﻮﺩ‪.‬‬

‫ﺗﻜﻨﻴﻚ ﻫﺎﻱ ﻣﺤﺪﻭﺩ ﻛﺮﺩﻥ ﺍﻧﺘﺸﺎﺭ ﺍﻣﺘﻴﺎﺯ‪:‬‬

‫‪59‬‬
‫‪ ‬ﺍﻧﺘﺸﺎﺭ ﺍﻓﻘﻲ‬

‫‪ ‬ﺑﺎ ﻣﺸﺨﺺ ﻛﺮﺩﻥ ﻳﻚ ﻋﺪﺩ ﺻﺤﻴﺢ ‪ i‬ﺑﺮﺍﻱ ﻛﺎﺭﺑﺮ ﺩﺍﺭﺍﻱ ﻳﻚ ﺍﻣﺘﻴﺎﺯ‪ ،‬ﺑﻪ ﺍﻳﻦ ﻛﺎﺭﺑﺮ ﺍﺟﺎﺯﻩ‬
‫ﺍﻋﻄﺎﻱ ﺍﻣﺘﻴﺎﺯ ﺑﻪ ﺣﺪﺍﻛﺜﺮ ‪ i‬ﻛﺎﺭﺑﺮ ﺩﻳﮕﺮ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺍﻧﺘﺸﺎﺭ ﻋﻤﻮﺩﻱ‬

‫‪ ‬ﺩﺭ ﻭﺍﻗﻊ ﻋﻤﻖ ﻣﺴﻴﺮ ﮔﺮﺍﻑ ﻣﺠﺎﺯ ﺷﻤﺎﺭﻱ ﻛﻨﺘﺮﻝ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﻛﻪ ﺍﮔﺮ ﻛﺎﺭﺑﺮ‬
‫‪ U1‬ﺩﺍﺭﺍﻱ ﻳﻚ ﺍﻣﺘﻴﺎﺯ ﺑﺎﺷﺪ‪ ،‬ﺑﺎ ﺗﻌﻴﻴﻦ ﻣﻘﺪﺍﺭ ‪ j>0‬ﺑﺮﺍﻱ ﺍﻳﻦ ﻛﺎﺭﺑﺮ ﺑﻪ ‪ U1‬ﺍﺟﺎﺯﻩ‬
‫ﺍﻋﻄﺎﻱ ﺍﻣﺘﻴﺎﺯ ﺑﻪ ‪ U2‬ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‪ .‬ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ‪ U1‬ﻳﻚ ﻭﺍﺣﺪ ﺍﺯ ‪ j‬ﻛﻢ ﻣﻲ ﻛﻨﺪ ﻭ‬
‫ﺩﺭ ﻧﺘﻴﺠﻪ ‪ U2‬ﻓﻘﻂ ﺑﻪ ‪ j-1‬ﻛﺎﺭﺑﺮ ﺩﻳﮕﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﺁﻥ ﺍﻣﺘﻴﺎﺯ ﺭﺍ ﺑﻄﻮﺭ ﻋﻤﻮﺩﻱ ﺍﻋﻄﺎ‬
‫ﻛﻨﺪ‪ .‬ﻫﻤﻴﻨﻄﻮﺭ ﺍﻳﻦ ﺭﻭﺍﻝ ﺗﻜﺮﺍﺭ ﻣﻲ ﺷﻮﺩ ﺗﺎ ﺯﻣﺎﻧﻴﻜﻪ ﻣﻘﺪﺍﺭ ‪ j‬ﺻﻔﺮ ﺷﻮﺩ‪.‬‬

‫ﺭﻭﺵ ﺍﺟﺒﺎﺭﻱ)‪( MAC‬‬


‫‪ ‬ﺍﻳﻦ ﺭﻭﺵ “ﻳﺎ ﻫﻤﻪ ﻳﺎ ﻫﻴﭻ ” ﺍﺳﺖ‪.‬‬

‫‪ ‬ﻳﻚ ﻛﺎﺭﺑﺮ ﻳﺎ ﺍﻣﺘﻴﺎﺯ ﺍﻧﺠﺎﻡ ﻳﻚ ﻋﻤﻞ ﺭﺍ ﺩﺍﺭﺩ ﻳﺎ ﻧﺪﺍﺭﺩ‪.‬‬

‫‪ ‬ﺍﻳﻦ ﺭﻭﺵ ﺩﺭ ﻣﺤﻴﻂ ﻫﺎﻱ ﺑﺴﻴﺎﺭ ﻧﻈﻢ ﻣﻨﺪ ﻣﺜﻞ ﻣﺤﻴﻂ ﻧﻈﺎﻣﻲ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺍﺳﺖ ‪.‬‬

‫ﺳﻄﺢ ﻣﺤﺮﻣﺎﻧﮕﻲ ﺩﺍﺩﻩ ﻫﺎ ﻭ ﻛﺎﺭﺑﺮﺍﻥ‪:‬‬


‫‪ ‬ﺑﻪ ﻫﺮ ﺷﻲء ﺩﺍﺩﻩ ﺍﻱ ﻳﻚ ﻋﺪﺩ ﻛﻪ ﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﺳﻄﺢ ﻣﺤﺮﻣﺎﻧﮕﻲ ﺁﻥ ﺍﺳﺖ ﻣﻨﺘﺴﺐ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ ‬ﺑﻌﻼﻭﻩ ﻫﺮ ﻛﺎﺭﺑﺮ ﻧﻴﺰ ﻳﻚ ﻣﺠﻮﺯ ﺑﺮﺍﻱ ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺳﻄﺢ ﻣﺸﺨﺼﻲ ﺍﺯ ﺷﻴﺊ ﺩﺍﺩﻩ ﺍﻱ ﺩﺍﺭﺩ ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺗﻨﻬﺎ ﻛﺎﺭﺑﺮ ﺩﺍﺭﺍﻱ ﻣﺠﻮﺯ ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﻳﻚ ﺷﻴﺊ ﺩﺍﺩﻩ ﺍﻱ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﺁﻥ ﺩﺳﺘﻴﺎﺑﻲ‬
‫ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬

‫‪ ‬ﺩﺍﺩﻩ ﻫﺎ ﺑﻪ ﭼﻬﺎﺭ ﺭﺩﻩ ﺯﻳﺮ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ‪:‬‬

‫‪60‬‬
‫‪ ‬ﺧﻴﻠﻲ ﺳﺮﻱ )‪TS (Top Secret‬‬

‫‪ ‬ﺳﺮﻱ )‪S (Secret‬‬

‫‪ ‬ﻣﺤﺮﻣﺎﻧﻪ )‪C (Confidential‬‬

‫‪ ‬ﺭﺩﻩ ﺑﻨﺪﻱ ﻧﺸﺪﻩ )‪U (Unclassified‬‬

‫ﺭﺍﺑﻄﻪ ﺑﻴﻦ ﺁﻧﻬﺎ ﺑﻪ ﺍﻳﻦ ﺷﻜﻞ ﺍﺳﺖ‪:‬‬

‫‪TS>S>C>U‬‬

‫ﻛﺎﺭﺑﺮﺍﻥ ﻧﻴﺰ ﺑﻪ ﺭﺩﻩ ﻫﺎﻱ ﺯﻳﺮ ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﻧﺪ‪:‬‬


‫‪ ‬ﺭﺩﻩ ﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ ﺳﻄﺢ ﻣﺤﺮﻣﺎﻧﮕﻲ ﺩﺍﺩﻩ ﺭﺍ ﺑﺎ )‪ cl(D‬ﻭ ﺭﺩﻩ ﻣﺠﻮﺯ ﻛﺎﺭﺑﺮ ﺭﺍ ﺑﺎ )‪cl(U‬‬
‫ﻧﻤﺎﻳﺶ ﻣﻲ ﺩﻫﻴﻢ‪.‬‬

‫‪ ‬ﺧﺼﻮﺻﻴﺖ ﺍﻳﻤﻨﻲ ﺳﺎﺩﻩ‪ :‬ﻛﺎﺭﺑﺮ ‪ U‬ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺩﺍﺩﻩ ‪ D‬ﺭﺍ ﺑﺨﻮﺍﻧﺪ ﻣﮕﺮ‬
‫ﺍﻳﻨﻜﻪ‪cl(U)>=cl(D) :‬‬

‫‪ ‬ﺧﺼﻮﺻﻴﺖ ﺳﺘﺎﺭﻩ ﺩﺍﺭ‪ :‬ﻛﺎﺭﺑﺮ ‪ U‬ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺩﺍﺩﻩ ‪ D‬ﺭﺍ ﺑﻨﻮﻳﺴﺪ ﻣﮕﺮ‬
‫ﺍﻳﻨﻜﻪ‪cl(U)<=cl(D) :‬‬

‫ﻣﺜﺎﻝ‪:‬‬
‫‪ ‬ﺭﺍﺑﻄﻪ ﻫﺎﻱ ‪ STT‬ﻭ ‪ STCOT‬ﺭﺍ ﺩﺭ ﻧﻈﺮ ﻣﻲ ﮔﻴﺮﻳﻢ‪.‬‬

‫‪cl(STT)=C & cl(STCOT)=TS ‬‬


‫ﺍﺳﺘﺎﺩ‪TS:‬‬ ‫ﻛﺎﺭﻣﻨﺪ ﺁﻣﻮﺯﺵ‪S:‬‬ ‫‪ ‬ﺩﺍﻧﺸﺠﻮ‪C:‬‬

‫ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﺩﺳﺘﻴﺎﺑﻲ ﻛﺎﺭﺑﺮﺍﻥ ﻛﻨﺘﺮﻝ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺭﻭﺵ ﻣﺒﺘﻨﻲ ﺑﺮ ﻧﻘﺶ)‪(RBAC‬‬


‫‪61‬‬
‫‪ ‬ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺍﺟﺎﺯﻩ ﺩﺳﺘﻴﺎﺑﻲ ﻛﺎﺭﺑﺮ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ‪ ،‬ﻭﺍﺑﺴﺘﻪ ﺑﻪ ﻧﻘﺶ ﻛﺎﺭﺑﺮ ﺩﺭ ﺳﺎﺯﻣﺎﻥ ﺍﺳﺖ ‪.‬‬

‫‪ ‬ﻛﺎﺭﺑﺮﺍﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﺍﻋﻀﺎ ﻧﻘﺸﻬﺎ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﻧﺪ ﻭ ﻫﺮ ﻛﺎﺭﺑﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﺠﻮﺯ ﻣﺮﺑﻮﻁ ﺑﻪ ﻧﻘﺶ‬
‫ﺧﻮﺩ ﺭﺍ ﺑﺮﺍﻱ ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭﻳﺎﻓﺖ ﻛﻨﺪ ‪.‬‬

‫‪ ‬ﺑﺮﺍﻱ ﻭﻇﺎﻳﻒ ﻛﺎﺭﻱ ﻫﺮ ﻓﺮﺩ ﻳﺎ ﮔﺮﻭﻩ ﺩﺍﺭﺍﻱ ﻭﻇﺎﻳﻒ ﻣﺸﺎﺑﻪ ﺩﺭ ﺳﺎﺯﻣﺎﻥ‪ ،‬ﻧﻘﺶ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﻛﻨﺘﺮﻝ ﺍﻳﻤﻨﻲ ﭼﻨﺪ ﺳﻄﺤﻲ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍﺑﻄﻪ ﺍﻱ‪:‬‬


‫ﻣﻲ ﺗﻮﺍﻥ ﻋﻼﻭﻩ ﺑﺮ ﺍﻋﻤﺎﻝ ﻣﺤﺪﻭﺩﻳﺖ ﺍﻳﻤﻨﻲ ﺭﻭﻱ ﺭﺍﺑﻄﻪ‪ ،‬ﻣﺤﺪﻭﺩﻳﺖ ﺭﺍ ﺩﺭ ﺳﻄﺢ ﺗﺎﭘﻞ ﻭ ﺣﺘﻲ ﺻﻔﺖ‬
‫ﻫﻢ ﺍﻋﻤﺎﻝ ﻛﺮﺩ‪.‬‬

‫ﺑﺮﺍﻱ ﺍﻋﻤﺎﻝ ﺿﺎﺑﻄﻪ ﺍﻳﻤﻨﻲ ﺩﺭ ﺳﻄﺢ ﺻﻔﺖ ﺑﻪ ﻫﺮ ﺻﻔﺖ ‪ Ai‬ﻳﻚ ﺻﻔﺖ ﺭﺩﻩ ﺑﻨﺪﻱ ‪ C‬ﻣﻦﻅّﻡ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ TC‬ﺑﻪ ﺻﻔﺎﺕ ﺭﺍﺑﻄﻪ ﺍﺿﺎﻓﻪ ﻣﻲ‬ ‫ﺑﺮﺍﻱ ﺍﻋﻤﺎﻝ ﺿﺎﺑﻄﻪ ﺍﻳﻤﻨﻲ ﺩﺭ ﺳﻄﺢ ﺗﺎﭘﻞ‪ ،‬ﺻﻔﺖ ﺭﺩﻩ ﺑﻨﺪﻱ ﺗﺎﭘﻞ‬
‫ﺷﻮﺩ‪.‬‬

‫)‪R (A1,C1, A2, C2, … ,An, Cn, TC‬‬

‫ﻣﺜﺎﻝ‪:‬‬

‫ﺍﮔﺮ ﺍﻳﻦ ﺭﺍﺑﻄﻪ ﺭﺍ ﺑﺮﺍﻱ ﻛﺎﺭﺑﺮﺍﻥ ﺑﺎ ﻣﺠﻮﺯ ﺭﺩﻩ ‪ C‬ﻓﻴﻠﺘﺮ ﻛﻨﻴﻢ‪:‬‬

‫‪62‬‬
‫ﻭ ﺍﮔﺮ ﺑﺮﺍﻱ ﻛﺎﺭﺑﺮ ﺑﺎ ﻣﺠﻮﺯ ‪ U‬ﻓﻴﻠﺘﺮ ﻛﻨﻴﻢ‪:‬‬

‫ﻛﻨﺘﺮﻝ ﺩﺳﺘﻴﺎﺑﻲ ﺍﺯ ﻃﺮﻳﻖ ﻗﻔﻞ ﮔﺬﺍﺭﻱ‪:‬‬


‫ﻣﻲ ﺗﻮﺍﻥ ﺑﺎ ﻗﻔﻞ ﮔﺬﺍﺭﻱ ﺭﻭﻱ ﻭﺍﺣﺪﻫﺎﻱ ﺩﺍﺩﻩ ﺍﻱ ﺩﺭ ﭼﻨﺪﻳﻦ ﺳﻄﺢ‪ ،‬ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺁﻧﻬﺎ ﺗﻮﺳﻂ ﻛﺎﺭﺑﺮﺍﻥ ﺭﺍ‬
‫ﻛﻨﺘﺮﻝ ﻛﺮﺩ‪.‬‬

‫ﺭﻣﺰ ﻧﮕﺎﺭﻱ)‪(Encryption‬‬
‫ﻋﺒﺎﺭﺗﺴﺖ ﺍﺯ ﻛﺪﮔﺬﺍﺭﻱ ﺩﺍﺩﻩ ﻫﺎ ﺑﻮﺳﻴﻠﻪ ﻳﻚ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺧﺎﺹ ﺑﻪ ﻧﺤﻮﻱ ﻛﻪ ﻛﺎﺭﺑﺮ ﻧﺘﻮﺍﻧﺪ ﺑﺪﻭﻥ‬
‫ﺩﺍﺷﺘﻦ ﻛﻠﻴﺪ ﺭﻣﺰ ﮔﺸﺎﻳﻲ ﺩﺍﺩﻩ ﻫﺎ ﺭﺍ ﺑﺨﻮﺍﻧﺪ‪.‬‬

‫ﺍﺟﺰﺍﻱ ﺳﻴﺴﺘﻢ ﺭﻣﺰ ﻧﮕﺎﺭﻱ‪:‬‬


‫‪ ‬ﻛﻠﻴﺪ ﺭﻣﺰ ﻧﮕﺎﺭﻱ‬

‫‪ ‬ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﻣﺰ ﻧﮕﺎﺭﻱ‬

‫‪ ‬ﻛﻠﻴﺪ ﺭﻣﺰ ﮔﺸﺎﻳﻲ‬

‫‪63‬‬
‫‪ ‬ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﻣﺰ ﮔﺸﺎﻳﻲ‬

‫ﺍﮔﺮ ﺍﺯ ﻳﻚ ﻛﻠﻴﺪ ﺑﺮﺍﻱ ﺭﻣﺰﻧﮕﺎﺭﻱ ﻭ ﺭﻣﺰ ﮔﺸﺎﻳﻲ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪ ،‬ﺳﻴﺴﺘﻢ ﺭﻣﺰ ﻧﮕﺎﺭﻱ ﻣﺘﻘﺎﺭﻥ ﺍﺳﺖ ﻭ ﺩﺭ‬
‫ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ﻧﺎﻣﺘﻘﺎﺭﻥ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬

‫*** ﺍﻟﮕﻮﺭﻳﺘﻢ ‪ RSA‬ﻧﻤﻮﻧﻪ ﺭﻣﺰﻧﮕﺎﺭﻱ ﻧﺎﻣﺘﻘﺎﺭﻥ ﺍﺳﺖ‪.‬‬

‫ﻓﺮﺁﻳﻨﺪ ﺭﺩﮔﻴﺮﻱ)‪(Audit Process‬‬


‫‪ ‬ﻋﺒﺎﺭﺗﺴﺖ ﺍﺯ ﺟﻤﻊ ﺁﻭﺭﻱ ﺩﺍﺩﻩ ﻫﺎﻳﻲ ﺩﺭ ﻣﻮﺭﺩ ﻓﻌﺎﻟﻴﺘﻬﺎ ﺩﺭ ﺳﻴﺴﺘﻢ ﻭ ﺗﺤﻠﻴﻞ ﺁﻧﻬﺎ ﺑﻪ ﻣﻨﻈﻮﺭ‬
‫ﻳﺎﻓﺘﻦ ﻣﻮﺍﺭﺩ ﻋﺪﻡ ﺭﻋﺎﻳﺖ ﺿﻮﺍﺑﻂ ﺍﻳﻤﻨﻲ ﻭ ﻳﺎ ﺗﺸﺨﻴﺺ ﻋﻠﺖ ﺑﺮﻭﺯ ﺍﻳﻦ ﻣﻮﺍﺭﺩ ‪.‬‬

‫‪ ‬ﺍﻳﻦ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﻓﺎﻳﻠﻲ ﺑﻪ ﻧﺎﻡ ﻓﺎﻳﻞ ﺭﺩﮔﻴﺮﻱ ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬

‫‪ ‬ﺗﺤﻠﻴﻞ ﺩﺍﺩﻩ ﻫﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺼﻮﺭﺕ ﺑﺮﻭﻥ ﺧﻂ ﻭ ﺑﺎ ﺗﺎﺧﻴﺮ ﻳﺎ ﺑﺮﺧﻂ ﻭ ﺑﻴﺪﺭﻧﮓ ﺑﺎﺷﺪ ‪.‬‬

‫‪ ‬ﺩﺭ ﺣﺎﻟﺖ ﺑﻴﺪﺭﻧﮓ ﻓﺮﺍﻳﻨﺪ ﺭﺩﮔﻴﺮﻱ ﺭﺍ ﻛﺸﻒ ﻣﺰﺍﺣﻤﺖ )‪ (Intrusion detection‬ﻣﻲﮔﻮﻳﻴﻢ ‪.‬‬

‫ﻛﻨﺘﺮﻝ ﮔﺮﺩﺵ ﺍﻃﻼﻋﺎﺕ‬


‫ﺑﺎ ﻛﻨﺘﺮﻝ ﮔﺮﺩﺵ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﮔﺮﺩﺵ ﻏﻴﺮ ﻣﺠﺎﺯ ﺍﻃﻼﻋﺎﺕ ﺑﻄﻮﺭ ﺻﺮﻳﺢ )ﻣﺜﻞ ﻧﺴﺨﻪ ﺍﻱ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ( ﻭ‬
‫ﺍﻱﺿﻤﻨﻲ ﺑﻴﻦ ﺳﻄﻮﺡ ﻣﺨﺘﻠﻒ ﻫﺮﻡ ﻣﺪﻳﺮﻳﺘﻲ‪ -‬ﻋﻤﻠﻴﺎﺗﻲ ﺳﺎﺯﻣﺎﻥ ﺟﻠﻮﮔﻴﺮﻱ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﻛﻨﺘﺮﻝ ﺍﺳﺘﻨﺘﺎﺝ)‪(Inference Control‬‬


‫‪ ‬ﺩﺭ ﺍﻳﻦ ﻛﻨﺘﺮﻝ ﺍﺯ ﻛﺴﺐ ﺍﻃﻼﻋﺎﺕ ﺍﺯ ﻃﺮﻳﻖ ﺍﺳﺘﻨﺘﺎﺝ ﺟﻠﻮﮔﻴﺮﻱ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ ‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﺮﺧﻲ ﭘﺮﺳﺸﻬﺎﻱ ﺧﺎﺹ ﻭ ﺟﻬﺖ ﻳﺎﻓﺘﻪ ﻣﻲ ﺗﻮﺍﻥ ﺍﻃﻼﻋﺎﺕ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﺍﺳﺘﻨﺘﺎﺝ‬
‫ﻛﺮﺩ‪ .‬ﺩﺭ ﺑﻌﻀﻲ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﺎ ﻛﺎﺭﺑﺮﺍﻥ ﻓﻘﻂ ﺍﺟﺎﺯﻩ ﺑﺎﺯﻳﺎﺑﻲ ﺩﺍﺩﻩ ﻫﺎﻱ ﺁﻣﺎﺭﻱ )ﻣﺜﻞ ﻣﻴﺎﻧﮕﻴﻦ‪،‬‬
‫ﺣﺎﺻﻞ ﺟﻤﻊ‪ ،‬ﺗﻌﺪﺍﺩ‪ ،‬ﻣﺎﻛﺰﻳﻤﻢ ﻭ ‪ (...‬ﺭﺍ ﺩﺍﺭﻧﺪ ﻭ ﺣﻖ ﺩﺳﺘﺮﺳﻲ ﻣﺴﺘﻘﻴﻢ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﻨﻔﺮﺩ‬
‫ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﺎ ﺭﺍ ﻧﺪﺍﺭﻧﺪ‪ .‬ﺩﺭ ﭼﻨﻴﻦ ﭘﺎﻳﮕﺎﻫﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﻣﺸﻜﻼﺗﻲ ﺑﻮﺟﻮﺩ ﺑﻴﺎﻳﺪ ‪.‬‬

‫ﻣﺜﺎﻝ‪:‬‬

‫‪64‬‬
‫‪ ‬ﺭﺍﺑﻄﻪ ‪ PERSON‬ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪:‬‬
‫)‪PERSON (NAME, SSN, INCOME, ADDRESS, CITY, STATE, ZIP, SEX, LAST_DEGRE‬‬

‫ﭘﺮﺳﺶ ﻫﺎﻱ ﺯﻳﺮ ﺭﺍ ﻧﻴﺰ ﺩﺭ ﻧﻈﺮ ﻣﻲ ﮔﻴﺮﻳﻢ‪:‬‬


‫;‪Q1: SELECT COUNT (*) FROM PERSON WHERE condition‬‬
‫;‪Q2: SELECT AVG (INCOME) FROM PERSON WHERE condition‬‬

‫ﺣﺎﻝ ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﺩﺳﺘﻤﺰﺩ ﻛﺎﺭﻣﻨﺪ ‪ e‬ﺭﺍ ﭘﻴﺪﺍ ﻛﻨﻴﻢ ﻭ ﺑﺪﺍﻧﻴﻢ ﺍﻭ ﺯﻧﻲ ﺍ ﺳﺖ ﺑﺎ ﻣﺪﺭﻙ ﺩﻛﺘﺮﺍ ﻭ ﺩﺭ ﺷﻬﺮ ‪a‬‬
‫ﺩﺭ ﺍﻳﺎﻟﺖ ‪ s1‬ﺯﻧﺪﮔﻲ ﻣﻲ ﻛﻨﺪ‪ ،‬ﺩﺭ ‪ Q1‬ﺑﺠﺎﻱ ‪ condition‬ﺷﺮﺍﻳﻂ ﺯﻳﺮ ﺭﺍ ﻗﺮﺍﺭ ﻣﻲ ﺩﻫﻴﻢ‪:‬‬
‫‪LAST_DEGREE=phd AND SEX=f AND CITY=a AND STATE= s1‬‬

‫ﺍﮔﺮ ﻧﺘﻴﺠﻪ ﺍﻳﻦ ﭘﺮﺱ ﻭ ﺟﻮ ‪ 1‬ﺑﺎﺷﺪ ﻭ ﻫﻤﻴﻦ ﺷﺮﺍﻳﻂ ﺭﺍ ﺩﺭ ‪ Q2‬ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ‪ ،‬ﺩﺳﺘﻤﺰﺩ ﺍﻳﻦ ﻛﺎﺭﻣﻨﺪ‬
‫ﺑﺪﺳﺖ ﻣﻲ ﺁﻳﺪ‪.‬‬

‫ﺣﺘﻲ ﺍﮔﺮ ﻧﺘﻴﺠﻪ ﭘﺮﺱ ﻭ ﺟﻮ ‪ 1‬ﻧﺒﺎﺷﺪ ﻭ ﻋﺪﺩ ﻛﻮﭼﻜﻲ ﻣﺜﻞ ‪ 2‬ﻳﺎ ‪ 3‬ﺑﺎﺷﺪ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ min‬ﻳﺎ‬
‫‪ max‬ﻣﻲ ﺗﻮﺍﻥ ﻣﺤﺪﻭﺩﻩ ﺩﺳﺘﻤﺰﺩ ﻭﻱ ﺭﺍ ﺑﺪﺳﺖ ﺁﻭﺭﺩ‪.‬‬

‫ﺭﺍﻩ ﺣﻞ‪:‬‬
‫‪ ‬ﻳﻚ ﺭﺍﻩ ﺑﺮﺍﻱ ﺭﻓﻊ ﺍﻳﻦ ﻣﺸﻜﻞ ﺁﻥ ﺍﺳﺖ ﻛﻪ ﻳﻚ ﺣﺪ ﺁﺳﺘﺎﻧﻪ ﺑﺮﺍﻱ ﺗﺎﭘﻞ ﻫﺎ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﻢ ﻭ ﺍﮔﺮ‬
‫ﻧﺘﻴﺠﻪ ﺍﺯ ﺍﻳﻦ ﺣﺪ ﻛﻤﺘﺮ ﺍﺳﺖ ﺟﻠﻮﻱ ﺍﻧﺠﺎﻡ ﭘﺮﺳﺶ ﺭﺍ ﺑﮕﻴﺮﻳﻢ ‪.‬‬

‫‪ ‬ﺭﺍﻩ ﺩﻳﮕﺮ ﻣﻤﺎﻧﻌﺖ ﺍﺯ ﺍﺟﺮﺍﻱ ﺩﻧﺒﺎﻟﻪ ﺍﻱ ﺍﺯ ﭘﺮﺳﺶ ﻫﺎﺳﺖ ﻛﻪ ﻣﻜﺮﺭﺍ ﺑﻪ ﺟﻤﻌﻴﺖ ﺛﺎﺑﺘﻲ ﺍﺯ ﻳﻚ‬
‫ﺭﺍﺑﻄﻪ ﺩﺳﺘﻴﺎﺑﻲ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫ﺑﺮﻗﺮﺍﺭﻱ ﺍﻣﻨﻴﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻳﺪ ﺧﺎﺭﺟﻲ‬


‫ﻣﻔﻬﻮﻡ ﺩﻳﺪ ﺧﺎﺭﺟﻲ ‪ :‬ﺩﻳﺪﮔﺎﻩ ﺩﺭ ﺣﻘﻴﻘﺖ ﻳﻚ ﻓﻴﻠﺘﺮﻳﻨﮓ ﺍﺳﺖ ﻛﻪ ﺑﻪ ﺻﻮﺭﺕ ﻳﻚ ﺟﺪﻭﻝ ﻣﺠﺎﺯﻱ ﺍﺭﺍﺋﻪ‬
‫ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺩﻳﺪ ﺧﺎﺭﺟﻲ ﺑﻪ ﻣﻨﻈﻮﺭ ﺍﻓﺰﺍﻳﺶ ﺍﻣﻨﻴﺖ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﺑﺮﺍﻱ ﻫﺮ ﻛﺎﺭﺑﺮ ﻓﻘﻂ ﻧﻴﺎﺯﻫﺎﻱ‬
‫ﺧﺎﺹ ﻭﻱ ﺩﺭ ﺩﻳﺪ ﺧﺎﺭﺟﻲ ﻧﻤﺎﻳﺶ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪65‬‬
‫ﺍﻧﻮﺍﻉ ﺩﻳﺪﮔﺎﻩ‬

‫ﺩﻳﺪﮔﺎﻩ ﺳﻄﺮﻱ ‪ :‬ﻓﻘﻂ ﺳﻄﺮﻫﺎﻱ ﺧﺎﺻﻲ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﻧﻤﺎﻳﺶ ﻣﻲ ﺩﻫﺪ ﻣﺜﻞ ﺭﻛﻮﺭﺩﻫﺎﻱ ﻳﻚ ﭘﺮﻭﺍﺯ‬
‫ﺧﺎﺹ ﻭ ﻳﺎ ﺍﻃﻼﻋﺎﺕ ﺩﺍﻧﺸﺠﻮﻳﺎﻧﻲ ﻛﻪ ﻣﻌﺪﻝ ﺁﻧﻬﺎ ﺑﺎﻻﺗﺮ ﺍﺯ ‪ 17‬ﺍﺳﺖ‪.‬‬

‫‪Create view top-stud‬‬


‫* ‪As select‬‬
‫‪From Stud‬‬
‫;‪Where Avg >= 17‬‬
‫ﺩﻳﺪﮔﺎﻩ ﺳﺘﻮﻧﻲ ‪ :‬ﺳﺘﻮﻥﻫﺎ ﻳﺎ ﻓﻴﻠﺪﻫﺎﻱ ﺧﺎﺻﻲ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ ﻣﺜﻞ ﻓﻴﻠﺪﻫﺎﻱ ﺷﻤﺎﺭﻩ‬
‫ﺩﺍﻧﺸﺠﻮﻳﻲ ﻭ ﻧﺎﻡ ﻭ ﻣﻌﺪﻝ ﻭ ﺭﺷﺘﻪ‪.‬‬

‫‪Create view stud2‬‬


‫‪As select s#, sname, avg, major‬‬
‫;‪From Stud‬‬
‫)ﺳﻄﺮﻫﺎ(ﻱ ﺧﺎﺻﻲ ﺍﺯ ﭘﺎﻳﮕﺎﻩ‬ ‫ﺩﻳﺪﮔﺎﻩ ﺳﻄﺮﻱ‪-‬ﺳﺘﻮﻧﻲ‪ :‬ﺳﺘﻮﻥﻫﺎ ﻳﺎ ﻓﻴﻠﺪﻫﺎﻱ ﺧﺎﺻﻲ ﺍﺯ ﺭﻛﻮﺭﺩﻫﺎ‬
‫ﺩﺍﺩﻩﻫﺎ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲﺩﻫﺪ‪.‬‬

‫‪Create view stud3‬‬


‫‪As select s#, sname, avg, major‬‬
‫;‪From Stud‬‬
‫;‪Where Avg >= 17‬‬
‫ﺩﻫﺪ ﻣﺜﻞ‬ ‫ﺩﻳﺪﮔﺎﻩ ﺁﻣﺎﺭﻱ ‪ :‬ﺩﺍﺩﻩﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺧﻼﺻﻪ ﻭ ﻣﺤﺎﺳﺒﺎﺗﻲ ﻧﻤﺎﻳﺶ ﻣﻲ‬
‫ﻣﻴﺎﻧﮕﻴﻦ ﺩﺍﻧﺸﺠﻮﻳﺎﻥ ﻫﺮ ﺭﺷﺘﻪ‪.‬‬

‫‪Create View AvgStud‬‬


‫)‪As select major, AVG(avg‬‬
‫‪66‬‬
From stud
Group by major;
.‫ ﻳﺎ ﺍﻟﺤﺎﻕ ﺣﺪﺍﻗﻞ ﺳﻪ ﺩﻱﺩﮔﺎﻩ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻳﺪ ﻣﺜﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭼﻨﺪ ﺟﺪﻭﻝ‬Join ‫ ﺍﺯ‬:‫ﺩﻳﺪﮔﺎﻩ ﺍﻟﺤﺎﻕ‬

Create View Comp


As select stud.s#, stud.sname, stud.major, course.c#, course.cname
From stud, course
Where stud.major=course.major;

67
‫ﻓﺼﻞ ‪:5‬‬
‫ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻧﻲ‬

‫‪68‬‬
‫ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻧﻲ‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﻗﻔﻞ‬


‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ‬
‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﺍﻋﺘﺒﺎﺭﺳﻨﺠﻲ‬
‫‪ ‬ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﭼﻨﺪﮔﺎﻧﻪ‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﭼﻨﺪ ﻧﺴﺨﻪ ﺍﻱ‬
‫‪ ‬ﺩﺭﺝ ﻭ ﺣﺬﻑ ﻋﻤﻠﻴﺎﺕ‬
‫‪ ‬ﻫﻤﺰﻣﺎﻧﻲ ﺩﺭ ﺳﺎﺧﺘﺎﺭ ﻓﻬﺮﺳﺖ‬

‫ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﻗﻔﻞ‬

‫‪ ‬ﻳﻚ ﻗﻔﻞ ﺳﺎﺯﻭﻛﺎﺭﻱ ﺑﺮﺍﻱ ﻛﻨﺘﺮﻝ ﺩﺳﺘﺮﺳﻲ ﻫﻤﺰﻣﺎﻥ ﺑﻪ ﻳﻚ ﺑﺨﺶ ﺩﺍﺩﻩ ﺍﺳﺖ‪.‬‬
‫‪ ‬ﺑﺨﺶ ﻫﺎﻱ ﺩﺍﺩﻩ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﺩﻭ ﺣﺎﻟﺖ ﻗﻔﻞ ﺷﺪﻩ ﻗﺮﺍﺭ ﺩﺍﺩ ‪:‬‬
‫‪ ‬ﺣﺎﻟﺖ ﺍﻧﺤﺼﺎﺭﻱ )‪: (X‬ﺑﺨﺶ ﺩﺍﺩﻩ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ‪ 2‬ﺻﻮﺭﺕ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ‬
‫ﮔﻴﺮﺩ‪ X-lock.‬ﺑﻪ ﻭﺳﻴﻠﻪ ﻱ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ‪ lock-X‬ﺑﺮﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ‪ ،‬ﺩﺭﺧﻮﺍﺳﺖ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﺣﺎﻟﺖ ﻣﺸﺘﺮﻙ )‪ : (S‬ﺑﺨﺶ ﺩﺍﺩﻩ ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﺩ ‪ S-lock .‬ﺑﻪ ﻭﺳﻲﻟﻪ ﻱ‬
‫ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ‪ lock-S‬ﺑﺮﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ‪ ،‬ﺩﺭﺧﻮﺍﺳﺖ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﻗﻔﻞ ﺑﺮﺍﻱ ﻣﺪﻳﺮﻳﺖ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻧﻲ ﺳﺎﺧﺘﻪ ﺷﺪﻩ ﺍﻧﺪ ‪ .‬ﺗﺮﺍﻛﻨﺶ ﻓﻘﻂ ﭘﺲ ﺍﺯﺍﺧﺬ‬
‫ﻣﺠﻮﺯ ﻣﻲ ﺗﻮﺍﻧﺪ ﭘﺮﺩﺍﺯﺵ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﻗﻔﻞ ﻣﺎﺗﺮﻳﺲ ﺳﺎﺯﮔﺎﺭﻱ‬

‫‪69‬‬
‫‪ ‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﺠﻮﺯ ﻗﻔﻞ ﺑﻪ ﻳﻚ ﺑﺨﺶ ﺭﺍ ﺍﻋﻄﺎ ﻛﻨﺪ ﺍﮔﺮ ﻗﻔﻞ ﺩﺭﺧﻮﺍﺳﺖ ﺩﺍﺩﻩ ﺷﺪﻩ ﺑﺎ ﻗﻔﻞ‬
‫ﻗﺒﻠﻲ ﺍﺧﺘﺼﺎﺹ ﺩﺍﺩﻩ ﺷﺪﻩ ﺗﻮﺳﻂ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺩﻳﮕﺮ ﺳﺎﺯﮔﺎﺭ ﺑﺎﺷﺪ‪.‬‬
‫‪ ‬ﻫﺮ ﺗﻌﺪﺍﺩ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﻗﻔﻞ ﻫﺎﻱ ﺑﻪ ﺍﺷﺘﺮﺍﻙ ﮔﺬﺍﺷﺘﻪ ﺷﺪﻩ ﺭﻭﻱ ﻳﻚ ﺑﺨﺶ ﺭﺍ ﻧﮕﻪ‬
‫ﺩﺍﺭﻧﺪ‪.‬‬
‫• ﺍﻣﺎ ﺍﮔﺮ ﻫﺮ ﺗﺮﺍﻛﻨﺸﻲ ﺑﻪ ﺻﻮﺭﺕ ﺍﻧﺤﺼﺎﺭﻱ ﺩﺭ ﻳﻚ ﺑﺨﺶ ﻧﮕﻬﺪﺍﺭﻱ ﺑﺸﻮﺩ ﺳﺎﻳﺮ ﺗﺮﺍﻛﻨﺶ ﻫﺎ‬
‫ﻧﻤﻲ ﺗﻮﺍﻧﻨﺪ ﻫﺮ ﻗﻔﻠﻲ ﺭﺍ ﺩﺭ ﺁﻥ ﺑﺨﺶ ﻧﮕﻪ ﺩﺍﺭﻧﺪ‪.‬‬
‫‪ ‬ﺍﮔﺮ ﻳﻚ ﻗﻔﻞ ﻧﺘﻮﺍﻧﺪ ﺍﺧﺬ ﻣﺠﻮﺯ ﻛﻨﺪ‪ ،‬ﺗﺮﺍﻛﻨﺶ ﻳﻚ ﺩﺭﺧﻮﺍﺳﺖ ﺣﺎﻟﺖ ﺍﻧﺘﻈﺎﺭ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ ﺗﺎ ﻭﻗﺘﻲ‬
‫ﻛﻪ ﻫﻤﻪ ﻱ ﻗﻔﻞ ﻫﺎﻱ ﻧﺎﺳﺎﺯﮔﺎﺭﻧﮕﻪ ﺩﺍﺷﺘﻪ ﺷﺪﻩ ﺗﻮﺳﻂ ﺳﺎﻳﺮ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺁﺯﺍﺩ ﺷﻮﻧﺪ ﺁﻧﮕﺎﻩ ﻣﺠﻮﺯ‬
‫ﻗﻔﻞ ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﻣﺜﺎﻟﻲ ﺍﺯ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺍﻧﺠﺎﻡ ﻗﻔﻞ ‪:‬‬


‫;)‪T2: lock-S(A‬‬
‫;)‪read (A‬‬
‫;)‪unlock(A‬‬
‫;)‪lock-S(B‬‬
‫;)‪read (B‬‬
‫;)‪unlock(B‬‬
‫)‪display(A+B‬‬
‫‪ ‬ﻗﻔﻞ ﮔﻒﺗﻪ ﺷﺪﻩ ﺩﺭ ﺑﺎﻻ ﺑﺮﺍﻱ ﺍﺧﺬ ﻣﺠﻮﺯ ﺳﺮﻳﺎﻟﻲ ﻛﺎﻓﻲ ﻧﻴﺴﺖ – ﺍﮔﺮ ‪ A‬ﻭ ‪ B‬ﺩﺭ ﺑﻴﻦ ﺧﻮﺍﻧﺪﻥ ﺍﺯ ‪A‬‬
‫ﺑﻪ ‪ B‬ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﺷﻮﺩ ‪ ،‬ﻣﻘﺪﺍﺭ ﻧﻤﺎﻳﺶ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺷﺘﺒﺎﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻗﻔﻞ ﻣﺠﻤﻮﻋﻪ ﻗﻮﺍﻧﻴﻨﻲ ﺍﺳﺖ ﻛﻪ ﺑﻪ ﻫﻤﻪ ﻱ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻋﻤﻞ ﺩﺭﺧﻮﺍﺳﺖ ﻭ ﺁﺯﺍﺩ ﻛﺮﺩﻥ ﻗﻔﻞ‬
‫ﺭﺍ ﺩﺭ ﭘﻴﺮﻭﻱ ﺍﺯ ﺁﻥ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﻨﺪ ﭘﺮﻭﺗﻜﻞ ﻗﻔﻞ ﻣﺠﻤﻮﻋﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻣﻤﻜﻦ ﺭﺍ ﻣﺤﺪﻭﺩ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫ﻣﺸﻜﻼﺕ ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﻗﻔﻞ‬

‫‪70‬‬
‫‪ ‬ﻗﺴﻤﺘﻲ ﺍﺯ ﺍﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‬

‫‪ ‬ﻧﻪ ‪T3‬ﻭ ﻧﻪ ‪T4‬ﻧﻤﻲ ﺗﻮﺍﻧﻨﺪ ﺍﺩﺍﻣﻪ ﭘﻴﺪﺍ ﻛﻨﻨﺪ – ﺍﺟﺮﺍﻱ )‪ lock-S(B‬ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﻛﻪ ‪ T4‬ﻣﻨﺘﻈﺮ‬
‫‪ T3‬ﺑﺮﺍﻱ ﺁﺯﺍﺩﻛﺮﺩﻥ ﻗﻔﻞ ﺁﻥ ﺭﻭﻱ ‪ B‬ﺑﺎﺷﺪ‪ ،‬ﺩﺭ ﺣﺎﻟﻲ ﻛﻪ )‪ lock-X(A‬ﺑﺎﻋﺚ ﻣﻲ ﺷﻮﺩ ﻛﻪ ‪ T3‬ﻣﻨﺘﻈﺮ‬
‫‪ T4‬ﺑﺮﺍﻱ ﺁﺯﺍﺩﻛﺮﺩﻥ ﻗﻔﻞ ﺁﻥ ﺭﻭﻱ ‪ A‬ﺑﺎﺷﺪ‪.‬‬
‫‪ ‬ﭼﻨﻴﻦ ﻭﺿﻌﻴﺘﻲ ﺑﻦ ﺑﺴﺖ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫• ﺑﺮﺍﻱ ﺑﺮﻃﺮﻑ ﻛﺮﺩﻥ ﺑﻦ ﺑﺴﺖ ﺍﻭﻝ‪ T3 ،‬ﻳﺎ ‪ T4‬ﺑﺎﻳﺪ ﺑﺮﮔﺮﺩﺩ ﻭ ﻗﻔﻞ ﻫﺎ ﺭﺍ ﺁﺯﺍﺩ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﭘﺘﺎﻧﺴﻴﻞ ﺑﺮﺍﻱ ﺑﻦ ﺑﺴﺖ ﺩﺭ ﺍﻛﺜﺮ ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻗﻔﻞ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ .‬ﺑﻦ ﺑﺴﺖ ﻫﺎ ﻳﻚ ﺿﺮﻭﺭﺕ ﻣﻀﺮ‬
‫ﻫﺴﺖﻧﺪ ‪.‬‬
‫‪ ‬ﻗﺤﻄﻲ ﻧﻴﺰ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﺍﺳﺖ ﺍﮔﺮ ﻣﺪﻳﺮﻳﺖ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻧﻲ ﺑﺪ ﻃﺮﺍﺣﻲ ﺷﺪﻩ ﺑﺎﺷﺪ‪ .‬ﺑﺮﺍﻱ ﻣﺜﺎﻝ‪:‬‬
‫• ﻣﻤﻜﻦ ﺍﺳﺖ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻣﻨﺘﻈﺮ ‪ x-lock‬ﺑﺮ ﺭﻭﻱ ﻳﻚ ﺑﺨﺶ ﺑﺎﺷﺪ‪ ،‬ﺩﺭ ﺣﺎﻟﻲ ﻛﻪ‬
‫ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺩﻳﮕﺮ ﺩﺭﺧﻮﺍﺳﺖ ﻣﺠﻮﺯ ﺩﺭ ‪ s-lock‬ﻫﻤﺎﻥ ﺑﺨﺶ ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪.‬‬
‫• ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻳﻜﺴﺎﻥ ﺑﻪ ﻃﻮﺭ ﻣﺪﺍﻭﻡ ﺑﻪ ﺩﻟﻴﻞ ﺑﻦ ﺑﺴﺖ ﻩﺏﻋﻘﺐ ﺑﺮ ﻣﻲ ﮔﺮﺩﻧﺪ ‪.‬‬
‫‪ ‬ﻣﺪﻳﺮﻳﺖ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻧﻲ ﺑﺮﺍﻱ ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﻗﺤﻄﻲ ﻃﺮﺍﺣﻲ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ‬

‫‪71‬‬
‫‪ ‬ﺍﻳﻦ ﭘﺮﻭﺗﻜﻞ ﻣﺮﺍﻗﺐ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺳﺮﻳﺎﻟﻲ ﻣﺘﻀﺎﺩ ﺍﺳﺖ‪.‬‬
‫‪ ‬ﻓﺎﺯ‪ : 1‬ﻓﺎﺯ ﺩﺭ ﺣﺎﻝ ﺭﺷﺪ‬
‫• ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﺍﺳﺖ ﻗﻔﻞ ﻫﺎ ﺭﺍ ﺑﻪ ﺩﺳﺖ ﺁﻭﺭﺩ‪.‬‬
‫• ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﻧﻴﺴﺖ ﻗﻔﻞ ﻫﺎ ﺭﺍ ﺁﺯﺍﺩ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﻓﺎﺯ ‪ : 2‬ﻛﺎﻫﺶ ﻓﺎﺯ‬
‫• ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﺍﺳﺖ ﻗﻔﻞ ﻫﺎ ﺭﺍ ﺁﺯﺍﺩ ﻛﻨﺪ‪.‬‬
‫• ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﻧﻴﺴﺖ ﻗﻔﻞ ﻫﺎ ﺭﺍ ﺑﻪ ﺩﺳﺖ ﺁﻭﺭﺩ‪.‬‬
‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺍﻣﻨﻴﺖ ﺳﺮﻳﺎﻟﻲ‪،‬ﻣﻲ ﺗﻮﺍﻧﺪ ﻧﺸﺎﻥ ﺩﻫﺪ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻳﺎﻟﻲ ﺩﺭ‬
‫ﻧﻘﺎﻁ ﻗﻔﻞ ﺧﻮﺩ ﻗﺮﺍﺭ ﮔﻴﺮﻧﺪ‪).‬ﻧﻘﻄﻪ ﺍﻱ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﺁﻥ ﻗﻔﻞ ﻧﻬﺎﻳﻲ ﺭﺍ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻭﺭﺩ‪(.‬‬
‫‪ ‬ﻗﻔﻞ ﺩﻭ ﻓﺎﺯ ﺭﻫﺎﻳﻲ ﺍﺯ ﺑﻦ ﺑﺴﺖ ﺭﺍ ﺗﻀﻤﻴﻦ ﻧﻤﻲ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﻋﻘﺒﮕﺮﺩ ﺁﺑﺸﺎﺭﻱ ﺗﻮﺳﻂ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﺍﺳﺖ‪ ،‬ﺑﺮﺍﻱ ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﺍﻳﻦ ﻋﻤﻞ‪ ،‬ﺑﻪ ﺩﻧﺒﺎﻝ ﻳﻚ‬
‫ﭘﺮﻭﺗﻜﻞ ﺍﺻﻼﺡ ﺷﺪﻩ ﺩﻗﻴﻖ ‪ 2‬ﻓﺎﺯ ﻫﺴﺘﻴﻢ‪ .‬ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺪ ﺗﻤﺎﻡ ﻗﻔﻞ ﻫﺎﻱ‬
‫ﺍﻧﺤﺼﺎﺭﻱ ﺧﻮﺩ ﺭﺍ ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﭘﺬﻳﺮﻓﺘﻪ ﻳﺎ ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﻲ ﻣﺎﻧﻨﺪ ﻧﮕﻪ ﺩﺍﺭﺩ‪.‬‬
‫‪ ‬ﻗﻔﻞ ﺩﻭ ﻓﺎﺯ ﺑﺴﻴﺎﺭ ﺩﻗﻴﻖ ﺍﺳﺖ‪ :‬ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻫﻤﻪ ﻱ ﻗﻔﻞ ﻫﺎ ﺑﻪ ﺻﻮﺭﺕ ﺗﺄﻳﻴﺪ ﺷﺪﻩ ﻳﺎ ﺑﻲ ﻧﺘﻴﺠﻪ‬
‫ﻧﮕﻪ ﺩﺍﺷﺘﻪ ﻣﻲ ﺷﻮﻧﺪ‪ .‬ﺩﺭ ﺍﻳﻦ ﭘﺮﻭﺗﻜﻞ‪ ،‬ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺩﺭ ﺣﺎﻟﺘﻲ ﻛﻪ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﻧﺪ ﺑﻪ‬
‫ﺻﻮﺭﺕ ﺳﺮﻳﺎﻟﻲ ﻗﺮﺍﺭ ﺩﺍﺩ‪.‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺳﺮﻳﺎﻟﻲ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺩﺭ ﺗﻀﺎﺩ ﺑﺎﺷﻨﺪ ﻭ ﺍﮔﺮﺍﺯ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﻧﻤﻲ ﺗﻮﺍﻧﻨﺪ ﺑﻪ‬
‫ﺩﺳﺖ ﺑﻴﺎﻳﻨﺪ‪.‬‬
‫‪ ‬ﺑﺎ ﺍﻳﻦ ﺣﺎﻝ‪ ،‬ﺑﻪ ﺩﻟﻴﻞ ﻧﺒﻮﺩ ﺍﻃﻼﻋﺎﺕ ﺍﺿﺎﻓﻲ )ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺩﺳﺘﻮﺭﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ(‪ ،‬ﻗﻔﻞ ﺩﻭ‬
‫ﻓﺎﺯ ﺑﺮﺍﻱ ﺗﻀﺎﺩﻫﺎﻱ ﺳﺮﻳﺎﻟﻲ ﺩﺭ ﻣﻔﻬﻮﻡ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺩﺭ ﺯﻳﺮ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪:‬‬
‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺍﻳﻨﻜﻪ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺍﺯ ﻗﻔﻞ ﺩﻭ ﻓﺎﺯ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻲ ﻛﻨﺪ‪ ،‬ﻣﺎ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ‪Tj‬‬
‫ﻛﻪ ﺍﺯ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻨﺪ ﺭﺍ ﭘﻴﺪﺍ ﻛﻨﻴﻢ‪ ،‬ﻭ ﺑﺮﻧﺎﻣﻪ ﺍﻱ ﺑﺮﺍﻱ ‪ Ti‬ﻭ ‪ Tj‬ﻃﺮﺍﺣﻲ ﻛﻨﻴﻢ ﻛﻪ‬
‫ﺩﺍﺭﺍﻱ ﺗﻀﺎﺩ ﺳﺮﻳﺎﻟﻲ ﻧﺒﺎﺷﺪ‪.‬‬

‫ﺗﺒﺪﻳﻼﺕ ﻗﻔﻞ‬

‫‪ ‬ﻗﻔﻞ ﺩﻭ ﻓﺎﺯ ﺑﺎ ﺗﺒﺪﻳﻞ ﻗﻔﻞ ‪:‬‬

‫‪72‬‬
‫‪ -‬ﻣﺮﺣﻠﻪ ﺍﻭﻝ ‪:‬‬

‫• ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ‪ lock-s‬ﺭﺍ ﺭﻭﻱ ﺑﺨﺶ ﭘﻴﺪﺍ ﻛﺮﺩ‪.‬‬


‫• ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ‪ lock-x‬ﺭﺍ ﺭﻭﻱ ﺑﺨﺶ ﭘﻴﺪﺍ ﻛﺮﺩ‪.‬‬
‫• ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ‪ lock-s‬ﺭﺍ ﺑﻪ ﻳﻚ ‪ lock-x‬ﺗﺒﺪﻳﻞ ﻛﺮﺩ )ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ (‬

‫‪ -‬ﻣﺮﺣﻠﻪ ﺩﻭﻡ ‪:‬‬

‫• ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ‪ lock-s‬ﺭﺍ ﺁﺯﺍﺩ ﻛﺮﺩ‪.‬‬


‫• ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ‪ lock-x‬ﺭﺍ ﺁﺯﺍﺩ ﻛﺮﺩ‪.‬‬
‫• ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ‪ lock-s‬ﺭﺍ ﺑﻪ ‪ lock-x‬ﺗﺒﺪﻳﻞ ﻛﺮﺩ)ﺟﻤﻊ ﻛﺮﺩﻥ(‬
‫‪ ‬ﺍﻳﻦ ﭘﺮﻭﺗﻜﻞ ﺍﻣﻨﻴﺖ ﺳﺮﻳﺎﻟﻲ ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﻫﻨﻮﺯ ﻫﻢ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻧﻴﺎﺯ ﺑﻪ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ‬
‫ﻫﺎﻱ ﻗﻔﻞ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺍﺳﺖ‪.‬‬

‫ﺩﺳﺘﻴﺎﺑﻲ ﺧﻮﺩﻛﺎﺭ ﻗﻔﻞ ﻫﺎ‬

‫‪ ‬ﺩﺭ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻳﻚ ﻣﻮﺿﻮﻉ‪ ،‬ﺩﺳﺘﻮﺭﺍﻟﻌﻤﻞ ﻫﺎﻱ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﺧﻮﺍﻧﺪﻥ ‪ /‬ﻧﻮﺷﺘﻦ ﺍﺳﺖ ‪ .‬ﺑﺪﻭﻥ‬
‫ﺩﺭﺧﻮﺍﺳﺖ ﺁﺷﻜﺎﺭ ﻗﻔﻞ‬
‫‪ ‬ﻋﻤﻠﻜﺮﺩ )‪ read(D‬ﻣﺎﻧﻨﺪ ﭘﺮﺩﺍﺯﺵ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬

‫‪if Ti has a lock on D‬‬

‫‪then‬‬

‫)‪read(D‬‬

‫‪else begin‬‬

‫‪if necessary wait until no other‬‬

‫‪transaction has a lock-X on D‬‬

‫;‪grant Ti a lock-S on D‬‬

‫)‪read(D‬‬

‫‪73‬‬
‫‪end‬‬

‫‪ Write(D) ‬ﻧﻴﺰ ﻣﺎﻧﻨﺪ ﭘﺮﺩﺍﺯﺵ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬

‫‪if Ti has a lock-X on D‬‬

‫‪then‬‬

‫)‪write(D‬‬

‫‪else begin‬‬

‫‪if necessary wait until no other trans. has any lock on D,‬‬

‫‪if Ti has a lock-S on D‬‬

‫‪then‬‬

‫‪upgrade lock on D to lock-X‬‬

‫‪else‬‬

‫‪grant Ti a lock-X on D‬‬

‫)‪write(D‬‬

‫;‪end‬‬

‫‪ ‬ﺗﻤﺎﻡ ﻗﻔﻞ ﻫﺎ ﺑﻌﺪ ﺍﺯ ﭘﺬﻳﺮﻓﺘﻦ ‪ /‬ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﺎﻧﺪﻥ ﺁﺯﺍﺩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬

‫ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﻗﻔﻞ‬

‫‪ ‬ﺍﺯ ﻣﺪﻳﺮ ﻗﻔﻞ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﻓﺮﺁﻳﻨﺪ ﺟﺪﺍﮔﺎﻧﻪ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺍﺭﺳﺎﻝ ﻗﻔﻞ ﻭ ﺑﺎﺯﻛﺮﺩﻥ‬
‫ﺩﺭﺧﻮﺍﺳﺖ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ‪.‬‬
‫‪ ‬ﻣﺪﻳﺮ ﻗﻔﻞ ﺑﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻗﻔﻞ ﺑﺎ ﺍﺭﺳﺎﻝ ﭘﻴﺎﻡ ﻫﺎﻱ ﻣﺠﻮﺯ ﻗﻔﻞ)ﻳﺎ ﻳﻚ ﭘﻴﺎﻡ ﺩﺭﺧﻮﺍﺳﺖ ﺍﺯ ﺗﺮﺍﻛﻨﺶ‬
‫ﺑﺮﮔﺸﺘﻲ‪ ،‬ﺩﺭ ﺻﻮﺭﺕ ﺑﻦ ﺑﺴﺖ(ﭘﺎﺳﺦ ﻣﻲ ﺩﻫﺪ‪.‬‬
‫‪ ‬ﺩﺭﺧﻮﺍﺳﺖ ﺗﺮﺍﻛﻨﺶ ﻣﻨﺘﻈﺮ ﻣﻲ ﻣﺎﻧﺪ ﺗﺎ ﺑﻪ ﺩﺭﺧﻮﺍﺳﺘﺶ ﭘﺎﺳﺦ ﺩﺍﺩﻩ ﺷﻮﺩ‪.‬‬

‫‪74‬‬
‫‪ ‬ﻣﺪﻳﺮ ﻗﻔﻞ ﺳﺎﺧﺘﺎﺭ ﺩﺍﺩﻩ ﻫﺎ ﺭﺍ ﺩﺭ ﻳﻚ ﺟﺪﻭﻝ ﻛﻪ ﺟﺪﻭﻝ ﻗﻔﻞ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ ﺑﺮﺍﻱ ﺿﺒﻂ ﻣﺠﻮﺯ‬
‫ﻗﻔﻞ ﻫﺎ ﻭ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺩﺭ ﺣﺎﻝ ﺍﻧﺘﻈﺎﺭ ﺫﺧﻴﺮﻩ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﺟﺪﻭﻝ ﻗﻔﻞ ﺍﺳﺖ ﻣﻌﻤﻮﻻ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﺟﺪﻭﻝ ‪ hash‬ﺑﺮﺭﻭﻱ ﻓﻬﺮﺳﺖ ﻧﺎﻡ ﺑﺨﺸﻲ ﺍﺯ ﺩﺍﺩﻩ ﻫﺎﻱ‬
‫ﻗﻔﻞ ﺷﺪﻩ ﺩﺭ ﺣﺎﻓﻈﻪ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺟﺪﻭﻝ ﻗﻔﻞ‬

‫‪ ‬ﻣﺴﺘﻄﻴﻞ ﻫﺎﻱ ﺳﻴﺎﻩ ﻗﻔﻞ ﻫﺎﻱ ﻣﺠﻮﺯ ﺩﺍﺩﻩ ﺷﺪﻩ‪ ،‬ﻭ ﺁﻧﻬﺎﻳﻲ ﻛﻪ ﺳﻔﻴﺪ ﻫﺴﺘﻨﺪ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺩﺭ‬
‫ﺣﺎﻝ ﺍﻧﺘﻈﺎﺭ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﻨﺪ‪.‬‬
‫‪ ‬ﺟﺪﻭﻝ ﻗﻔﻞ ﻫﻤﭽﻨﻴﻦ ﺳﻮﺍﺑﻖ ﻧﻮﻉ ﻣﺠﻮﺯ ﻗﻔﻞ ﻭ ﻳﺎ ﺩﺭﺧﻮﺍﺳﺖ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ‪.‬‬
‫‪ ‬ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺟﺪﻳﺪ ﺑﻪ ﺍﻧﺘﻬﺎﻱ ﺻﻒ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺑﺨﺶ ﺩﺍﺩﻩ ﺍﺿﺎﻓﻪ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻣﺴﻠﻤﺎً ﺑﻪ‬
‫ﻃﻮﺭ ﭘﻴﺶ ﻓﺮﺽ ﺑﺎﺗﻤﺎﻡ ﻗﻔﻞ ﻫﺎﻱ ﻗﺒﻠﻲ ﺳﺎﺯﮔﺎﺭ ﺍﺳﺖ‪.‬‬
‫‪ ‬ﻗﻔﻞ ﮔﺸﺎﻳﻲ ﻧﺘﻴﺠﻪ ﻱ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎ ﺩﺭ ﺑﻴﻦ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺣﺬﻑ ﺷﺪﻩ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ‪،‬‬
‫ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺑﻌﺪﻱ ﺑﺮﺍﻱ ﺁﻧﻜﻪ ﺑﺒﻴﻨﻴﻢ ﻣﺠﻮﺯ ﺩﺍﺭﻧﺪ ﭼﻚ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫‪ ‬ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﻧﺘﻴﺠﻪ ﻧﺮﺳﺪ‪ ،‬ﻫﻤﻪ ﻱ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺩﺭ ﺣﺎﻝ ﺍﻧﺘﻈﺎﺭ ﻳﺎ ﺩﺭﺧﻮﺍﺳﺖ ﻣﺠﻮﺯ ﺣﺬﻑ‬
‫ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫• ﻣﺪﻳﺮ ﻗﻔﻞ ﻣﻤﻜﻦ ﺍﺳﺖ ﻟﻴﺴﺘﻲ ﺍﺯ ﻗﻔﻞ ﻫﺎﻱ ﻧﮕﻪ ﺩﺍﺷﺘﻪ ﺷﺪﻩ ﺗﻮﺳﻂ ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﺭﺍ‬
‫ﻧﮕﻬﺪﺍﺭﻱ ﻛﻨﺪ ﻛﻪ ﺑﺮﺍﻱ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﻣﺆﺛﺮ ﺍﺳﺖ‪.‬‬

‫‪75‬‬
‫ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺐﺗﻨﻲ ﺑﺮ ﻗﻔﻞ‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﮔﺮﺍﻑ ﻳﻚ ﺟﺎﻳﮕﺰﻳﻦ ﺑﺮﺍﻱ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯﻫﺴﺘﻨﺪ‬


‫‪ ‬ﺗﺤﻤﻴﻞ ﻛﺮﺩﻥ ﻳﻚ ﺗﺮﺗﻴﺐ ﺑﺨﺸﻲ ﺩﺭ ﻣﺠﻤﻮﻋﻪ }‪ D={d1,d2,…dh‬ﺑﺮﺍﻱ ﺩﺍﺩﻩ ﻫﺎﻱ ﺗﻤﺎﻡ ﺑﺨﺶ‬
‫ﻫﺎ‬
‫• ﺍﮔﺮ ‪ di→dj‬ﺁﻧﮕﺎﻩ ﻫﺮ ﺗﺮﺍﻛﻨﺸﻲ ﺩﺳﺘﺮﺳﻲ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﺪ ﺑﻪ ﻫﺮ ﺩﻭﻱ ‪ di‬ﻭ ‪ di‬ﻛﻪ‬
‫ﺩﺳﺘﺮﺳﻲ ‪ dj‬ﺑﻴﺸﺘﺮ ﻭ ﻗﺒﻞ ﺍﺯ ‪ dj‬ﺍﺳﺖ ‪.‬‬
‫• ﺩﺭ ﻧﺘﻴﺠﻪ ﻣﺠﻤﻮﻋﻪ ﻱ ‪ D‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺣﺎﻻ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﮔﺮﺍﻑ ﺟﻬﺖ ﺩﺍﺭ‪ ،‬ﭘﺎﻳﮕﺎﻩ ﮔﺮﺍﻑ‬
‫ﻧﺎﻣﻴﺪﻩ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺩﺭﺧﺖ ‪ ،‬ﻳﻚ ﻧﻮﻉ ﺳﺎﺩﻩ ﺍﺯ ﭘﺮﻭﺗﻜﻞ ﮔﺮﺍﻑ ﺍﺳﺖ ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﺩﺭﺧﺖ‬

‫‪76‬‬
‫‪ .1‬ﺗﻨﻬﺎ ﻗﻔﻞ ﻫﺎﻱ ﺍﻧﺤﺼﺎﺭﻱ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﺍﺳﺖ‪.‬‬

‫‪ .2‬ﺍﻭﻟﻴﻦ ﻗﻔﻞ ﻣﻤﻜﻦ ﺍﺳﺖ ﺗﻮﺳﻂ ‪ Ti‬ﺑﻪ ﺗﻤﺎﻡ ﺑﺨﺶ ﻫﺎﻱ ﺩﺍﺩﻩ ﺍﺧﺘﺼﺎﺹ ﺩﺍﺩﻩ ﺷﻮﺩ‪ ،‬ﭘﺲ ﺍﺯ ﺁﻥ‪ ،‬ﻳﻚ ﺩﺍﺩﻩ ‪Q‬‬
‫ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﻮﺳﻂ ‪ Ti‬ﻗﻔﻞ ﺷﻮﺩ ﻓﻘﻂ ﺩ ﺭﺻﻮﺭﺗﻲ ﻛﻪ ﻭﺍﻟﺪ ‪ Q‬ﺑﻪ ﺩﺭﺳﺘﻲ ﺗﻮﺳﻂ ‪ Ti‬ﻗﻔﻞ ﺷﺪﻩ ﺑﺎﺷﺪ‪.‬‬

‫‪ .3‬ﺑﺨﺶ ﻫﺎﻱ ﺩﺍﺩﻩ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﻫﺮ ﺯﻣﺎﻧﻲ ﻗﻔﻞ ﮔﺸﺎﻳﻲ ﺷﻮﻧﺪ‪.‬‬

‫‪ .4‬ﻳﻚ ﺑﺨﺶ ﺩﺍﺩﻩ ﻛﻪ ﺗﻮﺳﻂ ‪ Ti‬ﻗﻔﻞ ﮔﺬﺍﺭﻱ ﻭ ﻗﻔﻞ ﮔﺸﺎﻳﻲ ﺷﺪﻩ ﺍﺳﺖ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﻣﺘﻌﺎﻗﺒﺎً ﺗﻮﺳﻂ ‪ Ti‬ﻣﺠﺪﺩ‬
‫ﻗﻔﻞ ﮔﺬﺍﺭﻱ ﺷﻮﺩ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﮔﺮﺍﻑ‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺩﺭﺧﺖ ﺭﻫﺎﻳﻲ ﺍﺯ ﺗﻀﺎﺩﻫﺎﻱ ﺳﺮﻳﺎﻟﻲ ﻭ ﻫﻤﭽﻨﻴﻦ ﺑﻦ ﺑﺴﺖ ﺭﺍ ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ‪.‬‬


‫‪ ‬ﻗﻔﻞ ﮔﺸﺎﻳﻲ ﺩﺭ ﭘﺮﻭﺗﻜﻞ ﺩﺭﺧﺖ ﻣﻲ ﺗﻮﺍﻧﺪ ﺳﺎﺩﻩ ﺗﺮ ﺍﺯ ﭘﺮﻭﺗﻜﻞ ﻓﺎﺯ ‪ 2‬ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪.‬‬
‫• ﻛﻮﺗﺎﻫﺘﺮ ﺷﺪﻥ ﺯﻣﺎﻥ ﺍﻧﺘﻈﺎﺭ ﻭ ﺍﻓﺰﺍﻳﺶ ﻫﻤﺰﻣﺎﻧﻲ‬
‫• ﺩﺭ ﭘﺮﻭﺗﻜﻞ ﺑﻦ ﺑﺴﺖ‪-‬ﺁﺯﺍﺩ ‪ ،‬ﺑﻪ ﻫﻴﭻ ﻋﻘﺐ ﮔﺮﺩﻱ ﻧﻴﺎﺯ ﻧﻴﺴﺖ‪.‬‬
‫‪ ‬ﺍﺷﻜﺎﻻﺕ‬
‫• ﭘﺮﻭﺗﻜﻞ‪ ،‬ﺑﺎﺯﻳﺎﺑﻲ ﻳﺎ ﺁﺯﺍﺩﻱ ﺁﺑﺸﺎﺭﻱ ﺭﺍ ﺗﻀﻤﻴﻦ ﻧﻤﻲ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﻧﻴﺎﺯ ﺑﻪ ﺗﻌﺮﻳﻒ ﻭﺍﺑﺴﺘﮕﻲ ﻫﺎﻱ ﻣﻮﺭﺩ ﭘﺬﻳﺮﺵ ﺑﺮﺍﻱ ﺗﻀﻤﻴﻦ ﺑﺎﺯﻳﺎﺑﻲ‬

‫‪77‬‬
‫• ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﻗﻔﻞ ﺑﺨﺶ ﻫﺎﻱ ﺩﺍﺩﻩ ﺍﻱ ﺭﺍﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ ﻛﻪ ﺑﻪ ﺁﻧﻬﺎ ﺩﺳﺘﺮﺳﻲ‬
‫ﻧﺪﺍﺭﻧﺪ‪.‬‬
‫‪ ‬ﺍﻓﺰﺍﻳﺶ ﺳﺮﺭﻳﺰ ﻗﻔﻞ‪ ،‬ﻭ ﺯﻣﺎﻥ ﺍﻧﺘﻈﺎﺭ ﺍﺿﺎﻓﻲ‬
‫‪ ‬ﭘﺘﺎﻧﺴﻴﻞ ﻛﺎﻫﺶ ﻫﻤﺰﻣﺎﻧﻲ‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺗﺤﺖ ﻗﻔﻞ ﺩﻭ ﻓﺎﺯﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﻧﻴﺴﺘﻨﺪ ﻭ ﺑﺎﻟﻌﻜﺲ ﺗﺤﺖ ﭘﺮﻭﺗﻜﻞ ﺩﺭﺧﺖ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ‬
‫ﻫﺴﺘﻨﺪ‪.‬‬

‫ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﻫﺎﻱ ﻣﺘﻌﺪﺩ‬

‫‪ ‬ﻣﺠﻮﺯ ﺑﺨﺶ ﻫﺎﻱ ﺩﺍﺩﻩ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﻭ ﺗﻌﺮﻳﻒ ﺳﻠﺴﻠﻪ ﻣﺮﺍﺗﺐ ﺑﺨﺶ ﺑﻪ ﺑﺨﺶ ﺁﻧﻬﺎﺳﺖ‪،‬‬
‫ﻗﺴﻤﺘﻬﺎﻱ ﺑﺨﺶ ﺑﻪ ﺑﺨﺶ ﻛﻮﭼﻜﺘﺮ ﺩﺭ ﺩﺭﻭﻥ ﺑﺰﺭﮔﺘﺮﻫﺎ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﻧﺪ‪.‬‬
‫‪ ‬ﮔﺮﺍﻓﻴﻚ ﻫﺎ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﺩﺭﺧﺖ ﻧﺸﺎﻥ ﺩﺍﺩ )ﺍﻣﺎ ﺑﺎ ﭘﺮﻭﺗﻜﻞ ﻗﻔﻞ ﺩﺭﺧﺖ ﺩﺭﺳﺖ ﻧﻴﺴﺖ(‬
‫‪ ‬ﻭﻗﺘﻲ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﻗﻔﻞ ﻫﺎﻱ ﻳﻚ ﮔﺮﻩ ﺩﺭ ﺩﺭﺧﺖ ﺑﻪ ﺩﺭﺳﺘﻲ ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪ ،‬ﻣﻄﻤﺌﻨﺎً ﻫﻤﻪ ﻱ ﺑﺨﺶ ﻫﺎﻱ‬
‫ﮔﺮﻩ ﺩﺭ ﻫﻤﺎﻥ ﺣﺎﻟﺖ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﻧﺪ‪.‬‬
‫‪ ‬ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﻗﻔﻞ ‪) :‬ﺳﻄﺤﻲ ﺩﺭ ﺩﺭﺧﺖ ﻛﻪ ﺩﺭ ﺁﻥ ﻗﻔﻞ ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﺍﺳﺖ(‬
‫• ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﺧﻮﺏ )ﭘﺎﻳﻴﻦ ﺗﺮ ﺩﺭ ﺩﺭﺧﺖ( ‪ :‬ﻫﻤﺰﻣﺎﻧﻲ ﺑﺎﻻ‪ ،‬ﺳﺮﺑﺎﺭ ﻗﻔﻞ ﺑﺎﻻ‬
‫• ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﺩﺭﺷﺖ )ﺩﺭ ﺩﺭﺧﺖ ﺑﺎﻻﺗﺮ( ‪ :‬ﻗﻔﻞ ﺳﺮﺑﺎﺭ ﻛﻢ ‪ ،‬ﻫﻤﺰﻣﺎﻧﻲ ﻛﻢ‬

‫ﻣﺜﺎﻟﻲ ﺍﺯ ﺳﻠﺴﻠﻪ ﻣﺮﺍﺗﺐ ﺧﻮﺷﻪ ﺑﻨﺪﻱ‬

‫‪78‬‬
‫ﺳﻄﻮﺡ ﺍﺯ ﺑﺎﻻﺗﺮﻳﻦ ﺳﻄﺢ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ ‪:‬‬

‫• ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‬
‫• ﻧﺎﺣﻴﻪ‬
‫• ﭘﻮﺷﻪ‬
‫• ﺳﻮﺍﺑﻖ‬

‫ﺣﺎﻻﺕ ﻗﻔﻞ ﻣﻘﺼﺪ‬

‫‪ ‬ﻋﻼﻭﻩ ﺑﺮ ﺣﺎﻟﺖ ﻫﺎﻱ ﻗﻔﻞ ‪ S‬ﻭ ‪ ،X‬ﺳﻪ ﺣﺎﻟﺖ ﻗﻔﻞ ﻫﺎﻱ ﺍﺿﺎﻓﻲ ﺑﺎ ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﻣﺘﻌﺪﺩ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪:‬‬
‫• ﻣﻔﻬﻮﻡ ﺍﺷﺘﺮﺍﻙ)‪ : (IS‬ﻗﻔﻞ ﺻﺤﻴﺢ ﺑﺨﺶ ﭘﺎﻳﻴﻨﻲ ﺩﺭﺧﺖ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ ﺍﻣﺎ ﻓﻘﻂ ﺑﺮﺍﻱ‬
‫ﻗﻔﻞ ﻫﺎﻱ ﺑﻪ ﺍﺷﺘﺮﺍﻙ ﮔﺬﺍﺷﺘﻪ ﺷﺪﻩ ‪.‬‬
‫• ﻣﻔﻬﻮﻡ ﺍﻧﺤﺼﺎﺭﻱ )‪ : (IX‬ﻗﻔﻞ ﺻﺤﻴﺢ ﺑﺨﺶ ﭘﺎﻳﻴﻨﻲ ﺩﺭﺧﺖ ﺑﺎ ﻗﻔﻞ ﻫﺎﻱ ﺍﻧﺤﺼﺎﺭﻱ ﻳﺎ‬
‫ﺍﺷﺘﺮﺍﻛﻲ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ‪.‬‬
‫• ﻣﻔﻬﻮﻡ ﺍﻧﺤﺼﺎﺭﻱ ﻭ ﺍﺷﺘﺮﺍﻛﻲ )‪ : (SIX‬ﺭﻳﺸﻪ ﻫﺎﻱ ﺯﻳﺮﻳﻦ ﺩﺭﺧﺖ ﺗﻮﺳﻂ ﺑﺨﺶ ﻫﺎﻳﻲ ﻛﻪ ﺑﻪ‬
‫ﺩﺭﺳﺘﻲ ﻗﻔﻞ ﺷﺪﻩ ﺍﻧﺪ ﺩﺭ ﺣﺎﻟﺖ ﺍﺷﺘﺮﺍﻛﻲ ﻭ ﻗﻔﻞ ﻫﺎﻱ ﺩﺭﺳﺖ ﺍﻣﺎ ﺩﺭ ﻳﻚ ﺳﻄﺢ ﭘﺎﻳﻴﻦ ﺗﺮ‬
‫ﺩﺭ ﺣﺎﻟﺖ ﻗﻔﻞ ﻫﺎﻱ ﺍﻧﺤﺼﺎﺭﻱ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫‪ ‬ﻣﻔﻬﻮﻡ ﻣﺠﻮﺯ ﻗﻔﻞ ﻫﺎ ﺩﺭ ﮔﺮﻩ ﻫﺎﻱ ﺳﻄﺢ ﺑﺎﻻﺗﺮ ﻳﻌﻨﻲ ﺩﺭ ﺣﺎﻟﺖ ‪ S‬ﻳﺎ ‪ X‬ﺑﺪﻭﻥ ﻧﻴﺎﺯ ﺑﻪ ﺑﺮﺭﺳﻲ ﻫﻤﻪ‬
‫ﻱ ﮔﺮﻩ ﻫﺎﻱ ﺑﻌﺪﻱ ﻗﻔﻞ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﻣﺎﺗﺮﻳﺲ ﺳﺎﺯﮔﺎﺭﻱ ﺑﺎ ﺣﺎﻻﺕ ﻗﻔﻞ ﻣﻘﺼﺪ‬

‫‪ ‬ﻣﺎﺗﺮﻳﺲ ﺳﺎﺯﮔﺎﺭﻱ ﺑﺮﺍﻱ ﺗﻤﺎﻡ ﺣﺎﻻﺕ ﻗﻔﻞ ﻋﺒﺎﺭﺗﺴﺖ ﺍﺯ ‪:‬‬

‫‪IS‬‬ ‫‪IX‬‬ ‫‪S‬‬ ‫‪SIX‬‬ ‫‪X‬‬

‫‪IS‬‬ ‫√‬ ‫√‬ ‫√‬ ‫√‬ ‫×‬

‫‪IX‬‬ ‫√‬ ‫√‬ ‫×‬ ‫×‬ ‫×‬

‫‪S‬‬ ‫√‬ ‫×‬ ‫√‬ ‫×‬ ‫×‬

‫‪79‬‬
‫‪SIX‬‬ ‫√‬ ‫×‬ ‫×‬ ‫×‬ ‫×‬

‫‪X‬‬ ‫×‬ ‫×‬ ‫×‬ ‫×‬ ‫×‬

‫ﻃﺮﺡ ﺧﻮﺷﻪ ﺑﻨﺪﻱ ﻣﺘﻌﺪﺩ ﻗﻔﻞ‬

‫‪ ‬ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ﮔﺮﻩ ‪ Q‬ﺭﺍ ﻗﻔﻞ ﻛﻨﺪ ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﺯﻳﺮ‪:‬‬

‫‪ .1‬ﻣﺎﺗﺮﻳﺲ ﺳﺎﺯﮔﺎﺭﻱ ﻗﻔﻞ ﻫﺎ ﺑﺎﻳﺪ ﺭﻋﺎﻳﺖ ﺷﻮﺩ‪.‬‬

‫‪ .2‬ﺭﻳﺸﻪ ﺩﺭﺧﺖ ﺑﺎﻳﺪ ﺩﺭ ﺍﺑﺘﺪﺍ ﻗﻔﻞ ﺷﻮﺩ ‪ ،‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﻫﺮ ﺣﺎﻟﺖ ﻗﻔﻞ ﺷﻮﺩ‪.‬‬

‫‪ .3‬ﮔﺮﻩ ‪ Q‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﻮﺳﻂ ‪ Ti‬ﺩﺭﺣﺎﻟﺖ ‪ s‬ﻳﺎ ‪ Is‬ﻗﻔﻞ ﺷﻮﺩ‪ ،‬ﻓﻘﻂ ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﻭﺍﻟﺪ ‪ Q‬ﺑﻪ ﺩﺭﺳﺘﻲ‬
‫ﺗﻮﺳﻂ ‪ Ti‬ﺩﺭ ﻫﺮ ﻳﻚ ﺍﺯ ﺣﺎﻻﺕ ‪ IX‬ﻳﺎ ‪ IS‬ﻗﻔﻞ ﺷﺪﻩ ﺑﺎﺷﺪ‪.‬‬

‫‪ .4‬ﻳﻚ ﮔﺮﻩ ‪ Q‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﻮﺳﻂ ‪ Ti‬ﺩﺭ ﺣﺎﻟﺖ ‪ SIX ،x‬ﻳﺎ ‪ IX‬ﻗﻔﻞ ﺷﻮﺩ ﻓﻘﻂ ﺍﮔﺮ ﻭﺍﻟﺪ ‪ Q‬ﺑﻪ ﺩﺭﺳﺘﻲ‬
‫ﺗﻮﺳﻂ ‪ Ti‬ﺩﺭ ﺣﺎﻟﺖ ﻫﺎﻱ ‪ IX‬ﻳﺎ ‪ SIX‬ﻗﻔﻞ ﺷﺪﻩ ﺑﺎﺷﺪ‪.‬‬

‫ﻝ ﺍﺯ ﺁﻥ ﻫﻴﭻ ﮔﺮﻩ ﺍﻱ ﺭﺍ ﺑﺎﺯ ﻧﻜﺮﺩﻩ ﺑﺎﺷﺪ)ﻛﻪ‬


‫‪ .5‬ﮔﺮﻩ ‪ Ti‬ﻣﻲ ﺗﻮﺍﻧﺪ ﻗﻔﻞ ﺷﻮﺩ ﻓﻘﻂ ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﻗﺐ‬
‫ﻳﻌﻨﻲ ‪ 2 Ti‬ﻓﺎﺯ ﺍﺳﺖ(‪.‬‬

‫‪ TI .6‬ﻣﻲ ﺗﻮﺍﻧﺪ ﮔﺮﻩ ‪ Q‬ﺭﺍ ﺑﺎﺯ ﻛﻨﺪ ﺗﻨﻬﺎ ﺩﺭ ﺻﻮﺗﻲ ﻛﻪ ﻫﻴﭻ ﻳﻚ ﺍﺯ ﻓﺮﺯﻧﺪﺍﻥ ‪ Q‬ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﺗﻮﺳﻂ‬
‫‪ TI‬ﻗﻔﻞ ﻧﺸﺪﻩ ﺑﺎﺷﻨﺪ‪.‬‬

‫‪ ‬ﻫﻤﺎﻥ ﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣﻲ ﻛﻨﻴﺪ ﻗﻔﻞ ﻫﺎ ﺍﺯ ﺭﻳﺸﻪ ﺑﻪ ﺑﺮگ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻳﻨﺪ‪ ،‬ﺩﺭ ﺣﺎﻟﻲ ﻛﻪ ﺁﻧﻬﺎ ﺍﺯ‬
‫ﺑﺮگ ﺑﻪ ﺭﻳﺸﻪ ﺁﺯﺍﺩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬

‫ﺟﺎﺑﻪ ﺟﺎﻳﻲ ﺑﻦ ﺑﺴﺖ‬

‫‪ ‬ﺩﻭ ﺗﺮﺍﻛﻨﺶ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ‪:‬‬

‫‪T1:‬‬ ‫)‪write (X‬‬ ‫‪T2: write(Y) ‬‬

‫)‪write(Y‬‬ ‫)‪write(X‬‬

‫‪80‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﺑﺎ ﺑﻦ ﺑﺴﺖ‬

‫‪T1‬‬ ‫‪T2‬‬

‫‪lock-X on X‬‬
‫)‪write (X‬‬
‫‪lock-X on Y‬‬
‫)‪write (Y‬‬
‫‪wait for lock-X on X‬‬

‫‪wait for lock-X on Y‬‬

‫‪ ‬ﺳﻴﺴﺘﻢ ﺑﻪ ﺑﻦ ﺑﺴﺖ ﻣﻲ ﺭﺳﺪ ﺍﮔﺮ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻃﻮﺭﻱ ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ ﻛﻪ ﻫﺮ ﺗﺮﺍﻛﻨﺶ‬
‫ﺩﺭ ﻣﺠﻤﻮﻋﻪ ﻣﻨﺘﻈﺮ ﺗﺮﺍﻛﻨﺶ ﺩﻳﮕﺮ ﺁﻥ ﻣﺠﻤﻮﻋﻪ ﺑﺎﺷﺪ‪.‬‬
‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﭘﻴﺸﮕﻴﺮﻱ ﺍﺯ ﺑﻦ ﺑﺴﺖ ﺍﻳﻦ ﺍﻃﻤﻴﻨﺎﻥ ﺭﺍ ﺣﺎﺻﻞ ﻣﻲ ﻛﻨﻨﺪ ﻛﻪ ﺳﻴﺴﺘﻢ ﻫﺮﮔﺰ ﺑﻪ ﺣﺎﻟﺖ‬
‫ﺑﻦ ﺑﺴﺖ ﻭﺍﺭﺩ ﻧﻤﻲ ﺷﻮﺩ‪ .‬ﺑﻌﻀﻲ ﺍﺯ ﺭﺍﻫﺒﺮﺩﻫﺎﻱ ﭘﻴﺸﮕﻴﺮﻱ ‪:‬‬
‫• ﻧﻴﺎﺯ ﺍﺳﺖ ﻛﻪ ﻫﻤﻪ ﻱ ﻗﻔﻞ ﻫﺎﻱ ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﺑﺨﺶ ﻫﺎﻱ ﺩﺍﺩﻩ ﻗﺒﻞ ﺍﺯ ﺁﻏﺎﺯ ﺑﺮﺭﺳﻲ‬
‫ﺷﻮﻧﺪ)ﺍﻃﻼﻉ ﺭﺳﺎﻧﻲ(‬
‫• ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺑﺨﺸﻲ ﺍﺯ ﺗﻤﺎﻡ ﺑﺨﺶ ﻫﺎﻱ ﺍﻃﻼﻋﺎﺕ ﻭ ﻟﺰﻭﻡ ﺍﻳﻦ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻓﻘﻂ ﺩﺭ‬
‫ﺑﺨﺶ ﻫﺎﻱ ﻣﺸﺨﺺ ﺷﺪﻩ ﺑﺘﻮﺍﻧﺪ ﺑﺨﺶ ﺭﻭﻱ ﺩﺍﺩﻩ ﺭﺍ ﻗﻔﻞ ﻛﻨﺪ)ﭘﺮﻭﺗﻜﻞ ﺑﺮ ﭘﺎﻳﻪ ﻱ ﮔﺮﺍﻑ(‬

‫ﺍﺳﺘﺮﺍﺗﮋﻱ ﻫﺎﻱ ﭘﻴﺸﮕﻴﺮﻱ ﺍﺯ ﺑﻦ ﺑﺴﺖ ﻫﺎﻱ ﺑﻴﺸﺘﺮ‬

‫‪81‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺍﺷﺎﺭﻩ ﺷﺪﻩ ﺗﻨﻬﺎ ﺑﺮﺍﻱ ﭘﻴﺸﮕﻴﺮﻱ ﺍﺯ ﺑﻦ ﺑﺴﺖ ﺍﺯ ﺑﺮﭼﺴﺐ ﻫﺎﻱ ﺯﻣﺎﻧﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻣﺮگ ‪ -‬ﺍﻧﺘﻈﺎﺭ ‪ -‬ﻏﻴﺮﭘﻴﺸﮕﻴﺮﺍﻧﻪ‬
‫• ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻗﺪﻳﻤﻲ ﺗﺮ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺨﺸﻲ ﺍﺯ ﺩﺍﺩﻩ ﺭﺍ ﺑﺮﺍﻱ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺟﺪﻳﺪﺗﺮ ﺁﺯﺍﺩ‬
‫ﻛﻨﻨﺪ ﺍﻣﺎ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺟﺪﻳﺪﺗﺮ ﻫﺮﮔﺰ ﺑﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻗﺪﻳﻤﻲ ﺗﺮ ﺑﻪ ﺣﺎﻟﺖ ﺍﻧﺘﻈﺎﺭ‬
‫ﻧﻤﻲ ﺭﻭﻧﺪ ﺑﻠﻜﻪ ﺑﻪ ﺟﺎﻱ ﺁﻥ ﻋﻘﺒﮕﺮﺩ ﻣﻲ ﻛﻨﻨﺪ‪.‬‬
‫• ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﺍﺳﺖ ﭼﻨﺪﻳﻦ ﺑﺎﺭ ﻗﺒﻞ ﺍﺯ ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺑﺨﺶ ﺩﺍﺩﻩ ﻱ ﻣﻮﺭﺩ ﻧﻴﺎﺯﺵ ﺍﺯ ﺑﻴﻦ‬
‫ﺑﺮﻭﺩ‪.‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺟﺮﺍﺣﺖ – ﺍﻧﺘﻈﺎﺭ ‪ -‬ﭘﻴﺸﮕﻴﺮﺍﻧﻪ‬
‫• ﺕﺭﺍﻛﻨﺶ ﻫﺎﻱ ﻗﺪﻳﻤﻲ ﺗﺮﺑﻪ ﺟﺎﻱ ﺍﻳﻦ ﻛﻪ ﻣﻨﺘﻈﺮ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺟﺪﻳﺪ ﺑﺎﺷﻨﺪ ﺩﭼﺎﺭ‬
‫ﺟﺮﺍﺣﺖ )ﺑﺮﮔﺸﺖ ﺗﺤﻤﻴﻠﻲ ( ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫• ﻣﻤﻜﻦ ﺍﺳﺖ ﻋﻘﺐ ﮔﺮﺩﻫﺎﻱ ﻛﻤﺘﺮﻱ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻣﺮگ‪-‬ﺍﻧﺘﻈﺎﺭ ﻧﻘﺶ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪.‬‬

‫ﭘﻴﺸﮕﻴﺮﻱ ﺍﺯ ﺑﻦ ﺑﺴﺖ‬

‫‪ ‬ﺩﺭ ﻫﺮﺩﻭ ﺣﺎﻟﺖ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻣﺮگ –ﺍﻧﺘﻈﺎﺭ ﻭ ﺟﺮﺍﺣﺖ‪-‬ﺍﻧﺘﻈﺎﺭ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺑﺮﮔﺸﺖ ﺧﻮﺭﺩﻩ ﺑﺎ‬
‫ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺍﺻﻠﻲ ﺷﺎﻥ ﻣﺠﺪﺩﺍ ﺭﺍ ﻩ ﺍﻧﺪﺍﺯﻱ ﻣﻲ ﺷﻮﻧﺪ‪ .‬ﺩﺭ ﻧﺘﻴﺠﻪ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻗﺪﻳﻤﻲ ﺗﺮ ﺩﺍﺭﺍﻱ‬
‫ﺍﻭﻝﻭﻳﺖ ﺑﻴﺸﺘﺮﻱ ﺍﺯ ﺟﺪﻳﺪﺗﺮﻫﺎ ﻣﻲ ﺷﻮﻧﺪ ﺍﺯ ﺍﻳﻦ ﺭﻭ ﻗﺤﻄﻲ ﺍﺟﺘﻨﺎﺏ ﻧﺎﭘﺬﻳﺮ ﺍﺳﺖ‪.‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﺑﺮﺟﺴﺐ ﺯﻣﺎﻥ ‪:‬‬
‫• ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻓﻘﻂ ﺑﺮﺍﻱ ﻣﺪﺕ ﺯﻣﺎﻥ ﻣﻌﻴﻨﻲ ﺑﺮﺍﻱ ﻳﻚ ﻗﻔﻞ ﻣﻨﺘﻈﺮ ﻣﻲ ﻣﺎﻧﺪ ﭘﺲ ﺍﺯ ﺁﻥ ﺍﺯ‬
‫ﺻﻒ ﺍﻧﺘﻈﺎﺭ ﺧﺎﺭﺝ ﻭ ﺗﺮﺍﻛﻨﺶ ﻋﻤﻞ ﻋﻘﺒﮕﺮﺩ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ‪.‬‬
‫• ﺩﺭ ﻧﺘﻴﺠﻪ ﺑﻦ ﺑﺴﺖ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﻧﻴﺴﺖ‪.‬‬
‫• ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺍﻳﻦ ﺭﻭﺵ ﺳﺎﺩﻩ ﺍﺳﺖ ‪ ،‬ﺍﻣﺎ ﻗﺤﻄﻲ ﺷﺎﻥ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﺍﺳﺖ‪ .‬ﻫﻤﭽﻨﻴﻦ ﺗﻌﻴﻴﻦ‬
‫ﻣﻘﺪﺍﺭ ﺁﻥ ﺑﺮﺍﻱ ﻳﻚ ﻓﺎﺻﻠﻪ ﺯﻣﺎﻧﻲ ﺩﺷﻮﺍﺭ ﺍﺳﺖ‪.‬‬

‫ﺗﺸﺨﻴﺺ ﺑﻦ ﺑﺴﺖ‬

‫‪ ‬ﺑﻦ ﺑﺴﺖ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﮔﺮﺍﻑ ‪ ،wait-for‬ﻣﺘﺸﻜﻞ ﺍﺯ ﻳﻚ ﺟﻔﺖ )‪ G=(V,E‬ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺖ‬

‫• ‪ V‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺭﺋﻮﺱ ﺍﺳﺖ )ﺗﻤﺎﻣﻲ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺩﺭ ﺳﻴﺴﺘﻢ(‬

‫‪82‬‬
‫• ‪ E‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﻟﺒﻪ ﻫﺎ ﺍﺳﺖ‪ ،‬ﻫﺮ ﻋﻨﺼﺮﻳﻚ ﺯﻭﺝ ﻣﺮﺗﺐ ‪ Ti→Tj‬ﺍﺳﺖ‪.‬‬

‫‪ ‬ﺍﮔﺮ ‪ Ti→Tj‬ﺩﺭ ‪ ،E‬ﺁﻧﮕﺎﻩ ﻳﻚ ﻟﺒﻪ ﻣﺴﺘﻘﻴﻢ ﺍﺯ ‪ Ti‬ﺑﻪ ‪ Tj‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ ،‬ﻭ ﺑﻪ ﻋﺒﺎﺭﺗﻲ ‪ Ti‬ﺑﺮﺍﻱ ﺁﺯﺍﺩﻛﺮﺩﻥ ﻳﻚ‬
‫ﺑﺨﺶ ﺍﺯ ﺩﺍﺩﻩ ﻣﻨﺘﻈﺮ ‪ Tj‬ﺍﺳﺖ‪.‬‬
‫‪ ‬ﻫﻨﮕﺎﻣﻲ ﻛﻪ ‪ Ti‬ﺩﺭﺧﻮﺍﺳﺖ ﻳﻚ ﺑﺨﺶ ﺍﺯ ﺩﺍﺩﻩ ﻛﻪ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﺗﻮﺳﻂ ‪ Tj‬ﻧﮕﻬﺪﺍﺭﻱ ﻣﻲ ﺷﻮﺩ ﺭﺍﻣﻲ ﻛﻨﺪ‪،‬‬
‫ﺳﭙﺲ ﻟﺒﻪ ‪ TiTj‬ﺩﺭ ﮔﺮﺍﻑ ‪ wait-for‬ﺩﺭﺝ ﻣﻲ ﺷﻮﺩ‪ .‬ﺍﻳﻦ ﻟﺒﻪ ﻓﻘﻂ ﺯﻣﺎﻧﻲ ﺣﺬﻑ ﻣﻲ ﺷﻮﺩ ﻛﻪ ‪ Tj‬ﻳﻚ ﺑﺨﺶ‬
‫ﺩﺍﺩﻩ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺗﻮﺳﻂ ‪ Ti‬ﺭﺍ ﻃﻮﻻﻧﻲ ﻧﮕﻪ ﻧﺪﺍﺭﺩ‪.‬‬
‫‪ ‬ﺍﻳﻦ ﺳﻴﺴﺘﻢ ﺩﺭ ﺣﺎﻟﺖ ﺑﻦ ﺑﺴﺖ ﺍﺳﺖ ﺍﮔﺮ ﻭ ﺗﻨﻬﺎ ﺍﮔﺮ ﮔﺮﺍﻑ ‪ wait-for‬ﺩﺍﺭﺍﻱ ﻳﻚ ﭼﺮﺧﻪ ﺑﺎﺷﺪ‪ .‬ﺑﺎﻳﺪ ﺑﻪ‬
‫ﻳﻚ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺗﺸﺨﻴﺺ ﺑﻦ ﺑﺴﺖ ﺑﻪ ﺻﻮﺭﺕ ﺩﻭﺭﻩ ﺍﻱ ﺑﺮﺍﻱ ﺍﺷﺎﺭﻩ ﺑﻪ ﭼﺮﺧﻪ ﻫﺎ ﺍﺳﺘﻨﺎﺩ ﻛﺮﺩ‪.‬‬

‫ﮔﺭﺍﻑ‪wait-for‬ﺑﺩﻭﻥ ﭼﺭﺧﻪ‬ ‫ﮔﺭﺍﻑ ‪ wait-for‬ﺑﺎ ﭼﺭﺧﻪ‬

‫ﺑﺎﺯﻳﺎﺑﻲ ﺑﻦ ﺑﺴﺖ‬

‫‪ ‬ﭼﻪ ﻭﻗﺖ ﺑﻦ ﺑﺴﺖ ﺷﻨﺎﺳﺎﻳﻲ ﻣﻲ ﺷﻮﺩ‪:‬‬


‫• ﺑﺮﺧﻲ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﻪ ﻋﻘﺐ ﺑﺮﻣﻲ ﮔﺮﺩﻧﺪ )ﻗﺮﺑﺎﻧﻲ( ﺑﺮﺍﻱ ﺷﻜﺴﺘﻦ ﺑﻦ ﺑﺴﺖ‪ .‬ﺗﺮﺍﻛﻨﺸﻲ‬
‫ﻛﻪ ﺑﻪ ﻋﻨﻮﺍﻥ ﻗﺮﺑﺎﻧﻲ ﻛﻤﺘﺮﻳﻦ ﻫﺰﻳﻨﻪ ﺭﺍ ﺩﺍﺭﺩ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ‪.‬‬
‫• ﻋﻘﺒﮕﺮﺩ‪ -‬ﺗﻌﻴﻴﻦ ﺍﻳﻦ ﻛﻪ ﺗﺎ ﭼﻪ ﺣﺪ ﺑﺎﻳﺪ ﺑﻪ ﻋﻘﺐ ﺑﺮﮔﺸﺖ‪.‬‬
‫‪ ‬ﺗﻌﺪﺍﺩ ﻋﻘﺒﮕﺮﺩ ‪ :‬ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﺎﻧﺪﻥ ﺗﺮﺍﻛﻨﺶ ﻭ ﺳﭙﺲ ﺭﺍﻩ ﺍﻧﺪﺍﺯﻱ ﻣﺠﺪﺩ ﺁﻥ‬

‫‪83‬‬
‫‪ ‬ﺗﺄﺛﻴﺮ ﺑﻴﺸﺘﺮ ﺗﺮﺍﻛﻨﺶ ﻋﻘﺒﮕﺮﺩ ﻓﻘﻂ ﺑﺮﺍﻱ ﺷﻜﺴﺘﻦ ﺑﻦ ﺑﺴﺖ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪.‬‬
‫• ﻗﺤﻄﻲ ﺍﺗﻔﺎﻕ ﻣﻲ ﺍﻓﺘﺪ ﺍﮔﺮ ﻫﻤﺎﻥ ﺗﺮﺍﻛﻨﺶ ﺑﺎﺷﺪ ﻛﻪ ﺑﻪ ﻋﻨﻮﺍﻥ ﻗﺮﺑﺎﻧﻲ ﺍﻧﺘﺨﺎﺏ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬
‫ﺗﻌﺪﺍﺩ ﻋﻘﺒﮕﺮﺩﻫﺎ ﺩﺭ ﻋﺎﻣﻞ ﻫﺰﻳﻨﻪ ﺑﺮﺍﻱ ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﮔﺮﺳﻨﮕﻲ ﺭﺍ ﺷﺎﻣﻞ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺭﻭﻳﻜﺮﺩﻫﺎﻱ ﺩﻳﮕﺮ ﺑﺮﺍﻱ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻧﻲ‬

‫ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﺑﺮ ﭘﺎﻳﻪ ﺯﻣﺎﻥ‬

‫‪ ‬ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﺻﺎﺩﺭﻛﻨﻨﺪﻩ ﻳﻚ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺍﺳﺖ ﻛﻪ ﻭﺍﺭﺩ ﺳﻴﺴﺘﻢ ﻣﻲ ﺷﻮﺩ‪ .‬ﺍﮔﺮ ﻳﻚ ﺗﺮﺍﻛﻨﺶ‬
‫ﻗﺪﻳﻤﻲ ‪ Ti‬ﺩﺍﺭﺍﻱ ﺯﻣﺎﻥ‪-‬ﭼﺎپ )‪ TS(Ti‬ﺑﺎﺷﺪ‪ ،‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺟﺪﻳﺪ ‪ Tj‬ﺯﻣﺎﻥ‪-‬ﭼﺎپ )‪ TS(Tj‬ﺭﺍ‬
‫ﺗﺨﺼﻴﺺ ﻣﻲ ﺩﻫﺪ ﺑﻪ ﻃﻮﺭﻱ ﻛﻪ )‪TS(Ti)<TS(Tj‬‬
‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻣﺪﻳﺮﻳﺖ ﺍﺟﺮﺍﻱ ﻫﻤﺰﻣﺎﻥ ﺑﻪ ﻃﻮﺭﻱ ﻛﻪ ﺯﻣﺎﻥ – ﭼﺎپ ﻫﺎﻱ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺳﺮﻳﺎﻟﻲ ﺭﺍ ﺗﻌﻴﻴﻦ‬
‫ﻡﻱ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﺑﺮﺍﻱ ﺍﻃﻤﻴﻨﺎﻥ ﺍﺯ ﭼﻨﻴﻦ ﺭﻓﺘﺎﺭﻱ‪ ،‬ﭘﺮﻭﺗﻜﻞ ﺑﺮﺍﻱ ﻫﺮ ﺩﺍﺩﻩ ‪ 2 Q‬ﻣﻘﺪﺍﺭ ﺍﺯ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺭﺍ ﻧﮕﻪ ﻣﻲ‬
‫ﺩﺍﺭﺩ‪:‬‬

‫• )‪ W-timestamp(Q‬ﺑﺰﺭﮔﺘﺮﻳﻦ ﺯﻣﺎﻥ‪-‬ﭼﺎپ ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﻛﻪ )‪ write(Q‬ﺭﺍ ﺑﻪ ﻃﻮﺭ ﻣﻮﻓﻘﻴﺖ‬


‫ﺁﻣﻴﺰ ﺍﺟﺮﺍ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫• )‪ R-timestamp(Q‬ﺑﺰﺭﮔﺘﺮﻳﻦ ﺯﻣﺎﻥ‪-‬ﭼﺎپ ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﻛﻪ )‪ read(Q‬ﺭﺍ ﺑﻪ ﻃﻮﺭ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ‬


‫ﺍﺟﺮﺍ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﻮﺭ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﻫﻴﭻ ﺿﺪ ﻭ ﻧﻘﻴﻀﻲ ﺩﺭ ﻋﻤﻠﻴﺎﺕ ﺧﻮﺍﻧﺪﻥ ﻭ‬
‫ﻧﻮﺷﺘﻦ ﺩﺭ ﺩﺳﺘﻮﺭ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺍﺟﺮﺍ ﻧﻤﻲ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﻳﻚ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻣﺮﺑﻮﻁ ﺑﻪ ﻣﺴﺎﺋﻞ ﻳﻚ )‪ read(Q‬ﺭﺍ ﻓﺮﺽ ﻛﻨﻴﺪ‪.‬‬
‫‪ .1‬ﺍﮔﺮ )‪ ،TS(Ti)≤ w-timestamp(Q‬ﺳﭙﺲ ‪ Ti‬ﺑﻪ ﺧﻮﺍﻧﺪﻥ ﻱﻙ ﻣﻘﺪﺍﺭ ﺍﺯ ‪ Q‬ﻛﻪ ﺩﺭ ﺣﺎﻝ‬
‫ﺣﺎﺿﺮ ﺭﻭﻧﻮﻳﺴﻲ ﻣﻲ ﺷﻮﺩ ﻧﻴﺎﺯ ﺩﺍﺭﺩ‪.‬‬
‫‪ ‬ﺍﺯ ﺍﻳﻦ ﺭﻭ‪ ،‬ﻋﻤﻞ ﺧﻮﺍﻧﺪﻥ ﺭﺩ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻭ ‪ Ti‬ﺑﻪ ﻋﻘﺐ ﺑﺮ ﻣﻲ ﮔﺮﺩﺩ‪.‬‬
‫‪ .2‬ﺍﮔﺮ )‪ TS(Ti)≥w-timestamp(Q‬ﺑﺎﺷﺪ‪ ،‬ﺳﭙﺲ ﻋﻤﻠﻴﺎﺕ ﺧﻮﺍﻧﺪﻥ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻭ ‪R-‬‬
‫)‪ timestamp(Q‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺑﺮﺍﻱ )‪ max(R-timestamp(Q‬ﻭ )‪ TS(Ti‬ﺍﺳﺖ‪.‬‬

‫‪84‬‬
‫‪ ‬ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺩﺍﺭﺍﻱ ﻣﺴﺎﺋﻞ ﻣﺮﺑﻮﻁ ﺑﻪ )‪ write(Q‬ﺍﺳﺖ‪.‬‬
‫‪ .1‬ﺍﮔﺮ )‪ TS(Ti)<R-timestamp(Q‬ﺑﺎﺷﺪ‪ ،‬ﺳﭙﺲ ﻣﻘﺪﺍﺭ ‪ Q‬ﻛﻪ ‪ Ti‬ﺗﻮﻟﻴﺪ ﻣﻲ ﻛﻨﺪ ﻗﺒﻼ ﻣﻮﺭﺩ‬
‫ﻧﻴﺎﺯ ﺑﻮﺩﻩ‪ ،‬ﻭ ﺳﻴﺴﺘﻢ ﺁﻥ ﺭﺍ ﺑﺮﻋﻬﺪﻩ ﮔﺮﻓﺘﻪ ﻛﻪ ﺁﻥ ﻣﻘﺪﺍﺭ ﻫﺮﮔﺰ ﺗﻮﻟﻴﺪ ﻧﺸﻮﺩ‪.‬‬
‫‪ ‬ﺍﺯ ﺍﻳﻦ ﺭﻭ‪ ،‬ﺍﻳﻦ ﻋﻤﻠﻴﺎﺕ ﻧﻮﺷﺘﻦ ﺭﺩ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻭ ‪ Ti‬ﺑﻪ ﻋﻘﺐ ﺑﺮ ﻣﻲ ﮔﺮﺩﺩ‪.‬‬
‫‪ .2‬ﺍﮔﺮ )‪ TS(Ti)<w-timestamp(Q‬ﺑﺎﺷﺪ‪ ،‬ﺳﭙﺲ ‪ Ti‬ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮﻱ ﻳﻚ ﻣﻘﺪﺍﺭ ﻏﻴﺮﻗﺎﺑﻞ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ Q‬ﺗﻼﺵ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫‪ ‬ﺍﺯ ﺍﻳﻦ ﺭﻭ‪ ،‬ﺍﻳﻦ ﻋﻤﻠﻴﺎﺕ ﻧﻮﺷﺘﻦ ﺭﺩ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻭ ‪ Ti‬ﺑﻪ ﻋﻘﺐ ﺑﺮ ﻣﻲ ﮔﺮﺩﺩ‪.‬‬
‫‪ .3‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ‪ ،‬ﻋﻤﻠﻴﺎﺕ ﻧﻮﺷﺘﻦ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻭ )‪ w-timestamp(Q‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ‬
‫)‪ TS(Ti‬ﺍﺳﺖ‪.‬‬

‫ﻣﺜﺎﻝ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﺮﻭﺗﻜﻞ‬

‫ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ ﺑﺮﺍﻱ ﭼﻨﺪﻳﻦ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﺑﺎ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻧﻲ ‪ ،4 ،3 ،2 ،1‬ﺍﺳﺖ‬

‫‪T1‬‬ ‫‪T2‬‬ ‫‪T3‬‬ ‫‪T4‬‬ ‫‪T5‬‬

‫)‪read(X‬‬
‫)‪read(Y‬‬
‫)‪read(Y‬‬
‫)‪write(Y‬‬
‫)‪write(Z‬‬
‫)‪read(Z‬‬
‫)‪read(X‬‬
‫‪abort‬‬
‫)‪read(X‬‬
‫)‪write(Z‬‬
‫‪abort‬‬
‫)‪write(Y‬‬
‫)‪write(Z‬‬

‫ﺻﺤﺖ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺩﺳﺘﻮﺭ ﭘﺮﻭﺗﻜﻞ‬

‫‪85‬‬
‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﻮﺭ‪ -‬ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺗﻤﺎﻡ ﻛﻤﺎﻥ ﻫﺎﻱ ﮔﺮﺍﻑ ﺍﻭﻟﻮﻳﺖ ﺍﺯ ﻓﺮﻡ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻳﺎﻟﻲ‬
‫ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪transaction‬‬ ‫‪transaction‬‬
‫‪with smaller‬‬ ‫‪with larger‬‬
‫‪timestamp‬‬ ‫‪timestamp‬‬

‫ﺑﻨﺎﺑﺮ ﺍﻳﻦ‪ ،‬ﻫﻴﭻ ﭼﺮﺧﻪ ﺍﻱ ﺩﺭ ﮔﺮﺍﻑ ﺍﻭﻟﻮﻳﺖ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪.‬‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺭﻫﺎﻳﻲ ﺍﺯ ﺑﻦ ﺑﺴﺖ ﺭﺍ ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﻫﻴﭻ ﺗﺮﺍﻛﻨﺸﻲ ﻣﻨﺘﻈﺮ ﻧﻤﻲ ﻣﺎﻧﺪ‪.‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻣﻤﻜﻦ ﻧﻴﺴﺖ ﺁﺑﺸﺎﺭﻱ‪-‬ﺁﺯﺍﺩ ﺑﺎﺷﺪ‪ ،‬ﻭ ﺣﺘﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺎﺯﻳﺎﺑﻲ ﻧﺸﻮﺩ‪.‬‬

‫ﺑﺎﺯﻳﺎﺑﻲ ﻭ ﺍﺳﺘﻘﻼﻝ ﺁﺑﺸﺎﺭﻱ‬

‫‪ ‬ﻣﺸﻜﻼﺕ ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﻮﺭ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ‪:‬‬


‫• ﻓﺮﺽ ﺷﺪﻩ ﺑﺮ ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﺎﻧﺪﻥ‪ ،‬ﺍﻣﺎ ‪ Tj‬ﻳﻚ ﺑﺨﺶ ﺍﺯ ﺩﺍﺩﻩ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺗﻮﺳﻂ ‪ Ti‬ﺭﺍ ﻣﻲ‬
‫ﺧﻮﺍﻧﺪ‪.‬‬
‫• ﺑﻨﺎﺑﺮﺍﻳﻦ ‪ Tj‬ﺑﺎﻳﺪ ﺑﻲ ﻧﺘﻴﺠﻪ ﺑﻤﺎﻧﺪ‪ ،‬ﺍﮔﺮ ‪ Tj‬ﺑﻪ ﺗﺄﻳﻴﺪ ﺯﻭﺩﺗﺮ ﺍﺟﺎﺯﻩ ﺩﻫﺪ‪ ،‬ﺑﺮﻧﺎﻣﻪ ﻏﻴﺮﻗﺎﺑﻞ‬
‫ﺑﺎﺯﻳﺎﺑﻲ ﺍﺳﺖ‪.‬‬
‫• ﻋﻼﻭﻩ ﺑﺮ ﺍﻳﻦ‪ ،‬ﻫﺮ ﮔﻮﻧﻪ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﻳﻚ ﺑﺨﺶ ﺍﺯ ﺩﺍﺩﻩ ﻧﻮﺷﺘﻪ ﺵﺩﻩ ﺗﻮﺳﻂ ‪ Tj‬ﺭﺍ ﺑﺨﻮﺍﻧﺪ‬
‫ﺑﺎﻳﺪ ﺑﻲ ﻧﺘﻴﺠﻪ ﺑﻤﺎﻧﺪ‪.‬‬
‫• ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﻨﺠﺮ ﺑﻪ ﻋﻘﺐ ﮔﺮﺩ ﺁﺑﺸﺎﺭﻱ ﺷﻮﺩ‪ ،‬ﻛﻪ ﻳﻚ ﻋﻘﺐ ﮔﺮﺩ ﺯﻧﺠﻴﺮﻩ ﺍﻱ ﺍﺳﺖ‪.‬‬
‫‪ ‬ﺭﺍﻩ ﺣﻞ ‪: 1‬‬
‫• ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﻣﻮﺭﺩ ﺳﺎﺧﺘﺎﺭﺵ ﭼﻨﻴﻦ ﻣﻲ ﻧﻮﻳﺴﺪ ﻛﻪ ﻫﻤﻪ ﺭﺍ ﺩﺭ ﭘﺎﻳﺎﻥ ﭘﺮﺩﺍﺯﺵ ﺍﻧﺠﺎﻡ‬
‫ﻣﻲ ﺩﻫﺪ‪.‬‬
‫• ﻫﻤﻪ ﺍﺯ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺍﺯ ﻳﻚ ﻋﻤﻞ ﺍﺗﻤﻴﻚ ﻣﻲ ﻧﻮﻳﺴﻨﺪ‪ ،‬ﻫﻴﭻ ﺗﺮﺍﻛﻨﺸﻲ ﺍﻣﻜﺎﻥ ﻧﺪﺍﺭﺩ ﺍﺟﺮﺍ‬
‫ﺷﻮﺩ ﺩﺭ ﺣﺎﻟﻲ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪86‬‬
‫• ﻳﻚ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﻲ ﻣﺎﻧﺪ ﻣﺠﺪﺩﺍ ﺑﺎ ﻳﻚ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻧﻲ ﺟﺪﻳﺪ ﺭﺍﻩ ﺍﻧﺪﺍﺯﻱ ﻣﻲ‬
‫ﺷﻮﺩ‪.‬‬
‫‪ ‬ﺭﺍﻩ ﺣﻞ ‪ : 2‬ﻣﺤﺪﻭﺩ ﻛﺮﺩﻥ ﻓﺮﻡ ﻗﻔﻞ‪ ،‬ﺍﻧﺘﻈﺎﺭ ﺑﺮﺍﻱ ﺩﺍﺩﻩ ﻛﻪ ﻗﺒﻞ ﺍﺯ ﺧﻮﺍﻧﺪﻥ ﺁﻥ ﺗﺄﻳﻴﺪ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﺭﺍﻩ ﺣﻞ ‪ : 3‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻭﺍﺑﺴﺘﮕﻲ ﻫﺎﻱ ﻣﻮﺭﺩ ﺗﺄﻳﻴﺪ ﺑﺮﺍﻱ ﺍﻃﻤﻴﻨﺎﻥ ﺍﺯ ﺑﺎﺯﻳﺎﺑﻲ‬

‫ﻧﻮﺷﺖ ﺷﺪﻩ ﻱ ﺗﻮﻣﺎﺱ‬


‫ﻩ‬ ‫ﻗﺎﻧﻮﻥ‬

‫‪ ‬ﻧﺴﺨﻪ ﺍﺻﻼﺡ ﺷﺪﻩ ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﻮﺭ‪ -‬ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﻛﻪ ﺩﺭ ﺁﻥ ﻋﻤﻠﻴﺎﺕ ﻣﻨﺴﻮﺥ ﺷﺪﻩ ﻣﻤﻜﻦ ﺍﺳﺖ‬
‫ﺗﺤﺖ ﺷﺮﺍﻳﻂ ﺧﺎﺹ ﻧﺎﺩﻳﺪﻩ ﮔﺮﻓﺘﻪ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﻫﻨﮕﺎﻣﻲ ﻛﻪ ‪Ti‬ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ‪Q‬ﺗﻼﺵ ﻣﻲ ﻛﻨﺪ‪ ،‬ﺍﮔﺮ )‪TS(Ti)<w-timestamp(Q‬‬
‫ﺑﺎﺷﺪ‪ ،‬ﺳﭙﺲ ‪ Ti‬ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﻳﻚ ﻣﻘﺪﺍﺭ ﻏﻴﺮﻗﺎﺑﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ}‪ {Q‬ﺗﻼﺵ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫• ﺑﻪ ﺟﺎﻱ ﻋﻘﺐ ﮔﺮﺩ ‪ Ti‬ﺑﻪ ﻋﻨﻮﺍﻥ ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﻮﺭ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ‪ ،‬ﻋﻤﻠﻴﺎﺕ }‪ {write‬ﺭﺍ‬
‫ﻣﻲ ﺗﻮﺍﻥ ﻧﺎﺩﻳﺪﻩ ﮔﺮﻓﺖ ‪.‬‬
‫‪ ‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﺍﻳﻦ ﭘﺮﻭﺗﻜﻞ ﻫﻤﺎﻥ ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﻮﺭ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺍﺳﺖ‪.‬‬
‫‪ ‬ﻗﺎﻧﻮﻥ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﻱ ﺗﻮﻣﺎﺱ ﺍﺟﺎﺯﻩ ﺑﻪ ﭘﺘﺎﻧﺴﻴﻞ ﻫﻤﺰﻣﺎﻧﻲ ﺑﻴﺸﺘﺮ ﻣﻲ ﺩﻫﺪ‪.‬‬
‫• ﺍﺟﺎﺯﻩ ﻣﻲ ﺩﻫﺪ ﺗﺎ ﺑﺮﺧﻲ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻗﺎﺑﻞ ﺩﻳﺪﻥ ﺳﺮﻳﺎﻟﻲ ﻣﺘﻀﺎﺩ ﺳﺮﻳﺎﻟﻲ ﻧﺒﺎﺷﻨﺪ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﻣﺒﺘﻨﻲ ﺑﺮ ﺍﻋﺘﺒﺎﺭ ﺳﻨﺠﻲ‬

‫‪ ‬ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺩﺭ ﺳﻪ ﻓﺎﺯ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ‪:‬‬

‫‪ .1‬ﻓﺎﺯ ﺧﻮﺍﻧﺪﻥ ﻭ ﺍﺟﺮﺍ ‪ :‬ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻓﻘﻂ ﻣﺘﻐﻴﺮﻫﺎﻱ ﻣﺤﻠﻲ ﺭﺍ ﺑﻪ ﻃﻮﺭ ﻣﻮﻗﺖ ﻣﻲ ﻧﻮﻳﺴﺪ‪.‬‬

‫‪ .2‬ﻓﺎﺯ ﺍﻋﺘﺒﺎﺭ ‪ :‬ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺁﺯﻣﻮﻥ ﺍﻋﺘﺒﺎﺭ ﺑﺮﺍﻱ ﺗﻌﻴﻴﻦ ﺍﻳﻨﻜﻪ ﺁﻳﺎ ﻣﺘﻐﻴﺮﻫﺎﻱ ﻣﺤﻠﻲ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺑﺪﻭﻥ ﻧﻘﺾ ﺳﺮﻳﺎﻟﻲ‬
‫ﻧﻮﺷﺘﻪ ﺷﻮﻧﺪ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫‪ .3‬ﻓﺎﺯ ﻧﻮﺷﺘﻦ ‪ :‬ﺍﮔﺮ ‪ Ti‬ﺩﺍﺭﺍﻱ ﺍﻋﺘﺒﺎﺭ ﺍﺳﺖ‪ ،‬ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎ ﻛﺎﺭﺑﺮﺩﻱ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻫﺴﺘﻨﺪ ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ‪،‬‬
‫‪ Ti‬ﺑﻪ ﻋﻘﺐ ﺑﺮ ﻣﻲ ﮔﺮﺩﺩ‪.‬‬

‫‪ 3 ‬ﻓﺎﺯ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺍﺟﺮﺍﻱ ﻫﻤﺰﻣﺎﻥ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺑﻪ ﺻﻮﺭﺕ ﺟﺪﺍ ﺷﺪﻩ ﺑﺎﺷﻨﺪ‪ ،‬ﺍﻣﺎ ﻫﺮ ﺗﺮﺍﻛﻨﺸﻲ ﺑﺎﻳﺪ ﺍﺯ‬
‫ﻃﺮﻳﻖ ‪ 3‬ﻓﺎﺯ ﺩﺭ ﺩﺳﺘﻮﺭ ﺍﺟﺮﺍ ﺷﻮﺩ‪.‬‬

‫‪87‬‬
‫• ﺑﺮﺍﻱ ﺳﺎﺩﮔﻲ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻣﺮﺣﻠﻪ ﻱ ﺍﻋﺘﺒﺎﺭﺳﻨﺠﻲ ﻭ ﻧﻮﺷﺘﻦ ﺑﺎ ﻫﻢ ﺍﺯ ﻃﺮﻳﻖ ﺍﺗﻤﻴﻚ ﻭ ﺳﺮﻳﺎﻟﻲ ﺭﺥ‬
‫ﻣﻲ ﺩﻫﺪ‪.‬‬

‫‪ ‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺗﻨﻬﺎ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺍﻋﺘﺒﺎﺭ‪/‬ﻧﻮﺷﺘﻦ ﺩﺭ ﻳﻚ ﺯﻣﺎﻥ ﺍﺝﺭﺍ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ ‬ﻫﻤﭽﻨﻴﻦ ﺑﻪ ﻋﻨﻮﺍﻥ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻧﻲ ﺧﻮﺷﺒﻴﻨﺎﻧﻪ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﻃﻮﺭ ﻛﺎﻣﻞ ﺑﻪ ﺍﻳﻦ‬
‫ﺍﻣﻴﺪ ﻛﻪ ﻫﻤﻪ ﺑﻪ ﺧﻮﺑﻲ ﺩﺭ ﻃﻮﻝ ﺍﻋﺘﺒﺎﺭ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﻫﺮ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺩﺍﺭﺍﻱ ‪ 3‬ﺑﺮﭼﺴﺐ ﺯﻣﺎﻧﻲ ﺍﺳﺖ‪.‬‬

‫• ﺷﺮﻭﻉ )‪ :(Ti‬ﺯﻣﺎﻧﻲ ﻛﻪ ﺍﺟﺮﺍﻱ ‪ Ti‬ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﻙ ‪ Ti‬ﻭﺍﺭﺩ ﻓﺎﺯ ﺍﻋﺘﺒﺎﺭﺳﻨﺠﻲ ﻣﻲ ﺷﻮﺩ‪.‬‬


‫• ﺍﻋﺘﺒﺎﺭ ﺳﻨﺠﻲ )‪ : (Ti‬ﺯﻣﺎﻧﻲ ﻩ‬

‫• ﭘﺎﻳﺎﻥ )‪ : (Ti‬ﺯﻣﺎﻧﻲ ﻛﻪ ﻓﺎﺯ ﻧﻮﺷﺘﻦ ‪ Ti‬ﺑﻪ ﭘﺎﻳﺎﻥ ﻣﻲ ﺭﺳﺪ‪.‬‬

‫‪ ‬ﺩﺳﺘﻮﺭ ﺳﺮﻳﺎﻟﻲ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ ﺩﺭ ﺯﻣﺎﻥ ﺍﻋﺘﺒﺎﺭ ﺑﺮﺍﻱ ﺍﻓﺰﺍﻳﺶ ﻫﻤﺰﻣﺎﻧﻲ ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫• ﺑﻨﺎﺑﺮﺍﻳﻦ )‪ TS(Ti‬ﻣﻘﺪﺍﺭﻱ ﺍﺯ ﺍﻋﺘﺒﺎﺭﺳﻨﺠﻲ )‪ (Ti‬ﺭﺍ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫‪ ‬ﺍﻳﻦ ﭘﺮﻭﺗﻜﻞ ﺑﺴﻴﺎﺭ ﻣﻔﻴﺪ ﺍﺳﺖ ﻭ ﻣﻴﺰﺍﻥ ﺑﺎﻻﻳﻲ ﺍﺯ ﻫﻤﺰﻣﺎﻧﻲ ﻛﻪ ﺍﺣﺘﻤﺎﻝ ﺩﺭﮔﻴﺮﻱ ﺁﻥ ﻛﻢ ﺍﺳﺖ ﺭﺍ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫• ﺯﻳﺮﺍ ﺩﺳﺘﻮﺭ ﺳﺮﻳﺎﻟﻲ ﻗﺎﺑﻞ ﺗﺼﻤﻴﻢ ﮔﻴﺮﻱ ﻧﻴﺴﺖ‪ ،‬ﻭ‬

‫• ﺗﻌﺪﺍﺩ ﻛﻤﻲ ﺍﺯ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﺎﻳﺪ ﺑﻪ ﻋﻘﺐ ﺑﺮﮔﺮﺩﺩ‪.‬‬

‫ﺁﺯﻣﻮﻥ ﺍﻋﺘﺒﺎﺭ ﺑﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ‪Tj‬‬

‫‪ ‬ﺍﮔﺮ ‪ Ti‬ﺑﺮﺍﻱ ﻫﻤﻪ )‪ TS(Ti)<TS(Tj‬ﺑﺎﺷﺪ ﻳﻜﻲ ﺍﺯ ﺷﺮﺍﻳﻂ ﺯﻳﺮ ﺭﺍ ﻧﮕﻪ ﻣﻲ ﺩﺍﺭﺩ ‪:‬‬

‫• )‪finish(Ti) < start(Tj‬‬


‫• )‪ Start(Tj)<finish(Ti)<validation(Tj‬ﻭ ﻣﺠﻤﻮﻋﻪ ﺁﻳﺘﻢ ﻫﺎﻱ ﺩﺍﺩﻩ ﻱ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺗﻮﺳﻂ‬
‫‪ Ti‬ﻛﻪ ﺑﺎ ﻣﺠﻤﻮﻋﻪ ﺁﻳﺘﻢ ﻫﺎﻱ ﺩﺍﺩﻩ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺗﻮﺳﻂ ‪ Tj‬ﻋﻤﻞ ﺗﻘﺴﻴﻢ ﻛﺮﺩﻥ ﺭﺍ ﺍﻧﺠﺎﻡ ﻧﻤﻲ ﺩﻫﻨﺪ‪.‬‬
‫ﺁﻧﮕﺎﻩ ﺍﻋﺘﺒﺎﺭﺳﻨﺠﻲ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﻭ ‪ Tj‬ﻣﻲ ﺗﻮﺍﻧﺪ ﭘﺬﻳﺮﻓﺘﻪ ﺷﻮﺩ‪ ،‬ﺩﺭﻏﻴﺮﺍﻳﻦ ﺻﻮﺭﺕ‬
‫ﺍﻋﺘﺒﺎﺭﺳﻨﺠﻲ ﺑﺎ ﺷﻜﺴﺖ ﻣﻮﺍﺟﻪ ﻣﻲ ﺷﻮﺩ ﻭ ‪ Tj‬ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﻲ ﻣﺎﻧﺪ‪.‬‬

‫‪88‬‬
‫‪ ‬ﺗﻮﺟﻴﻪ ‪ :‬ﻳﻜﻲ ﺍﺯ ‪ 2‬ﺷﺮﻁ ﺍﻭﻝ ﺭﺿﺎﻳﺖ ﺑﺨﺶ ﺍﺳﺖ‪ ،‬ﻭ ﻫﻴﭻ ﺍﺟﺮﺍﻱ ﻫﻤﭙﻮﺷﺎﻧﻲ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪ ،‬ﻳﺎ ﺍﻳﻨﻜﻪ ﺷﺮﻁ‬
‫ﺩﻭﻡ ﺭﺿﺎﻳﺖ ﺑﺨﺶ ﺍﺳﺖ ﻭ‬
‫‪ ‬ﻧﻮﺷﺘﻪ ﻫﺎﻱ ‪ Tj‬ﺑﺮﺭﻭﻱ ﺧﻮﺍﻧﺪﻥ ‪Ti‬ﺗﺄﺛﻴﺮ ﻧﻤﻲ ﮔﺬﺍﺭﻧﺪ ﺍﺯ ﺁﻧﺠﺎﻳﺌﻜﻪ ﺁﻧﻬﺎ ﺑﻌﺪ ﺍﺯ ﺍﺗﻤﺎﻡ ‪ Ti‬ﺭﺥ ﻣﻲ‬
‫ﺩﻫﻨﺪ ﻭ ﺁﻥ ﺭﺍ ﻣﻲ ﺧﻮﺍﻧﻨﺪ‪.‬‬
‫‪ ‬ﻧﻮﺷﺘﻪ ﻫﺎﻱ ‪Ti‬ﺑﺮﺭﻭﻱ ﺧﻮﺍﻧﺪﻥ ‪ Tj‬ﺗﺄﺛﻴﺮﻧﻤﻲ ﮔﺬﺍﺭﻧﺪ ﭼﻮﻥ ﻛﻪ ‪ Tj‬ﻫﺮ ﺁﻳﺘﻢ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺗﻮﺳﻂ‬
‫‪ Ti‬ﺭﺍ ﻧﻤﻲ ﺧﻮﺍﻧﺪ‪.‬‬

‫ﺑﺮﻧﺎﻣﻪ ﺯﻣﺎﻧﺒﻨﺪﻱ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺗﻮﺳﻂ ﺍﻋﺘﺒﺎﺭ ﺳﻨﺠﻲ‬

‫‪ ‬ﻣﺜﺎﻟﻲ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻋﺘﺒﺎﺭﺳﻨﺠﻲ‬


‫‪T14‬‬ ‫‪T15‬‬

‫)‪read(B‬‬
‫)‪read(B‬‬
‫‪B:= B-50‬‬
‫)‪read(A‬‬
‫‪A:= A+50‬‬

‫)‪read(A‬‬
‫)‪(validate‬‬
‫)‪display (A+B‬‬

‫)‪(validate‬‬
‫)‪write (B‬‬
‫)‪write (A‬‬

‫ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﭼﻨﺪ ﻧﺴﺨﻪ ﺍﻱ‬

‫• ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﭼﻨﺪ ﻧﺴﺨﻪ ﺍﻱ ﻧﺴﺨﻪ ﻫﺎﻱ ﻗﺪﻳﻤﻲ ﺍﺯ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺭﺍ ﺑﺮﺍﻱ ﺍﻓﺰﺍﻳﺶ ﻫﻤﺰﻣﺎﻧﻲ ﻧﮕﻪ ﻣﻲ‬
‫ﺩﺍﺭﻧﺪ‬

‫‪89‬‬
‫• ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺑﺮ ﺣﺴﺐ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﭼﻨﺪ ﻧﺴﺨﻪ ﺍﻱ‬

‫• ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﭼﻨﺪ ﻧﺴﺨﻪ ﺍﻱ‬

‫‪ ‬ﻫﺮ ﻳﻚ ﺍﺯ ﻧﺘﺎﻳﺞ ﻧﻮﺷﺘﻦ ﺑﻪ ﻃﻮﺭ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ ﺩﺭ ﺍﻳﺠﺎﺩ ﻳﻚ ﻧﺴﺨﻪ ﺟﺪﻳﺪ ﺍﺯ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻧﻲ ﺑﺮ ﻃﺒﻖ ﻧﺴﺨﻪ ﻫﺎﻱ ﺑﺮﭼﺴﺐ‬

‫‪ ‬ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻋﻤﻞ ﺧﻮﺍﻧﺪﻥ )‪ (Q‬ﺻﺎﺩﺭ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻳﻚ ﻧﺴﺨﻪ ﻣﻨﺎﺳﺐ ﺍﺯ ‪ Q‬ﺭﺍ ﺑﺮ ﺍﺳﺎﺱ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ‬
‫ﺗﺮﺍﻛﻨﺶ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ ﻭ ﻣﻘﺪﺍﺭ ﺁﻥ ﺭﺍ ﺑﻪ ﻧﺴﺨﻪ ﻱ ﺍﻧﺘﺨﺎﺏ ﺷﺪﻩ ﺑﺮﮔﺮﺩﺍﻧﻴﺪ‪.‬‬

‫‪ Read ‬ﻫﺎ ﻫﺮﮔﺰ ﺑﻪ ﺍﻧﺘﻈﺎﺭ ﻳﻚ ﻧﺴﺨﻪ ﻣﻨﺎﺳﺐ ﺑﺮﺍﻱ ﺑﺎﺯﮔﺸﺖ ﻓﻮﺭﻱ ﻧﻴﺎﺯ ﻧﺪﺍﺭﻧﺪ‪.‬‬

‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺑﺮ ﺍﺳﺎﺱ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ‪Multiversion‬‬

‫‪ ‬ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺁﻳﺘﻢ ﻫﺎﻱ ﺩﺍﺩﻩ ‪ Q‬ﻳﻚ ﺩﻧﺒﺎﻟﻪ ﺍﺯ ﻧﺴﺨﻪ ﻫﺎﻱ >‪ <Q1,Q2,…Qm‬ﺭﺍ ﺩﺍﺭﺩ‪ .‬ﻫﺮ ﻧﺴﺨﻪ ‪ Qk‬ﺷﺎﻣﻞ‬
‫‪ 3‬ﺯﻣﻴﻨﻪ ﺩﺍﺩﻩ ﺍﺳﺖ ‪:‬‬

‫‪ .1‬ﻣﻄﺎﻟﺐ ﻭ ﻣﺤﺘﻮﺍ ‪ -‬ﺍﺭﺯﺵ ﻧﺴﺨﻪ ‪Qk‬‬

‫‪ – W-timestamp(Qk) .2‬ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﻧﺴﺨﻪ ‪ Qk‬ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ)ﻧﻮﺷﺘﻦ(‬

‫‪ -- R-timestamp(Qk) .3‬ﺑﺰﺭﮔﺘﺮﻳﻦ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﺴﺨﻪ‬


‫‪ Qk‬ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻳﻚ ﻧﺴﺨﻪ ﺟﺪﻳﺪ ‪ Qk‬ﺍﺯ ‪ Q‬ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ‪ Qks w-timestamp ،‬ﻭ ‪R-‬‬
‫‪ timestamp‬ﺑﺎ )‪ TS(Ti‬ﻣﻘﺪﺍﺭ ﺩﻫﻲ ﺍﻭﻟﻴﻪ ﺷﺪﻩ ﺍﻧﺪ‪.‬‬

‫‪ R-timestamp ‬ﺍﺯ ‪ Qk‬ﺑﻪ ﺭﻭﺯ ﺷﺪﻩ ﺍﺳﺖ ﻫﺮﺯﻣﺎﻥ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ‪ Tj‬ﺑﺨﻮﺍﻧﺪ ‪ ، Qk‬ﻭ ‪Ts(Tj)>R-‬‬
‫)‪timestamp(Qk‬‬

‫‪ ‬ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻋﻤﻠﻴﺎﺕ ﻣﺮﺑﻮﻁ ﺑﻪ )‪ read(Q‬ﻳﺎ )‪ write(Q‬ﺭﺍ ﺑﻔﺮﺳﺘﺪ‪ .‬ﺍﺟﺎﺯﻩ ﺩﻫﻴﺪ ﺑﻪ ‪Qk‬‬
‫ﻛﻪ ﺩﻻﻟﺖ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺑﺮ ﻧﺴﺨﻪ ﺍﻱ ﺍﺯ ‪ Q‬ﻛﻪ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﻧﻮﺷﺘﻦ ﺁﻥ ﺑﺰﺭﮔﺘﺮﻳﻦ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﻧﻮﺷﺘﻦ‬
‫ﻛﻮﭼﻜﺘﺮ ﻳﺎ ﻣﺴﺎﻭﻱ )‪ TS(Ti‬ﺍﺳﺖ‪.‬‬

‫‪90‬‬
‫‪ .1‬ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻣﺴﺎﺋﻞ ﻣﺮﺑﻮﻁ ﺑﻪ )‪ read(Q‬ﺭﺍ ﻣﻄﺮﺡ ﻛﻨﺪ‪ ،‬ﺁﻧﮕﺎﻩ ﻣﻘﺪﺍﺭ ﺑﺮﮔﺸﺘﻲ‪ ،‬ﻣﺤﺘﻮﺍﻱ ﻧﺴﺨﻪ‬
‫‪ Qk‬ﺍﺳﺖ‪.‬‬

‫‪ .2‬ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ‪Ti‬ﻣﺴﺎﺋﻞ ﻣﺮﺑﻮﻁ ﺑﻪ )‪ Write(Q‬ﺭﺍ ﻣﻄﺮﺡ ﻛﻨﺪ‪.‬‬

‫‪ .1‬ﺍﮔﺮ )‪ TS(Ti)<R-timestamp(Qk‬ﺑﺎﺷﺪ‪ ،‬ﺁﻥ ﮔﺎﻩ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺑﻪ ﻋﻘﺐ ﺑﺮ ﻣﻲ ﮔﺮﺩﺩ‪.‬‬

‫‪ .2‬ﺍﮔﺮ )‪ TS(Ti)=W-timestamp(Qk‬ﺑﺎﺷﺪ‪ ،‬ﻣﺤﺘﻮﻳﺎﺕ ‪ Qk‬ﺑﺎﻳﺪ ﺑﺎﺯﻧﻮﻳﺴﻲ ﺷﻮﺩ‪.‬‬

‫‪ .3‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﻳﻚ ﻧﺴﺨﻪ ﺟﺪﻳﺪ ﺍﺯ ‪ Q‬ﺭﺍ ﺑﻪ ﻭﺟﻮﺩ ﺁﻭﺭﺩﻩ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﻣﺸﺎﻫﺪﻩ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ‬

‫• ﺑﺎﺭ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﻩ ﻣﻴﺸﻪ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ‬


‫• ﻳﻚ ﻧﻮﺷﺘﻪ ﺗﻮﺳﻂ ‪ Ti‬ﺭﺩ ﻣﻲ ﺷﻮﺩ ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ‪ Tj‬ﺩﻳﮕﺮﻱ ) ﺩﺭ ﺩﺳﺘﻮﺭ ﺳﺮﻳﺎﻟﻲ ﺗﻮﺳﻂ‬
‫ﻣﻘﺎﺩﻳﺮ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﻧﺪ( ﻧﻮﺷﺘﻪ ﻱ ‪ Tis‬ﺭﺍ ﺑﺨﻮﺍﻧﺪ‪ ،‬ﻛﻪ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﻳﻚ‬
‫ﻧﺴﺨﻪ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺗﻮﺳﻂ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻗﺪﻳﻤﻲ ﺗﺮ ﺍﺯ ‪ Ti‬ﺭﺍ ﻣﻲ ﺧﻮﺍﻧﺪ‪.‬‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺗﻀﻤﻴﻦ ﻛﻨﻨﺪﻩ ﺳﺮﻳﺎﻟﻲ‬

‫ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﭼﻨﺪ ﻧﺴﺨﻪ ﺍﻱ‬

‫‪ ‬ﺗﻔﺎﻭﺕ ﺑﻴﻦ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻧﻲ ﻭ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺑﻪ ﺭﻭﺯ ﺷﺪﻩ‬

‫‪ ‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺑﻪ ﺭﻭﺯ ﺷﺪﻩ ﻗﻔﻞ ﻫﺎﻱ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﺭﺍ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻭﺭﻧﺪ‪ ،‬ﻭ ﺗﻤﺎﻣﻲ ﻗﻔﻞ ﻫﺎ ﺭﺍ ﺗﺎ ﭘﺎﻳﺎﻥ‬
‫ﺗﺮﺍﻛﻨﺶ ﻧﮕﻪ ﻣﻲ ﺩﺍﺭﻧﺪ‪ .‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻛﻪ ﺑﻪ ﺩﻧﺐﺍﻝ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﻫﺴﺘﻨﺪ‪.‬‬

‫• ﻫﺮﻳﻚ ﺍﺯ ﻧﺘﺎﻳﺞ ﻧﻮﺷﺘﻦ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰ ﺩﺭ ﺍﻳﺠﺎﺩ ﻳﻚ ﻧﺴﺨﻪ ﺟﺪﻳﺪ ﺍﺯ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫• ﻫﺮ ﻧﺴﺨﻪ ﺍﺯ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺩﺍﺭﺍﻱ ﻳﻚ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﻭﺍﺣﺪ ﺍﺳﺖ ﻛﻪ ﺍﺭﺯﺵ ﺁﻥ ﺍﺯ ﻃﺮﻳﻖ ﺷﻤﺎﺭﻧﺪﻩ‬

‫‪ Ts-counter‬ﻛﻪ ﺩﺭ ﻃﻮﻝ ﺗﺄﻳﻴﺪ ﭘﺮﺩﺍﺯﺵ ﺍﻓﺰﺍﻳﺶ ﻣﻲ ﻳﺎﺑﺪ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻳﺪ‪.‬‬

‫‪91‬‬
‫‪ ‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻧﻲ ﺩﺭ ﻳﻚ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺑﺎ ﺧﻮﺍﻧﺪﻥ ﺍﺭﺯﺵ ﻓﻌﻠﻲ ‪ ts-counter‬ﻗﺒﻞ ﺍﺯ ﺷﺮﻭﻉ‬
‫ﺍﺟﺮﺍ ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﻧﺪ‪ ،‬ﺁﻧﻬﺎ ﺑﻪ ﺩﻧﺒﺎﻝ ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﻮﺭ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﭼﻨﺪ ﻧﺴﺨﻪ ﺍﻱ ﺑﺮﺍﻱ ﺍﺟﺮﺍﻱ ﺧﻮﺍﻧﺪﻥ‬
‫ﻣﻲ ﺑﺎﺷﻨﺪ‪.‬‬

‫‪ ‬ﭼﻪ ﻭﻗﺖ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻭﻳﺮﺍﻳﺶ ﺷﺪﻩ ﺗﻤﺎﻳﻞ ﺩﺍﺭﺩ ﻳﻚ ﺑﺨﺶ ﺍﺯ ﺩﺍﺩﻩ ﺭﺍ ﺑﺨﻮﺍﻧﺪ‪:‬‬

‫ﻳﻚ ﻗﻔﻞ ﻣﺸﺘﺮﻙ ﺭﻭﻱ ﺁﻥ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻭﺭﺩ‪ ،‬ﻭ ﻧﺴﺨﻪ ﻫﺎﻱ ﭘﺎﻳﻴﻦ ﺗﺮ ﺭﺍ ﻣﻲ ﺧﻮﺍﻧﺪ‪.‬‬ ‫•‬

‫‪ ‬ﻭﻗﺘﻲ ﻛﻪ ﺗﻤﺎﻳﻞ ﺩﺍﺭﺩ ﻳﻚ ﺑﺨﺶ ﺭﺍ ﺑﻨﻮﻳﺴﺪ‬

‫ﻗﻔﻞ ‪ x‬ﺭﺍ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻭﺭﺩ‪ ،‬ﺳﭙﺲ ﻳﻚ ﻧﺴﺨﻪ ﺟﺪﻳﺪﺍﺯ ﺍﻳﻦ ﺑﺨﺶ ﻭ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﻧﺴﺨﻪ ﻫﺎﻱ‬ ‫•‬
‫ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺑﻪ ∞ ﺭﺍﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪ ‬ﭼﻪ ﻭﻗﺖ ﻭﻳﺮﺍﻳﺶ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻛﺎﻣﻞ ﻣﻲ ﺷﻮﺩ‪ ،‬ﭘﺬﻳﺮﺵ ﭘﺮﺩﺍﺯﺵ ﺭﺥ ﻣﻲ ﺩﻫﺪ ‪:‬‬

‫• ﻣﺠﻤﻮﻋﻪ ﻫﺎﻱ ‪ Ti‬ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ ﺭﻭﻱ ﻧﺴﺨﻪ ﻫﺎﻱ ﺁﻥ ‪ ts-counter+1‬ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻦﻥﺩ ‪.‬‬

‫• ‪ ts-counter ،Ti‬ﺭﺍ ﺑﺎ ‪ 1‬ﺍﻓﺰﺍﻳﺶ ﻣﻲ ﺩﻫﺪ‬

‫‪ ‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻧﻲ ﻛﻪ ﺑﻌﺪ ﺍﺯ ‪ Ti‬ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ‪ ts-counter‬ﺭﺍ ﺑﺮﺍﻱ ﺩﻳﺪﻥ ﻣﻘﺎﺩﻳﺮ ﻭﻳﺮﺍﻳﺶ‬
‫ﺷﺪﻩ ﺗﻮﺳﻂ ‪ Ti‬ﺍﻓﺰﺍﻳﺶ ﻣﻲ ﺩﻫﺪ‬

‫‪ ‬ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻧﻲ ﻛﻪ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﻧﺪ ﻗﺒﻞ ﺍﺯ ‪ Ti‬ﺑﺮﺍﻱ ﺍﻓﺰﺍﻳﺶ ‪ ts-counter‬ﺑﺮﺍﻱ ﺩﻳﺪﻥ‬
‫ﻣﻘﺎﺩﻳﺮ ﻗﺒﻞ ﺍﺯ ﻭﻳﺮﺍﻳﺶ ﻫﺎﻱ ‪Ti‬‬

‫‪ ‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻳﻲ ﻛﻪ ﺗﻨﻬﺎ ﺑﻪ ﺻﻮﺭﺕ ﺳﺮﻳﺎﻟﻲ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺍﻧﺪ‪.‬‬

‫‪ : MVCC‬ﻣﺴﺎﺋﻞ ﻣﺮﺑﻮﻁ ﺑﻪ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ‬

‫‪ ‬ﺍﻳﺠﺎﺩ ﻧﺴﺨﻪ ﻫﺎﻱ ﻣﺘﻌﺪﺩ ﺍﻓﺰﺍﻳﺶ ﻣﻨﺒﻊ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﺩﺭ ﻫﻮﺍ‬


‫• ‪ Tuple‬ﻫﺎﻱ ﺍﺿﺎﻓﻲ‬
‫• ﻓﻀﺎﻱ ﺍﺿﺎﻓﻲ ﺩﺭ ﻫﺮ ‪ tuple‬ﺑﺮﺍﻱ ﺫﺧﻴﺮﻩ ﻛﺮﺩﻥ ﻣﺘﻦ ﺍﻃﻼﻋﺎﺕ‬
‫‪ ‬ﺗﻮﺍﻧﺎﻳﻲ ﻧﺴﺨﻪ ﻫﺎ‪ ،‬ﻫﺮ ﭼﻨﺪ‪ ،‬ﮔﺮﺩﺁﻭﺭﻱ ﭘﺲ ﻣﺎﻧﺪﻩ‬

‫‪92‬‬
‫• ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ .‬ﺍﮔﺮ ‪ 2 Q‬ﻧﺴﺨﻪ ﻱ ‪ Q5‬ﻭ ‪ Q9‬ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﻭ ﺗﺮﺍﻛﻨﺶ ﻓﻌﺎﻝ ﻗﺪﻳﻤﻲ‬
‫ﺗﺮ ﻛﻪ ﺑﺮﭼﺴﺐ ﺯﻣﺎﻥ <‪ 9‬ﺑﺎﺷﺪ ‪ ،‬ﻧﺴﺒﺖ ﺑﻪ ‪ Q5‬ﻛﻪ ﻫﺮﮔﺰ ﺩﻭﺑﺎﺭﻩ ﺑﻪ ﺩﺳﺖ ﻧﻤﻲ ﺁﻳﺪ‪.‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺩﺭﺝ ﻭ ﺣﺬﻑ‬

‫‪ ‬ﺍﮔﺮ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ‪:‬‬

‫• ﻳﻚ ﻋﻤﻠﻴﺎﺕ ﺣﺬﻑ ﻣﻤﻜﻦ ﺍﻧﺠﺎﻡ ﺷﻮﺩ ﺗﻨﻬﺎ ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ﺣﺬﻑ ﻛﻨﺪ ﭼﻨﺪ ﺗﺎﻳﻲ ﺭﺍ ﻛﻪ ﻳﻚ ﻗﻔﻞ‬
‫ﺍﻧﺤﺼﺎﺭﻱ ﺩﺍﺭﺩ ﺭﻭﻱ ﭼﻨﺪﺗﺎﻳﻲ ﻛﻪ ﺣﺬﻑ ﺷﺪﻩ ﺍﻧﺪ‪.‬‬

‫• ﻳﻚ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﻳﻚ ﭼﻨﺪﺗﺎﻳﻲ ﺟﺪﻳﺪ ﺭﺍ ﺩﺍﺧﻞ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺩﺭﺝ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﻳﻚ ﻗﻔﻞ ‪x-mode‬‬
‫ﺭﺍ ﺭﻭﻱ ﭼﻨﺪﺗﺎﻳﻲ ﻛﻪ ﻫﺴﺖ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫‪ ‬ﺩﺭﺝ ﻭ ﺣﺬﻑ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﻨﺠﺮ ﺑﻪ ﭘﺪﻳﺪﻩ ﻱ ﻓﺎﻧﺘﻮﻡ ﺷﻮﺩ‪.‬‬

‫• ﻳﻚ ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﻳﻚ ﺭﺍﺑﻄﻪ ﺭﺍ ﺑﻪ ﻃﻮﺭ ﺍﺟﻤﺎﻟﻲ ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪) ‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ .‬ﻳﺎﻓﺘﻦ ﻣﻘﺪﺍﺭ ﻣﺎﻧﺪﻩ ﻫﺎﻱ ﻫﻤﻪ ﻱ ﻣﺤﺎﺳﺒﺎﺕ ﺩﺭ ‪ ( perrgridge‬ﻭ ﻳﻚ‬
‫ﺗﺮﺍﻛﻨﺸﻲ ﻛﻪ ﻳﻚ ﭼﻨﺪﺗﺎﻱﻱ ﺭﺍ ﺩﺭ ﺭﺍﺑﻄﻪ ﺩﺭﺝ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪) ‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ .‬ﺩﺭﺝ ﻳﻚ ﻣﺤﺎﺳﺒﻪ ﺟﺪﻳﺪ ﺩﺭ ‪) (Perryridge‬ﺗﺼﻮﺭﻱ( ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﻋﻠﻲ‬
‫ﺭﻏﻢ ﻫﺮ ﭼﻨﺪﺗﺎﻳﻲ ﻣﺸﺘﺮﻙﻱ ﻛﻪ ﺩﺭ ﺩﺳﺘﺮﺱ ﻧﻴﺴﺖ‪.‬‬

‫• ﺍﮔﺮ ﺕﻧﻬﺎ ﭼﻨﺪ ﻗﻔﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪ ،‬ﻧﺘﻴﺠﻪ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻏﻴﺮﺳﺮﻳﺎﻟﻲ ﺑﺎﺷﺪ ‪.‬‬

‫‪ ‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ .‬ﺑﺮﺭﺳﻲ ﺍﺟﻤﺎﻟﻲ ﺗﺮﺍﻛﻨﺶ ﻣﺤﺎﺳﺒﺎﺕ ﺟﺪﻳﺪ ﺭﺍ ﻧﺸﺎﻥ ﻧﻤﻲ ﺩﻫﺪ‪ ،‬ﺍﻣﺎ ﭼﻨﺪ ﺗﺎ‬
‫ﺍﺯ ﻧﻮﺷﺘﻪ ﻫﺎﻳﻲ ﻛﻪ ﺗﻮﺳﻂ ﺗﺮﺍﻛﻨﺶ ﻭﻳﺮﺍﻳﺶ ﺷﺪﻩ ﺭﺍ ﻣﻲ ﺧﻮﺍﻧﺪ‪.‬‬

‫ﻙ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﻨﺪ ﭼﻨﺪ ﺗﺎ ﺭﺍﺑﻄﻪ ﺭﺍ‬


‫‪ ‬ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﻃﻮﺭ ﺍﺟﻤﺎﻟﻲ ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﺪ ﺭﺍﺑﻄﻪ ﺧﻮﺍﻧﺪﻥ ﺍﻃﻼﻋﺎﺗﻲ ﺭﺍ ﻩ‬
‫ﺷﺎﻣﻞ ﻣﻲ ﺷﻮﻥﺩ‪ ،‬ﺩﺭ ﺣﺎﻟﻲ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻳﻚ ﭼﻨﺪﺗﺎﻳﻲ ﺭﺍ ﺩﺭﺝ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﻫﻤﺎﻥ ﺍﻃﻼﻋﺎﺕ ﺭﺍ ﻭﻳﺮﺍﻳﺶ‬
‫ﻣﻲ ﻛﻨﺪ‪.‬‬

‫ﺍﻃﻼﻋﺎﺕ ﺑﺎﻳﺪ ﻗﻔﻞ ﺷﻮﺩ‪.‬‬ ‫•‬

‫‪93‬‬
‫‪ ‬ﺭﺍﻩ ﺣﻞ ﺍﻭﻝ ‪:‬‬

‫• ﺍﺭﺗﺒﺎﻁ ﺩﺍﺩﻥ ﻳﻚ ﺑﺨﺶ ﺩﺍﺩﻩ ﺑﺎ ﺧﻮﻳﺶ‪ ،‬ﺑﺎﻧﻤﺎﻳﺶ ﺩﺍﺩﻥ ﺍﻃﻼﻋﺎﺗﻲ ﺩﺭ ﻣﻮﺭﺩ ﺍﻳﻦ ﻛﻪ ﭼﻪ ﭼﻨﺪﺗﺎﻳﻲ‬
‫ﻫﺎﻳﻲ ﺭﺍ ﺍﺯ ﺭﺍﺑﻄﻪ ﺷﺎﻣﻞ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫• ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻛﻪ ﺑﻪ ﻃﻮﺭ ﺍﺟﻤﺎﻟﻲ ﺭﺍﺑﻄﻪ ﺣﺎﺻﻞ ﺍﺯ ﻳﻚ ﻗﺴﻤﺖ ﺍﺯ ﻗﻔﻞ ﺭﺍ ﺩﺭ ﺑﺨﺸﻲ ﺍﺯ ﺩﺍﺩﻩ‬
‫ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﻨﺪ‪.‬‬

‫• ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻛﻪ ﺩﺭﺝ ﻳﺎ ﺣﺬﻑ ﻣﻲ ﻛﻨﻨﺪ ﻳﻚ ﭼﻨﺪﺗﺎﻳﻲ ﺭﺍ ﺑﺮﺍﻱ ﻳﻚ ﻗﻔﻞ ﺍﻧﺤﺼﺎﺭﻱ ﺑﺮﺭﻭﻱ‬
‫ﺑﺨﺸﻲ ﺍﺯ ﺩﺍﺩﻩ ﺑﻪ ﺩﺳﺖ ﻣﻲ ﺁﻭﺭﻧﺪ)ﺗﻮﺟﻪ‪ :‬ﻗﻔﻞ ﻫﺎﻱ ﺑﺮﺭﻭﻱ ﺑﺨﺸﻲ ﺍﺯ ﺩﺍﺩﻩ‪ ،‬ﻧﺎﺳﺎﺯﮔﺎﺭﻱ ﺑﺎ ﻗﻔﻞ ﻫﺎ‬
‫ﺑﺮﺭﻭﻱ ﭼﻨﺪﺗﺎﻳﻲ ﺍﺧﺘﺼﺎﺻﻲ ﺭﺍ ﺍﻧﺠﺎﻡ ﻧﻤﻲ ﺩﻫﻨﺪ‪(.‬‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺑﺎﻻ ﻫﻤﺎﻥ ﻫﻢ ﺯﻣﺎﻧﻲ ﻛﻢ ﺭﺍ ﺑﺮﺍﻱ ﺩﺭﺝ ﻫﺎ‪/‬ﺣﺬﻑ ﻫﺎ ﻓﺮﺍﻫﻢ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺷﺎﺧﺺ ﻗﻔﻞ ﺑﻴﺸﺘﺮﻳﻦ ﻫﻤﺰﻣﺎﻧﻲ ﺭﺍ ﻓﺮﺍﻫﻢ ﻣﻲ ﻛﻨﺪ ﺩﺭﺣﺎﻟﻲ ﻛﻪ ﻣﺎﻧﻊ ﭘﺪﻳﺪﻩ ﻱ ﻓﺎﻧﺘﻮﻡ ﻣﻲ ﺷﻮﺩ‪،‬‬
‫ﺑﻮﺍﺳﻄﻪ ﻗﻔﻞ ﻫﺎﻳﻲ ﻛﻪ ﺑﻪ ﺳﻄﻞ ﻫﺎﻱ ﺷﺎﺧﺺ ﻣﻌﻴﻦ ﻧﻴﺎﺯ ﺩﺍﺭﻧﺪ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﻗﻔﻞ ﻓﻬﺮﺳﺖ‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻗﻔﻞ ﺷﺎﺧﺺ ‪:‬‬

‫• ﻫﻤﻪ ﺭﻭﺍﺑﻂ ﺑﺎﻳﺪ ﺩﺳﺖ ﻛﻢ ﻳﻚ ﺷﺎﺧﺺ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪.‬‬

‫• ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻣﻲ ﺗﻮﺍﻧﺪ ﻳﻚ ﭼﻨﺪ ﺗﺎﻳﻲ ﺭﺍ ﺑﻪ ﺩﺳﺖ ﺁﻭﺭﺩ ﺗﻨﻬﺎ ﺑﻌﺪ ﺍﺯ ﺍﻳﻨﻜﻪ ﺁﻧﻬﺎ ﺭﺍ ﺍﺯ ﻃﺮﻳﻖ ﻳﻚ‬
‫ﺷﺎﺧﺺ ﻳﺎ ﺑﻴﺸﺘﺮ ﺭﻭﻱ ﺭﻭﺍﺑﻂ ﭘﻴﺪﺍ ﻛﻨﺪ‪.‬‬

‫• ﻳﻚ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻳﻚ ﻣﺮﺍﺟﻌﻪ ﺍﻱ ﺭﺍ ﻛﻪ ﺑﺎﻳﺪ ﺗﻤﺎﻡ ﮔﺮﻩ ﻫﺎﻱ ﺑﺮگ ﺷﺎﺧﺺﻱ ﺭﺍ ﻛﻪ ﺑﻪ ﺁﻥ ﺩﺳﺘﺮﺳﻲ‬
‫ﺩﺍﺭﻧﺪ ﺭﺍ ﻗﻔﻞ ﻛﻨﺪ‪ ،‬ﺩﺭ ‪ s-mode‬ﻧﻤﺎﻳﺶ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫‪ ‬ﻭﻟﻮﺁﻧﻜﻪ ﮔﺮﻩ ﺑﺮگ ﺷﺎﻣﻞ ﻫﺮﭼﻨﺪﺗﺎ ﻣﺮﺍﺟﻌﻪ ﺷﺎﺧﺺ ﻗﺎﻧﻊ ﻛﻨﻨﺪﻩ ﻧﺒﺎﺷﺪ‪).‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪.‬‬
‫ﺑﺮﺍﻱ ﻳﻚ ﻧﺎﺣﻴﻪ ﭘﺮﺱ ﻭ ﺟﻮ‪ ،‬ﺩﺭﺁﻥ ﻧﺎﺣﻴﻪ ﺑﻴﺸﺘﺮ ﺍﺯ ﭼﻨﺪ ﺗﺎ ﺑﺮگ ﻧﻴﺴﺖ‪(.‬‬

‫• ﻳﻚ ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﻛﻪ ﺩﺭﺝ ﻣﻲ ﻛﻨﺪ‪ ،‬ﻭﻳﺮﺍﻳﺶ ﻳﺎ ﺣﺬﻑ ﻣﻲ ﻛﻨﺪ ﭼﻨﺪ ﺗﺎ ‪ ti‬ﺭﺍﺩﺭ ﻳﻚ ﺭﺍﺑﻄﻪ ‪.r‬‬

‫‪94‬‬
‫‪ ‬ﺑﺎﻳﺪ ﺗﻤﺎﻡ ﺷﺎﺧﺺ ﻫﺎ ﺭﺍ ﺗﺎ ‪ r‬ﻭﻳﺮﺍﻳﺶ ﻛﻨﺪ‪.‬‬

‫‪ ‬ﺑﺎﻳﺪ ﻗﻔﻞ ﻫﺎﻱ ﺍﻧﺤﺼﺎﺭﻱ ﺭﺍ ﺭﻭﻱ ﺗﻤﺎﻡ ﮔﺮﻩ ﻫﺎﻱ ﺑﺮگ ﺷﺎﺧﺺ ﺳﺎﺧﺘﮕﻲ ﺗﻮﺳﻂ‬
‫ﺩﺭﺝ‪/‬ﻭﻳﺮﺍﻳﺶ‪/‬ﺣﺬﻑ ﺑﻪ ﺩﺳﺖ ﺁﻭﺭﺩ‪.‬‬

‫• ﻗﻮﺍﻋﺪﻱ ﺍﺯ ﭘﺮﻭﺗﻜﻞ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺑﺎﻳﺪ ﺭﻋﺎﻳﺖ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﭘﺪﻳﺪﻩ ﻱ ﻓﺎﻧﺘﻮﻡ ﺩﺭ ﺁﻥ ﺍﺗﻔﺎﻕ ﻧﻤﻲ ﺍﻓﺘﺪ‪.‬‬

‫ﺳﻄﻮﺡ ﺿﻌﻴﻒ ﺳﺎﺯگﺍﺭﻱ‬

‫‪ ‬ﺳﺎﺯﮔﺎﺭﻱ ﺩﺭﺟﻪ ‪ : 2‬ﺍﺧﺘﻼﻑ ﺍﺯ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺩﺭ ﺍﻳﻦ ﻛﻪ ‪ s-lock‬ﻣﻤﻜﻦ ﺩﺭ ﻫﺮ ﺯﻣﺎﻥ ﺁﺯﺍﺩ ﺷﻮﺩ‪ ،‬ﻭ ﻗﻔﻞ‬
‫ﻫﺎﻳﻲ ﻛﻪ ﻣﻤﻜﻦ ﺩﺭ ﻫﺮ ﺯﻣﺎﻥ ﺑﻪ ﺩﺳﺖ ﺑﻴﺎﻳﻨﺪ‪.‬‬

‫• ‪ X-lock‬ﻫﺎ ﺑﺎﻳﺪ ﭘﺎﻳﺎﻥ ﺗﺮﺍﻛﻨﺶ ﺭﺍ ﻧﮕﻪ ﺩﺍﺭﻧﺪ‪.‬‬

‫• ‪ Serializability‬ﺗﻀﻤﻴﻦ ﺷﺪﻩ ﻧﻴﺴﺖ‪ ،‬ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﺑﺎﻳﺪ ﻣﻄﻤﺌﻦ ﺑﺎﺷﺪ ﻛﻪ ﻫﻴﭻ ﻭﻗﺖ ﺍﺷﺘﺒﺎﻫﻲ‬
‫ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺥ ﻧﻤﻲ ﺩﻫﺪ‪.‬‬

‫‪ ‬ﻣﻜﺎﻥ ﻧﻤﺎﻱ ﭘﺎﻳﺪﺍﺭ ‪:‬‬

‫• ﺑﺮﺍﻱ ﻣﺸﺎﻫﺪﻩ‪ ،‬ﻫﺮ ﺗﺎﭘﻠﻲ ﻛﻪ ﻗﻔﻞ ﺷﺪﻩ ﺍﺳﺖ‪ ،‬ﻣﻲ ﺧﻮﺍﻧﺪ ﻭ ﻓﻮﺭﺍً ﺁﻥ ﻗﻔﻞ ﺭﺍ ﺁﺯﺍﺩ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫• ‪ X-lock‬ﻫﺎ ﺗﺎ ﭘﺎﻳﺎﻥ ﺗﺮﺍﻛﻨﺶ ﻧﮕﻪ ﺩﺍﺷﺘﻪ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬

‫• ﺣﺎﻟﺖ ﺧﺎﺻﻲ ﺍﺯ ﺳﺎﺯﮔﺎﺭﻱ ﺩﺭﺟﻪ ‪2‬‬

‫ﺳﻄﻮﺡ ﺿﻌﻴﻒ ﺳﺎﺯﮔﺎﺭﻱ ﺩﺭ ‪SQL‬‬

‫‪ SQL ‬ﺍﺟﺎﺯﻩ ﻣﻲ ﺩﻫﺪ ﺗﺎ ‪ non-serializable‬ﺍﺟﺮﺍ ﺷﻮﺩ ‪.‬‬

‫• ‪ : Serializable‬ﭘﻴﺶ ﻓﺮﺽ ﺍﺳﺖ‪.‬‬

‫• ﺧﻮﺍﻧﺪﻥ ﺗﻜﺮﺍﺭﭘﺬﻳﺮ ‪ :‬ﺍﺟﺎﺯﻩ ﻣﻲ ﺩﻫﺪ ﺗﺎ ﺳﻮﺍﺑﻖ ﺗﻨﻬﺎ ﺧﻮﺍﻧﺪﻥ ﺭﺍ ﻗﺒﻮﻝ ﻛﻨﻨﺪ‪ ،‬ﻭ ﺗﻜﺮﺍﺭ ﻛﻨﻨﺪ ﻳﻚ‬
‫ﺧﻮﺍﻧﺪﻥﻱ ﻛﻪ ﺑﺎﻳﺪ ﺑﻪ ﻫﻤﺎﻥ ﻣﻘﺪﺍﺭ ﺑﺮﮔﺮﺩﺩ)ﺑﻨﺎﺑﺮﺍﻳﻦ ﺧﻮﺍﻧﺪﻥ ﻗﻔﻞ ﻫﺎ ﺑﺎﻳﺪ ﺣﻒﻅ ﺷﻮﺩ (‬

‫‪95‬‬
‫‪ ‬ﺑﺎ ﺍﻳﻦ ﺣﺎﻝ‪ ،‬ﭘﺪﻳﺪﻩ ﻱ ﻓﺎﻧﺘﻮﻡ ﻧﻴﺎﺯ ﺩﺍﺭﺩ ﻛﻪ ﻣﺎﻧﻊ ﺁﻥ ﻧﺸﻮﺩ‪.‬‬

‫– ‪ T1‬ﻣﻤﻜﻦ ﺑﺮﺧﻲ ﺍﺯ ﺳﻮﺍﺑﻖ ﻭﺍﺭﺩ ﺷﺪﻩ ﺗﻮﺳﻂ ‪ T2‬ﺭﺍ ﺑﺒﻴﻨﺪ‪ ،‬ﺍﻣﺎ ﺍﻧﻮﺍﻉ ﺩﻳﮕﺮﻱ ﻛﻪ‬
‫ﺗﻮﺳﻂ ‪ T2‬ﻭﺍﺭﺩ ﺷﺪﻧﺪ ﺭﺍ ﻧﺒﻴﻨﺪ‪.‬‬

‫• ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ‪ :‬ﻫﻤﺎﻥ ﺩﺭﺟﻪ‪ 2‬ﺳﺎﺯﮔﺎﺭﻱ‪ ،‬ﺍﻣﺎ ﺳﻴﺴﺘﻢ ﻫﺎ ﺑﺎﻳﺪ ﺁﻥ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﻣﻜﺎﻥ ﻧﻤﺎﻱ‬
‫ﭘﺎﻳﺪﺍﺭ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﻛﻨﻨﺪ‪.‬‬

‫• ﺧﻮﺍﻧﺪﻩ ﻧﺸﺪﻩ ‪ :‬ﺍﺟﺎﺯﻩ ﻣﻲ ﺩﻫﺪ ﺣﺘﻲ ﺩﺍﺩﻩ ﻏﻴﺮ ﻗﺎﺑﻞ ﻗﺒﻮﻝ ﺧﻮﺍﻧﺪﻩ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺩﺭ ﺑﺴﻴﺎﺭﻱ ﺍﺯ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ‪ :‬ﺳﻄﺢ ﺛﺒﺎﺕ ﭘﻴﺶ ﻓﺮﺽ ﺭﺍ ﺑﻪ ﻃﻮﺭ ﻗﺎﺑﻞ ﻗﺒﻮﻝ ﻣﻲ ﺧﻮﺍﻧﺪ‪.‬‬

‫ﺗﻐﻴﻲ ﻣﻲ ﺩﻫﺪ ﺯﻣﺎﻧﻲ ﻛﻪ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪.‬‬


‫• ﺑﻪ ﺻﺮﺍﺣﺖ ‪ serializable‬ﺭﺍ ﺭ‬

‫‪ ‬ﻣﺠﻤﻮﻋﻪ ﺟﺪﺍ ﺩﺭ ﺳﻄﺢ ‪serializable‬‬

‫ﻫﻤﺰﻣﺎﻧﻲ ﺩﺭ ﺳﺎﺧﺘﺎﺭﻫﺎﻱ ﻓﻬﺮﺳﺖ‬

‫ﺩﻳﮓ ﻣﻮﺍﺭﺩ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻛﻪ ﺗﻨﻬﺎ ﻛﺎﺭﺵ ﺑﺮﺍﻱ ﻛﻤﻚ ﺑﻪ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫‪ ‬ﺷﺎﺧﺺ ﺑﺮ ﺧﻼﻑ ﺭ‬

‫‪ ‬ﺷﺎﺧﺺ ﺳﺎﺧﺘﺎﺭﻫﺎ ﻣﻌﻤﻮﻻ ﺍﻏﻠﺐ ﺩﺭ ﺩﺳﺘﺮﺱ‪ ،‬ﺧﻴﻠﻲ ﺑﻴﺸﺘﺮ ﺍﺯ ﺩﻳﮕﺮ ﻣﻮﺍﺭﺩ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﺳﺖ‪.‬‬

‫• ﺩﺭﻣﺎﻥ ﺷﺎﺧﺺ ﺳﺎﺧﺘﺎﺭﻫﺎﻳﻲ ﻣﺎﻧﻨﺪ ﺩﻳﮕﺮ ﻡﻭﺍﺭﺩ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‪ ،‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻓﺎﺯ‪ 2‬ﻗﻔﻞ ﮔﺮﻩ ﻫﺎﻱ‬
‫ﺷﺎﺧﺺ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﻫﻤﺰﻣﺎﻧﻲ ﻛﻢ ﻣﻨﺠﺮ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﭼﻨﺪﻳﻦ ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻫﻤﺰﻣﺎﻧﻲ ﺍﻭﻝ ﻛﻪ ﺩﺭ ﺁﻥ ﻕﻓﻞ ﺑﺮ ﺭﻭﻱ ﮔﺮﻩ ﻫﺎﻱ ﺩﺍﺧﻠﻲ ﺩﺭ ﺍﻭﻟﻲ ﺑﻪ ﺻﻮﺭﺕ ﺁﺯﺍﺩ ﻭﺟﻮﺩ‬
‫ﺩﺍﺭﺩ‪ ،‬ﻭ ﻧﻪ ﺩ ﺭﻣﺪ ﺩﻭ ﻓﺎﺯ ﺍﺳﺖ‪.‬‬

‫• ﺁﻥ ﻗﺎﺑﻞ ﻗﺒﻮﻝ ﺍﺳﺖ ﺑﺮﺍﻱ ﺩﺳﺘﺮﺳﻲ ﻫﻤﺰﻣﺎﻥ ‪ nonserializable‬ﺑﻪ ﻳﻚ ﺷﺎﺧﺺ ﻃﻮﻻﻧﻲ ﻛﻪ‬
‫ﺩﻗﺖ ﺷﺎﺧﺺ ﺣﻔﻆ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﺑﻪ ﻃﻮﺭ ﺧﺎﺹ ‪ ،‬ﺧﻮﺍﻧﺪﻥ ﻣﻘﺎﺩﻳﺮ ﺩﻗﻴﻖ ﺁﻥ ﺩﺭ ﻳﻚ ﮔﺮﻩ ﺩﺍﺧﻠﻲ ﺍﺯ ﻳﻚ ﺩﺭﺧﺖ ‪ B+‬ﺑﻲ ﺭﺑﻂ‬
‫ﺯﻣﻴﻦ ﺭﺍ ﺩﺭ ﮔﺮﻩ ﺑﺮگ ﺩﺭﺳﺖ ﻛﻨﻴﻢ‪.‬‬
‫ﻫﺴﺘﻨﺪ ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﻣﺎ ﻩ‬

‫‪ ‬ﻣﺜﺎﻟﻲ ﺍﺯ ﭘﺮﻭﺗﻜﻞ ﻫﻤﺰﻣﺎﻧﻲ ﻓﻬﺮﺳﺖ ‪:‬‬

‫‪96‬‬
‫‪ ‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ crabbing‬ﺑﻪ ﺟﺎﻱ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺑﺮ ﺭﻭﻱ ﮔﺮﻩ ﻫﺎﻱ ‪ B+‬ﺩﺭﺧﺖ ‪،‬ﺩﺭ ﻃﻮﻝ‬
‫ﺟﺴﺘﺠﻮ‪/‬ﺩﺭﺝ‪/‬ﺣﺬﻑ ﺑﻪ ﺷﺮﺡ ﺯﻳﺮ ﺍﺳﺖ ‪:‬‬

‫• ﺑﺮﺍﻱ ﺍﻭﻟﻴﻦ ﺑﺎﺭ ﮔﺮﻩ ﺭﻳﺸﻪ ﺩﺭ ﺣﺎﻟﺖ ﻣﺸﺘﺮﻙ ﺭﺍ ﻗﻔﻞ ﻛﻨﻴﺪ‪.‬‬

‫• ﭘﺲ ﺍﺯ ﻗﻔﻞ ﻛﺮﺩﻥ ﺗﻤﺎﻡ ﻓﺮﺯﻧﺪﺍﻥ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﻳﻚ ﮔﺮﻩ ﺩﺭ ﺣﺎﻟﺖ ﻣﺸﺘﺮﻙ ‪ ،‬ﺍﻧﺘﺸﺎﺭ ﻗﻔﻞ ﺑﺮ ﺭﻭﻱ ﮔﺮﻩ‬

‫• ﺩﺭ ﻃﻮﻝ ﺩﺭﺝ ‪ /‬ﺣﺬﻑ‪ ،‬ﺍﺭﺗﻘﺎء ﻗﻒﻝ ﻫﺎﻱ ﮔﺮﻩ ﺑﺮگ ﺑﻪ ﺣﺎﻟﺖ ﻫﺎﻱ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ‬

‫• ﻩ ﻧﮕﺎﻣﻲ ﻛﻪ ﺷﻜﺎﻑ ﻳﺎ ‪ coalescing‬ﺑﺮﺍﻱ ﺗﻐﻴﻴﺮﺍﺕ ﻳﻚ ﻭﺍﻟﺪ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪ ،‬ﻗﻔﻞ ﻭﺍﻟﺪ ﺩﺭ ﺣﺎﻟﺖ‬
‫ﻣﻨﺤﺼﺮﺑﻪ ﻓﺮﺩ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﺑﺎﻻﺗﺮ ﺍﺯ ﺣﺪ ﭘﺮﻭﺗﻜﻞ ﺑﻦ ﺑﺴﺖ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺎﺷﺪ‪.‬‬

‫• ﺟﺴﺘﺠﻮﻱ ﭘﺎﻳﻴﻦ ﺁﻣﺪﻥ ﺩﺭﺧﺖ ﺑﻦ ﺑﺴﺖ ﺑﺎ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﺑﺎﻻﺭﻓﺘﻦ ﺍﺯ ﺩﺭﺧﺖ‬

‫• ﺁﻳﺎ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺑﻲ ﻧﺘﻴﺠﻪ ﺑﻤﺎﻧﻨﺪ ﻭ ﺟﺴﺘﺠﻮ ﻛﻨﻨﺪ ﺭﺍﻩ ﺍﻧﺪﺍﺯﻱ ﻣﺠﺪﺩ‪ ،‬ﺑﺪﻭﻥ ﺗﺎﺛﻴﺮ ﺑﺮ ﺗﺮﺍﻛﻨﺶ‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﺑﻬﺘﺮ ﺩﺭ ﺩﺳﺘﺮﺱ ﻫﺴﺘﻨﺪ‪ ،‬ﻧﮕﺎﻩ ﻛﻨﻴﺪ ﺑﻪ ﺑﺨﺶ ‪ 16.9‬ﺑﺮﺍﻱ ﻳﻚ ﭘﺮﻭﺗﻜﻞ‪ ،‬ﭘﺮﻭﺗﻜﻞ ﺩﺭﺧﺖ ‪B-‬‬
‫‪LINK‬‬

‫• ﺷﻬﻮﺩ ‪ :‬ﻗﻔﻞ ﺁﺯﺍﺩﻱ ﺩﺭ ﻭﺍﻟﺪ ﻗﺒﻞ ﺍﺯ ﻛﺴﺐ ﻗﻔﻞ ﻛﻮﺩﻙ‬

‫‪ ‬ﻭ ﻣﻘﺎﺑﻠﻪ ﺑﺎ ﺗﻐﻴﻴﺮﺍﺗﻲ ﻛﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﻴﻦ ﺁﺯﺍﺩﻱ ﻗﻔﻞ ﻭ ﺑﻪ ﺩﺳﺖ ﺁﻭﺭﺩﻥ ﺍﺗﻔﺎﻕ ﺍﻓﺘﺎﺩﻩ‬
‫ﺑﺎﺷﺪ‪.‬‬

‫ﻗﻔﻞ ﻛﻠﻴﺪ ﺑﻌﺪﻱ‬

‫‪ ‬ﭘﺮﻭﺗﻜﻞ ﺷﺎﺧﺺ ﻗﻔﻞ ﺑﺮﺍﻱ ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﻓﺎﻧﺘﻮﻡ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﻗﻔﻞ ﻛﻞ ﺑﺮگ‬

‫• ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﻫﻤﺰﻣﺎﻧﻲ ﺿﻌﻴﻒ ﺷﻮﺩ ﺩﺭ ﺻﻮﺭﺗﻲ ﻛﻪ ﺩﺭﺝ ﻫﺎﻱ ﺑﺴﻴﺎﺭﻱ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‬

‫‪ ‬ﺟﺎﻳﮕﺰﻳﻦ ‪ :‬ﺑﺮﺍﻱ ﻣﺮﺍﺟﻌﻪ ﺑﻪ ﺷﺎﺧﺺ‬

‫‪97‬‬
‫• ﻗﻔﻞ ﻛﺮﺩﻥ ﺗﻤﺎﻡ ﺍﺭﺯﺵ ﻫﺎﻳﻲ ﻛﻪ ﻣﺮﺍﺟﻌﻪ ﺑﻪ ﺷﺎﺧﺺ ﺭﺍ ﺑﺮﺁﻭﺭﺩﻩ ﻣﻲ ﻛﻨﺪ)ﻣﻄﺎﺑﻘﺖ ﺑﺎ ﺍﺭﺯﺵ ﻣﺮﺍﺟﻌﻪ‬
‫ﻭ ﻳﺎ ﺳﻘﻮﻁ ﺩﺭ ﻣﺤﺪﻭﺩﻩ ﻣﺮﺍﺟﻌﻪ(‬

‫• ﻫﻤﭽﻨﻴﻦ ﺍﺭﺯﺵ ﻛﻠﻴﺪ ﺑﻌﺪﻱ ﺩﺭ ﺷﺎﺧﺺ ﻗﻔﻞ‬

‫• ﺣﺎﻟﺖ ﻗﻔﻞ ‪ S :‬ﺑﺮﺍﻱ ‪ X ، lookups‬ﺑﺮﺍﻱ ﺩﺭﺝ‪/‬ﺣﺬﻑ‪/‬ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ‬

‫‪ ‬ﻣﺤﺪﻭﺩﻩ ﻧﻤﺎﻳﺶ ﺩﺍﺩﻩ ﺷﺪﻩ ﺩﺭ ﺗﻀﺎﺩ ﺑﺎ ﺩﺭﺝ ‪ /‬ﺣﺬﻑ ‪ /‬ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﺭﺍ ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫• ﺻﺮﻑ ﻧﻈﺮ ﺍﺯ ﺍﻳﻦ ﻛﻪ ﺍﺗﻔﺎﻕ ﻣﻲ ﺍﻓﺘﺪ ‪ ،‬ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﻫﺮﺩﻭ ﻫﻤﺰﻣﺎﻥ ﻫﺴﺘﻨﺪ‬

‫ﺍﺳﻼﻳﺪﻫﺎﻱ ﺍﺿﺎﻓﻲ‬

‫ﺟﺪﺍﺳﺎﺯﻱ ﻓﻮﺭﻱ‬

‫‪ ‬ﺍﻧﮕﻴﺰﻩ ‪ :‬ﭘﺸﺘﻴﺒﺎﻧﻲ ﻧﻤﺎﻳﺶ ﺩﺍﺩﻩ ﺷﺪﻩ ﺗﺼﻤﻴﻢ ﻣﻲ ﮔﻴﺮﺩ ﻛﻪ ﺧﻮﺍﻧﺪﻥ ﻣﻘﺪﺍﺭﻫﺎﻱ ﺯﻳﺎﺩﻱ ﺍﺯ ﺩﺍﺩﻩ ﺑﻪ ﻃﻮﺭ‬
‫ﻫﻤﺰﻣﺎﻥ ﺩﺭ ﺗﻀﺎﺩﻧﺪ ﺑﺎ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ‪ OLTP‬ﻛﻪ ﭼﻨﺪ ﺭﺩﻳﻒ ﺭﺍ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻣﻲ ﻛﻨﻨﺪ‪.‬‬

‫• ﻧﺘﺎﻳﺞ ﻋﻤﻠﻜﺮﺩ ﺿﻌﻴﻒ‬

‫‪ ‬ﺭﺍﻩ ﺣﻞ ‪ : 1‬ﺩﺍﺩﻥ "ﻋﻜﺲ ﻓﻮﺭﻱ” ﻣﻨﻄﻘﻲ ﺍﺯ ﺣﺎﻟﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﻨﻬﺎ ﺑﺮﺍﻱ ﺧﻮﺍﻧﺪﻥ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ‪ ،‬ﺧﻮﺍﻧﺪﻥ ﻭ‬
‫ﻧﻮﺷﺖﻥ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﻔﻞ ﻃﺒﻴﻌﻲ‬

‫• ‪ Multiversion‬ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ‬

‫• ﻛﺎﺭ ﻣﻲ ﻛﻨﻨﺪ ﺑﻪ ﺧﻮﺑﻲ ‪ ،‬ﺍﻣﺎ ﭼﮕﻮﻧﻪ ﺑﺎﻳﺪ ﺑﺪﺍﻥﻱﻡ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻧﻲ ﺍﺳﺖ؟‬

‫‪ ‬ﺭﺍﻩ ﺣﻞ ‪ :2‬ﺗﺼﻮﻳﺮ ﻓﻮﺭﻱ ﺍﺯ ﺣﺎﻟﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺮﺍﻱ ﻫﺮ ﺕﺭﺍﻛﻨﺶ ﺭﺍ ﻣﻲ ﺩﻫﺪ‪ ،‬ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎ ﺗﻨﻬﺎ ﻣﻮﺭﺩ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ ﺑﻪ ﻣﺤﺎﻓﻈﺖ ﺩﺭ ﺑﺮﺍﺑﺮ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﻤﺰﻣﺎﻥ ﻫﺴﺘﻨﺪ‪.‬‬

‫• ﻣﺸﻜﻞ ‪ :‬ﺍﻧﻮﺍﻉ ﻧﺎﻫﻨﺠﺎﺭﻱ ﻫﺎ ﻣﺎﻧﻨﺪ ﺍﺯﺩﺳﺖ ﺭﻓﺘﻦ ﻧﺘﺎﻳﺞ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ‬

‫• ﺭﺍﻩ ﺣﻞ ﺟﺰﺋﻲ ‪ :‬ﺳﻄﺢ ﺟﺪﺍﺳﺎﺯﻱ ﻋﻜﺲ ﻓﻮﺭﻱ )ﺍﺳﻼﻳﺪ ﺑﻌﺪﻱ(‬

‫‪ ‬ﭘﻴﺸﻨﻬﺎﺩ ﺷﺪﻩ ﺗﻮﺳﻂ ‪ Berenson‬ﻭ ﻫﻤﻜﺎﺭﺍﻥ ‪SIGMOD 1995 ،‬‬

‫‪98‬‬
‫‪ ‬ﺍﻧﻮﺍﻉ ﺍﺟﺮﺍﻫﺎ ﺩﺭ ﺑﺴﻴﺎﺭﻱ ﺍﺯ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‬

‫– ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪ .‬ﺍﻭﺭﺍﻛﻞ‪ ،‬ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ‪ PostgreSQL ،SQL‬ﺳﺮﻭﺭ ‪2005‬‬

‫‪ ‬ﺍﺟﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ‪ T1‬ﺑﺎ ﺟﺪﺍﺳﺎﺯﻱ ﻓﻮﺭﻱ‬

‫• ﭘﺬﻳﺮﺵ ﻓﻮﺭﻱ ﺩﺍﺩﻩ ﻫﺎ ﺩﺭ ﺷﺮﻭﻉ ﻃﻮﻝ ﻣﻲ ﻛﺸﺪ‪.‬‬

‫• ﻫﻤﻴﺸﻪ ﺗﻐﻴﻴﺮ ﺩﺍﺩﻩ ﻫﺎ ﺭﺍ ﺩﺭ ﻋﻜﺲ ﻓﻮﺭﻱ ﺧﻮﺩ ﻣﻲ ﺧﻮﺍﻧﺪ‬

‫• ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻫﻤﺰﻣﺎﻥ ﺑﺮﺍﻱ ‪ T1‬ﻗﺎﺑﻞ ﺭﺅﻳﺖ ﻧﻴﺴﺖ‪.‬‬

‫• ‪ T1‬ﺭﺍ ﺑﻪ ﻃﻮﺭ ﻛﺎﻣﻞ ﻣﻲ ﻧﻮﻳﺴﺪ ﺯﻣﺎﻧﻲ ﻛﻪ ﺁﻥ ﭘﺬﻳﺮﻓﺘﻪ ﺷﺪ‬

‫• ﺍﻭﻟﻴﻦ ﻗﺎﻧﻮﻥ ﭘﺬﻳﺮﺵ ﺑﺮﺩﻥ‪:‬‬

‫‪ ‬ﻣﻲ ﭘﺬﻳﺮﺩ ﺗﻨﻬﺎ ﺍﮔﺮ ﻫﻴﭻ ﺗﺮﺍﻛﻨﺶ ﻫﻤﺰﻣﺎﻥ ﺩﻳﮕﺮﻱ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﻧﻮﺷﺘﻪ ﻧﺸﺪﻩ ﺍﺳﺖ ﺩﺍﺩﻩ‬
‫ﺍﻱ ﻛﻪ ‪ T1‬ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﺩﺭ ﻧﻈﺮ ﺩﺍﺭﺩ‪.‬‬

‫‪T1‬‬ ‫‪T2‬‬ ‫‪T3‬‬

‫‪99‬‬
‫)‪W(Y := 1‬‬

‫‪Commit‬‬

‫‪Start‬‬

‫‪R(X)  0‬‬

‫‪R(Y) 1‬‬

‫)‪W(X:=2‬‬

‫)‪W(Z:=3‬‬

‫‪Commit‬‬

‫‪R(Z)  0‬‬

‫‪R(Y)  1‬‬

‫)‪W(X:=3‬‬

‫‪Commit-Req‬‬

‫ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﯽ ﻫﻣﺯﻣﺎﻥ ﻗﺎﺑﻝ ﺭﺅﻳﺕ ﻧﻳﺳﺕ‬ ‫‪Abort‬‬


‫ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﯽ ﻫﺎ ﻗﺎﺑﻝ ﻣﺷﺎﻫﺩﻩ ﻣﯽ ﺑﺎﺷﻧﺩ‬
‫ﻧﻪ ﺍﻭﻝ ﭘﺫﻳﺭﺵ ‪x‬‬
‫ﺧﻁﺎی ‪ T2 ، serialization‬ﻫﺳﺕ ‪Rollback‬‬

‫ﻣﺰﺍﻳﺎﻱ ‪SI‬‬

‫‪ ‬ﺧﻮﺍﻧﺪﻧﻲ ﻛﻪ ﻫﺮﮔﺰ ﻣﺴﺪﻭﺩ ﻧﺸﺪﻩ‬

‫• ﻭﻫﻤﭽﻴﻨﻴﻦ ﻓﻌﺎﻟﻴﺖ ﻫﺎﻱ ﺩﻳﮕﺮ ‪ txns‬ﻫﺎ ﺭﺍ ﻣﺴﺪﻭﺩ ﻧﻤﻲ ﻛﻨﺪ‪.‬‬

‫‪ ‬ﻋﻤﻠﻜﺮﺩ ﻣﺸﺎﺑﻪ ﺧﻮﺍﻧﺪﻥ ﭘﺬﻳﺮﻓﺘﻪ ﺷﺪﻩ‬

‫‪ ‬ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﻧﺎﻫﻨﺠﺎﺭﻱ ﻫﺎﻱ ﻣﻌﻤﻮﻝ‬

‫• ﺑﺪﻭﻥ ﻋﻨﻮﺍﻥ ﺯﺷﺖ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ‬

‫‪100‬‬
‫• ﺑﺪﻭﻥ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﺍﺯ ﺩﺳﺖ ﺭﻓﺘﻪ‬

‫• ﺑﺪﻭﻥ ﻋﻨﻮﺍﻥ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻥ ﻏﻴﺮ ﻗﺎﺑﻞ ﺗﻜﺮﺍﺭ‬

‫• ﮔﺰﺍﺭﻩ ﻫﺎ ﺑﺮ ﺍﺳﺎﺱ ﺍﻧﺘﺨﺎﺏ ﺗﻜﺮﺍﺭ ﻫﺴﺘﻨﺪ )ﺑﺪﻭﻥ ﻓﺎﻧﺘﻮﻡ(‬

‫‪ ‬ﻣﺸﻜﻼﺕ ﺑﺎ ‪SI‬‬

‫• ‪ SI‬ﻫﻤﻴﺸﻪ ﻗﺎﺑﻞ ﺍﺟﺮﺍ ﺑﻪ ﺻﻮﺭﺕ ‪ serializable‬ﻧﻴﺴﺖ‪.‬‬

‫‪ : Serializable ‬ﻣﻴﺎﻥ ﺩﻭ ‪ txns‬ﻫﻤﺰﻣﺎﻥ‪ ،‬ﻳﻜﻲ ﺍﺯ ﺍﺛﺮﺍﺕ ﺩﻳﮕﺮ ﺭﺍ ﻣﻲ ﺑﻴﻨﺪ‪.‬‬

‫‪ ‬ﺩﺭ ‪ SI‬ﺍﺛﺮﺍﺕ ﺩﻳﮕﺮ ﺭﺍ ﻧﻤﻲ ﺑﻴﻨﺪ‬

‫ﻭﺍﻧﺪ ﻧﻘﺾ ﻛﻨﺪ ‪.‬‬


‫• ﻧﺘﻴﺠﻪ ‪ :‬ﻣﺤﺪﻭﺩﻳﺖ ﻫﺎﻱ ﺗﻤﺎﻣﻴﺖ ﺭﺍ ﻣﻲ ﺕ‬

‫ﺟﺪﺍﺳﺎﺯﻱ ﻓﻮﺭﻱ‬

‫‪ ‬ﻣﺜﺎﻟﻲ ﺍﺯ ﻣﺸﻜﻼﺕ ﺑﺎ ‪SI‬‬

‫• ‪T1: x:=y‬‬

‫• ‪T2: y:= x‬‬

‫• ﺩﺭ ﺍﺑﺘﺪﺍ ‪x = 3 and y = 17‬‬

‫‪ ‬ﺍﺟﺮﺍﻱ ﺳﺮﻳﺎﻝ ‪x = ??, y = ?? :‬‬

‫‪ ‬ﺍﮔﺮ ﻫﺮﺩﻭ ﺗﺮﺍﻛﻨﺶ ﻫﻤﺰﻣﺎﻥ ﺷﺮﻭﻉ ﺑﺸﻮﻧﺪ ﺑﺎ ﺟﺪﺍﺳﺎﺯﻱ ﻓﻮﺭﻱ ‪x = ?? , y = ?? :‬‬

‫‪ ‬ﺑﻪ ﻧﺎﻡ ﻧﻮﺷﺘﻦ ﻣﻮﺭﺏ‬

‫‪ ‬ﻣﻮﺭﺏ ﺑﻮﺩﻥ ﻧﻴﺰ ﺑﺎ ﺩﺭﺝ ﺭﺥ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫• ﻣﺜﺎﻝ ‪:‬‬

‫‪101‬‬
‫‪ ‬ﻳﺎﻓﺘﻦ ﺣﺪﺍﻛﺜﺮ ﺗﻌﺪﺍﺩ ﺩﺳﺘﻮﺭﻫﺎ ﺩﺭ ﻣﻴﺎﻥ ﺗﻤﺎﻡ ﺩﺳﺘﻮﺭﺍﺕ‬

‫‪ ‬ﺍﻳﺠﺎﺩ ﻳﻚ ﻧﻈﻢ ﺟﺪﻳﺪ ﺑﺎ ﺩﺳﺘﻮﺭ ﺗﻌﺪﺍﺩ = ﺣﺪﺍﻛﺜﺮ ﻗﺒﻠﻲ ‪1+‬‬

‫ﻧﺎﻫﻨﺠﺎﺭﻱ ﻫﺎﻱ ﺟﺪﺍﺳﺎﺯﻱ ﻓﻮﺭﻱ‬

‫‪ serializability SI ‬ﺭﺍ ﻣﻲ ﺷﻜﻨﺪ ﺯﻣﺎﻧﻲ ﻛﻪ ‪ txns‬ﻫﺎ ﺁﻳﺘﻢ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺭﺍ ﺗﻐﻴﻴﺮ ﻣﻲ ﺩﻫﻨﺪ‪ ،‬ﻫﺮ ﻛﺪﺍﻡ‬
‫ﺑﺮﺍﺳﺎﺱ ﻳﻚ ﺣﺎﻟﺖ ﻗﺒﻠﻲ ﺍﺯ ﺗﻐﻴﻴﺮﺍﺕ ﺁﻳﺘﻢ ﺩﻳﮕﺮ‬

‫• ﻩﻥ ﺩﺭ ﻋﻤﻞ ﺑﺴﻴﺎﺭ ﻗﺎﺑﻞ ﻗﺒﻮﻝ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪ .‬ﻣﺤﻚ ‪ TPC-C‬ﺑﻪ ﺩﺭﺳﺘﻲ ﺗﺤﺖ ‪ SI‬ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺯﻣﺎﻧﻲ ﻛﻪ ‪ txns‬ﺩﺭﮔﻴﺮ ﺍﺻﻼﺡ ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺍﺳﺖ‪ ،‬ﻛﻪ ﻣﻌﻤﻮﻻ ﻫﺮ ﺩﻭ ﺁﻧﻬﺎ ﺭﻭﻱ ﻳﻚ‬
‫ﺁﻳﺘﻢ ﻣﺸﺘﺮﻙ ﺗﻐﻴﻴﺮ ﺩﺍﺭﻧﺪ ﻫﻤﭽﻨﻴﻦ )ﻣﺎﻧﻨﺪ ﻣﻘﺪﺍﺭ ﻛﻞ( ‪ SI‬ﻳﻜﻲ ﺍﺯ ﺁﻧﻬﺎ ﺑﻲ ﻧﺘﻴﺠﻪ ﺧﻮﺍﻫﺪ‬
‫ﻣﺎﻧﺪ‪.‬‬

‫• ﺍﻣﺎ ﺁﻳﺎ ﺭﺥ ﻡﻱ ﺩﻫﺪ‪.‬‬

‫‪ ‬ﺗﻮﺳﻌﻪ ﺩﻫﻨﺪﮔﺎﻥ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﺑﺎﻳﺪ ﺩﺭ ﻣﻮﺭﺩ ﻧﻮﺷﺘﻦ ﻣﻮﺭﺏ ﻣﺮﺍﻗﺐ ﺑﺎﺷﻨﺪ‪.‬‬

‫‪ SI‬ﻧﻴﺰ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺎﻋﺚ ﻧﺎﻫﻨﺠﺎﺭﻱ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻧﻲ ﺗﺮﺍﻛﻨﺶ ﺷﻮﺩ ‪ ،‬ﻛﻪ ﺩﺭ ﺁﻥ ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﺍﺳﺖ ﻳﻚ‬ ‫‪‬‬
‫ﺣﺎﻟﺖ ﻧﺎﻣﻨﺎﺳﺐ ﺣﺘﻲ ﺍﮔﺮ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ‪ serializable‬ﺑﺎﺷﺪ ﺭﺍ ﺑﺒﻴﻨﺪ‪.‬‬

‫• ﻣﺎ ﺟﺰﺋﻴﺎﺕ ﺭﺍ ﺣﺬﻑ ﻣﻲ ﻛﻨﻴﻢ‬

‫‪ SI‬ﺩﺭ ﺍﻭﺭﺍﻛﻞ ﻭ ‪PostgreSQL‬‬

‫‪ ‬ﻫﺸﺪﺍﺭ ‪ SI :‬ﺯﻣﺎﻧﻲ ﻛﻪ ﺳﻄﺢ ﺍﻧﺰﻭﺍ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺍﺯ ‪ Serializable‬ﺍﺳﺖ ‪ ،‬ﺗﻮﺳﻂ ﺍﻭﺭﺍﻛﻞ ﻭ‬


‫‪ PostgreSQL‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫• ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ‪ PostgreSQL‬ﺍﺯ ‪ SI‬ﺩﺭ ﺑﺨﺶ ‪ 26.4.1.3‬ﺷﺮﺡ ﺩﺍﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪102‬‬
‫• ﻗﺎﻧﻮﻥ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺍﻭﺭﺍﻛﻞ “ ﺍﻭﻟﻴﻦ ﺑﺮﻧﺪﮔﺎﻥ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ “)ﺍﻧﻮﺍﻉ ﻣﺨﺘﻠﻔﻲ ﺍﺯ “ ﺍﻭﻟﻴﻦ ﺑﺮﻧﺪﮔﺎﻥ‬
‫ﭘﺬﻳﺮﻓﺘﻪ ﺷﺪﻩ“ (‬

‫‪ ‬ﻧﻮﻳﺴﻨﺪﻩ ﻫﻤﺰﻣﺎﻥ ﺩﺭ ﺯﻣﺎﻥ ﻧﻮﺷﺘﻦ ﻋﻤﻞ ﭼﻚ ﻛﺮﺩﻥ ﺭﺍ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ‪ ،‬ﻧﻪ ﺩﺭ ﺯﻣﺎﻥ ﺗﺄﻳﻴﺪ‬

‫‪ ‬ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺑﻪ ‪ Rollback‬ﺍﻳﻦ ﺍﺟﺎﺯﻩ ﺭﺍ ﺯﻭﺩﺗﺮ ﻣﻲ ﺩﻫﻨﺪ‪.‬‬

‫• ﻧﻪ ﭘﺸﺘﻴﺒﺎﻧﻲ ﺍﺟﺮﺍﻱ ‪ Serializable‬ﺑﻪ ﺩﺭﺳﺘﻲ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺁﻳﺎ ﻣﻲ ﺗﻮﺍﻥ ﺭﺍﻩ ﻓﺮﺍﺭﻱ ﺑﺮﺍﻱ ﭘﺮﺱ ﻭ ﺟﻮﻱ ﺧﺎﺹ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﻥ ﺭﺍ ‪ ...‬ﺑﺮﺍﻱ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﺩﺭ ‪ Oracle‬ﻭ‬
‫‪ PostgreSQL‬ﺍﻧﺘﺨﺎﺏ ﻛﺮﺩ‪.‬‬

‫• ‪ Lock‬ﻫﺎﻱ ﺩﺍﺩﻩ ﺍﻱ ﻛﻪ ‪ ،‬ﺑﺮﺍﻱ ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﻤﺰﻣﺎﻥ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬

‫• ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪،‬‬

‫‪ ‬ﺣﺪﺍﻛﺜﺮ )‪ (orderno‬ﺍﺯ ﺩﺳﺘﻮﺍﺕ ﺭﺍ ﺑﺮﺍﻱ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ‪.‬‬

‫‪ ‬ﺍﺭﺯﺵ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺑﻪ ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ‪maxorder‬‬

‫‪ ‬ﺩﺭﺝ ﺩﺳﺘﻮﺭﺍﺕ )…‪(maxorder+1,‬‬

‫ﭘﺎﻳﺎﻥ ﻓﺼﻞ‬

‫ﺧﻮﺍﻧﺪﻥ ﻓﻮﺭﻱ‬

‫ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎﻱ ﻫﻤﺰﻣﺎﻥ ﺍﺯ ﺧﻮﺍﻥﺩﻥ ﻫﺎﻱ ﻓﻮﺭﻱ ﻣﺨﻔﻲ ﻫﺴﺘﻨﺪ‪.‬‬

‫‪103‬‬
‫ﻧﻮﺷﺘﻦ ﻓﻮﺭﻱ ‪ :‬ﺍﻋﻤﺎﻝ ﻛﻨﻨﺪﻩ ﺍﻭﻟﻴﻦ ﭘﻴﺮﻭﺯﻱ‬

‫‪104‬‬
‫• ﮔﻮﻧﺎﮔﻮﻧﻲ ‪ :‬ﺍﻭﻟﻴﻦ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻛﻪ ﺑﺮﻧﺪﻩ ﺷﺪ‬

‫‪ ‬ﭼﻚ ﻛﺮﺩﻥ ﺑﺮﺍﻱ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﻤﺰﻣﺎﻥ ﺩﺭ ﻫﻨﮕﺎﻡ ﻧﻮﺷﺘﻦ ﺭﺥ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫‪) ‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻭﺭﺍﻛﻞ ﺑﻪ ﻋﻼﻭﻩ ﺑﺮﺧﻲ ﺍﺯ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﺍﺿﺎﻓﻲ(‬

‫‪ ‬ﺗﻔﺎﻭﺕ ﺗﻨﻬﺎ ﺩﺭ ﺯﻣﺎﻧﻲ ﻛﻪ ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﻲ ﻣﺎﻧﺪ ‪ ،‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﻣﻌﺎﺩﻝ ﺍﺳﺖ‪.‬‬

‫‪ SI Non-Serializability‬ﺣﺘﻲ ﺑﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﻓﻘﻂ ﺧﻮﺍﻧﺪﻧﻲ‬

‫‪105‬‬
‫ﺟﺰﺋﻴﺎﺕ ﺯﻣﺎﻧﺒﻨﺪ ﺗﺤﺖ ﻗﻔﻞ ‪ 2‬ﻓﺎﺯ‬

‫‪106‬‬
‫ﺯﻣﺎﻧﺒﻨﺪ ﻧﺎﻗﺺ ﺑﺎ ﻗﻔﻞ ﺗﺒﺪﻳﻞ‬

‫‪107‬‬
‫ﻧﻤﻮﺩﺍﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎ ﺳﺎﺧﺘﺎﺭ ﺩﺭﺧﺖ‬

‫ﺯﻣﺎﻧﺒﻨﺪ ‪ Serializable‬ﺗﺤﺖ ﭘﺮﻭﺗﻜﻞ ﺩﺭﺧﺖ‬

‫‪108‬‬
‫ﺯﻣﺎﻧﺒﻨﺪ ‪3‬‬

‫‪109‬‬
‫ﺯﻣﺎﻧﺒﻨﺪ ‪4‬‬

‫ﺑﺮﻧﺎﻣﻪ ﺯﻣﺎﻧﺒﻨﺪ ‪ ،5‬ﺯﻣﺎﻧﺒﻨﺪ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻋﺘﺒﺎﺭ ﺳﻨﺠﻲ‬

‫ﺳﺎﺯﮔﺎﺭﻱ ﺑﺎ ﻣﺎﺗﺮﻳﺲ‬

‫‪110‬‬
‫ﺯﻣﺎﻧﺒﻨﺪ ‪ nonserializable‬ﺑﺎ ﺩﺭﺟﻪ ﺳﺎﺯﮔﺎﺭﻱ ‪2‬‬

‫ﺩﺭﺧﺖ ‪ +B‬ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﻱ ﻓﺎﻳﻞ ﻫﺎﻱ ‪n=3‬‬

‫ﺩﺭﺝ‪ Clearview‬ﺑﻪ ﺩﺍﺧﻞ ﺩﺭﺧﺖ ‪ +B‬ﺍﺯ ﺷﻜﻞ ‪16-21‬‬

‫‪111‬‬
‫ﻗﻔﻞ ﻣﺎﺗﺮﻳﺲ ﺳﺎﺯﮔﺎﺭﻱ‬

‫‪112‬‬
‫ﻓﺼﻞ ‪:6‬‬
‫ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‬

‫‪113‬‬
‫ﺳﻴﺴﺘﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‪:‬‬
‫ﺳﻴﺴﺘﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﻣﺘﺸﻜﻞ ﺍﺯ ﺳﺎﻳﺖ ﻫﺎﻱ ﺁﺯﺍﺩﺍﻧﻪ ﺟﻔﺖ ﺷﺪﻩ ﺍﻱ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﻫﻴﭻ ﻣﻮﻟﻔﻪ‬
‫ﻓﻴﺰﻳﻜﻲ ﺍﺷﺘﺮﺍﻙ ﻧﺪﺍﺭﻧﺪ ‪ .‬ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻛﻪ ﺩﺭ ﻫﺮ ﺳﺎﻳﺖ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻣﺴﺘﻘﻞ ﺍﺯ‬
‫ﻳﻜﺪﻳﮕﺮ ﻣﻲ ﺑﺎﺷﺪ‪ .‬ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﻳﻚ ﻳﺎ ﭼﻨﺪ ﺳﺎﻳﺖ ﺑﻪ ﺩﺍﺩﻩ ﻫﺎ ﺩﺳﺘﺮﺳﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪.‬‬

‫ﭘﺎﻳﮕﺎﻩ ﻫﺎﻱ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﻫﻤﮕﻦ‪:‬‬

‫‪ ‬ﺩﺭ ﻳﻚ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﻫﻤﮕﻦ‬

‫‪ ‬ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﻳﻜﺴﺎﻥ ﺩﺍﺭﻧﺪ‪.‬‬

‫‪ ‬ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﺁﺷﻨﺎﻳﻲ ﺩﺍﺭﻧﺪ ﻭ ﻣﻮﺍﻓﻖ ﻫﻤﻜﺎﺭﻱ ﺩﺭ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﻛﺎﺭﺑﺮ ﭘﺮﺩﺍﺯﺵ ﻫﺴﺘﻨﺪ ‪.‬‬

‫‪ ‬ﻫﺮ ﺳﺎﻳﺖ ﺑﺨﺸﻲ ﺍﺯ ﺍﺳﺘﻘﻼﻝ ﺍﺵ ﺭﺍ ﺑﺮ ﺣﺴﺐ ﺣﻖ ﺗﻐﻴﻴﺮ ﻃﺮﺡ ﻫﺎ ﻳﺎ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﻭﺍﮔﺬﺍﺭ‬
‫ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪ ‬ﺑﺮﺍﻱ ﻛﺎﺭﺑﺮ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﻚ ﺳﻴﺴﺘﻢ ﺧﺎﺹ ﺑﻪ ﻧﻈﺮ ﻣﻲ ﺭﺳﺪ ‪.‬‬

‫‪ ‬ﺩﺭﻳﻚ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﻧﺎﻫﻤﮕﻦ‬

‫‪ ‬ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﺘﻔﺎﻭﺕ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﺯ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﻭ ﻃﺮﺡ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻨﺪ ‪.‬‬

‫‪ ‬ﺗﻔﺎﻭﺕ ﺩﺭ ﻃﺮﺡ ﻣﺸﻜﻞ ﺍﺻﻠﻲ ﺑﺮﺍﻱ ﭘﺮﺩﺍﺯﺵ ﭘﺮﺱ ﻭ ﺟﻮ ﺍﺳﺖ ‪.‬‬

‫‪ ‬ﺗﻔﺎﻭﺕ ﺩﺭ ﻧﺮﻡ ﺍﻓﺰﺍﺭﻣﺸﻜﻞ ﺍﺻﻠﻲ ﺑﺮﺍﻱ ﭘﺮﺩﺍﺯﺵ ﺗﺮﺍﻛﻨﺶ ﺍﺳﺖ ‪.‬‬

‫ﺳﺎﻳﺖ ﻫﺎ ﻣﻤﻜﻦ ﻧﻴﺴﺖ ﺍﺯ ﻳﻜﺪﻳﮕﺮ ﺁﮔﺎﻫﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ ﻭ ﻣﻤﻜﻦ ﺍﺳﺖ ﻓﻘﻂ ﺗﺴﻬﻴﻼﺕ ﻣﺤﺪﻭﺩ ﺭﺍ ﺑﺮﺍﻱ‬
‫ﻫﻤﻜﺎﺭﻱ ﺩﺭ ﭘﺮﺩﺍﺯﺵ ﺗﺮﺍﻛﻨﺶ ﻓﺮﺍﻫﻢ ﻛﻨﻨﺪ ‪.‬‬

‫‪114‬‬
‫ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‪:‬‬

‫ﻓﺮﺽ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﻳﻚ ﻣﺪﻝ ﺩﺍﺩﻩ ﺍﺭﺗﺒﺎﻃﻲ ﺩﺍﺭﻳﻢ‪،‬‬

‫‪ ‬ﺗﻜﺮﺍﺭ‬

‫• ﺳﻴﺴﺘﻢ ﻧﺴﺨﻪ ﻫﺎﻱ ﻣﺘﻌﺪﺩ ﺍﺯ ﺩﺍﺩﻩ ﺭﺍ ﺣﻔﻆ ﻣﻲ ﻛﻨﺪ‪،‬ﺩﺭ ﻣﺤﻞ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺑﺮﺍﻱ‬
‫ﺑﺎﺯﻳﺎﺑﻲ ﺳﺮﻳﻌﺘﺮ ﻭ ﺗﻮﻟﺮﺍﻧﺲ ﺷﻜﺴﺖ ﻭ ﻋﻴﺐ ﺫﺧﻴﺮﻩ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪ ‬ﺍﻓﺮﺍﺯ ﻛﺮﺩﻥ‬

‫• ﺍﺭﺗﺒﺎﻁ ﺑﻪ ﭼﻨﺪﻳﻦ ﺑﺨﺶ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺩﺭ ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﺸﺨﺺ ﻭ ﻣﺠﺰﺍ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﻣﻲ‬
‫ﺷﻮﺩ‪.‬‬

‫‪ ‬ﻛﭙﻲ ﻭ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﺮﻛﻴﺐ ﺷﻮﺩ‪.‬‬

‫• ﺍﺭﺗﺒﺎﻁ ﺑﻪ ﭼﻨﺪﻳﻦ ﺑﺨﺶ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﻣﻲ ﺷﻮﺩ ‪ :‬ﺳﻴﺴﺘﻢ ﭼﻨﺪﻳﻦ ﻛﭙﻲ ﻳﻜﺴﺎﻥ ﺍﺯ ﭼﻨﻴﻦ‬
‫ﺑﺨﺸﻲ ﺭﺍ ﺣﻔﻆ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫ﻛﭙﻲ ﺩﺍﺩﻩ‪:‬‬
‫ﻳﻚ ﺭﺍﺑﻄﻪ ﻳﺎ ﺑﺨﺸﻲ ﺍﺯ ﻳﻚ ﺭﺍﺑﻄﻪ ﻛﭙﻲ ﻣﻲ ﺷﻮﺩ ﺍﮔﺮ ﺑﻪ ﻃﻮﺭ ﺍ ﺿﺎﻓﻲ ﺩﺭ ﺩﻭ ﻳﺎ ﭼﻨﺪ ﺳﺎﻳﺖ ﺫﺧﻴﺮﻩ‬
‫ﺷﻮﺩ‪ .‬ﻛﭙﻲ ﻛﺎﻣﻞ ﻳﻚ ﺭﺍﺑﻄﻪ ﻣﻮﺭﺩﻱ ﺍﺳﺖ ﻛﻪ ﺭﺍﺑﻄﻪ ﺩﺭ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎ ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﭘﺎﻳﮕﺎﻩ ﻫﺎﻱ ﺩﺍﺩﻩ ﻛﺎﻣﻼ ﺩﺍﺭﺍﻱ ﺍﻃﻨﺎﺏ ﻭ ﺣﺸﻮ ‪ ،‬ﭘﺎﻳﮕﺎﻩ ﻫﺎﻳﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﻛﻪ ﺩﺭ ﺁﻥ ﻫﺮ ﺳﺎﻳﺖ ﺷﺎﻣﻞ‬
‫ﻧﺴﺨﻪ ﺍﻱ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻛﻞ ﺍﺳﺖ‪.‬‬

‫ﻣﺰﺍﻳﺎﻱ ﻛﭙﻲ‬
‫‪ ‬ﻗﺎﺑﻠﻴﺖ ﺩﺳﺘﺮﺳﻲ‪ :‬ﺷﻜﺴﺖ ﺳﺎﻳﺖ ﺷﺎﻣﻞ ﺭﺍﺑﻄﻪ ‪ r‬ﺩﺭ ﺻﻮﺭﺕ ﻭﺟﻮﺩ ﻛﭙﻲ ﻣﻨﺠﺮﺑﻪ ﻋﺪﻡ‬
‫ﺩﺳﺘﺮﺳﻲ ‪ r‬ﻧﻤﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺗﺸﺎﺑﻪ ﻭ ﺗﻮﺍﺯﻱ‪ :‬ﺳﻮﺍﻻﺕ ﺩﺭ ‪ r‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺗﻮﺳﻂ ﭼﻨﺪﻳﻦ ﮔﺮﻩ ﻣﻮﺍﺯﻱ ﭘﺮﺩﺍﺯﺵ ﺷﻮﺩ ‪.‬‬

‫‪115‬‬
‫‪ ‬ﺍﻧﺘﻘﺎﻝ ﻛﺎﻫﺶ ﻳﺎﻓﺘﻪ ﺩﺍﺩﻩ ‪ :‬ﺭﺍﺑﻄﻪ ‪ r‬ﺑﻪ ﻃﻮﺭ ﻣﺤﻠﻲ ﺩﺭ ﻫﺮ ﺳﺎﻳﺖ ﻣﺤﺘﻮﻱ ﻳﻚ ﻛﭙﻲ ‪r‬‬
‫ﺩﺭﺩﺳﺘﺮﺱ ﻣﻲ ﺑﺎﺷﺪ‪.‬‬

‫ﻣﻌﺎﻳﺐ ﻛﭙﻲ‬

‫‪ ‬ﻫﺰﻳﻦﻩ ﺍﻓﺰﺍﻳﺶ ﻳﺎﻓﺘﻪ ﺑﻪ ﺭﻭﺯ ﺭﺳﺎ ﻧﻲ ﻫﺎ ‪ :‬ﻫﺮ ﻛﭙﻲ ﺭﺍﺑﻄﻪ ‪ r‬ﺑﺎﻳﺴﺘﻲ ﺑﻪ ﺭﻭﺯ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﭘﻲﭼﻴﺪﮔﻲ ﺍﻓﺰﺍﻳﺶ ﻳﺎﻓﺘﻪ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻥ ‪ :‬ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎﻱ ﻫﻤﺰﻣﺎﻥ ﺗﻜﺮﺍﺭﻫﺎﻱ‬
‫ﻣﺸﺨﺺ ﻭ ﻣﺠﺰﺍ ﻣﻤﻜﻦ ﺍﺳﺖ ﻣﻨﺠﺮ ﺑﻪ ﺩﺍﺩﻩ ﺷﻮﺩ‪.‬‬
‫‪ ‬ﭘﻴﭽﻴﺪﮔﻲ ﺍﻓﺰﺍﻳﺶ ﻳﺎﻓﺘﻪ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻥ‪ :‬ﻛﭙﻲ ﻫﺎﻱ ﻣﺠﺰﺍ ﻭ ﻣﺸﺨﺺ ﺏﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎﻱ‬
‫ﻫﻤﺰﻣﺎﻥ ﻣﻤﻜﻦ ﺍﺳﺖ ﻣﻨﺠﺮ ﺑﻪ ﺩﺍﺩﻩ ﻏﻴﺮ ﻣﺘﻨﺎﺳﺐ ﺷﻮﺩ ﻣﮕﺮﺁﻧﻜﻪ ﻣﻜﺎﻧﻴﺴﻢ ﻫﺎﻱ ﻛﻨﺘﺮﻝ‬
‫ﻫﻤﺰﻣﺎﻥ ﺧﺎﺹ ﺍﺟﺮﺍ ﺷﻮﺩ ‪.‬‬

‫ﻳﻚ ﺭﺍﻩ ﺣﻞ ‪ :‬ﻳﻚ ﻧﺴﺨﻪ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﺴﺨﻪ ﺍﻭﻟﻴﻪ ﻭ ﺍﺻﻠﻲ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ ﻭ ﻋﻤﻠﻴﺎﺕ ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻥ ﺑﺮ‬
‫ﻧﺴﺨﻪ ﺍﻭﻟﻴﻪ ﺭﺍ ﺑﻜﺎﺭ ﺑﺮﻳﺪ‪.‬‬

‫ﺑﺨﺶ ﺑﻨﺪﻱ ﺩﺍﺩﻩ‪:‬‬


‫ﺑﺨﺶ ﺭﺍﺑﻄﻪ ‪ r‬ﺩﺭ ﺑﺨﺶ ﻫﺎﻱ ‪ r1, r2, …, rn‬ﻛﻪ ﺷﺎﻣﻞ ﺍﻃﻼﻋﺎﺕ ﺍﻃﻼﻋﺎﺕ ﻛﺎﻓﻲ ﻭ ﻣﻮﺛﺮ ﺟﻬﺖ‬
‫ﺳﺎﺧﺘﺎﺭ ﺑﻨﺪﻱ ﻣﺠﺪﺩ ﺭﺍﺑﻄﻪ ‪ r‬ﺍﺳﺖ‪.‬‬

‫ﺑﺨﺶ ﺑﻨﺪﻱ ﺍﻓﻘﻲ ‪ :‬ﻫﺮﺗﺎﭘﻞ ‪ r‬ﺑﻪ ﻳﻚ ﻳﺎ ﭼﻨﺪ ﺑﺨﺶ ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺑﺨﺶ ﻋﻤﻮﺩﻱ ‪ :‬ﻃﺮﺡ ﺑﺮﺍﻱ ﺍﺭﺗﺒﺎﻁ ‪ r‬ﺑﻪ ﻳﻚ ﻳﺎ ﭼﻨﺪﻳﻦ ﻃﺮﺡ ﻛﻮﭼﻜﺘﺮﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫)ﻳﺎ ﻣﻮﺭﺩ ﺑﺮﺗﺮ ( ﺟﻬﺖ ﺍﻃﻤﻴﻨﺎﻥ ﺍﺯ‬ ‫ﺗﻤﺎﻣﻲ ﻃﺮﺡ ﻫﺎ ﺑﺎﻳﺴﺘﻲ ﺷﺎﻣﻞ ﻳﻚ ﻣﻮﺭﺩ ﻣﻨﺘﺨﺐ ﻣﺸﺘﺮﻙ‬
‫ﻭﻳﮋﮔﻲ ﻣﺸﺘﺮﻙ ﺑﻲ ﺯﻳﺎﻥ ﺑﺎﺷﺪ ‪ .‬ﻭﻳﮋﮔﻲ ﺧﺎﺹ ‪ ،‬ﻭﻳﮋﮔﻲ ﺗﺎﭘﻞ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﻪ ﻫﺮ ﻃﺮﺡ ﺍﺿﺎﻓﻪ ﺷﻮﺩ‬
‫ﺗﺎ ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﻮﺭﺩ ﻣﻨﺘﺨﺐ ﺑﻪ ﺧﺪﻣﺖ ﮔﺮﻓﺘﻪ ﺷﻮﺩ ‪.‬‬

‫‪116‬‬
‫ﻣﺜﺎﻝ ‪ :‬ﻣﺤﺎﺳﺒﻪ ﺭﺍﺑﻄﻪ ﺑﺎ ﻃﺮﺡ ﺯﻳﺮ‪ ،‬ﺣﺴﺎﺏ ‪) :‬ﻧﺎﻡ ﺷﻌﺒﻪ ‪ ،‬ﺷﻤﺎﺭﻩ ﺣﺴﺎﺏ ‪،‬ﻣﺎﻧﺪﻩ (‬

‫ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﺍﻓﻘﻲ ﺭﺍﺑﻄﻪ ﺣﺴﺎﺏ‬

‫ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﺍﻓﻘﻲ ﻛﺎﺭﻣﻨﺪ ﺑﻪ ﺣﺴﺎﺏ‬

‫‪117‬‬
‫ﻣﺰﺍﻳﺎﻱ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ‬

‫‪ ‬ﺍﻓﻘﻲ‪ :‬ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﭘﺮﺩﺍﺯﺵ ﻣﻮﺍﺯﻱ ﺩﺭ ﺑﺨﺶ ﻫﺎﻱ ﻳﻚ ﺭﺍﺑﻄﻪ ﺭﺍ ﻣﺠﺎﺯ ﻣﻲ ﺳﺎﺯﺩ ‪ .‬ﺭﺍﺑﻄﻪ ﺭﺍ‬
‫ﻣﺠﺎﺯ ﺑﻪ ﺟﺪﺍﻳﻲ ﻭ ﺗﻘﺴﻴﻢ ﻣﻲ ﺳﺎﺯﺩ ﺗﺎ ﺟﺎﻳﻲ ﻛﻪ ﺗﺎﭘﻞ ﻫﺎ ﺩﺭ ﺟﺎﻳﻲ ﻭﺍﻗﻊ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻏﺎﻟﺒﺎ‬
‫ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﻫﺴﺘﻨﺪ‪.‬‬

‫‪ ‬ﻋﻤﻮﺩﻱ ‪ :‬ﺩﺭ ﺍﻳﻨﺠﺎ ﺗﺎﭘﻞ ﻫﺎ ﺭﺍ ﻣﺠﺎﺯ ﺑﻪ ﺟﺪﺍﻳﻲ ﻣﻲ ﺳﺎﺯﺩ ﺗﺎ ﺟﺎﻳﻲ ﻛﻪ ﻫﺮ ﺑﺨﺶ ﺗﺎﭘﻞ ﺩﺭ ﺟﺎﻳﻲ‬
‫ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻏﺎﻟﺒﺎ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺍﺳﺖ‪.‬‬

‫• ﻭﻳﮋﮔﻲ ﺗﺎﭘﻠﻲ ﺍﺗﺼﺎﻝ ﻣﻮﺛﺮ ﺑﺨﺶ ﻫﺎﻱ ﻋﻤﻮﺩﻱ ﺭﺍ ﻣﺠﺎﺯ ﻣﻲ ﺳﺎﺯﺩ ‪.‬‬

‫ﭘﺮﺩﺍﺯﺵ ﻣﻮﺍﺯﻱ ﺩﺭ ﻳﻚ ﺭﺍﺑﻄﻪ ﺭﺍ ﻣﺠﺎﺯ ﻣﻲ ﺳﺎﺯﺩ ‪.‬‬ ‫•‬

‫• ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﺍﻓﻘﻲ ﻭ ﻋﻤﻮﺩﻱ ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﺮﻛﻴﺐ ﺷﻮﺩ‪.‬‬

‫• ﺑﺨﺶ ﻫﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﻪ ﻃﻮﺭ ﻣﻮﻓﻘﻴﺖ ﺁﻣﻴﺰﻱ ﺑﻪ ﻋﻤﻖ ﺍﺧﺘﻴﺎﺭﻱ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﺷﻮﺩ ‪.‬‬

‫ﺷﻔﺎﻓﻴﺖ ﺩﺍﺩﻩ‬
‫ﺷﻔﺎﻓﻴﺖ ﺩﺍﺩﻩ ﺩﺭﺟﻪ ﺍﻱ ﻛﻪ ﻛﺎﺭﺑﺮ ﺳﻴﺴﺘﻢ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﺯ ﺟﺰﺋﻴﺎﺕ ﭼﮕﻮﻧﮕﻲ ﻭ ﺟﺎﻳﮕﺎﻩ ﺫﺧﻴﺮﻩ ﺍﻗﻼﻡ‬
‫ﺩﺍﺩﻩ ﺩﺭ ﺳﻴﺴﺘﻢ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﺑﻲ ﺍﻃﻼﻉ ﺑﺎﺷﺪ‬

‫ﻣﻮﺿﻮﻋﺎﺕ ﺷﻔﺎﻓﻴﺖ ﺩﺭ ﺍﺭﺗﺒﺎﻁ ﺑﺎ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ‪:‬‬

‫ﺷﻔﺎﻓﻴﺖ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ‬

‫ﺷﻔﺎﻓﻴﺖ ﺗﻜﺮﺍﺭ‬

‫ﺷﻔﺎﻓﻴﺖ ﻣﻮﻗﻌﻴﺖ‬

‫‪118‬‬
‫ﻣﻌﻴﺎﺭﻫﺎﻱ ﻧﺎﻣﮕﺬﺍﺭﻱ ﺍﻗﻼﻡ ﺩﺍﺩﻩ‬
‫ﺑﺎﻱ ﻧﺎﻡ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﮔﺴﺘﺮﺩﻩ ﺳﻴﺴﺘﻢ ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪.‬‬
‫ﻫﺮ ﻓﻘﺮﻩ ﺩﺍﺩﻩ ﺩ‬ ‫‪(1‬‬
‫ﻫﻤﭽﻨﻴﻦ ﺑﺎﻳﺴﺘﻲ ﺟﻬﺖ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻣﻮﻗﻌﻴﺖ ﺍﻗﻼﻡ ﺩﺍﺩﻩ ﺑﻪ ﻃﻮﺭ ﻣﻮﺛﺮ ﻭ ﺳﻮﺩﻣﻨﺪ ﻋﻤﻠﻲ ﻭ‬ ‫‪(2‬‬
‫ﻣﻤﻜﻦ ﺑﺎﺷﺪ‪.‬‬
‫ﺟﻬﺖ ﺗﻐﻴﻴﺮ ﻣﻮﻗﻌﻴﺖ ﺍﻗﻼﻡ ﺩﺍﺩﻩ ﺑﻪ ﻃﻮﺭ ﺷﻔﺎﻑ ﻋﻤﻠﻲ ﻭ ﻣﻤﻜﻦ ﺑﺎﺷﺪ ‪.‬‬ ‫‪(3‬‬
‫ﻫﻤﻴﻨﻄﻮﺭ ﻫﺮ ﺳﺎﻳﺖ ﺑﺎﻳﺴﺘﻲ ﻗﺎﺩﺭ ﺑﻪ ﺍﻳﺠﺎﺩ ﺍﻗﻼﻡ ﺩﺍﺩﻩ ﺟﺪﻳﺪ ﺑﻪ ﻃﻮﺭ ﻣﺴﺘﻘﻞ ﺑﺎﺷﺪ ‪.‬‬ ‫‪(4‬‬

‫ﻃﺮﺡ ﻣﺘﻤﺮﻛﺰ ﺷﺪﻩ‪ -‬ﺳﺮﻭﺭ ﻧﺎﻡ‬

‫‪ ‬ﺳﺎﺧﺘﺎﺭ‪ :‬ﺳﺮﻭﺭ ﻧﺎﻡ ﺑﺮﺍﻱ ﺗﻤﺎﻣﻲ ﺍﺳﺎﻣﻲ ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﺩ ﻭ ﻫﺮ ﺳﺎﻳﺖ ﺛﺒﺘﻲ ﺍﺯ ﺍﻗﻼﻡ ﺩﺍﺩﻩ ﻣﺤﻠﻲ‬
‫ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ ‪ .‬ﺳﺎﻳﺖ ﻫﺎ ﺩﺭﺑﺎﺭﻩ ﺳﺮﻭﺭ ﻧﺎﻡ ﺑﺮﺍﻱ ﺗﻌﻴﻴﻦ ﻣﻮﻗﻌﻴﺖ ﺍﻗﻼﻡ ﺩﺍﺩﻩ ﻏﻴﺮﻣﺤﻠﻲ ﭘﺮﺱ‬
‫ﻭ ﺟﻮ ﻣﻲ ﻛﻨﻨﺪ‪.‬‬

‫‪ ‬ﻣﺰﺍﻳﺎ ‪ :‬ﻣﻌﻴﺎﺭ ‪3‬ﻭ‪ 1‬ﻧﺎﻣﮕﺬﺍﺭﻱ ﺭﺍ ﺑﺮﺁﻭﺭﺩﻩ ﻣﻲ ﺳﺎﺯﺩ‪.‬‬

‫‪ ‬ﻣﻌﺎﻳﺐ ‪ :‬ﻣﻌﻴﺎﺭ ‪ 4‬ﻧﺎﻣﮕﺬﺍﺭﻱ ﺭﺍ ﺑﺮﺁﻭﺭﺩﻩ ﻧﻤﻲ ﺳﺎﺯﺩ ‪ .‬ﺳﺮﻭﺭ ﻧﺎﻡ ﺑﻦ ﺑﺴﺖ ﻋﻤﻠﻜﺮﺩ ﺑﺎﻟﻘﻮﻩ ﺍﺳﺖ ‪.‬‬
‫ﺳﺮﻭﺭ ﻧﺎﻡ ﻭﻳﮋﮔﻲ ﺧﺎﺹ ﺷﻜﺴﺖ ﺍﺳﺖ‪.‬‬

‫ﻛﺎﺭﺑﺮﺩ ﻧﺎﻡ ﻫﺎﻱ ﻣﺴﺘﻌﺎﺭ‬


‫‪ ‬ﺟﺎﻳﮕﺰﻳﻨﻲ ﺑﻪ ﻃﺮﺡ ﻣﺘﻤﺮﻛﺰ ﺷﺪﻩ ‪ :‬ﻫﺮ ﺳﺎﻳﺖ ﺩﺍﺭﺍﻱ ﭘﻴﺸﻮﻧﺪ ﺷﻨﺎﺳﺎﻳﻲ ﻛﻨﻨﺪﻩ ﺳﺎﻳﺖ ﺧﻮﺩﺵ‬
‫ﺑﻪ ﻫﺮ ﻧﺎﻣﻲ ﺍﺳﺖ ﻛﻪ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻦ ﺩ ‪ .‬ﺩﺍﺷﺘﻦ ﺷﻨﺎﺳﺎﻳﻲ ﻛﻨﻨﺪﻩ ﻣﻨﺤﺼﺮﺑﻪ ﻓﺮﺩ ﺭﺍ ﺗﻜﻤﻴﻞ ﻣﻲ‬
‫ﻛﻨﺪ ﻭ ﻣﺎﻧﻊ ﻣﺸﻜﻼﺕ ﻣﺮﺗﺒﻂ ﺑﺎ ﻛﻨﺘﺮﻝ ﻣﺮﻛﺰﻱ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺑﺎ ﻭﺟﻮﺩ ﺍﻳﻦ ‪ ،‬ﻣﻮﻓﻖ ﺑﻪ ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ‬
‫ﺷﻔﺎﻓﻴﺖ ﺷﺒﻜﻪ ﻧﻤﻲ ﺷﻮﺩ‪.‬‬

‫ﺭﺍﻩ ﺣﻞ ‪ :‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺍﺳﺎﻡ ﻱ ﻣﺴﺘﻌﺎﺭ ﺭﺍ ﺑﺮﺍﻱ ﺍﻗﻼﻡ ﺩﺍﺩﻩ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ؛ ﻧﮕﺎﺷﺖ ﻧﺎﻡ ﻫﺎﻱ ﻣﺴﺘﻌﺎﺭ‬
‫ﺑﻪ ﺍﺳﺎﻣﻲ ﻭﺍﻗﻌﻲ ﺩﺭ ﻫﺮ ﺳﺎﻳﺖ ﺭﺍ ﺫﺧﻴﺮﻩ ﻣﻲ ﻛﻨﺪ ‪ .‬ﻛﺎﺭﺑﺮ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺯ ﻣﻮﻗﻌﻴﺖ ﻓﻴﺰﻳﻜﻲ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﻧﺎﺁﮔﺎﻩ‬
‫ﺑﺎﺷﺪ ﻭﺍﮔﺮ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺍﺯ ﻳﻚ ﺳﺎﻳﺖ ﺑﻪ ﺳﺎﻳﺖ ﺩﻳﮕﺮ ﺣﺮﻛﺖ ﻛﻨﺪ ‪ ،‬ﺗﺤﺖ ﺗﺎﺛﻴﺮ ﻧﻤﻲ ﺑﺎﺷﺪ ‪.‬‬

‫‪119‬‬
‫ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ‪ :‬ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﭼﻨﺪ ﺳﺎﻳﺖ ﺑﻪ ﺩﺍﺩﻩ ﺩﺳﺘﺮﺳﻲ ﺩﺍﺷﺘﻪ‬
‫ﺑﺎﺵﻥﺩ ‪.‬‬

‫‪ ‬ﻫﺮ ﺳﺎﻳﺖ ﻣﺪﻳﺮ ﺗﺮﺍﻛﻨﺶ ﻣﺤﻠﻲ ﻣﺴﺌﻮﻝ ﺭﺍ ﺩﺍﺭﺩ ‪ :‬ﺛﺒﺘﻲ ﺑﺮﺍﻱ ﺍﻫﺪﺍﻑ ﺑﻬﺒﻮﺩ ﺭﺍ ﺣﻔﻆ ﻣﻲ ﻛﻨﺪ ‪.‬‬
‫ﺩﺭ ﻫﻤﺎﻫﻨﮓ ﻛﺮﺩﻥ ﺍﺟﺮﺍﻱ ﻫﻤﺰﻣﺎﻥ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺍﺟﺮﺍﺷﺪﻩ ﺩﺭﺁﻥ ﺳﺎﻳﺖ ﻣﺸﺎﺭﻛﺖ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪ ‬ﻫﺮ ﺳﺎﻳﺖ ﺩﺍﺭﺍﻱ ﻳﻚ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺗﺮﺍﻛﻨﺶ ﺍﺳﺖ ﻛﻪ ﻣﺴﺊﻭﻝ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﻣﻲ ﺑﺎﺷﺪ ‪:‬‬

‫‪ .1‬ﺍﺟﺮﺍﻱ ﻣﻌﺎﻣﻼﺗﻲ ﺭﺍ ﺷﺮﻭﻉ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺩﺯﺭ ﺳﺎﻳﺖ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ .2‬ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻓﺮﻋﻲ ﺩﺭ ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﻨﺎﺳﺐ ﺑﺮﺍﻱ ﺍﺟﺮﺍ ﺭﺍ ﺗﻮﺯﻳﻊ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪ .3‬ﭘﺎﻳﺎﻥ ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﺳﺎﻳﺘﻲ ﺭﺍ ﻛﻪ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ‪،‬ﻫﻤﺎﻫﻨﮓ ﻣﻲ ﻛﻨﺪ ؛ ﭘﺎﻳﺎﻥ ﻫﺮ ﻳﻚ‬


‫ﻣﻤﻜﻦ ﺍﺳﺖ ﻣﻨﺠﺮ ﺑﻪ ﺗﺮﺍﻛﻨﺶ ﺍﻱ ﺷﻮﺩ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎ ﺍﺭﺍﺋﻪ ﻣﻲ‬
‫ﺷﻮﺩ ﻳﺎ ﺩﺭ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎ ﺑﻲ ﻧﺘﻴﺠﻪ ﻣﻲ ﻣﺎﻧﺪ ‪.‬‬

‫ﻣﻌﻤﺎﺭﻱ ﺳﻴﺴﺘﻢ ﺗﺮﺍﻛﻨﺶ‪:‬‬

‫ﺣﺎﻻﺕ ﺷﻜﺴﺖ ﺳﻴﺴﺘﻢ‪:‬‬


‫ﺷﻜﺴﺖ ﻫﺎﻱ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﺑﻪ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ‪ :‬ﺷﻜﺴﺖ ﻳﻚ ﺳﺎﻳﺖ ﻭﻳﺎ ﻛﻤﺒﻮﺩ‬
‫ﭘﻴﺎﻡ ﻫﺎ ﺑﺎﺷﻨﺪ ﻛﻪ ﺑﺎ ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻛﻨﺘﺮﻝ ﺍﻧﺘﻘﺎﻝ ﺷﺒﻜﻪ ﺍﺯ ﻗﺒﻴﻞ ‪ TCP-IP‬ﻧﮕﻪ ﺩﺍﺷﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪120‬‬
‫ﺷﻜﺴﺖ ﻳﻚ ﻟﻴﻨﻚ ﺍﺭﺗﺒﺎﻁ‬

‫• ﺑﺎ ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﺷﺒﻜﻪ ﺗﻮﺳﻂ ﭘﻴﺎﻡ ﻫﺎﻱ ﻣﺴﻴﺮﻳﺎﺑﻲ ﺍﺯﻃﺮﻳﻖ ﻟﻴﻨﻚ ﻫﺎﻱ‬
‫ﺟﺎﻳﮕﺰﻳﻦ ﻧﮕﻪ ﺩﺍﺷﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫• ﺷﺒﻜﻪ ﺯﻣﺎﻧﻲ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺑﻪ ﺩﻭ ﻳﺎ ﭼﻨﺪ ﺳﻴﺴﺘﻢ ﻓﺮﻋﻲ ﻣﺠﺰﺍ ﺷﻮﺩ‬


‫ﻛﻪ ﺩﺍﺭﺍﻱ ﻛﻤﺒﻮﺩ ﻫﺮ ﺍﺭﺗﺒﺎﻃﻲ ﺑﻴﻦ ﺁﻧﻬﺎ ﺍﺳﺖ ‪.‬‬

‫‪ .‬ﺑﻪ ﻃﻮﺭﻛﻠﻲ ﺍﻓﺮﺍﺯﻛﺮﺩﻥ ﻭ‬ ‫*ﺗﺬﻛﺮ‪ :‬ﺳﻴﺴﺘﻢ ﻓﺮﻋﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﻣﺘﺸﻜﻞ ﺍﺯ ﻳﻚ ﮔﺮﻩ ﺧﺎﺹ ﺑﺎﺷﺪ‬
‫ﺷﻜﺴﺖ ﻫﺎﻱ ﺳﺎﻳﺖ ﻏﻴﺮﻗﺎﺑﻞ ﺗﺸﺨﻴﺺ ﻣﻲ ﺑﺎﺷﺪ ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﺗﻌﻬﺪ ‪ :‬ﺍﻳﻦ ﭘﺮﻭﺗﻜﻞ ﻫﺎ ﺟﻬﺖ ﺍﻃﻤﻴﻨﺎﻥ ﺍﺯ ﻇﺮﻓﻴﺖ ﺍﺗﻤﻲ ﺩﺭ ﺳﺎﻳﺖ ﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ‬
‫ﺷﻮﺩ‪ .‬ﺗﺮﺍﻛﻨﺶ ﺍﻱ ﻛﻪ ﺩﺭ ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﺘﻌﺪﺩ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ﺑﺎﻳﺴﺘﻲ ﺩﺭ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎ ﻭﺍﮔﺬﺍﺭ ﺷﻮﺩ ﻳﺎ‬
‫ﺩﺭ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎ ﻱ ﻧﺘﻴﺠﻪ ﺑﺎﺷﺪ ‪ .‬ﺩﺍﺷﺘﻦ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﻭﺍﮔﺬﺍﺭ ﺷﺪﻩ ﺩﺭ ﻳﻚ ﺳﺎﻳﺖ ﻭ ﺑﻲ ﻧﺘﻴﺠﻪ‬
‫ﺑﻮﺩﻥ ﺩﺭ ﺳﺎﻳﺖ ﺩﻳﮕﺮ ﻏﻴﺮ ﻗﺎﺑﻞ ﻗﺒﻮﻝ ﺍﺳﺖ ‪ .‬ﭘﺮﻭﺗﻜﻞ ﺗﻌﻬﺪ ﺩﻭﻓﺎﺯﻱ )‪ (2PC‬ﺑﻪ ﻃﻮﺭﮔﺴﺘﺮﺩﻩ ﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﻣﻲ ﺷﻮﺩ‪ .‬ﭘﺮﻭﺗﻜﻞ ﺗﻌﻬﺪ ﺳﻪ ﻓﺎﺯﻱ )‪ (3pc‬ﭘﻴﭽﻴﺪﻩ ﺗﺮ ﻭ ﭘﺮﻫﺰﻳﻨﻪ ﺗﺮ ﺍﺳﺖ ﺍﻣﺎ ﻣﺎﻧﻊ ﭼﻨﺪ ﻋﻴﺐ ﭘﺮﻭﺗﻜﻞ‬
‫ﺗﻌﻬﺪ ﺩﻭﻓﺎﺯﻱ ﻣﻲ ﺷﻮﺩ‪ .‬ﺍﻳﻦ ﭘﺮﻭﺗﻜﻞ ﺩﺭ ﻋﻤﻞ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﺗﻌﻬﺪ ﺩﻭﻓﺎﺯﻱ )‪(2PC‬‬

‫ﻓﺮﺽ ﻛﻨﻴﺪ ﺳﺎﻳﺖ ﻫﺎﻱ ﻧﺎﻛﺎﻡ ﺷﺪﻩ ﻣﺪﻝ ﻋﺪﻡ ﻣﻮﻓﻘﻴﺖ ‪ -‬ﺗﻮﻗﻒ ﻓﻘﻂ ﻛﺎﺭ ﺭﺍ ﻣﺘﻮﻗﻒ ﻣﻲ ﻛﻨﺪ ﻭ ﺑﺎﻋﺚ‬
‫ﻫﻴﭻ ﺁﺳﻴﺐ ﺩﻳﮕﺮ ﺍﺯﻗﺒﻴﻞ ﻓﺮﺳﺘﺎﺩﻥ ﭘﻴﺎﻡ ﻫﺎﻱ ﻧﺎﺩﺭﺳﺖ ﻳﻪ ﺩﻳﮕﺮ ﺳﺎﻳﺖ ﻫﺎ ﻧﻤﻲ ﺷﻮﺩ ‪ .‬ﺍﺟﺮﺍﻱ ﭘﺮﻭﺗﻚﻝﻱ‬
‫ﺗﻮﺳﻂ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺑﻌﺪ ﺍﺯ ﺁﺧﺮﻳﻦ ﻣﺮﺣﻠﻪ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺗﺮﺍﻛﻨﺶ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ‪ .‬ﭘﺮﻭﺗﻜﻞ ﺷﺎﻣﻞ‬
‫ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﺤﻠﻲ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺁﻥ ﺗﺮﺍﻛﻨﺶ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺍﺟﺎﺯﻩ ﺩﻫﻴﺪ ‪ T‬ﺗﺮﺍﻛﻨﺶ ﺷﺮﻭﻉ‬
‫ﺷﺪﻩ ﺩﺭ ﺳﺎﻳﺖ ‪ Si‬ﻭ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ‪ Ci ،Si‬ﺑﺎﺷﺪ‪.‬‬

‫ﻣﺮﺣﻠﻪ ﺍﻭﻝ ‪ :‬ﺗﺼﻤﻴﻢ ﮔﻴﺮﻱ‬

‫‪ ‬ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺩﺭﺑﺎﺭﻩ ﺗﻤﺎﻣﻲ ﺷﺮﻛﺖ ﻛﻨﻨﺪﮔﺎ ﻥ ﺑﺮﺍﻱ ﺁﻣﺎﺩﻩ ﺷﺪﻥ ﺩﺭ ﻭﺍﮔﺬﺍﺭﻱ ﺗﺮﺍﻛﻨﺶ ‪Ti‬‬
‫ﭘﺮﺱ ﻭ ﺟﻮ ﻣﻲ ﻛﻨﺪ‪ Ci .‬ﺛﺒﺖ ﻫﺎﻱ>‪ <prepare T‬ﺭﺍ ﺑﻪ ﺛﺒﺖ ﺍﺿﺎﻓﻪ ﻡﻱ ﻛﻨﺪ ﻭ ﺛﺒﺖ ﺭﺍ ﻭﺍﺩﺍﺭ‬

‫‪121‬‬
‫ﺑﻪ ﺗﺜﺒﻴﺖ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﻣﻲ ﻛﻨﺪ ‪ .‬ﭘﻴﺎﻡ ﻫﺎﻱ ‪ prepare T‬ﺭﺍ ﺑﻪ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎﻳﻲ ﻣﻲ‬
‫ﻓﺮﺳﺘﺪ ﻛﻪ ‪ T‬ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﺑﺎ ﺩﺭﻳﺎﻓﺖ ﭘﻴﺎﻡ ‪ ،‬ﻣﺪﻳﺮ ﺗﺮﺍﻛﻨﺶ ﺩﺭ ﺳﺎﻳﺖ ﺗﻌﻴﻴﻦ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺁﻳﺎ ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﺮﺍﻛﻨﺶ ﺭﺍ ﻭﺍﮔﺬﺍﺭ‬
‫ﻛﻨﺪ‪ .‬ﺍﮔﺮ ﻧﺘﻮﺍﻧﺪ ﻭﺍﮔﺬﺍﺭ ﻛﻨﺪ‪ ،‬ﺛﺒﺖ >‪ <no T‬ﺭﺍ ﺑﻪ ﺛﺒﺖ ﺍﺿﺎﻓﻪ ﻣﻲ ﻛﻨﺪ ﻭ ﻭﭘﻴﺎﻡ ‪ abort T‬ﺭﺍ‬
‫ﺑﻪ ‪ Ci‬ﻣﻲ ﻓﺮﺳﺘﺪ ‪.‬ﺍﮔﺮ ﺗﺮﺍﻛﻨﺶ ﺑﺘﻮﺍﻧﺪ ﻭﺍﮔﺬﺍﺭ ﺷﻮﺩ ‪ ،‬ﺳﭙﺲ‪:‬‬

‫• ﺛﺒﺖ >‪ <ready T‬ﺭﺍ ﺑﻪ ﺛﺒﺖ ﺍﺿﺎﻓﻪ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫• ﺗﻤﺎﻣﻲ ﺛﺒﺖ ﻫﺎ ﺑﺮﺍﻱ ‪T‬ﺭﺍ ﻭﺍﺩﺍﺭ ﺑﻪ ﺫﺥﻳﺮﻩ ﺳﺎﺯﻱ ﺛﺎﺑﺖ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫• ﭘﻴﺎﻡ ‪ ready T‬ﺭﺍ ﺑﻪ ‪ Ci‬ﻣﻲ ﻓﺮﺳﺘﺪ‪.‬‬

‫ﻣﺮﺣﻠﻪ ‪ :2‬ﺛﺒﺖ ﺗﺼﻤﻴﻢ‬

‫‪ T ‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺯ ‪ Ci‬ﻣﺘﻌﻬﺪ ﺑﻪ ﭘﻴﺎﻡ ‪ ready T‬ﺩﺭﻳﺎﻓﺖ ﺷﺪﻩ ﺍﺯ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﺸﺎﺭﻛﺘﻲ‬
‫ﺷﻮﺩ‪ :‬ﺩﺭﻏﻴﺮﺍﻳﻨﺼﻮﺭﺕ ‪ T‬ﺑﺎﻳﺴﺘﻲ ﺑﻲ ﻧﺘﻴﺠﻪ ﺑﺎﺷﺪ‪.‬‬

‫‪ ‬ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺛﺒﺖ ﺗﺼﻤﻴﻢ ‪ , <commit T> or <abort T>,‬ﺭﺍ ﺑﻪ ﺛﺒﺖ ﺍﺿﺎﻓﻪ ﻣﻲ‬
‫ﻛﻨﺪ ﻭ ﺛﺒﺖ ﺭﺍ ﻭﺍﺩﺍﺭ ﺑﻪ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﻣﻘﺎﻭﻡ ﻣﻲ ﻛﻨﺪ ‪ .‬ﺑﻪ ﻫﻨﮕﺎﻡ ﺫﺧﻴﺮﻩ ﺱﺍﺯ ﻣﻘﺎﻭﻡ ﺛﺒﺖ ‪ ،‬ﻏﻴﺮ‬
‫ﻗﺎﺑﻞ ﻓﺴﺦ ﺍﺳﺖ)ﺣﺘﻲ ﺍﮔﺮ ﺷﻜﺴﺖ ﺭﻭﻱ ﺩﻫﺪ(‪.‬‬

‫)ﺗﻌﻬﺪ ﻳﺎ ﺑﻲ ﻧﺘﻴﺠﻪ ( ﻣﻲ‬ ‫‪ ‬ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﭘﻴﺎﻣﻲ ﺭﺍ ﺑﻪ ﻫﺮ ﺷﺮﻛﺖ ﻛﻨﻨﺪﻩ ﻣﻄﻠﻊ ﺍﺯ ﺗﺼﻤﻴﻢ‬
‫ﻓﺮﺳﺘﺪ ‪.‬‬

‫‪ ‬ﺷﺮﻛﺖ ﻛﻨﻨﺪﮔﺎﻥ ﻋﻤﻞ ﻣﻨﺎﺳﺐ ﺭﺍ ﺑﻪ ﻃﻮﺭ ﻣﺤﻠﻲ ﻣﻲ ﭘﺬﻳﺮﻧﺪ‪.‬‬

‫ﻣﺪﻝ ﻫﺎﻱ ﺟﺎﻳﮕﺰﻳﻦ ﭘﺮﺩﺍﺯﺵ ﺗﺮﺍﻛﻨﺶ‬


‫‪ ‬ﻣﻔﻬﻮﻡ ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﺘﻌﺪﺩ ﺩﺭﮔﺴﺘﺮﻩ ﻱ ﺗﺮﺍﻛﻨﺶ ﺧﺎﺹ ﺑﺮﺍﻱ ﭼﻨﺪﻳﻦ ﻛﺎﺭﺑﺮﺩ ﻧﺎﻣﻨﺎﺳﺐ ﺍﺳﺖ ‪.‬‬
‫ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺗﺮﺍﻛﻨﺶ ﻋﺒﻮﺭﻱ ﺍﺯ ﻣﺮﺯ ﺳﺎﺯﻣﺎﻧﻲ ‪ ،‬ﻫﻴﭻ ﺳﺎﺯﻣﺎﻧﻲ ﺗﻤﺎﻳﻠﻲ ﺑﻪ ﻣﺠﺎﺯ ﻛﺮﺩﻥ‬
‫ﻱ ﺩﻭﺭﻩ‬ ‫ﺗﺮﺍﻛﻨﺶ ﺑﻪ ﻃﻮﺭﺧﺎﺭﺟﻲ ﺷﺮﻭﻉ ﺷﺪﻩ ﺟﻬﺖ ﻣﺴﺪﻭﺩ ﻛﺮﺩﻥ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﺤﻠﻲ ﺑﺮﺍ‬
‫ﻧﺎﻣﻌﻴﻦ ﻧﺨﻮﺍﻫﺪ ﺩﺍﺷﺖ ‪.‬‬

‫‪122‬‬
‫‪ ‬ﻣﺪﻝ ﻫﺎﻱ ﺟﺎﻳﮕﺰﻳﻦ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺭﺍ ﺑﺎ ﻓﺮﺳﺘﺎﺩﻥ ﭘﻴﺎﻡ ﻫﺎ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ ‪ .‬ﻛﺪ ﺟﻬﺖ ﻧﮕﻪ ﺩﺍﺷﺘﻦ‬
‫ﭘﻴﺎﻡ ﻫﺎ ﺑﺎﻳﺴﺘﻲ ﺑﻪ ﺩﻗﺖ ﺟﻬﺖ ﺍﻃﻤﻴﻨﺎﻥ ﺩﻫﻲ ﻗﺎﺑﻠﻴﺖ ﺗﺪﺍﻭﻡ ﻭﻳﮋﮔﻲ ﻫﺎ ﺑﺮﺍﻱ ﺑﻪ ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎ‬
‫ﻃﺮﺍﺣﻲ ﺷﻮﺩ ‪ .‬ﺟﺪﺍﻳﻲ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺿﻤﺎﻧﺖ ﺷﻮﺩ ‪،‬ﺩﺭ ﻣﺮﺍﺣﻞ ﻣﻴﺎﻧﻲ ﻗﺎﺑﻞ ﻣﺸﺎﻫﺪﻩ ﺍﺳﺖ‪ ،‬ﺍﻣﺎ ﻛﺪ‬
‫ﺑﺎﻳﺴﺘﻲ ﻫﻴﭻ ﻧﺘﻴﺠﻪ ﻏﻴﺮﻣﺘﻨﺎﺳﺐ ﺑﻌﻠﺖ ﻫﻤﮕﺎﻫﻲ ﺭﺍ ﺍﻃﻤﻴﻨﺎﻥ ﺩﻫﺪ ‪ .‬ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﻴﺎﻡ ﺩﻫﻲ‬
‫ﺛﺎﺑﺖ‪ ،‬ﺳﻴﺴﺘﻢ ﻫﺎﻳﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﻣﻌﺎﻣﻼﺗﻲ ﺭﺍ ﺑﻪ ﭘﻴﺎﻡ ﻫﺎ ﺭﺍ ﺍﺭﺍﺋﻪ ﻣﻲ ﺩﻫﺪ ‪ .‬ﭘﻴﺎﻡ ﻫﺎ‬
‫ﺿﻤﺎﻧﺖ ﻣﻲ ﺷﻮﺩ ﺗﺎ ﺩﻗﻴﻘﺎ ﻳﻜﺒﺎﺭ ﺍﺭﺍﺋﻪ ﺷﻮﻧﺪ ‪.‬‬

‫‪ ‬ﻣﺜﺎﻝ‪ :‬ﺗﺤﺮﻳﻚ ﻛﻨﻨﺪﻩ ‪ :‬ﺍﻧﺘﻘﺎﻝ ﻭﺟﻮﻩ ﺑﻴﻦ ﻭﺍﮔﺬﺍﺭﻱ ﺩﻭ ﻣﺮﺣﻠﻪ ﺍﻱ ﺩﻭ ﺑﺎﻧﻚ ﭘﺘﺎﻧﺴﻴﻠﻲ ﺟﻬﺖ‬
‫ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ ﺩﺭ ﺣﺴﺎﺏ ﻫﺎﻱ ﺷﺎﻣﻞ ﺷﺪﻩ ﺩﺭ ﺍﻧﺘﻘﺎﻝ ﻭﺟﻮﻩ ﺧﻮﺍﻫﺪ ﺩﺍﺷﺖ ‪.‬‬
‫ﻣﺴﺪﻭﺩﻛﺮﺩﻥ ﺏ‬

‫• ﺭﺍﻩ ﺣﻞ ﺟﺎﻳﮕﺰﻳﻦ ‪:‬‬

‫– ﭘﻮﻝ ﺑﺪﻫﻲ ﺍﺯ ﻣﻨﺒﻊ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﺷﻮﺩ ﻭ ﭘﻴﺎﻣﻲ ﺭﺍ ﺑﻪ ﺳﺎﻳﺖ ﺩﻳﮕﺮ ﻣﻲ ﻓﺮﺳﺘﺪ ‪.‬‬

‫– ﺳﺎﻳﺖ ﭘﻴﺎﻡ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﻛﻨﺪ ﻭ ﺣﺴﺎﺏ ﻣﻘﺼﺪ ﺭﺍ ﺑﺴﺘﺎﻧﻜﺎﺭ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫• ﭘﻴﺎﻡ ﺩﻫﻲ ﺍﺯ ﻣﺪﺗﻬﺎ ﻗﺒﻞ )ﺣﺘﻲ ﻗﺒﻞ ﺍﺯ ﺍﺧﺘﺮﺍﻉ ﺭﺍﻳﺎﻧﻪ ﻫﺎ ( ﺑﺮﺍﻱ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﻣﻮﺿﻮﻉ ﺍﺗﻤﻴﺴﻴﺘﻲ‬

‫• ﺯﻣﺎﻧﻲ ﻛﻪ ﺗﺮﺍﻛﻨﺶ ﭘﻴﺎﻣﻲ ﺭﺍ ﻣﻲ ﻓﺮﺳﺘﺪ ‪ ،‬ﻭﺍﮔﺬﺍﺭ ﻣﻲ ﺷﻮﺩ ‪ .‬ﭘﻴﺎﻡ ﺑﺎﻳﺴﺘﻲ ﺑﺮﺍﻱ ﺍﺭﺍﺋﻪ‬
‫ﺿﻤﺎﻧﺖ ﺷﻮﺩ‪.‬‬

‫ﺭﻱ ﭘﻴﺎﻡ ﻫﺎﻱ ﻳﺮ‬ ‫ﺿﻤﺎﻧﺖ ﻣﺎﺩﺍﻣﻲ ﻛﻪ ﺳﺎﻳﺖ ﻣﻘﺼﺪ ﺑﻪ ﺭﻭﺯ ﻭ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺍﺳﺖ‪ ،‬ﻛﺪ ﺟﻬﺖ ﻧﮕﻬﺪﺍ‬
‫ﻗﺎﺑﻞ ﺗﺤﻮﻳﻞ ﺑﺎﻳﺴﺖﻱ ﻫﻤﭽﻨﻴﻦ ﺩﺭﺩﺳﺘﺮﺱ ﺑﺎﺷﺪ‪.‬‬

‫ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪ :‬ﭘﻮﻝ ﺍﻋﺘﺒﺎﺭ ﺑﺮﮔﺸﺘﻲ ﺑﻪ ﺣﺴﺎﺏ ﻣﻨﺒﻊ ‪ :‬ﺍﮔﺮ ﻓﺮﺳﺘﺎﺩﻥ ﺗﺮﺍﻛﻨﺶ ﺑﻲ ﻧﺘﻴﺠﻪ ﺷﻮﺩ ‪،‬ﭘﻴﺎﻡ‬
‫ﻧﺒﺎﻳﺪ ﻓﺮﺳﺘﺎﺩﻩ ﺷﻮﺩ‪.‬‬

‫‪123‬‬
‫ﻣﺪﻳﺮ ﻣﺎﻧﻊ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‬
‫∆ ﺩﺭ ﺍﻳﻦ ﺭﻭﻳﻜﺮﺩ‪ ،‬ﻋﻤﻠﻜﺮﺩ ﻗﻔﻞ ﺗﻮﺳﻂ ﻣﺪﻳﺮﺍﻥ ﻣﺎﻧﻊ ﺩﺭ ﻫﺮ ﺳﺎﻳﺖ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ ‪ .‬ﻣﺪﻳﺮﺍﻥ ﻣﺎﻧﻊ‬
‫ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺍﻗﻼﻡ ﺩﺍﺩﻩ ﻣﺤﻠﻲ ﺭﺍ ﻛﻨﺘﺮﻝ ﻣﻲ ﻛﻨﻨﺪ ‪ .‬ﺍﻣﺎ ﻛﻨﺘﺮﻝ ﻫﺎﻱ ﺧﺎﺹ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺮﺍﻱ‬
‫ﺗﻜﺮﺍﺭﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪.‬‬

‫∆ ﻣﺰﻳﺖ ‪ :‬ﻛﺎﺭ ﺗﻮﺯﻳﻊ ﻣﻲ ﺷﻮﺩ ﻭ ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﺷﻜﺴﺖ ﻫﺎ ﺟﺪﻱ ﺍﻧﺠﺎﻡ ﺷﻮﺩ ‪.‬‬

‫∆ ﻋﻴﺐ ‪ :‬ﺷﻨﺎﺳﺎﻳﻲ ﻭﻗﻔﻪ ﺩﺷﻮﺍﺭﺗﺮ ﺍﺳﺖ ‪.‬‬

‫∆ ﭼﻨﺪﻳﻦ ﺗﻐﻴﻴﺮ ﺑﻪ ﺍﻳﻦ ﺭﻭﻳﻜﺮﺩ ‪ :‬ﺭﻭﻧﻮﺷﺖ ﺍﻭﻟﻴﻪ‪ ،‬ﭘﺮﻭﺗﻜﻞ ﺍﻛﺜﺮﻳﺖ‪ ،‬ﭘﺮﻭﺗﻜﻞ ﺑﺎﻳﺎﺱ ﺷﺪﻩ ﻭ ﻣﻮﺍﻓﻘﺖ‬
‫ﻋﻤﻮﻣﻲ ﺣﺪﻧﺼﺎﺏ‬

‫ﺭﻭﻧﻮﺷﺖ ﺍﻭﻟﻴﻪ‬
‫ﻳﻚ ﻛﭙﻲ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ ﺗﺎ ﺭﻭﻧﻮﺷﺖ ﺍﻭﻟﻴﻪ ﺑﺎﺷﺪ ‪ .‬ﺳﺎﻳﺖ ﺷﺎﻣﻞ ﻛﭙﻲ ﺳﺎﻳﺖ ﺍﻭﻟﻴﻪ ﺑﺮﺍﻱ ﺁﻥ‬
‫ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺁﻳﺘﻢ ﻫﺎﻱ ﻣﺘﻔﺎﻭﺕ ﺩﺍﺩﻩ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺳﺎﻳﺖ ﻫﺎﻱ ﺍﻭﻟﻴﻪ ﻣﺘﻔﺎﻭﺕ ﺩﺍﺷﺘﻪ‬
‫ﺑﺎﺷﻨﺪ‪ .‬ﺯﻣﺎﻧﻲ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺴﺘﻲ ﺁﻳﺘﻢ ‪ Q‬ﺩﺍﺩﻩ ﺭﺍ ﻣﺴﺪﻭﺩ ﻛﻨﺪ‪،‬ﻗﻔﻞ ﻱ ﺩﺭ ﺳﺎﻳﺖ ﺍﻭﻟﻴﻪ ‪ Q‬ﺭﺍ‬
‫ﺩﺭﺧﻮﺍﺳﺖ ﻣﻲ ﻛﻨﺪ‪ .‬ﺑﻄﻮﺭ ﺿﻤﻨﻲ ﺩﺭ ﺗﻤﺎﻣﻲ ﺗﻜﺮﺍﺭﻫﺎﻱ ﺍﻳﺘﻢ ﺩﺍﺩﻩ ﻣﺴﺪﻭﺩ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫• ﻓﺎﻳﺪﻩ‪ :‬ﻛﻨﺘﺮﻝ ﻫﻤﺰﻣﺎﻥ ﺩﺍﺩﻩ ﺗﻜﺮﺍﺭﺷﺪﻩ ﺑﻪ ﺳﺎﺩﮔﻲ ﺑﻪ ﺍﺟﺮﺍﻱ ﺳﺎﺩﻩ‪ -‬ﺩﺍﺩﻩ ﺗﻜﺮﺍﺭﻧﺸﺪﻩ ﻧﮕﻪ ﺩﺍﺷﺘﻪ‬
‫ﻣﻲ ﺷﻮﺩ‪.‬‬

‫• ﻋﻴﺐ‪ :‬ﺍﮔﺮ ﺳﺎﻳﺖ ﺍﻭﻟﻴﻪ ‪ Q‬ﻣﻮﻓﻖ ﻧﺸﻮﺩ‪ Q ،‬ﻏﻴﺮﻗﺎﺑﻞ ﺩﺱﺗﺮﺳﻲ ﺍﺳﺖ ﺣﺘﻲ ﮔﺮﭼﻪ ﺩﻳﮕﺮ ﺳﺎﻳﺖ‬
‫ﻫﺎﻱ ﺷﺎﻣﻞ ﻳﻚ ﻛﭙﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺑﺎﺷﻨﺪ ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﺍﻛﺜﺮﻳﺖ‬
‫ﻣﺪﻳﺮ ﻗﻔﻞ ﻣﺤﻠﻲ ﺩﺭ ﻫﺮ ﺳﺎﻳﺖ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺑﺪﻭﻥ ﻗﻔﻞ ﻭ ﻗﻔﻞ ﺭﺍ ﺑﺮﺍﻱ ﺁﻳﺘﻢ ﻫﺎﻱ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺩﺭ‬
‫ﺳﺎﻳﺖ ﺍﺟﺮﺍ ﻣﻲ ﻛﻨﺪ ‪ .‬ﺯﻣﺎﻧﻲ ﻛﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺗﻤﺎﻳﻞ ﺑﻪ ﻗﻔﻞ ﺍﻳﺘﻢ ‪ Q‬ﺩﺍﺩﻩ ﻛﭙﻲ ﻧﺸﺪﻩ ﺑﺎﻗﻲ ﻣﺎﻧﺪﻩ ﺩﺭ‬
‫ﺳﺎﻳﺖ ‪ Si‬ﺩﺍﺭﺩ‪ ،‬ﭘﻴﺎﻣﻲ ﺑﻪ ﻣﺪﻳﺮ ﻗﻔﻞ ‪ Si‬ﻓﺮﺳﺘﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺍﮔﺮ ‪ Q‬ﺩﺭ ﺣﺎﻟﺖ ﻧﺎﺳﺎﺯﮔﺎﺭ ﻣﺴﺪﻭﺩ ﺷﻮﺩ ‪،‬‬
‫ﺳﭙﺲ ﺩﺭﺧﻮﺍﺳﺖ ﺗﺎ ﺯﻣﺎﻧﻲ ﻛﻪ ﺑﺘﻮﺍﻧﺪ ﺍﻋﻄﺎ ﺷﻮﺩ ‪ ،‬ﺑﻪ ﺗﺎﺧﻴﺮ ﻣﻲ ﺍﻓﺘﺪ ‪ .‬ﺯﻣﺎﻧﻴﻜﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻗﻔﻞ ﻣﻲ ﺗﻮﺍﻧﺪ‬

‫‪124‬‬
‫ﺍﻋﻄﺎ ﺷﻮﺩ ﻣﺪﻳﺮ ﻗﻔﻞ ﭘﻴﺎﻣﻲ ﺭﺍ ﺑﻪ ﺁﻏﺎﺯﮔﺮ ﺑﺎﺯﭘﺲ ﻣﻲ ﻓﺮﺳﺘﺪ ؛ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ ﻛﻪ ﺩﺭﺧﻮﺍﺳﺖ ﻗﻔﻞ ﺍﻋﻄﺎ‬
‫ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫ﺩﺭﻣﻮﺭﺩ ﺩﺍﺩﻩ ﻛﭙﻲ ﺷﺪﻩ ‪ :‬ﺍﮔﺮ ‪ Q‬ﺩﺭ ‪ n‬ﺳﺎﻳﺖ ﻛﭙﻲ ﺷﻮﺩ ‪ ،‬ﺳﭙﺲ ﭘﻴﺎﻡ ﺩﺭﺧﻮﺍﺳﺖ ﻗﻔﻞ ﺑﺎﻳﺴﺘﻲ‬
‫ﺑﻪ ﺑﻴﺶ ﺍﺯﻧﻴﻤﻲ ﺍﺯ ‪ n‬ﺳﺎﻳﺖ ﻓﺮﺳﺘﺎﺩﻩ ﺷﻮﺩ ﻛﻪ ﺩﺭ ﺍﻥ ‪ Q‬ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﺩ‪ .‬ﺗﺮﺍﻛﻨﺶ ﺩﺭ ‪ Q‬ﻋﻤﻞ‬
‫ﻧﻤﻲ ﻛﻨﺪ ﺗﺎ ﺯﻣﺎﻧﻴﻜﻪ ﻗﻔﻞ ﺩﺭ ﺍﻛﺜﺮﻳﺖ ﺗﻜﺮﺍﺭﻫﺎﻱ ‪ Q‬ﺭﺍ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻩ ﺑﺎﺷﺪ ‪ .‬ﺑﻪ ﻫﻨﮕﺎﻡ ﻧﻮﺷﺘﻦ‬
‫ﺁﻳﺘﻢ ﺩﺍﺩﻩ ‪،‬ﺗﺮﺍﻛﻨﺶ ﺛﺒﺖ ﻫﺎﻳﻲ ﺭﺍ ﺩﺭ ﺗﻤﺎﻣﻲ ﺗﻜﺮﺍﺭﻫﺎ ﺍﻧﺠﺎﻡ ﻣﻲ ﺩﻫﺪ ‪.‬‬

‫‪ .‬ﺟﺰﺋﻴﺎﺕ‬ ‫ﻓﺎﻳﺪﻩ ‪ :‬ﺣﺘﻲ ﺯﻣﺎﻧﻲ ﻛﻪ ﭼﻨﺪ ﺳﺎﻳﺖ ﺩﺭﺩﺳﺘﺮﺱ ﻧﻤﻲ ﺑﺎﺷﺪ‪ ،‬ﻣﻴﺘﻮﺍﻧﺪ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‬
‫ﺩﺭﺑﺎﺭﻩ ﭼﮕﻮﻧﮕﻲ ﻧﮕﻬﺪﺍﺭﻱ ﺛﺒﺖ ﻫﺎ ﺩﺭ ﺣﻀﻮﺭ ﺷﻜﺴﺖ ﺳﺎﻳﺖ ﺑﻌﺪﺍ ﺍﺭﺍﺋﻪ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﻋﻴﺐ ‪ :‬ﺑﻪ )‪ 2(n/2 + 1‬ﭘﻴﺎﻡ ﺑﺮﺍﻱ ﻧﮕﻪ ﺩﺍﺷﺘﻦ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﻗﻔﻞ ﻭ )‪(n/2 + 1‬ﭘﻴﺎﻡ ﺑﺮﺍﻱ‬
‫ﻧﮕﻪ ﺩﺍﺷﺘﻦ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﻏﻴﺮﻣﺴﺪﻭﺩ ﻧﻴﺎﺯ ﺩﺍﺭﺩ ‪ .‬ﺍﻣﻜﺎﻥ ﺑﺎﻟﻘﻮﻩ ﺍﻱ ﺑﺮﺍﻱ ﻭﻗﻔﻪ ﺣﺘﻲ ﺑﺎ ﺁﻳﺘﻢ‬
‫ﺧﺎﺹ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ‪ ،‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻫﺮ ﻳﻚ ﺍﺯ ﺳﻪ ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﺍﺳﺖ ﻗﻔﻞ ﻫﺎﻳﻲ ﺩﺭ ‪1/3rd‬‬
‫ﺗﻜﺮﺍﺭﻫﺎﻱ ﺩﺍﺩﻩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ‪.‬‬

‫ﭘﺮﻭﺗﻜﻞ ﺑﺎﻳﺎﺱ ﺷﺪﻩ‬


‫ﻣﺪﻳﺮ ﻗﻔﻞ ﻣﺤﻠﻲ ﺩﺭ ﻫﺮ ﺳﺎﻳﺖ ﻫﻤﺎﻧﻨﺪ ﭘﺮﺭﻭﺗﻜﻞ ﺍﻛﺜﺮﻳﺖ‪ ،‬ﺑﺎﻭﺟﻮﺩ ﺍﻳﻦ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎ ﺑﺮﺍﻱ ﻗﻔﻞ ﻫﺎﻱ‬
‫ﻣﺸﺘﺮﻙ ﻣﺘﻔﺎﻭﺕ ﺍﺯ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎ ﺑﺮﺍﻱ ﻗﻔﻞ ﻫﺎﻱ ﺍﻧﺤﺼﺎﺭﻱ ﻧﮕﻪ ﺩﺍﺷﺘﻪ ﻣﻲ ﺷﻮﺩ ‪ .‬ﻗﻔﻞ ﻫﺎﻱ ﻣﺸﺘﺮﻙ‬
‫ﺯﻣﺎﻧﻴﻜﻪ ﻳﻚ ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺴﺘﻲ ﺁﻳﺘﻢ ‪ Q‬ﺩﺍﺩﻩ ﺭﺍ ﻣﺴﺪﻭﺩ ﻛﻨﺪ ‪ ،‬ﻓﻘﻂ ﻗﻔﻠﻲ ﺑﺮ ‪ Q‬ﺍﺯ ﻣﺪﻳﺮ ﻗﻔﻞ ﺩﺭ ﻳﻚ‬
‫ﺳﺎﻳﺖ ﻣﺤﺘﻮﻱ ﻛﭙﻲ ‪ Q‬ﺭﺍ ﺩﺭﺧﻮﺍﺳﺖ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫ﻗﻔﻞ ﻫﺎﻱ ﺍﻧﺤﺼﺎﺭﻱ ‪ :‬ﺯﻣﺎﻧﻴﻜﻪ ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺴﺘﻲ ﺁﻳﺘﻢ ‪ Q‬ﺩﺍﺩﻩ ﺭﺍ ﻣﺴﺪﻭﺩ ﻛﻨﺪ ‪،‬ﻗﻔﻞﻱ ﺑﺮ ‪ Q‬ﺍﺯ‬
‫ﻣﺪﻳﺮ ﻗﻔﻞ ﺩﺭ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﺤﺘﻮﻱ ﻛﭙﻲ ‪ Q‬ﺭﺍ ﺩﺭﺧﻮﺍﺳﺖ ﻣﻲ ﻛﻨﺪ‬

‫ﻣﺰﻳﺖ‪ :‬ﺳﺮﺑﺎﺭ ﻛﻤﺘﺮﻱ ﺑﺮ ﻋﻤﻠﻴﺎﺕ ﺧﻮﺍﻧﺪﻧﻲ ﺭﺍ ﺗﺤﻤﻴﻞ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫ﻋﻴﺐ‪ :‬ﺳﺮﺑﺎﺭ ﺍﺿﺎﻓﻲ ﺑﺮ ﺛﺒﺖ ﻫﺎ‬

‫‪125‬‬
‫ﭘﺮﻭﺗﻜﻞ ﻣﻮﺍﻓﻘﺖ ﻋﻤﻮﻣﻲ ﺣﺪﻧﺼﺎﺏ‬
‫ﻋﻤﻮﻡﺍ ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﺍﻛﺜﺮﻳﺖ ﻭ ﺑﺎﻳﺎﺱ ﺷﺪﻩ ﻫﺮ ﺳﺎﻳﺖ ﺑﺎ ﻳﻚ ﻭﺯﻥ ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺍﺟﺎﺯﻩ ﺩﻫﻴﺪ ‪ S‬ﻭﺯﻥ‬
‫ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎ ﺑﺎﺷﺪ ‪ .‬ﺩﻭﻣﻘﺪﺍﺭﺣﺪﻧﺼﺎﺏ ﺧﻮﺍﻧﺪﻧﻲ ‪ Qr‬ﻭ ﺣﺪﻧﺼﺎﺏ ﺛﺒﺖ ‪ Qw‬ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﻴﺪ ‪.‬‬
‫ﭼﻨﺎﻧﭽﻪ ‪ Qr + Qw > S‬ﻭ ‪ ، 2 * Qw > S‬ﺣﺪﻧﺼﺎﺏ ﻫﺎ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﻃﻮﺭ ﻣﺠﺰﺍ ﺑﺮﺍﻱ ﻫﺮ ﺁﻳﺘﻢ‬
‫ﺍﻧﺘﺨﺎﺏ ﺷﻮﺩ )ﻭ ‪ S‬ﻣﺤﺎﺳﺒﻪ ﺷﻮﺩ (‪ ،‬ﻫﺮ ﺧﻮﺍﻧﺪﻥ ﺑﺎﻳﺪ ﺗﻜﺮﺍﺭﻫﺎﻱ ﻛﺎﻓﻲ ﺭﺍ ﻣﺴﺪﻭﺩﻛﻨﺪ ﻛﻪ ﻣﺠﻤﻮﻉ ﻭﺯﻥ‬
‫ﻫﺎﻱ ﺳﺎﻳﺖ ﺑﻴﺸﺘﺮ ﻳﺎ ﻣﺴﺎﻭﻱ ‪ Qr‬ﺍﺳﺖ‪ .‬ﻫﺮ ﺧﻮﺍﻧﺪﻥ ﺑﺎﻳﺪ ﺗﻜﺮﺍﺭﻫﺎﻱ ﻛﺎﻓﻲ ﺭﺍ ﻣﺴﺪﻭﺩﻛﻨﺪ ﻛﻪ ﻣﺠﻤﻮﻉ‬
‫ﻭﺯﻥ ﻫﺎﻱ ﺳﺎﻳﺖ ﺑﻴﺸﺘﺮ ﻳﺎ ﻣﺴﺎﻭﻱ ‪ Qw‬ﺍﺳﺖ‪ .‬ﺩﺭ ﺣﺎﻝ ﺣﺎ ﺿﺮ ﻓﺮﺽ ﻣﻲ ﻛﻨﻴﻢ ﻛﻪ ﺗﻤﺎﻣﻲ ﺗﻜﺮﺍﺭﻫﺎ‬
‫ﻣﻜﺘﻮﺏ ﻣﻲ ﺑﺎﺷﺪ ‪ .‬ﺑﺴﻂ ﻫﺎﻳﻲ ﺟﻬﺖ ﻣﺠﺎﺯ ﻛﺮﺩﻥ ﭼﻨﺪ ﺳﺎﻳﺖ ﺑﺎ ﺭﺍﻱ ﻏﻴﺮ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺱ ﺑﻮﺩﻥ ﺑﻌﺪﺍ‬
‫ﺗﻮﺻﻴﻒ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ‬
‫ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻛﻨﺘﺮﻝ ﻫﻤﮕﺎﻫﻲ ﻣﺒﺘﻨﻲ ﺑﺮﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﺷﻮﺩ‪ .‬ﻫﺮ ﺗﺮﺍﻛﻨﺶ ﺑﺎﻳﺴﺘﻲ ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩﻱ ﺭﺍ ﺍﺭﺍﺋﻪ ﺩﻫﺪ ‪.‬‬

‫ﻣﺸﻜﻞ ﺍﺻﻠﻲ ‪ :‬ﭼﮕﻮﻧﮕﻲ ﺍﻳﺠﺎﺩ ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ ﺩﺭ ﺣﺎﻟﺖ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‬

‫– ﻫﺮ ﺳﺎﻳﺖ ﻧﺸﺎﻥ ﺯﻡ ﺍ ﻧﻲ ﻣﺤﻠﻲ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩﻱ ﺭﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺷﻤﺎﺭﺷﮕﺮ ﻣﻨﻄﻘﻲ ﻳﺎ‬


‫ﻗﻔﻞ ﻣﺤﻠﻲ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫– ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﺟﻬﺎﻧﻲ ﺑﺎ ﺍﻟﺤﺎﻕ ﻛﺮﺩﻥ ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ ﻣﺤﻠﻲ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ‬
‫ﺑﺎ ﺷﻨﺎﺳﺎﮔﺮ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﺑﺪﺳﺖ ﻣﻲ ﺁﻳﺪ‪.‬‬

‫‪126‬‬
‫ﺳﺎﻳﺘﻲ ﺑﺎ ﺳﺎﻋﺖ ﺁﻫﺴﺘﻪ ﻧﺸﺎﻥ ﻫﺎﻱ ﺯ ﻣﺎﻧﻲ ﻛﻮﭼﺘﺮ ﺭﺍ ﺗﻌﻴﻴﻦ ﺧﻮﺍﻫﺪ ﻛﺮﺩ ‪ .‬ﺍﻣﺎ ﺍﺯ ﻝﺣﺎﻅ ﻣﻨﻄﻘﻲ ﺩﺭﺳﺖ ‪:‬‬
‫ﻫﻨﻮﺯﻗﺎﺑﻠﻴﺖ ﺳﺮﻳﺎﻟﻲ ﺷﺪﻥ ﺗﺤﺖ ﺗﺎﺛﻴﺮ ﻧﻴﺴﺖ ‪.‬‬

‫ﺟﻬﺖ ﺗﺜﺒﻴﺖ ﺍﻳﻦ ﻣﺸﻚﻝ ‪:‬‬

‫♦ ﺩﺭ ﻣﺤﺪﻭﺩﻩ ﻫﺮ ﺳﺎﻳﺖ ‪ Si‬ﺳﺎﻋﺖ ﻣﻨﻄﻘﻲ )‪ (LCi‬ﺭﺍ ﺗﻌﺮﻳﻒ ﻛﻨﻴﺪ ﻛﻪ ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ ﻣﺤﻠﻲ‬
‫ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩﻱ ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫♦ ﻧﻴﺎﺯ ﺩﺍﺭﺩ ﻛﻪ ‪ Si‬ﭘﻴﺸﺎﭘﻴﺶ ﺳﺎﻋﺖ ﻣﻨﻄﻘﻲ ﺍﺵ ﺩﺭ ﻫﺮ ﺟﺎﻳﻲ ﺑﺎﺷﺪ ﻛﻪ ﺩﺭﺧﻮﺍﺳﺘﻲ ﺍﺯ‬


‫ﺗﺮﺍﻛﻨﺶ ‪ Ti‬ﺑﺎ ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ >‪ < x,y‬ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﺷﻮﺩ ﻭ ‪ x‬ﺑﻴﺸﺘﺮ ﺍﺯ ﻣﻘﺪﺍﺭ ﻛﻨﻮﻧﻲ‬
‫‪ LCi‬ﺍﺱﺕ ‪.‬‬

‫♦ ﺩﺭ ﺍﻳﻦ ﻣﻮﺭﺩ ‪ ،‬ﺳﺎﻳﺖ ﺍﺯ ﺳﺎﻋﺖ ﻣﻨﻄﻘﻲ ﺍﺵ ﺑﻪ ﻣﻘﺪﺍﺭ ‪ x + 1‬ﭘﻴﺸﺮﻭﻱ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫ﺗﻜﺮﺍﺭ ﺑﺎ ﺳﺎﺯﮔﺎﺭﻱ ﺿﻌﻴﻒ‬


‫ﭼﻨﺪﻳﻦ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﺠﺎﺭﻱ ﺗﻜﺮﺍﺭ ﺩﺍﺩﻩ ﺑﺎ ﺩﺭﺟﻪ ﻫﺎﻱ ﺿﻌﻴﻒ ﺳﺎﺯﮔﺎﺭﻱ )ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺑﺪﻭﻥ ﺿﻤﺎﻧﺖ‬
‫ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎ ﺩﺭ ﻓﺎﻳﻞ‬
‫ﻗﺎﺑﻠﻴﺖ ﺳﺮﻳﺎﻟﻲ ( ﺭﺍ ﺣﻤﺎﻳﺖ ﻣﻲ ﻛﻨﺪ ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺗﻜﺮﺍﺭ ﺍﺻﻠﻲ ‪ /‬ﺩﻧﺒﺎﻟﻪ ﺭﻭ ‪ :‬ﺏ‬
‫ﺍﺻﻠﻲ ﺧﺎﺹ ﻡﻱ ﺷﻮﺩ ﻭ ﺑﻪ ﺳﺎﻳﺖ ﻫﺎﻱ ﺩﻧﺒﺎﻟﻪ ﺭﻭ ﭘﺨﺶ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﻛﭙﻲ ﻫﺎ ﺑﺎﻳﺴﺘﻲ ﺭﻭﻧﻮﺷﺖ ﻟﺤﻈﻪ ﺍﻱ ﺳﺎﺯﮔﺎﺭ ﺑﺎ ﺗﺮﺍﻛﻨﺶ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺭﺍ ﻣﺸﺎﻫﺪﻩ ﻛﻨﻨﺪ ‪ .‬ﻳﻌﻨﻲ ﺣﺎﻟﺘﻲ‬
‫ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﺎﺯﺗﺎﺏ ﺩﻫﻨﺪﻩ ﺗﻤﺎﻣﻲ ﺍﺛﺮﺍﺕ ﺗﻤﺎﻣﻲ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﺗﺎ ﭼﻨﺪ ﻣﺮﺣﻠﻪ ﺩﺭ ﺗﺮﺗﻴﺐ ﺳﺮﻳﺎﻟﻲ ﻭ‬
‫ﻫﻴﭻ ﺗﺎﺙﻳﺮﻱ ﺍﺯ ﺩﻳﮕﺮ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻱ ﺑﻌﺪﻱ ‪ ،‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪ :‬ﺍﻭﺭﺍﻛﻞ ﺟﻤﻠﻪ ﺍﻳﺠﺎﺩ ﺭﻭﻧﻮﺷﺖ ﻟﺤﻈﻪ ﺍﻱ ﺭﺍ‬
‫ﺑﺮﺍﻱ ﺍﻳﺠﺎﺩ ﺭﻭﻧﻮﺷﺖ ﻟﺤﻈﻪ ﺍﻱ ﺍﺯ ﻳﻚ ﺍﺭﺗﺒﺎﻁ ﻳﺎ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺍﺭﺗﺒﺎﻃﺎﺕ ﺩﺭ ﺳﺎﻳﺖ ﺩﻭﺭ ﻓﺮﺍﻫﻢ ﻣﻲ‬
‫ﺁﻭﺭﺩ‪ .‬ﺭﻭﻧﻮﺷﺖ ﻟﺤﻈﻪ ﺍﻱ ﺑﺎ ﻣﺤﺎﺳﺒﻪ ﻣﺠﺪﺩ ﻳﺎ ﺑﺎ ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﺍﻓﺰﺍﻳﺸﻲ ﻣﺠﺪﺩﺍ ﺗﺎﺯﻩ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪127‬‬
‫ﮔﺮﺩﺍﻧﺶ ﺑﻦ ﺑﺴﺖ‬
‫ﺩﻭ ﺗﺮﺍﻛﻨﺶ ﺯﻳﺮ ﻭ ﭘﻴﺸﻴﻨﻪ ﺍﻱ ﺑﺎ ﺁﻳﺘﻢ ‪ X‬ﻭ ﺗﺮﺍﻛﻨﺶ‪ T1‬ﺩﺭﺳﺎﻳﺖ ‪ 1‬ﻭ ﺁﻳﺘﻢ ‪ y‬ﻭ ﺗﺮﺍﻛﻨﺶ ‪T2‬ﺩﺭ ﺳﺎﻳﺖ‬
‫‪2‬ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪.‬‬

‫ﻧﺘﻴﺠﻪ ‪ :‬ﺑﻦ ﺑﺴﺘﻲ ﻛﻪ ﻧﻤﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﻃﻮﺭ ﻣﺤﻠﻲ ﺩﺭ ﻫﺮ ﺳﺎﻳﺖ ﺷﻨﺎﺳﺎﻳﻲ ﺷﻮﺩ ‪.‬‬

‫ﭘﻴﻜﺮﺑﻨﺪﻱ ﻣﺠﺪﺩ‬
‫ﻣﺘﻮﻗﻒ ﻛﺮﺩﻥ ﺗﻤﺎﻣﻲ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻛﻪ ﺩﺭ ﺳﺎﻳﺖ ﺧﺮﺍﺏ ﺷﺪﻩ ﻓﻌﺎﻝ ﺑﻮﺩ ‪ .‬ﺍﻧﺘﻈﺎﺭ ﺁﻧﻬﺎ ﻣﻲ ﺗﻮﺍﻧﺴﺖ ﺑﺎ‬
‫ﺩﻳﮕﺮ ﺗﺮﺍﻛﻨﺶ ﻫﺎ ﻣﺪﺍﺧﻠﻪ ﻛﻨﺪ ﭼﺮﺍ ﻛﻪ ﺁﻧﻬﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﻗﻔﻞ ﻫﺎﻳﻲ ﺑﻪ ﺩﻳﮕﺮ ﺳﺎﻳﺖ ﻫﺎ ﺭﺍ ﻧﮕﻪ ﺩﺍﺭﻧﺪ ‪ .‬ﺑﺎ‬
‫ﻭﺟﻮﺩ ﺍﻳﻦ ﺩﺭ ﻣﻮﺭﺩﻱ ﻛﻪ ﻓﻘﻂ ﭼﻨﺪ ﻛﭙﻲ ﺍﺯ ﻳﻚ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺷﻜﺴﺖ ﻣﻲ ﺧﻮﺭﺩ ‪ ،‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺟﻬﺖ‬
‫ﺍﺩﺍﻣﻪ ﺩﺍﺩﻥ ﺗﺮﺍﻛﻨﺶ ﻫﺎﻳﻲ ﻋﻤﻠﻲ ﻭ ﻣﻤﻜﻦ ﺑﺎﺷﺪ ﻛﻪ ﺩﺭ ﺳﺎﻳﺖ ﺧﺮﺍﺏ ﺷﺪﻩ ﺑﻪ ﺩﺍﺩﻩ ﺩﺳﺖ ﻳﺎﻓﺘﻪ ﺍﺳﺖ ‪.‬‬
‫ﺍﮔﺮ ﺍﻳﺘﻢ ﻫﺎﻱ ﺩﺍﺩﻩ ﺗﻜﺮﺍﺭ ﺷﺪﻩ ﺩﺭ ﺳﺎﻳﺖ ﺧﺮﺍﺏ ﺷﺪﻩ ﺑﺎﺷﺪ ‪،‬ﻛﺎﺗﺎﻟﻮگ ﺳﻴﺴﺘﻢ ﺟﻬﺖ ﺭﻓﻊ ﺍﻧﻬﺎ ﺍﺯ ﻟﻴﺴﺖ‬
‫ﻛﭙﻲ ﻫﺎ ﺑﻪ ﺭﻭﺯ ﻣﻲ ﺷﻮﺩ‪ .‬ﺯﻣﺎﻧﻲ ﻛﻪ ﺳﺎﻳﺖ ﺧﺮﺍﺏ ﺷﺪﻩ ﺑﻬﺒﻮﺩ ﻣﻲ ﻳﺎﺑﺪ ‪ ،‬ﺑﺎﻳﺴﺘﻲ ﺑﺮﻋﻜﺲ ﺷﻮﺩ ﺍﻣﺎ ﺩﻗﺖ‬
‫ﺍﺿﺎﻓﻲ ﺑﺎﻳﺴﺘﻲ ﺑﺮﺍﻱ ﺑﻪ ﺭﻭﺯ ﻛﺮﺩﻥ ﻣﻘﺎﺩﻳﺮ ﺍﻧﺠﺎﻡ ﺷﻮﺩ ‪ .‬ﺍﮔﺮ ﺳﺎﻳﺖ ﺧﺮﺍﺏ ﺵﺩﻩ ﺳﺮﻭﺭ ﻣﺮﻛﺰﻱ ﺑﺮﺍﻱ ﭼﻨﺪ‬
‫ﺳﻴﺴﺘﻢ ﺑﺎﺷﺪ ﺟﻬﺖ ﺗﻌﻴﻴﻦ ﺳﺮﻭﺭ ﺟﺪﻳﺪ ﺑﺎﻳﺴﺘﻲ ﮔﺰﻳﻨﺶ ﺩﺍﺷﺖ ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺳﺮﻭﺭ ﻧﺎﻡ ‪ ،‬ﻫﻤﺎﻫﻨﮓ‬
‫ﻛﻨﻨﺪﻩ ﻫﻤﮕﺎﻫﻲ ‪،‬ﺷﻨﺎﺳﺎﻳﻲ ﻛﻨﻨﺪﻩ ﺑﻦ ﺑﺴﺖ ﺟﻬﺎﻧﻲ ‪.‬‬

‫‪128‬‬
‫ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ﺍﻓﺮﺍﺯ ﻛﺮﺩﻥ ﺷﺒﻜﻪ ﻣﻤﻜﻦ ﻧﻴﺴﺖ ﺍﺯ ﺷﻜﺴﺖ ﺳﺎﻳﺖ ﻗﺎﺑﻞ ﺗﺸﺨﻴﺺ ﺑﺎﺷﺪ ‪ ،‬ﻣﻮﻗﻌﻴﺖ ﻫﺎﻱ ﺯﻳﺮ‬
‫ﺑﺎﻳﺴﺘﻲ ﺍﺟﺘﻨﺎﺏ ﺷﻮﺩ‪:‬‬

‫♦ ﺩﻭ ﻳﺎ ﭼﻨﺪ ﺳﺮﻭﺭ ﻣﺮﻛﺰﻱ ﺍﻧﺘﺨﺎﺏ ﺷﺪﻩ ﺩﺭ ﺍﻓﺮﺍﺯ ﻫﺎﻱ ﻣﺠﺰﺍﻭ ﻣﺸﺨﺺ ‪.‬‬

‫♦ ﺑﻴﺶ ﺍﺯ ﻳﻚ ﺍﻓﺮﺍﺯ ‪،‬ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺗﻜﺮﺍﺭ ﺷﺪﻩ ﺭﺍ ﺑﻪ ﺭﻭﺯ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫ﺭﻭﺯﺭﺳﺎﻧﻲ ﻫﺎ ﺑﺎﻳﺴﺘﻲ ﻗﺎﺩﺭ ﺑﻪ ﺍﺩﺍﻣﻪ ﺩﺍﺩﻥ ﺑﺎﺷﺪ ﺣﺘﻲ ﺍﮔﺮ ﭼﻨﺪ ﺳﺎﻳﺖ ﺍﺯﻛﺎﺭﺍﻓﺘﺎﺩﻩ ﺑﺎﺷﺪ ‪.‬‬
‫ﺏ‬

‫ﺭﺍﻩ ﺣﻞ ‪ :‬ﺭﻭﻳﻜﺮﺩ ﻣﺒﺘﻨﻲ ﺑﺮ ﺍﻛﺜﺮﻳﺖ‪:‬‬

‫ﺟﺎﻳﮕﺰﻳﻦ " ﺧﻮﺍﻧﺪﻥ ﻳﻚ ﺛﺒﺖ ﻛﺎﻣﻼ ﺩﺭﺩﺳﺘﺮﺱ " ﺁﺯﺍﺭ ﻣﻲ ﺑﻴﻨﺪ ﺍﻣﺎ ﺑﺎﻋﺚ ﻣﺸﻜﻼﺗﻲ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﺭﻭﻳﻜﺮﺩ ﻣﺒﺘﻨﻲ ﺑﺮ ﺍﻛﺜﺮﻳﺖ‬


‫‪ n‬ﭘﺮﻭﺗﻜﻞ ﺍﻛﺜﺮﻳﺖ ﺑﺮﺍﻱ ﻛﻨﺘﺮﻝ ﻫﻤﮕﺎﻫﻲ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺮﺍﻱ ﻛﺎﺭ ﺍﺻﻼﺡ ﺷﻮﺩ ﺣﺘﻲ ﺍﮔﺮ ﭼﻨﺪ ﺳﺎﻳﺖ‬
‫ﺩﺭﺩﺳﺘﺮﺱ ﻧﺒﺎﺷﺪ‪ .‬ﻛﭙﻲ ﻫﺮ ﺁﻳﺘﻢ ﺩﺍﺭﺍﻱ ﻳﻚ ﺷﻤﺎﺭﻩ ﻧﺴﺨﻪ ﺍﺳﺖ ﺯﻣﺎﻧﻲ ﺑﺮﻭﺯ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻛﭙﻲ‬
‫ﺑﺮﻭﺯ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺩﺭ ﺯﻳﺮ ﻣﻄﺮﺡ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫– ﺩﺭﺧﻮﺍﺳﺖ ﻗﻔﻞ ﺑﻪ ﺣﺪﺍﻗﻞ ﻧﺼﻒ ﺳﺎﻳﺖ ﻫﺎﻳﻲ ﻓﺮﺳﺘﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺩﺭ ﺍﻥ ﻛﭙﻲ ﻫﺎﻱ‬
‫ﺁﻳﺘﻢ ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﺩ ﻭ ﻋﻤﻠﻴﺎﺕ ﻓﻘﻂ ﺯﻣﺎﻧﻲ ﺍﺩﺍﻣﻪ ﻣﻲ ﻳﺎﺑﺪ ﻛﻪ ﻳﻚ ﻗﻔﻞ ﺩﺭ ﺍﻛﺜﺮﻳﺖ‬
‫ﺳﺎﻳﺖ ﻫﺎ ﺑﺪﺳﺖ ﻣﻲ ﺁﻳﺪ‪.‬‬

‫ﺑﺎ‬ ‫– ﻋﻤﻠﻴﺎﺕ ﺧﻮﺍﻧﺪﻥ ﺗﻤﺎﻣﻲ ﻛﭙﻲ ﻫﺎﻱ ﻗﻔﻞ ﺷﺪﻩ ﺭﺍ ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﺪ ﻭ ﻣﻘﺪﺍﺭ ﺍﺯ ﻛﭙﻲ‬
‫ﺑﺰﺭﮔﺘﺮﻳﻦ ﺷﻤﺎﺭﻩ ﻧﺴﺨﻪ ﺭﺍ ﻣﻲ ﺧﻮﺍﻧﺪ ‪ .‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﻳﻦ ﻣﻘﺪﺍﺭ ﺭﺍ ﺑﻨﻮﻳﺴﺪ ﻭ ﺷﻤﺎﺭﻩ‬
‫ﻧﺴﺨﻪ ﺑﻪ ﻛﭙﻲ ﻫﺎﻳﻲ ﺑﺎ ﺷﻤﺎﺭﻩ ﻫﺎﻱ ﻧﺴﺨﻪ ﻛﻤﺘﺮ )ﺑﺪﻭﻥ ﻧﻴﺎﺯ ﺑﻪ ﻛﺴﺐ ﻗﻔﻞ ﻫﺎ ﺩﺭ‬
‫ﺗﻤﺎﻣﻲ ﻛﭙﻲ ﻫﺎ ﺑﺮﺍﻱ ﺍﻳﻦ ﻛﺎﺭ ( ﺑﺮﻣﻲ ﮔﺮﺩﺩ‪.‬‬

‫– ﺛﺒﺖ ﻋﻤﻠﻴﺎﺕ ‪ :‬ﺑﺎﻻﺗﺮﻳﻦ ﺷﻤﺎﺭﻩ ﻧﺴﺨﻪ ﻣﺎﻧﻨﺪ ﺧﻮﺍﻧﺪﻥ ﺭﺍ ﭘﻴﺪﺍ ﻛﻨﻴﺪ ﻭ ﺷﻤﺎﺭﻩ ﻧﺴﺨﻪ‬
‫ﺟﺪﻳﺪ ﺑﻪ ﺑﺎﻻﺗﺮﻳﻦ ﻧﺴﺨﻪ ﻗﺪﻳﻤﻲ ‪ 1+‬ﺭﺍﺗﻌﻴﻴﻦ ﻛﻨﻴﺪ ‪ .‬ﺳﭙﺲ ﺛﺒﺖ ﻫﺎ ﺩﺭ ﺗﻤﺎﻣﻲ ﻛﭙﻲ‬

‫‪129‬‬
‫ﻫﺎﻱ ﻗﻔﻞ ﺷﺪﻩ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﻭ ﺷﻤﺎﺭﻩ ﻧﺴﺨﻪ ﺩﺭ ﺍﻳﻦ ﻛﭙﻲ ﻫﺎ ﺑﻪ ﺷﻤﺎﺭﻩ ﻧﺴﺨﻪ ﺟﺪﻳﺪ‬
‫ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫– ﺷﻜﺴﺖ ﻫﺎ )ﺷﺒﻜﻪ ﻭ ﺳﺎﻳﺖ ( ﺑﺎﻋﺚ ﺑﺮﻭﺯ ﻣﺸﻜﻞ ﻧﻤﻲ ﺷﻮﺩ ﻣﺎﺩﺍﻣﻲ ﻛﻪ ‪ :‬ﺳﺎﻳﺖ ﻫﺎ ﺩﺭ‬
‫ﻭﺍﮔﺬﺍﺭﻱ ﺷﺎﻣﻞ ﺍﻛﺜﺮﻳﺖ ﻛﭙﻲ ﻫﺎ ﺍﺯ ﻫﺮ ﺁﻱ ﺗﻢ ﺩﺍﺩﻩ ﺑﻪ ﺭﻭﺯ ﺷﺪﻩ ﻣﻲ ﺑﺎﺷﺪ ‪ .‬ﺩﺭﻃﻲ‬
‫ﺧﻮﺍﻧﺪﻥ ‪،‬ﺍﻛﺜﺮﻳﺖ ﻛﭙﻲ ﻫﺎ ﺟﻬﺖ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺷﻤﺎﺭﻩ ﻫﺎﻱ ﻧﺴﺨﻪ ﺩﺭﺩﺳﺘﺮﺱ ﻣﻲ ﺑﺎﺷﺪ ‪.‬‬
‫ﻣﻮﺿﻮﻋﻲ ﺑﻪ ﺑﺎﻻ ‪،‬ﻭﺍﮔﺬﺍﺭﻱ ﺩﻭﻓﺎﺯﻱ ﻣﻲ ﺗﻮﺍﻧﺪ ﺟﻬﺖ ﺑﻪ ﺭﻭﺯ ﻛﺮﺩﻥ ﻛﭙﻲ ﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﺷﻮﺩ‪.‬‬

‫ﺗﺬﻛﺮ‪:‬ﺧﻮﺍﻧﺪﻥ ﻫﺎ ﺟﻬﺖ ﻣﺸﺎﻫﺪﻩ ﺁﺧﺮﻳﻦ ﻧﺴﺨﻪ ﺁﻳﺘﻢ ﺩﺍﺩﻩ ﺿﻤﺎﻧﺖ ﻣﻲ ﺷﻮﺩ ‪ .‬ﻳﻜﭙﺎﺭﭼﮕﻲ ﻣﺠﺪﺩ ﺑﺪﻱﻫﻲ‬
‫ﺍﺳﺖ ‪:‬ﻫﻴﭻ ﭼﻴﺰ ﻧﺒﺎﻳﺪ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪.‬‬

‫*ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﻮﺍﻓﻘﺖ ﻋﻤﻮﻣﻲ ﺣﺪﻧﺼﺎﺏ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﻃﻮﺭﻣﺸﺎﺑﻪ ﮔﺴﺘﺮﺩﻩ ﺷﻮﺩ ‪.‬‬

‫ﺍﻟﮕﻮﺭﻳﺘﻢ ‪Bully‬‬
‫‪ Θ‬ﺍﮔﺮ ﺳﺎﻳﺖ ‪ Si‬ﺩﺭﺧﻮﺍﺳﺘﻲ ﺭﺍ ﺑﻔﺮﺳﺘﺪ ﻛﻪ ﺍﻟﺒﺘﻪ ﺗﻮﺳﻂ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺩﺭﻣﺤﺪﻭﺩﻩ ﻓﺎﺻﻠﻪ ﺯﻣﺎﻧﻲ‬
‫‪ T‬ﭘﺎﺳﺦ ﺩﺍﺩﻩ ﻧﻤﻲ ﺷﻮﺩ ‪ ،‬ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ‪ Si‬ﺭﺍ ﺷﻜﺴﺖ ﺩﺍﺩﻩ ﺍﺳﺖ ‪،‬ﺳﻌﻲ‬
‫ﻣﻲ ﻛﻨﺪ ﺗﺎ ﺧﻮﺩﺵ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺟﺪﻳﺪ ﺍﻧﺘﺨﺎﺏ ﻛﻨﺪ ‪.‬‬

‫‪ Si Θ‬ﭘﻴﺎﻡ ﺍﻧﺘﺨﺎﺏ ﺭﺍ ﺑﻪ ﻫﺮ ﺳﺎﻳﺖ ﺑﺎ ﻋﺪﺩ ﺷﻨﺎﺳﺎﻳﻲ ﺑﺎﻻﺗﺮ ﻣﻲ ﻓﺮﺳﺘﺪ‪ ،‬ﺳﭙﺲ ‪ Si‬ﻣﻨﺘﻈﺮ ﻫﺮ ﻳﻚ‬
‫ﺍﺯ ﺍﻳﻦ ﻓﺮﺍﻳﻨﺪ ﻫﺎ ﺑﺮﺍﻱ ﭘﺎﺳﺦ ﺩﺍﺩﻥ ﺩﺭ ﻣﺤﺪﻭﺩﻩ ‪ T‬ﻣﻲ ﻣﺎﻧﺪ‪.‬‬

‫‪ Θ‬ﺍﮔﺮ ﻫﻴﭻ ﭘﺎﺳﺨﻲ ﺩﺭﻣﺤﺪﻭﺩﻩ ‪ T‬ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪ ،‬ﺑﭙﺬﻳﺮﻳﺪ ﻛﻪ ﺗﻤﺎﻣﻲ ﺳﺎﻳﺖ ﻫﺎﻳﻲ ﺑﺎ ﻋﺪﺩ‬
‫ﺑﻴﺸﺘﺮ ﺍﺯ ‪ i‬ﺷﻜﺴﺖ ﺧﻮﺭﺩﻩ ﺍﻧﺪ ‪ Si ،‬ﺧﻮﺩﺵ ﺭﺍ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺟﺪﻳﺪ ﺍﻧﺘﺨﺎﺏ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪ Θ‬ﺍﮔﺮ ﭘﺎﺳﺦ ﺩﺭﻳﺎﻓﺖ ﺷﻮﺩ‪ Si ،‬ﻓﺎﺻﻠﻪ ﺯﻣﺎﻧﻲ ‪ T‬ﺭﺍ ﺷﺮﻭﻉ ﻣﻲ ﻛﻨﺪ‪ ،‬ﻣﻨﺘﻈﺮ ﺩﺭﻳﺎﻓﺖ ﭘﻴﺎﻣﻲ ﻣﻲ ﻣﺎﻧﺪ‬
‫ﻛﻪ ﺳﺎﻳﺖ ﺑﺎ ﻋﺪﺩ ﺷﻨﺎﺳﺎﻳﻲ ﺑﺎﻻﺗﺮ ﺍﻧﺘﺨﺎﺏ ﻛﺮﺩﻩ ﺍﺳﺖ‪.‬‬

‫‪130‬‬
‫‪ Θ‬ﺍﮔﺮ ﻫﻴﭻ ﭘﻴﺎﻣﻲ ﺩﺭﻡ ﺣﺪﻭﺩﻩ ‪ T‬ﻓﺮﺳﺘﺎﺩﻩ ﻧﺸﻮﺩ‪ ،‬ﺑﭙﺬﻳﺮﻳﺪ ﻛﻪ ﺳﺎﻳﺘﻲ ﺑﺎ ﻋﺪﺩ ﺑﺎﺍﻻﺗﺮ ﺷﻜﺴﺖ‬
‫ﺧﻮﺭﺩﻩ ﺍﺳﺖ ؛ ‪ Si‬ﺍﻟﮕﻮﺭﻳﺘﻢ ﺭﺍ ﻣﺠﺪﺩﺍ ﺷﺮﻭﻉ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪ Θ‬ﺑﻌﺪ ﺍﺯ ﺍﻧﻜﻪ ﺳﺎﻳﺖ ﺷﻜﺴﺖ ﺧﻮﺭﺩﻩ ﺑﻬﺒﻮﺩ ﻣﻲ ﻳﺎﺑﺪ‪ ،‬ﻓﻮﺭﺍ ﺍﺟﺮﺍﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﺸﺎﺑﻪ ﺭﺍ ﺷﺮﻭﻉ ﻣﻲ‬
‫ﻛﻨﺪ‪.‬‬

‫‪ Θ‬ﺍﮔﺮ ﻫﻴﭻ ﺳﺎﻳﺖ ﻓﻌﺎﻟﻲ ﺑﺎ ﺍﻋﺪﺍﺩ ﺑﺎﻻﺗﺮ ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪،‬ﺳﺎﻳﺖ ﺑﻬﺒﻮﺩﻳﺎﻓﺘﻪ ﺗﻤﺎﻣﻲ ﻓﺮﺍﻳﻨﺪﻫﺎ ﺍ‬
‫ﺍﻋﺪﺍﺩﻛﻤﺘﺮ ﺭﺍ ﻭﺍﺩﺍﺭ ﻣﻲ ﻛﻨﺪ ﺗﺎ ﺁﻧﺮﺍ ﻣﺠﺎﺯ ﻛﻨﺪ ﻳﻚ ﺳﺎﻳﺖ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺑﺎﺷﺪ ‪،‬ﺣﺘﻲ ﺍﮔﺮ‬
‫ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﻓﻌﺎﻝ ﺑﺎ ﺍﻋﺪﺍﺩ ﻛﻤﺘﺮ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪.‬‬

‫ﭘﺮﺩﺍﺯﺵ ﭘﺮﺱ ﻭ ﺟﻮ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‬


‫ﺑﺮﺍﻱ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﻣﺘﻤﺮﻛﺰ ﺷﺪﻩ ﻣﻌﻴﺎﺭ ﺍﻭﻟﻴﻪ ﺑﺮﺍﻱ ﺑﺮﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ ﺍﺳﺘﺮﺍﺗﮋﻱ ﺧﺎﺹ ‪،‬ﺗﻌﺪﺍﺩ ﺩﺳﺘﺮﺳﻲ‬
‫ﻫﺎﻱ ﺍﺣﺘﻤﺎﻝ ﺧﻄﺮ ﺍﺳﺖ‪ .‬ﺩﺭ ﻳﻚ ﺳﻴﺴﺘﻢ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ‪ ،‬ﺩﻳﮕﺮ ﻣﻮﺿﻮﻋﺎﺕ ﺑﺎﻳﺴﺘﻲ ﺩﺭﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮﺩ ‪:‬‬

‫ﻫﺰﻳﻨﻪ ﺍﻧﺘﻘﺎﻝ ﺩﺍﺩﻩ ﺩﺭ ﺷﺒﻜﻪ‬

‫ﺳﻮﺩ ﺑﺎﻟﻘﻮﻩ ﺩﺭ ﻋﻤﻠﻜﺮﺩ ﺍﺯ ﺩﺍﺷﺘﻦ ﭼﻨﺪﻳﻦ ﺳﺎﻳﺖ ‪،‬ﺑﺨﺶ ﻫﺎﻱ ﭘﺮﺱ ﻭ ﺟﻮ ﺩﺭ ﺗﻮﺍﺯﻱ ﺭﺍ‬
‫ﭘﺮﺩﺍﺯﺵ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫ﺗﻐﻴﻴﺮ ﭘﺮﺱ ﻭ ﺟﻮ‬


‫‪ ‬ﭘﺮﺱ ﻭ ﺟﻮ ﻫﺎﻱ ﺟﺒﺮﻱ ﺩﺭ ﺑﺨﺶ ﻫﺎ ﺭﺍ ﺗﺮﺟﻤﻪ ﻛﻨﻴﺪ ‪.‬‬

‫‪ l‬ﺑﺎﻳﺴﺘﻲ ﺟﻬﺖ ﺳﺎﺧﺘﺎﺭﺑﻨﺪﻱ ﺭﺍﺑﻄﻪ ‪r‬ﺍﺯ ﺑﺨﺶ ﻫﺎﻳﺶ ﻋﻤﻠﻲ ﻭ ﻣﻤﻜﻦ ﺑﺎﺷﺪ ‪.‬‬

‫‪ l‬ﺭﺍﺑﻄﻪ ‪ r‬ﺭﺍ ﺑﺎ ﻋﺒﺎﺭﺗﻲ ﺟﻬﺖ ﺳﺎﺧﺘﺎﺭﺑﻨﺪﻱ ﺭﺍﺑﻄﻪ ‪ r‬ﺍﺯ ﺑﺨﺶ ﻫﺎﻳﺶ ﺟﺎﻳﮕﺰﻳﻦ ﻛﻨﻴﺪ ‪.‬‬

‫‪ ‬ﺑﺨﺶ ﺑﻨﺪﻱ ﺍﻓﻘﻲ ﺭﺍﺑﻄﻪ ﺣﺴﺎﺏ ﺑﻪ ﺯﻳﺮ ﺭﺍ ﺩﺭﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪:‬‬

‫‪(account) _name = “Hillside” account1 = σ branch‬‬

‫”‪view‬‬ ‫‪(account) _name = “Valley account2 = σ branch‬‬

‫‪131‬‬
‫‪ ‬ﭘﺮﺱ ﻭ ﺟﻮ ”‪ σ branch _name = “Hillside‬ﺑﺼﻮﺭﺕ ﺯﻳﺮ ﻣﻲ ﺷﻮﺩ ‪:‬‬

‫)‪σ branch _name = “Hillside” (account1 ∪ account2‬‬


‫ﻛﻪ ﺩﺭ ﺯﻳﺮ ﺑﻬﻴﻨﻪ ﻣﻲ ﺷﻮﺩ ‪:‬‬

‫)‪σ branch _name = “Hillside” (account1) ∪ σ branch _name = “Hillside” (account2‬‬


‫‪ ‬ﺍﺯ ﺁﻧﺠﺎ ﻛﻪ ‪ account1‬ﻓﻘﻂ ﺗﺎﭘﻞ ﻫﺎﻱ ﻧﺴﺒﺖ ﺩﺍﺩﻧﻲ ﺑﻪ ﺷﻌﺒﻪ ‪ Hillside‬ﺭﺍ ﺩﺍﺭﺩ ‪،‬ﻣﻲ ﺗﻮﺍﻧﻴﻢ‬
‫ﻋﻤﻠﻴﺎﺕ ﺍﻧﺘﺨﺎﺏ ﺭﺍ ﺣﺬﻑ ﻛﻨﻴﻢ ‪.‬‬

‫‪ ‬ﺗﻌﺮﻳﻒ ‪account2‬ﺭﺍ ﺟﻬﺖ ﻛﺴﺐ ﺭﺍﺑﻄﻪ ﺯﻳﺮ ﺑﻜﺎﺭ ﻣﻲ ﺑﺮﻳﻢ ‪.‬‬

‫”‪view‬‬ ‫‪(account ) _name = “Valley _name = “Hillside” (σ branch σ branch‬‬


‫‪ ‬ﺍﻳﻦ ﻋﺒﺎﺭﺕ ﻣﺠﻤﻮﻋﻪ ﺧﺎﻟﻲ ﺩﺭﺧﺼﻮﺹ ﻣﺤﺘﻮﻳﺎﺕ ﺭﺍﺑﻄﻪ ﺣﺴﺎﺏ ﺍﺳﺖ ‪.‬‬

‫‪ ‬ﺍﺳﺘﺮﺍﺗﮋﻱ ﻧﻬﺎﻳﻲ ﺑﺮﺍﻱ ﺳﺎﻳﺖ ‪ Hillside‬ﺟﻬﺖ ﺑﺎﺯﮔﺮﺩﺍﻧﺪﻥ ‪ account1‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﺘﻴﺠﻪ ﭘﺮﺱ‬
‫ﻭ ﺟﻮ ﺍﺳﺖ‪.‬‬

‫ﭘﺮﺩﺍﺯﺵ ﺍﺗﺼﺎﻝ ﺳﺎﺩﻩ‬


‫ﺑﻴﺎﻥ ﺟﺒﺮﻱ ﺍﺭﺗﺒﺎﻃﻲ ﺭﺍ ﺩﺭﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺩﺭ ﺁﻥ ﺳﻪ ﺍﺭﺗﺒﺎﻁ ﺗﻜﺮﺍﺭ ﻳﺎ ﺑﺨﺶ ﺑﻨﺪﻱ ﻧﻤﻲ ﺷﻮﺩ ‪:‬‬

‫ﺣﺴﺎﺏ ‪ -‬ﺳﭙﺮﺩﻩ ﮔﺬﺍﺭ ‪ -‬ﺷﻌﺒﻪ‬

‫• ﺣﺴﺎﺏ ﺩﺭ ﺳﺎﻳﺖ ‪S1‬ﺫﺧﻴﺮﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫• ﺳﭙﺮﺩﻩ ﮔﺬﺍﺭ ﺩﺭ ‪S2‬‬

‫• ﺷﻌﺒﻪ ﺩﺭ ‪S 3‬‬

‫• ﺑﺮﺍﻱ ﭘﺮﺱ ﻭ ﺟﻮ ﻣﻨﺘﺸﺮ ﺷﺪﻩ ﺩﺭ ﺳﺎﻳﺖ ‪، S‬ﺳﻴﺴﺘﻢ ﺑﻪ ﺍﻳﺠﺎﺩ ﻧﺘﻴﺠﻪ ﺩﺭ ﺳﺎﻳﺖ ‪ SI‬ﻧﻴﺎﺯ ﺩﺍﺭﺩ‪.‬‬

‫‪132‬‬
‫ﭘﺎﻳﮕﺎﻩ ﻫﺎﻱ ﺩﺍﺩﻩ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﻧﺎﻫﻤﮕﻦ‬

‫ﭼﻨﺪﻳﻦ ﺑﺮﻧﺎﻣﻪ ﻛﺎﺭﺑﺮﺩﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺑﻪ ﺩﺍﺩﻩ ﺍﺯ ﻣﺠﻤﻮﻋﻪ ﭘﺎﻳﮕﺎﻩ ﻫﺎﻱ ﺩﺍﺩﻩ ﭘﻴﺶ ﻣﻮﺟﻮﺩ ﻭﺍﻗﻊ ﺷﺪﻩ ﺩﺭ‬
‫ﻣﺠﻤﻮﻋﻪ ﻧﺎﻫﻤﮕﻦ ﺳﻜﻮﻫﺎﻱ ﺳﺨﺖ ﺍﻓﺰﺍﺭ ﻭ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﻧﻴﺎﺯ ﺩﺍﺭﺩ ‪ .‬ﻣﺪﻝ ﻫﺎﻱ ﺩﺍﺩﻩ ﻣﻤﻜﻦ ﺍﺳﺖ )ﺳﻠﺴﻠﻪ‬
‫ﻣﺮﺍﺗﺒﻲ ‪،‬ﺍﺭﺗﺒﺎﻃﻲ ﻭ ﻏﻴﺮﻩ ( ﻣﺘﻔﺎﻭﺕ ﺑﺎﺷﻨﺪ‪ .‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﻭﺍﮔﺬﺍﺭﻱ ﺗﺮﺍﻛﻨﺶ ﻣﻤﻜﻦ ﺍﺳﺖ ﻧﺎﺳﺎﺯﮔﺎﺭ‬
‫ﺑﺎﺷﺪ‪ .‬ﻛﻨﺘﺮﻝ ﻩ ﻣﮕﺎﻫﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﻣﺒﺘﻨﻲ ﺑﺮ ﺗﻜﻨﻴﻚ ﻫﺎﻱ ﻣﺘﻔﺎﻭﺕ ) ﻗﻔﻞ ﻛﺮﺩﻥ ‪،‬ﻧﺸﺎﻥ ﺯﻣﺎﻧﻲ ﻭ‬
‫ﻏﻴﺮﻩ ( ﺑﺎﺷﺪ‪ .‬ﺟﺰﺋﻴﺎﺕ ﺳﻄﺢ ﺳﻴﺴﺘﻢ ﺗﻘﺮﻳﺒﺎ ﺑﻪ ﻃﻮﺭ ﻣﺸﺨﺺ ﻛﺎﻣﻼ ﻧﺎﺳﺎﺯﮔﺎﺭ ﺍﺳﺖ ‪.‬‬

‫ﺳﻴﺴﺘﻢ ﭼﻨﺪ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﻱ ﻳﻚ ﻻﻳﻪ ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﺩﺭ ﺑﺎﻻﻱ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻛﻨﻮﻧﻲ ﺍﺳﺖ ﻛﻪ‬
‫ﺟﻬﺖ ﺩﺳﺘﻜﺎﺭﻱ ﺍﻃﻼﻋﺎﺕ ﺩﺭ ﭘﺎﻳﮕﺎ ﻩ ﻫﺎﻱ ﺩﺍﺩﻩ ﻧﺎﻫﻤﮕﻦ ﻃﺮﺍﺣﻲ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫ﻣﺰﺍﻳﺎ‬

‫‪ ‬ﺣﻔﻆ ﺳﺮﻣﺎﻳﻪ ﮔﺬﺍﺭﻱ ﺩﺭ ﺍﻳﻦ ﻣﻮﺍﺭﺩ‪ :‬ﺳﺨﺖ ﺍﻓﺰﺍﺭﻱ‪ ،‬ﻧﺮﻡ ﺍﻓﺰﺍﺭ ﺳﻴﺴﺘﻢ‪ ،‬ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﺎﺭﺑﺮﺩﻱ‬

‫‪ ‬ﻛﻨﺘﺮﻝ ﺍﺟﺮﺍﻳﻲ ﻭ ﺍﺳﺘﻘﻼﻝ ﻣﺤﻠﻲ‬

‫‪ ‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ DBMSs‬ﺑﺎ ﻫﺪﻑ ﺧﺎﺹ ﺭﺍ ﻣﺠﺎﺯ ﻣﻲ ﺳﺎﺯﺩ ‪.‬‬

‫‪ ‬ﺑﺴﻮﻱ ‪ DBMSs‬ﻫﻤﮕﻦ ﻣﺘﺤﺪ ﺷﺪﻩ ﮔﺎﻡ ﺑﺮﻣﻲ ﺩﺍﺭﺩ ‪.‬‬

‫– ﻳﻜﭙﺎﺭﭼﮕﻲ ﻛﺎﻣﻞ ﺑﻪ ‪ DBMSs‬ﻫﻤﮕﻦ ﺑﺎ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﻣﻮﺍﺟﻪ ﻣﻲ ﺷﻮﺩ ‪:‬‬

‫• ﺩﺷﻮﺍﺭﻱ ﻫﺎﻱ ﺗﻜﻨﻴﻜﻲ ﻭ ﻫﺰﻳﻨﻪ ﺣﻔﻆ‬

‫• ﺩﺷﻮﺍﺭﻳﻬﺎﻱ ﺳﺎﺯﻣﺎﻧﺪﻫﻲ ‪ /‬ﺳﻴﺎﺳﻲ‬

‫– ﺳﺎﺯﻣﺎﻥ ﻫﺎ ﺧﻮﺍﻫﺎﻥ ﺍﺭﺍﺋﻪ ﻛﻨﺘﺮﻝ ﺑﺮ ﺩﺍﺩﻩ ﻫﺎﻳﺸﺎﻥ ﻧﻴﺴﺘﻨﺪ ‪.‬‬

‫– ﭘﺎﻳﮕﺎﻩ ﻫﺎﻱ ﺩﺍﺩﻩ ﻣﺤﻠﻲ ﺗﻤﺎﻳﻞ ﺑﻪ ﺣﻔﻆ ﺍﺳﺘﻘﻼﻝ ﺑﻴﺸﺘﺮ ﺩﺍﺭﺩ ‪.‬‬

‫‪133‬‬
‫ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺗﻌﺪﻳﻞ ﻛﻨﻨﺪﻩ‬
‫ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺗﻌﺪﻳﻞ ﻛﻨﻨﺪﻩ‪ ،‬ﺳﻴﺴﺘﻢ ﻫﺎﻳﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﻣﻨﺎﺑﻊ ﺩﺍﺩﻩ ﻧﺎﻫﻤﮕﻦ ﻣﺘﻌﺪﺩ ﺭﺍ ﺑﺎ ﺍﺭﺍﺋﻪ ﻛﺮﺩﻥ‬
‫ﺩﻳﺪﮔﺎﻩ ﺟﻬﺎﻧﻲ ﻳﻜﭙﺎﺭﭼﻪ ﺷﺪﻩ ﻳﻜﭙﺎﺭﭼﻪ ﻣﻲ ﻛﻨﻨﺪ ﻭ ﺗﺴﻬﻴﻼﺕ ﭘﺮﺱ ﻭ ﺟﻮ ﺩﺭ ﺩﻳﺪﮔﺎﻩ ﺟﻬﺎﻧﻲ ﺭﺍ‬
‫ﺍﺭﺍﺋﻪ ﻣﻲ ﺩﻫﻨﺪ ‪ .‬ﺑﺮﺧﻼﻑ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻛﺎﻣﻼ ‪ ، fledged‬ﺑﻪ ﻃﻮﺭﻛﻠﻲ ﺗﻌﺪﻳﻞ ﻛﻨﻨﺪﻩ‬
‫ﻫﺎ ﺩﺭﺑﺎﺭﻩ ﭘﺮﺩﺍﺯﺵ ﺗﺮﺍﻛﻨﺶ ﺁﺳﻴﺐ ﻧﻤﻲ ﺑﻴﻨﻨﺪ ‪ .‬ﺍﻣﺎ ﺍﺻﻼﺣﺎﺕ ﺗﻌﺪﻳﻞ ﻛﻨﻨﺪﻩ ﻭ ﭼﻨﺪ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﻱ‬
‫ﮔﺎﻫﻲ ﺍﻭﻗﺎﺕ ﺑﻪ ﻃﻮﺭ ﻗﺎﺑﻞ ﺗﻌﻮﻳﻀﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺍﺻﻄﻼﺡ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻣﺠﺎﺯﻱ ﺟﻬﺖ ﺍﺷﺎﺭﻩ ﺑﻪ‬
‫ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭼﻨﺪ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﻌﺪﻳﻞ ﻛﻨﻨﺪﻩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﻓﻬﺮﺳﺖ‬


‫ﺍﻧﻮﺍﻉ ﺧﺎﺹ ﺍﻃﻼﻋﺎﺕ ﻓﻬﺮﺳﺖ‬

‫‪ l‬ﺍﻃﻼﻋﺎﺕ ﻛﺎﺭﻣﻨﺪ ﺍﺯﻗﺒﻴﻞ ﻧﺎﻡ ‪،‬ﺷﻤﺎﺭﻩ ﺷﻨﺎﺳﺎﻳﻲ ‪ ،‬ﺍﻳﻤﻴﻞ ‪،‬ﺗﻠﻔﻦ ‪ ،‬ﺁﺩﺭﺱ ﺍﺩﺍﺭﻩ‬

‫‪ l‬ﺣﺘﻲ ﺍﻃﻼﻋﺎﺕ ﺷﺨﺼﻲ ﺍﺯ ﻣﻜﺎﻥ ﻫﺎ ﻱ ﻣﺖﻉﺩﺩ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺍﺳﺖ ‪.‬‬

‫‪ ‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻧﺸﺎﻥ ﻫﺎﻱ ﻛﺘﺎﺏ ﺟﺴﺘﺠﻮﮔﺮ‬

‫ﺻﻔﺤﺎﺕ ﺳﻔﻴﺪ‬

‫‪ l‬ﺛﺒﺖ ﻫﺎﻱ ﺳﺎﺯﻣﺎﻧﺪﻫﻲ ﺷﺪﻩ ﺑﺎ ﻧﺎﻡ ﻳﺎ ﺷﻨﺎﺳﺎﻳﻲ ﻛﻨﻨﺪﻩ‬

‫‪ ‬ﺑﻪ ﻣﻌﻨﻲ ﺟﺴﺘﺠﻮﻱ ﺑﻴﺸﺘﺮ ﺟﻬﺖ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺍﻃﻼﻋﺎﺕ ﺑﻴﺸﺘﺮ ﺩﺭﺑﺎﺭﻩ ﻳﻚ ﺛﺒﺖ‬

‫ﺻﻔﺤﺎﺕ ﺯﺭﺩ‬

‫‪ l‬ﺛﺒﺖ ﻫﺎﻱ ﺳﺎﺯﻣﺎﻧﺪﻫﻲ ﺷﺪﻩ ﺑﺎ ﻭﻳﮋﮔﻲ ﻫﺎ‬

‫‪ l‬ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮﻱ ﻣﻌﻜﻮﺱ ﺟﻬﺖ ﭘﻴﺪﺍﻛﺮﺩﻥ ﺛﺒﺖ ﻫﺎﻱ ﺗﻄﺒﻴﻖ ﺩﻫﻨﺪﻩ ﻣﻘﺘﻀﻴﺎﺕ ﺧﺎﺹ‬

‫‪134‬‬
‫ﺭﺍﻳﺞ ﺗﺮﻳﻦ پﺭﻭﺗﻜﻞ ﺩﺳﺘﺮﺳﻲ ﻓﻬﺮﺳﺖ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ‪)LDAP :‬ﭘﺮﻭﺗﻜﻞ ﺩﺳﺘﺮﺳﻲ ﻓﻬﺮﺳﺖ‬
‫ﺳﺒﻚ ﻭﺯﻥ ( ﻛﻪ ﺳﺎﺩﻩ ﺷﺪﻩ ﺍﺯ ﭘﺮﻭﺗﻜﻞ ‪ X.500‬ﺍﻭﻟﻴﻪ‬

‫ﺳﻮﺍﻝ‪ :‬ﭼﺮﺍ ﺍﺯ ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻣﺎﻧﻨﺪ ‪ ODBC/JDBC‬ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻲ ﻛﻨﻴﻢ ؟‬

‫ﻃﻮﺭ ﻣﻮﺍﺯﻱ ﺗﻜﺎﻣﻞ ﻳﺎﻓﺘﻪ ﺗﺎ‬


‫ﺏ‬ ‫ﭘﺎﺳﺦ‪ :‬ﭘﺮﻭﺗﻜﻞ ﻫﺎﻱ ﺳﺎﺩﻩ ﺷﺪﻩ ﺑﺮﺍﻱ ﻧﻮﻉ ﻣﺤﺪﻭﺩ ﺩﺳﺘﺮﺳﻲ ﺩﺍﺩﻩ‪،‬‬
‫‪ .ODBC/JDBC‬ﻣﻜﺎﻧﻴﺴﻢ ﺧﻮﺏ ﻧﺎﻣﮕﺬﺍﺭﻱ ﺳﻠﺴﻠﻪ ﻣﺮﺍﺗﺒﻲ ﻣﺸﺎﺑﻪ ﻓﻬﺮﺳﺖ ﻩ ﺍ ﻱ ﺳﻴﺴﺘﻢ ﻓﺎﻳﻞ ﺭﺍ ﺍﺭﺍﺋﻪ‬
‫ﻣﻲ ﺩﻫﺪ‪ .‬ﺩﺍﺩﻩ ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭﺑﻴﻦ ﺳﺮﻭﺭﻫﺎﻱ ﻣﺘﻌﺪﺩ ﺑﺮﺍﻱ ﺑﺨﺶ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺳﻠﺴﻠﻪ ﻣﺮﺍﺗﺐ ﺍﻓﺮﺍﺯ ﺷﻮﺩ ‪،‬‬
‫ﺩﻳﺪﮔﺎﻩ ﺧﺎﺹ ﺑﻪ ﻛﺎﺭﺑﺮ ﺭﺍ ﺍﺭﺍﺋﻪ ﻣﻲ ﺩﻫﺪ ‪.‬‬

‫ﻣﺎﻧﻨﺪ ﺳﺮﻭﺭﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺑﺮﺍﻱ ‪Bell Labs Murray Hill and Bell Labs Bangalore‬‬

‫ﻓﻬﺮﺳﺖ ﻫﺎ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﻫﺎﻱ ﺩﺍﺩﻩ ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﻜﺎﻧﻴﺴﻢ ﻗﻮﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻨﺪ ‪.‬‬

‫ﺩﺭﺧﺘﺎﻥ ﻓﻬﺮﺳﺖ ﺗﻮﺯﻳﻊ ﺷﺪﻩ‬


‫ﺍﻃﻼﻋﺎﺕ ﺳﺎﺯﻣﺎﻧﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﻪ ﺩﺭﺧﺘﺎﻥ ﻣﺘﻌﺪﺩ ﺍﻃﻼﻋﺎﺕ ﻓﻬﺮﺳﺖ ﺟﺪﺍ ﺷﻮﺩ ‪ .‬ﭘﻴﺸﻮﻧﺪ ‪RDN، DIT‬‬
‫ﺭﺍ ﺍﺭﺍﺋﻪ ﻣﻲ ﺩﻫﺪ ﺗﺎ ﺩﺭ ﺗﻤﺎﻣﻲ ﺛﺒﺖ ﻫﺎ ﺟﻬﺖ ﻛﺴﺐ ‪DN‬ﻛﻠﻲ ﺑﺮﭼﺴﺐ ﮔﺬﺍﺭﻱ ﺷﻮﺩ ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‬
‫ﺩﻭ‪ DITs‬ﻳﻜﻲ ﺑﺎ ﭘﻴﺸﻮﻧﺪ ‪ o=Lucent, c=USA‬ﻭ ﺩﻳﮕﺮﻱ ﺑﺎ ﭘﻴﺸﻮﻧﺪ‬
‫‪o=Lucent, c=India‬‬
‫ﺍﻏﻠﺐ ﺳﺎﺯﻣﺎﻥ ﻫﺎ ‪ DITs‬ﺭﺍ ﺑﺮﻣﺒﻨﺎﻱ ﻣﻮﻗﻌﻴﺖ ﺟﻐﺮﺍﻓﻴﺎﻳﻲ ﻳﺎ ﺑﺎ ﺳﺎﺧﺘﺎﺭ ﺳﺎﺯﻣﺎﻧﻲ ﺟﺪﺍ ﻣﻲ ﻛﻨﻨﺪ ‪ .‬ﭼﻨﺪﻳﻦ‬
‫ﺍﺟﺮﺍﻱ ‪LDAP‬ﺗﻜﺮﺍﺭ ‪) DITs‬ﺗﻜﺮﺍﺭ ﺍﺻﻠﻲ‪ -‬ﺩﻧﺒﺎﻟﻪ ﺭﻭ ﻳﺎ ﭼﻨﺪﺍﺻﻠﻲ ( ﺭﺍ ﺣﻤﺎﻳﺖ ﻣﻲ ﻛﻨﺪ ‪ .‬ﮔﺮﻫﻲ ﺩﺭﻳﻚ‬
‫‪DIT‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﺭﺟﺎﻋﻲ ﺑﻪ ﻳﻚ ﮔﺮﻩ ﺩﺭ ‪ DIT‬ﺩﻳﮕﺮ ﺑﺎﺷﺪ ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪Bell Labs = OU‬‬
‫ﻣﻤﻜﻦ ﺍﺳﺖ ‪DIT‬ﻣﺠﺰﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻭ ‪ DIT‬ﺑﺮﺍﻱ ‪ o=Lucen‬ﻣﻤﻜﻦ ﺍﺳﺖ ﻭﺭﻗﻲ ﺑﺎ ‪ou=Bell Labs‬‬
‫ﻣﺤﺘﻮﻱ ﺍﺭﺟﺎﻋﻲ ﺑﺎ ‪Bell Labs DIT‬ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬

‫ﺍﺭﺟﺎﻋﻲ ﻫﺎ ﻋﺎﻣﻞ ﺍﺻﻠﻲ ﺩﺭ ﻳﻜﭙﺎﺭﭼﻪ ﻛﺮﺩﻥ ﻣﺠﻤﻮﻋﻪ ﺗﻮﺯﻳﻊ ﺷﺪﻩ ﻓﻬﺮﺳﺖ ﻫﺎ ﻫﺴﺘﻨﺪ ‪ .‬ﺯﻣﺎﻧﻴﻜﻪ ﻳﻚ‬
‫ﺳﺮﻭﺭ ﺑﻪ ﭘﺮﺱ ﻭ ﺟﻮ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻳﻚ ﮔﺮﻩ ﺍﺭﺟﺎﻋﻲ ﺩﺳﺖ ﻣﻲ ﻳﺎﺑﺪ ‪ ،‬ﻣﻤﻜﻦ ﺍﺳﺖ ﭘﺮﺱ ﻭ ﺟﻮ‬
‫ﺟﻠﻮﻳﻲ ﺑﻪ ‪ DIT‬ﺍﺭﺟﺎﻉ ﺩﺍﺩﻩ ﺷﺪﻩ ﻭ ﭘﺎﺳﺦ ﺑﺮﮔﺸﺘﻲ ﺑﻪ ﻣﺮﺍﺟﻌﻪ ﻛﻨﻨﺪﻩ ﺑﺎﺷﺪ ‪،‬ﻳﺎ ﺑﺮﮔﺸﺖ ﺍﺭﺟﺎﻋﻲ ﺑﻪ‬

‫‪135‬‬
‫‪ DIT‬ﺍﺭﺟﺎﻉ ﺩﺍﺩﻩ ﺷﺪﻩ )ﺑﺪﻭﻥ‬ ‫ﻣﺮﺍﺟﻌﻪ ﻛﻨﻨﺪﻩ ﺍﻱ ﺭﺍ ﺍﺭﺍﺋﻪ ﺩﻫﻴﺪ ﻛﻪ ﺑﻄﻮﺭ ﺷﻔﺎﻑ ﭘﺮﺱ ﻭ ﺟﻮﻳﻲ ﺑﻪ‬
‫ﻣﺪﺍﺧﻠﻪ ﻛﺎﺭﺑﺮ( ﻣﻲ ﻓﺮﺳﺘﺪ‪.‬‬

‫ﺳﻪ ﻓﺎﺯ ﭘﺬﻳﺮﺵ )‪(commit‬‬


‫‪ ‬ﻓﺮﺽ‪:‬‬

‫ﻫﻴﭻ ﺷﺐﻛﻪ ﺍﻱ ﺑﺨﺶ ﺑﻨﺪﻱ ﻧﺸﻮﺩ ‪.‬‬

‫ﺩﺭ ﻫﺮ ﻣﻜﺎﻧﻲ ﻛﻮﭼﻜﺘﺮﻳﻦ ﺳﺎﻳﺖ ﺑﺎﻳﺪ ﺩﺭ ﺣﺎﻝ ﻛﺎﺭ ﺑﺎﺷﺪ ‪.‬‬

‫ﺩﺭ ‪ k‬ﺳﺎﻳﺖ ﺧﻄﺎ ﺭﺥ ﺩﻫﺪ‪.‬‬

‫‪ ‬ﻓﺎﺯ ‪ : 1‬ﻛﻪ ﺷﺎﻣﻞ ﻳﻚ ﺗﺼﻤﻴﻢ ﻣﻘﺪﻣﺎﺗﻲ ﺍﺳﺖ ﻳﻌﻨﻲ ﺷﻨﺎﺳﺎﻳﻲ ‪ 2PC‬ﺩﺭ ﻓﺎﺯ ﻳﻚ‪.‬‬

‫ﻫﺮ ﺳﺎﻳﺘﻲ ﻣﻴﺘﻮﺍﻧﺪ ﻋﻤﻞ ﺧﻮﺍﻧﺪ ﺭﻭﻱ ﺩﺳﺘﻮﺭﺍﺕ ﭘﺬﻳﺮﺵ ﺷﺪﻩ ﺭﺍ ﺍﻧﺠﺎﻡ ﺩﻫﺪ ‪.‬‬

‫‪ ‬ﻓﺎﺯ ‪ : 2‬ﺍﻳﻦ ﻓﺎﺯ ﺑﻪ ﺩﻭ ﻓﺎﺯ ﺷﻜﺴﺘﻪ ﻣﻴﺸﻮﺩ‪ ،‬ﻓﺎﺯ‪ 2‬ﻭ ﻓﺎﺯ‪ 3‬ﺑﺮﺍﻱ ‪3PC‬‬

‫‪ 2PC‬ﻣﻲ ﮔﻴﺮﺩ ) ‪pre-commit‬‬ ‫ﺩﺭ ﻓﺎﺯ ﺩﻭ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﺗﺼﻤﻴﻤﻲ ﺑﺮﺍﻱ‬


‫‪ (decision‬ﻭ ﺁﻧﺮﺍ ﺩﺭ ﭼﻨﺪﻳﻦ ﺳﺎﻳﺖ ﺫﺧﻴﺮﻩ ﻣﻴﻜﻨﺪ‪.‬‬

‫‪ commit/abort‬ﺑﻪ ﻫﻤﻪ ﻱ‬ ‫ﺩﺭ ﻓﺎﺯ ﺳﻪ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﻳﻚ ﭘﻴﺎﻡ ﺑﺎ ﻣﺤﺘﻮﺍﻱ‬


‫ﺳﺎﻳﺖ ﻫﺎﻱ ﻣﻮﺟﻮﺩ‪.‬‬

‫‪ ‬ﺗﺤﺖ ﻧﻈﺮ ‪ ،3PC‬ﺗﺼﻤﻴﻢ ﻫﻤﺎﻫﻨﮓ ﻛﻨﻨﺪﻩ ﻣﻴﺘﻮﺍﻧﺪ ﺣﺘﻲ ﺩﺭ ﺻﻮﺭﺕ ﻭﺟﻮﺩ ﺧﻄﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ‪.‬‬

‫ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﺑﻪ ﻭﺟﻮﺩ ﺁﻣﺪﻥ ﻣﺸﻜﻞ ﺑﻦ ﺑﺴﺖ‬

‫‪ ‬ﻣﻌﺎﻳﺐ‪:‬‬

‫ﺑﺮﻭﺯ‪ overheads‬ﺑﺴﻴﺎﺭ ﺑﺎﻻ‬

‫ﻓﺮﺿﻴﺎﺕ ﻣﻤﻜﻦ ﺑﺮﺍﻱ ﺑﻌﻀﻲ ﻣﻮﺍﺭﺩ ﻗﺎﺑﻞ ﺗﻮﺿﻴﺢ ﻧﺒﺎﺷﺪ ‪.‬‬

‫‪136‬‬
‫ﻓﺼﻞ ‪:7‬‬
‫ﭘﺮﺩﺍﺯﺵ ﭘﺮﺱ ﻭ ﺟﻮ‬

‫‪137‬‬
‫ﻟﻴﺴﺖ ﻣﻄﺎﻟﺐ‪:‬‬

‫ﭘﻴﺶ ﻧﻤﺎﻳﺶ‬

‫ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﻱ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﭘﺮﺱ ﻭ ﺟﻮ‬

‫ﻋﻤﻠﻴﺎﺕ ﺍﻧﺘﺨﺎﺏ‬

‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ‬

‫ﺗﺎﺭﻳﺦ ﻋﻤﻠﻴﺎﺕ‬

‫ﺩﻳﮕﺮ ﻋﻤﻠﻴﺎﺕ‬

‫ﺍﺭﺯﻳﺎﺑﻲ ﻋﺒﺎﺭﺍﺕ‬

‫ﻣﺮﺍﺣﻞ ﺍﺳﺎﺳﻲ ﺩﺭ ﭘﺮﺩﺍﺯﺵ ﭘﺮﺱ ﻭ ﺟﻮ ﻫﺎ‪:‬‬


‫‪ (1‬ﺗﺠﺰﻳﻪ ﻭ ﺗﺤﻠﻴﻞ‬

‫‪ (2‬ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‬

‫‪ (3‬ﺍﺭﺯﻳﺎﺑﻲ‬

‫‪138‬‬
‫ﺗﺠﺰﻳﻪ ﻭ ﺍﻧﺘﻘﺎﻝ‬
‫• ‪Query‬ﺩﺭ ﻋﻤﻠﻴﺎﺕ ﺩﺍﺧﻠﻲ ﺑﻪ ﺍﻳﻦ ﻣﻌﻨﻲ ﺳﺖ‪.‬‬

‫• ﺗﺠﺰﻳﻪ ﻛﻨﻨﺪﻩ ‪،‬ﭼﻚ ﻛﺮﺩﻥ )‪syntax‬ﭼﻚ ﻛﺮﺩﻥ ﻣﺤﺘﻮﺍﻱ ﻣﺘﻨﻲ( ‪،‬ﺗﺎﺋﻴﺪ ‪،‬ﺭﻭﺍﺑﻂ‪.‬‬

‫• ﺩﺭﺣﻘﻴﻘﺖ ﺩﺍﺧﻞ ﻳﻚ ﻋﻤﻠﻴﺎﺕ ﭘﺮﺱ ﻭ ﺟﻮ ﺗﻤﺎﻡ ﺍﻳﻦ ﻛﺎﺭﻫﺎ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ﻭ ﻧﺘﻴﺠﻪ‬
‫ﻋﻤﻠﻴﺎﺕ ‪ Query‬ﻣﻮﺭﺩ ﻧﻈﺮ ﻛﺎﺭﺑﺮ ﺍﺳﺖ‪.‬‬

‫ﺍﺭﺯﻳﺎﺑﻲ‬
‫• ﺩﺭ ﺍﺟﺮﺍﻱ ﻃﺮﺡ ﭘﺮﺱ ﻭ ﺟﻮ ﻋﻤﻠﻴﺎﺕ ﺍﺭﺯﻳﺎﺑﻲ ﺑﻪ ﻃﻮﻝ ﻣﻲ ﺍﻧﺠﺎﻣﺪ ﭼﺮﺍﻛﻪ ﻃﺮﺡ ﺑﺎﻳﺪ‬
‫ﺍﺟﺮﺍ ﻭ ﭘﺎﺳﺦ ﻫﺎ ﺑﻪ ﭘﺮﺱ ﻭ ﺟﻮ ﺑﺮﮔﺮﺩﺍﻧﺪﻩ ﺷﻮﺩ‪.‬‬

‫ﻣﺮﺍﺣﻞ ﺍﺳﺎﺳﻲ ﺩﺭ ﭘﺮﺩﺍﺯﺵ ﭘﺮﺱ ﻭ ﺟﻮ ﻫﺎ‪ :‬ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‬

‫♦ ﻳﻚ ﻋﺒﺎﺭﺕ ﻳﺎ ﺭﺍﺑﻄﻪ ﺟﺒﺮﻱ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺍﺭﺍﻱ ﭼﻨﺪ ﻋﺒﺎﺭﺕ ﺍﺭﺯﻳﺎﺑﻲ ﺑﺎﺷﺪ‪.‬‬

‫ﻣﺜﺎﻝ‪:‬‬

‫‪E.g., σsalary<75000(∏salary(instructor)) is equivalent to‬‬


‫))‪∏salary(σsalary<75000(instructor‬‬
‫♦ ﻫﺮﻳﻚ ﺍﺯ ﺭﺍﺑﻄﻪ ﻫﺎﻱ ﺟﺒﺮﻱ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺑﺎ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﻣﺘﻔﺎﻭﺗﻲ ﻋﻤﻠﻴﺎﺕ ﺑﺮﺭﺳﻲ ﻭ ﺍﺭﺯﻳﺎﺑﻲ ﺭﺍ‬
‫ﺍﻧﺠﺎﻡ ﺩﻫﻨﺪ‪.‬‬

‫ﻣﺘﻘﺎﺑﻼ ﻳﻚ ﻋﺒﺎﺭﺕ ﺟﺒﺮﻱ ﻧﻴﺰ ﺍﺯ ﺟﻬﺎﺕ ﻣﺨﺘﻠﻒ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﻮﺭﺩ ﺍﺭﺯﻳﺎﺑﻲ ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ ‪.‬‬

‫ﺑﻴﺎﻥ ﻣﺸﺮﻭﺡ ﻭ ﺗﻌﻴﻴﻦ ﺍﺑﺰﺍﺭ ﺩﻗﻴﻖ ﺍﺭﺯﻳﺎﺑﻲ‪:‬‬

‫♦ ﺍﺭﺯﻳﺎﺑﻲ ﻃﺮﺡ‬

‫ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﻲ ﺗﻮﺍﻥ ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻣﺪﺭﺳﺎﻥ ﺑﺎ ﺣﻘﻮﻕ ﻛﻤﺘﺮ ﺍﺯ ‪ 75000‬ﺍﺯﺷﺎﺧﺺ‬
‫)ﺷﺮﻁ( ‪ salary<75000‬ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ‪.‬‬

‫‪139‬‬
‫ﻳﺎ ﻣﻲ ﺗﻮﺍﻥ ﺑﺎ ﺟﺴﺘﺠﻮ ﻭ ﺍﺳﻜﻦ ﻣﺪﺭﺳﺎﻥ ﺑﺎ ﺣﻘﻮﻕ ﺑﺎﻻﻱ ‪ 75000‬ﺭﺍ ﺣﺬﻑ ﻛﺮﺩ ﺗﺎ‬
‫ﻣﺪﺭﺳﺎﻥ ﺑﺎ ﺣﻘﻮﻕ ﻛﻤﺘﺮﺍﺯ‪ 75000‬ﻣﺸﺨﺺ ﺷﻮﻧﺪ‪.‬‬

‫♦ ‪ :Query Optimization‬ﺍﻧﺘﺨﺎﺏ ﺑﺮﻧﺎﻣﻪ ﻳﻞ ﻃﺮﺣﻲ ﺑﺎ ﻛﻤﺘﺮﻳﻦ ﻫﺰﻳﻨﻪ ﺍﺯ ﺑﻴﻦ ﺗﻤﺎﻡ ﺑﺮﻧﺎﻣﻪ‬


‫ﻫﺎﻱ ﺍﺭﺯﻳﺎﺑﻲ‬

‫ﺑﺮ ﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻃﻼﻋﺎﺕ ﺍﻣﺎﺭﻱ ﺑﺮﮔﺮﻓﺘﻪ ﺍﺯ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‬

‫‪ n‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺩﺭ ﻫﺮ ﺭﺍﺑﻄﻪ ﺗﻌﺪﺍﺩﻭﻫﺰﻳﻨﻪ ﻭ ﺍﻧﺪﺍﺯﻩ ﻫﺮﺗﺎﭘﻞ ﻭ ‪...‬‬

‫♦ ﺩﺭ ﺍﻳﻦ ﻓﺼﻞ ﻣﻲ ﺧﻮﺍﻧﻴﻢ‬

‫ﭼﮕﻮﻧﮕﻲ ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﻱ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﭘﺮﺱ ﻭ ﺟﻮ‬

‫ﺍﻟﮕﻮﺭﻳﺘﻤﻲ ﺑﺮﺍ ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﻱ ﺟﺒﺮﺭﺍﺑﻄﻪ ﺍﻱ‪.‬‬

‫ﭼﮕﻮﻧﮕﻲ ﺗﺮﻛﻴﺐ ﺍﻟﮕﻮ ﺭﻳﺘﻢ ﻫﺎ ﺑﺮﺍﻱ ﻋﻤﻠﻴﺎﺕ ﻫﺎﻱ ﻓﺮﺩﻱ ﺏ ﻣﻨﻈﻮﺭ ﺍ ﺭﺯﻳﺎﺑﻲ ﻛﺎﻣﻞ ﻳﻚ‬
‫ﻋﺒﺎﺭﺕ‪.‬‬

‫♦ ﻓﺼﻞ ﭼﻬﺎﺭﺩﻫﻢ‬

‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﭘﺮﺱ ﻭﺟﻮﻫﺎﻱ ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﻭ ﭼﮕﻮﻧﻪ ﭘﻴﺪﺍ ﻛﻨﻴﻢ ﺭﻭﺵ ﺍﺭﺯﻳﺎﺑﻲ ﻛﻪ ﻛﻤﺘﺮﻳﻦ‬
‫ﻫﺰﻳﻨﻪ ﺭﺍ ﺩﺍﺭﺩ‪.‬‬

‫ﻧﺤﻮﻩ ﺍﻧﺪﺍﺯﻩ ﮔﻴﺮﻱ ﻫﺰﻳﻨﻪ ﺩﺭ ﭘﺮﺱ ﻭ ﺟﻮ‬


‫ﻫﺰﻳﻨﻪ ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ ﻛﻞ ﺯﻣﺎﻥ ﺳﭙﺮﻱ ﺷﺪﻩ ﺑﺮﺍﻱ ﭘﺎﺳﺦ ﺑﻪ ﭘﺮﺱ ﻭ ﺟﺪ ﺍﺳﺖ‬

‫∆ ﻋﻮﺍﻣﻠﻲ ﻛﻪ ﺑﻴﺸﺘﺮﻣﻨﺠﺮ ﺑﻪ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﺯﻣﺎﻥ ﻣﻲ ﺷﻮﻧﺪ‬

‫‪ ‬ﺩﺳﺘﻴﺎﺑﻲ ﺑﻪ ﺩﻳﺴﻚ‪ ،‬ﻭﺍﺣﺪ ﭘﺮﺩﺍﺯﺵ ﻣﺮﻛﺰﻱ ﻭ ﻫﺮ ﻧﻮﻉ ﺍﺭﺗﺒﺎﻁ ﺷﺒﻜﻪ ﺍﻱ‬

‫ﻣﻌﻤﻮﻻ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﺩﻳﺴﻚ ﻫﺰﻳﻨﻪ ﻏﺎﻟﺐ ﺍﺳﺖ ﻭ ﻧﺴﺒﺘﺎ ﺁﺳﺎﻥ ﺑﺮﺁﻭﺭﺩﻣﻲ ﺷﻮﺩ ﻭ ﺍﻧﺪﺍﺯﮔﻴﺮﻱ ﺑﺎ‬
‫ﺗﻮﺟﻪ ﺑﻪ‪:‬‬

‫‪140‬‬
‫∆ ﺗﻌﺪﺍﺩ ﺟﺴﺘﺠﻮ* ﻣﺘﻮﺳﻂ ﻫﺰﻳﻨﻪ ﺟﺴﺘﺠﻮ‬

‫∆ ﺗﻌﺪﺍﺩ ﺑﻠﻮﻙ * ﻣﺘﻮﺳﻂ ﻫﺰﻳﻨﻪ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺑﻠﻮﻙ‬

‫∆ ﺑﺸﻤﺎﺭﻩ ﺑﻠﻮﻙ ﻧﻮﺷﺘﻪ ﺷﺪﻩ * ﻣﺘﻮﺳﻂ ﻫﺰﻳﻨﻪ ﻧﻮﺷﺘﻦ ﺑﻠﻮﻙ‬

‫‪ ‬ﻧﻜﺘﻪ‪:‬ﻫﺰﻳﻨﻪ ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﻳﻚ ﺑﻠﻮﻙ ﺑﻴﺸﺘﺮ ﺍﺯ ﻫﺰﻳﻨﻪ ﺍﻱ ﺑﺮﺍﻱ ﺧﻮﺍﻧﺪﻥ ﻳﻚ‬


‫ﺑﻠﻮﻙ ﺍﺳﺖ‪.‬‬

‫ﺯﻣﺎﻥ ﻧﻮﺷﺘﻦ ﻳﻚ ﺑﻠﻮﻙ ﺍﺯ ﺯﻣﺎﻥ ﺷﺮﻭﻉ ﺑﻪ ﻧﻮﺷﺘﻦ ﺗﺎ ﺣﺼﻮﻝ ﺍﻃﻤﻴﻨﺎﻥ ﺍﺯ ﺻﺤﺖ ﻧﻮﺷﺘﻦ‬
‫ﺍﻃﻼﻋﺎﺕ ﻣﻲ ﺑﺎﺷﺪ‪.‬‬

‫ﺑﺮﺍﻱ ﺳﺎﺩﮔﻲ‪ ،‬ﻓﻘﻂ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﻌﺪﺍﺩﻱ ﺑﻼﻙ ﻫﺎﻱ ﻣﻨﺘﻘﻞ ﺷﺪﻩ ﺍﺯ ﺩﻳﺴﻚ ﻭ ﺗﻌﺪﺍﺩ ﺍﺯ‬
‫ﺟﺴﺘﺠﻮﻫﺎ ﻫﺰﻳﻨﻪ ﻫﺎ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﻛﻨﻴﻢ ‪.‬‬

‫‪ ‬ﺯﻣﺎﻥ ﺍﻧﺘﻘﺎﻝ ﻳﻚ ﺑﻼﻙ ﻳﺎ ‪tT‬‬

‫‪ ‬ﺯﻣﺎﻥ ﺑﺮﺍﻱ ﻳﻚ ﺟﺴﺘﺠﻮ ﻳﺎ ‪tS‬‬

‫‪ ‬ﻫﺰﻳﻨﻪ ﺑﺮﺍﻱ ﺍﻧﺘﻘﺎﻝ ﺗﻌﺪﺍﺩ ‪ b‬ﺑﻼﻙ ﻭ ‪S‬ﺟﺴﺘﺠﻮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪:‬‬


‫‪b * tT + S * tS‬‬
‫ﺑﺮﺍﻱ ﺳﺎﺩﮔﻲ ﻛﺎﺭ ﺍﺭ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﭘﺮﺩﺍﺯﺷﮕﺮ ﻣﺮﻛﺰﻱ ﺻﺮﻑ ﻧﻈﺮ ﻣﻲ ﻛﻨﻴﻢ ‪.‬‬

‫‪ ‬ﻧﻜﺘﻪ ‪ :‬ﺩﺭ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﻭﺍﻗﻌﻲ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ‪ CPU‬ﺣﺘﻤﺎ ﺑﻪ ﺣﺴﺎﺏ ﻣﻲ ﺁﻳﺪ‪.‬‬

‫ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ ﺧﺮﻭﺟﻲ ﺭﻭﻱ ﺩﻳﺴﻚ ﻫﺰﻳﻨﻪ ﺍﻱ ﺭﺍ ﺩﺭ ﻓﺮﻣﻮﻝ ﻫﺰﻳﻨﻪ ﻫﺎ ﺑﻪ ﺣﺴﺎﺏ ﻧﻤﻲ ﺁﻭﺭﻳﻢ ‪.‬‬

‫ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻓﻀﺎﻱ ﺍﺿﺎﻓﻲ ﺑﺎﻓﺮ ﻣﻲ ﺗﻮﺍﻥ ﻫﺰﻳﻨﻪ ﻩ ﺍﻱ ﻭﺭﻭﺩ ﻭ ﺧﺮﻭﺝ ﺍﻃﻼﻋﺎﺕ ﺑﻪ ﺩﻳﺴﻚ ﺭﺍ‬
‫ﻛﺎﻫﺶ ﺩﺍﺩ ‪.‬‬

‫‪ ‬ﻣﻘﺪﺍﺭ ﻭﺍﻗﻌﻲ ﺣﺎﻓﻈﻪ ﺑﺎﻓﺮ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺱ ﺑﺴﺘﮕﻲ ﺑﻪ ﻓﺮﺁﻳﻨﺪﻫﺎﻱ ﻫﻤﺰﻣﺎﻥ ﻭ ﺷﻨﺎﺧﺘﻪ‬
‫ﺷﺪﻩ ﺩﺭ ﺣﻴﻦ ﺍﺟﺮﺍﻱ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺩﺍﺭﺩ ‪.‬‬

‫‪141‬‬
‫‪ ‬ﺍﻏﻠﺐ ﺑﺪﺗﺮﻳﻦ ﺑﺮﺁﻭﺭﺩ ﻣﻤﻜﻦ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﻣﻲ ﮔﻴﺮﻳﻢ ﻛﻪ ﺣﺪﺍﻗﻞ ﻣﻘﺪﺍﺭ ﺣﺎﻓﻈﻪ‬
‫ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺮﺍﻱ ﻋﻤﻠﻴﺎﺕ ﺩﺭ ﺩﺳﺘﺮﺱ ﺍﺳﺖ‬

‫ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﺩﺭ ﺑﺎﻓﺮ ﻗﺮﺍﺭ ﺑﮕﻴﺮﻧﺪ ﻭ ﺍﺯ ﺧﻮﺍﻧﺪﻥ ﻳﺎ ﻧﻮﺷﺘﻦ‬
‫ﺭﻭﻱ ﺩﻳﺴﻚ ﺍﺟﺘﻨﺎﺏ ﻛﻨﻨﺪ‬

‫‪ ‬ﺍﻣﺎ ﻫﺎﺭﺩ ﺩﻳﺴﻚ ﺯﻣﺎﻥ ﺭﺍ ﺑﺮﺍﻱ ﺑﺮﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ ﻫﺎﺩﺭ ﻧﻈﺮ ﻣﻲ ﮔﻴﺮﺩ ‪.‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺍﻧﺘﺨﺎﺑﻲ‬

‫ﺍﺳﻜﻦ ﻓﺎﻳﻞ‪:‬‬

‫ﺍ‬ ‫‪ ‬ﺍﻟﮕﻮﺭﻳﺘﻢ‪)1‬ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ( ﺗﻤﺎﻡ ﻓﺎﻳﻞ ﺭﺍ ﻣﻮﺭﺩ ﺟﺴﺘﺠﻮ ﻗﺮﺍﺭ ﺩﺍﺩﻩ ﻭ ﺗﻤﺎﻡ ﺭﻛﻮﺭﺩﻫﺎ ﺭﺍ ﺏ‬
‫ﺷﺮﻁ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺗﺴﺖ ﻣﻲ ﻛﻨﺪ ﺗﺎ ﺷﺮﻁ ﺩﺭﻫﺮ ﺭﻛﻮﺭﺩ ﺻﺪﻕ ﻛﻨﺪ ﻭ ﺍﻥ ﺭﺍ ﻧﻤﺎﻳﺶ ﻣﻲ ﺩﻫﺪ‬

‫‪Cost estimate = br block transfers + 1 seek‬‬


‫‪Br‬‬
‫ﺗﻌﺪﺍﺩ ﺑﻼﻙ ﻫﺎﻳﻲ ﻛﻪ ﺷﺮﻁ ﺩﺭ ﺭﻛﻮﺭﺩﻫﺎﻱ ﺁﻥ ﺻﺪﻕ ﻛﺮﺩﻩ ﺍﺳﺖ ﺍﺯ ﺭﺍﺑﻄﻪ ‪r‬‬

‫ﻣﺘﻮﻗﻒ‬ ‫ﺍﮔﺮ ﺍﻧﺘﺨﺎﺏ ﺩﺭ ﻳﻚ ﻭﻳﮋﮔﻲ ﻛﻠﻴﺪﻱ ﺍﺳﺖ‪ ،‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺭﻛﻮﺭﺩ ﺭﺍ‬
‫ﻛﻨﺪ‬

‫‪cost = (br /2) block transfers + 1 seek ‬‬


‫ﺟﺴﺘﺠﻮﻱ ﺧﻄﻲ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﻛﺎﺭ ﺑﺮﺩﻩ ﻣﻲ ﺷﻮﺩ ﺑﺎ ﺻﺮﻑ ﻧﻈﺮ ﺩﺍﺷﺘﻦ ﺍﺯ ‪:‬‬

‫‪ ‬ﺷﺮﺍﻳﻂ ﺍﻧﺘﺨﺎﺏ‬

‫‪ ‬ﺗﺮﺗﻴﺐ ﺭﻛﻮﺭﺩﻫﺎ ﺩﺭ ﻓﺎﻳﻞ‬

‫‪ ‬ﺩﺭ ﺩﺳﺘﺮﺱ ﺑﻮﺩﻥ ﻳﻚ ﺷﺎﺧﺺ‬

‫‪ ‬ﺟﺴﺘﺠﻮﻱ ﺩﻭﺩﻭﻳﻲ ﺑﺮﺍﻱ ﺩﺍﺩﻩ ﻫﺎﻳﻲ ﻛﻪ ﺑﺼﻮﺭﺕ ﻣﺮﺗﺐ ﺫﺧﻴﺮﻩ ﻧﺸﺪﻩ ﺍﻧﺪ ﻣﻌﻨﺎﻳﻲ ﻧﺨﻮﺍﻫﺪ‬
‫ﺩﺍﺷﺖ ﺑﺠﺰ ﺯﻣﺎﻧﻲ ﻛﻪ ﺍﻳﻨﺪﻛﺲ ﻫﺎ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳﻲ ﺑﺎﺷﻨﺪ ‪.‬‬
‫‪142‬‬
‫‪Selections Using Indices‬‬

‫♦ ‪ : Index scan‬ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﺟﺴﺘﺠﻮ ﻛﻪ ﺍﺯ ﺷﺎﺧﺺ )ﻋﻨﻮﺍﻥ( ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻨﺪ‪.‬‬

‫‪ ‬ﺷﺮﺍﻳﻂ ﺍﻧﺘﺨﺎﺏ ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮ ﺑﺎﻳﺪ ﺑﺮ ﺭﻭﻱ ﻛﻠﻴﺪ ﺷﺎﺧﺺ ﺑﺎﺷﺪ ‪.‬‬

‫♦ )‪ : A2 (primary index, equality on key‬ﺑﺎﺯﻳﺎﺑﻲ ﺗﻨﻬﺎ ﻳﻚ ﺭﻛﻮﺭﺩ ﻛﻪ ﺷﺮﻁ ﺯﻳﺮ‬


‫ﺩﺭ ﺁﻥ ﺻﺎﺩﻕ ﺍﺳﺖ‪:‬‬

‫)‪Cost = (hi + 1) * (tT + tS‬‬

‫♦ )‪ : A3 (primary index, equality on non key‬ﺑﺎﺯﻳﺎﺑﻲ ﭼﻨﺪ ﺭﻛﻮﺭﺩ‪ ،‬ﻛﻪ‬


‫ﺭﻛﻮﺭﺩﻫﺎ ﺑﺼﻮﺭﺕ ﻣﺘﻮﺍﻟﻲ ﺧﻮﺍﻫﻨﺪ ﺑﻮﺩ ‪.‬‬

‫‪ :Let b ‬ﺗﻌﺪﺍ ﺑﻠﻮﻙ ﻫﺎﻳﻲ ﻛﻪ ﺭﻛﻮﺭﺩﻫﺎﻱ ﺁﻥ ﻣﻄﺎﺑﻘﺖ ﺩﺍﺭﺩ )ﺷﺮﻁ ﺩﺭ ﺁﻥ ﻫﺎ‬


‫ﺻﺎﺩﻕ ﺑﻮﺩﻩ ﺍﺳﺖ (‪:‬‬

‫‪Cost = hi * (tT + tS) + tS + tT * b‬‬

‫‪ :A4 (secondary index, equality on nonkey). ‬ﺑﺎﺯﻳﺎﺑﻲ ﻳﻚ ﺗﻚ ﺭﻛﻮﺭﺩ ﺩﺭ‬


‫ﺻﻮﺭﺗﻴﻜﻪ ﻛﻠﻴﺪ ﺟﺴﺘﺠﻮ ﻛﻠﻴﺪ ﻛﺎﻧﺪﻳﺪ ﺍﺳﺖ‬

‫)‪Cost = (hi + 1) * (tT + tS‬‬

‫‪ ‬ﺑﺎﺯﻳﺎﺑﻲ ﻳﻚ ﺗﻚ ﺭﻛﻮﺭﺩ ﺩﺭ ﺻﻮﺭﺗﻴﻜﻪ ﻛﻠﻴﺪ ﺟﺴﺘﺠﻮ ﻛﻠﻴﺪ ﻛﺎﻧﺪﻳﺪ ﻧﻴﺴﺖ ‪.‬‬

‫‪ ‬ﻫﺮﻳﻚ ﺍﺯ ‪ n‬ﺭﻛﻮﺭﺩﻱ ﻛﻪ ﺗﻄﺒﻴﻖ ﺩﺍﺭﻧﺪ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﺑﻼﻙ ﻫﺎﻱ ﻣﺨﺘﻠﻔﻲ‬


‫ﺑﺎﺷﻨﺪ‪.‬‬

‫)‪Cost = (hi + n) * (tT + tS‬‬

‫‪ ‬ﻣﻤﻜﻦ ﺍﺳﺖ ﻫﺰﻳﻨﻪ ﺑﺴﻴﺎﺭ ﺑﺎﻻﻳﻲ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪.‬‬

‫‪143‬‬
‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺧﺎﺭﺟﻲ‬

‫ﺍﺟﺮﺍﻱ ﺗﻜﻨﻴﻚ ﻣﺮﺗﺐ ﺳﺎﺯﻱ‪:‬‬

‫‪ .1‬ﺩﺭ ﺣﺎﻟﺖ ﺍﻭﻟﻴﻪ ‪ i‬ﺻﻔﺮ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮﺩ‪.‬‬

‫‪ .2‬ﻣﺮﺍﺣﻞ ﺯﻳﺮ ﺗﺎ ﺍﻧﺘﻬﺎ ﺗﻜﺮﺍﺭ ﺷﻮﺩ‪:‬‬


‫‪ .a‬ﺧﻮﺍﻧﺪﻥ ﺑﻼﻙ ﺭﺍﺑﻄﻪ ﺍﻱ ﺍﺯ ﺣﺎﻓﻈﻪ‬
‫‪ .b‬ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺩﺭ ﺑﻼﻙ ﻫﺎﻱ ﺣﺎﻓﻈﻪ‬
‫‪ .c‬ﻧﻮﺷﺘﻦ ﺩﺍﺩﻩ ﻫﺎﻱ ﻣﺮﺗﺐ ﺷﺪﻩ ﺑﺮﺍﻱ ﺍﺟﺮﺍ‬

‫‪ .3‬ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ‪ i‬ﺑﻪ ‪ N‬ﺗﻌﻠﻖ ﮔﻴﺮﺩ‪.‬‬

‫ﺍﺟﺮﺍﻱ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ) ‪ n‬ﺭﺍﻩ ﺍﺩﻏﺎﻡ(‬

‫ﻓﺮﺽ ﻣﻲ ﻛﻨﻴﻢ ‪: N < M‬‬

‫‪ N .1‬ﺑﻼﻙ ﺣﺎﻓﻈﻪ ﺑﺮﺍﻱ ﺑﺎﻓﺮ ﻭﺭﻭﺩﻱ ﻭ ﻳﻚ ﺑﻼﻙ ﺑﺮﺍﻱ ﺑﺎﻓﺮ ﺧﺮﻭﺟﻲ ﺩﺭ ﻧﻈﺮ‬
‫ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ‪ .‬ﺍﻭﻟﻴﻦ ﺑﻼﻙ ﻫﺮ ﺻﻔﺤﻪ ﺑﺎﻓﺮ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ .2‬ﺗﻜﺮﺍﺭ‬

‫‪ .1‬ﺍﻧﺘﺨﺎﺏ ﺍﻭﻟﻴﻦ ﺭﻛﻮﺭﺩ ﻣﺮﺗﺐ ﺷﺪﻩ ﺩﺭ ﻫﻤﻪ ﺻﻔﺤﺎﺕ ﺑﺎﻓﺮ ‪.‬‬

‫‪ .2‬ﻧﻮﺷﺘﻦ ﺭﻛﻮﺭﺩ ﺩﺭ ﺑﺎﻓﺮ ﺧﺮﻭﺟﻲ‪.‬‬

‫‪ .3‬ﺣﺬﻑ ﺭﻛﻮﺭﺩ ﺍﺯ ﺑﺎﻓﺮ ﻭﺭﻭﺩﻱ ﺍﻟﺒﺘﻪ ﺩﺭ ﺻﻮﺭﺗﻴﻜﻪ‪ ،‬ﺻﻔﺤﻪ ﺑﺎﻓﺮ ﺧﺎﻟﻲ ﺷﺪﻩ ﺑﺎﺷﺪ‬
‫ﺳﭙﺲ ﺑﻼﻙ ﺑﻌﺪﻱ ﺍﺟﺮﺍ ﺷﺪﻩ ﺩﺭ ﺑﺎﻓﺮ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺑﺎﺷﺪ ‪.‬‬

‫‪ .3‬ﺗﺎ ﺍﻳﻨﻜﻪ ﻫﻤﻪ ﺻﻔﺤﺎﺕ ﺑﺎﻓﺮ ﻭﺭﻭﺩﻱ ﺧﺎﻟﻲ ﺷﻮﺩ‪.‬‬

‫‪144‬‬
‫ﺍﮔﺮ ‪ N ≥ M‬ﭼﻨﺪ ﻣﺮﺣﻠﻪ ﺑﺎﻳﺪ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪:‬‬

‫ﺩﺭ ﻫﺮ ﮔﺬﺭﮔﺎﻩ ﻳﺎ ﭘﺎﺱ‪‌ ،‬ﮔﺮﻭﻩ ﻫﺎﻱ ﺑﻪ ﻫﻢ ﭘﻴﻮﺳﺘﻪ ﺍﺯ ‪ M-1‬ﺍﺟﺮﺍ ﻭ ﺑﺎ ﻫﻢ ﺍﺩﻏﺎﻡ ﻣﻲ‬


‫ﺷﻮﻧﺪ‪.‬‬

‫ﺩﺭ ﻫﺮ ﭘﺎﺱ ﻓﺎﻛﺘﻮﺭﻱ ﺍﺯ ‪ M‬ﺑﺎ ﺍﺟﺮﺍﻱ ‪ M-1‬ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮﺩ ﻭ ﺍﺟﺮﺍ ﺑﺎ ﻓﺎﻛﺘﻮﺭﻱ ﻛﻪ‬
‫ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺍﺩﺍﻣﻪ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﺪ‪ ) .‬ﻣﻘﺪﺍﺭ ‪ M‬ﺑﺮﺍﻱ ﻣﺮﺣﻠﻪ ﺑﻌﺪ ﻳﻜﻲ ﻛﻢ ﻣﻲ ﺷﻮﺩ ‪(.‬‬

‫‪ Θ‬ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺍﮔﺮ ‪ M=11‬ﺑﺎﺷﺪ‪ ،‬ﻭ ‪ 90‬ﺍﺟﺮﺍ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪ ،‬ﻳﻚ ﭘﺎﺱ ﺗﻌﺪﺍﺩ‬
‫ﺍﺟﺮﺍﻫﺎ ﺭﺍ ﺑﻪ ‪ 9‬ﻛﺎﻫﺶ ﺩﺍﺩﻩ‪ ،‬ﻛﻪ ﻫﺮ ﻛﺪﺍﻡ ‪ 10‬ﺑﺮﺍﺑﺮ ﺍﺟﺮﺍﻱ ﺍﻭﻟﻴﻪ ﺍﺳﺖ‪.‬‬

‫ﭘﺎﺱ ﻫﺎ ﭘﺸﺖ ﺳﺮﻫﻢ ﻭ ﻣﻜﺮﺭﺍ ﺍﺟﺮﺍ ﺷﺪﻩ ﺗﺎ ﻫﻤﻪ ﺑﺎ ﻫﻢ ﺍﺩﻏﺎﻡ ﺷﻮﻧﺪ ‪.‬‬

‫ﻣﺜﺎﻝ‪ :‬ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺧﺎﺭﺟﻲ ﺗﻮﺳﻂ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ‬

‫ﺑﺮﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ‪:‬‬

‫ﺍﺟﺮﺍﻱ ﺍﺩﻏﺎﻡ ﻫﺮ ﺑﻠﻮﻙ ﻣﻨﺠﺮ ﺑﻪ ﺗﻌﺪﺍﺩ ﺯﻳﺎﺩﻱ ﺟﺴﺘﺠﻮ ﻣﻴﺸﻮﺩ ‪.‬‬

‫‪145‬‬
‫‪ ‬ﺩﺭ ﺍﺯﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ ‪ bb‬ﺑﻠﻮﻙ ﻫﺎﻱ ﺑﺎﻓﺮ ﺩﺭ ﻫﺮ ﺍﺟﺮﺍ )ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ‪bb‬‬
‫ﺑﻠﻮﻙ ﺩﺭ ﻳﻚ ﺯﻣﺎﻥ (‪.‬‬

‫ﺍﺩﻏﺎﻡ ﺍﺟﺮﺍ ﺷﺪﻩ ﺩﺭ ﻳﻚ ﭘﺎﺱ‪M/bb–1 :‬‬

‫ﺗﻌﺪﺍﺩ ﻛﻞ ﺍﺩﻏﺎﻡ ﺩﺭ ﻫﺮ ﭘﺎﺱ ‪log M/bb–1(br/M)‬‬

‫ﺑﻠﻮﻙ ﻫﺎﻱ ﻣﻨﺘﻘﻞ ﺷﺪﻩ ﺑﺮﺍﻱ ﺍﺟﺮﺍﻱ ﺍﻭﻟﻴﻪ ﻫﺮ ﭘﺎﺱ ‪ 2br‬ﺍﺳﺖ ‪.‬‬

‫ﺩﺭ ﺁﺧﺮﻳﻦ ﭘﺎﺱ ﻫﺰﻳﻨﻪ ﻧﻮﺷﺘﻦ ﺣﺴﺎﺏ ﻧﻤﻲ ﺷﻮﺩ ‪.‬‬

‫‪ ‬ﻣﺎ ﺍﺯ ﻫﺰﻳﻨﻪ ‪ Write‬ﻧﻬﺎﻳﻲ ﺑﺮﺍﻱ ﺗﻤﺎﻡ ﻋﻤﻠﻴﺎﺕ ﻫﺎ ﺻﺮﻑ ﻧﻈﺮ ﻣﻲ ﻛﻨﻴﻢ‬


‫ﭼﺮﺍ ﻛﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﺧﺮﻭﺟﻲ ﺑﻪ ﻋﻤﻠﻴﺎﺕ ﺩﻳﮕﺮﻱ ﻓﺮﺳﺘﺎﺩﻩ ﺷﺪﻩ ﺑﺎﺷﺪ‬
‫ﻭ ﻫﻴﭻ ﮔﻮﻧﻪ ﻋﻤﻠﻴﺎﺕ ‪ write‬ﺭﻭﻱ ﺩﻳﺴﻚ ﺍﻧﺠﺎﻡ ﻧﺸﻮﺩ‪.‬‬

‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺗﻌﺪﺍﺩ ﻛﻞ ﻧﻘﻞ ﻭﺍﻧﺘﻘﺎﻻﺕ ﺑﺮﺍﻱ ﺍﻳﻦ ﻧﻮﻉ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ‪.‬‬
‫)‪br ( 2 log M/bb–1 (br / M) + 1‬‬
‫ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﺟﺴﺘﺠﻮ‪:‬‬

‫ﺩﺭ ﻃﻮﻝ ﺍﺟﺮﺍ ‪ :‬ﺩﺭ ﻫﺮ ﺍﺟﺮﺍﻳﻚ ﺟﺴﺘﺠﻮ ﺑﺮﺍﻱ ﺧﻮﺍﻧﺪﻥ ﻭ ﻳﻚ ﺟﺴﺘﺠﻮ ﺑﺮﺍﻱ ﻧﻮﺷﺘﻦ‬
‫ﻭﺟﻮﺩ ﺩﺍﺭﺩ‬

‫‪2 br / M‬‬

‫ﻃﻮﻝ ﻓﺎﺯ ﺍﺩﻏﺎﻡ ﻧﻴﺎﺯ ﺩﺍﺭﺩ ﺑﻪ ‪ 2 br / bb‬ﺟﺴﺘﺠﻮ ﺑﺮﺍﻱ ﻫﺮ ﺍﺩﻏﺎﻡ ﺩﺭ ﻫﺮﭘﺎﺱ )ﺑﺠﺰ‬
‫ﻣﺮﺣﻠﻪ ﻧﻬﺎﻳﻲ ﻛﻪ ﻧﻴﺎﺯﻱ ﺑﻪ ﻧﻮﺷﺘﻦ ﻧﻴﺴﺖ (‬

‫ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﻲ ﺟﺴﺘﺠﻮ ﺧﻮﺍﻫﺪ ﺷﺪ ‪:‬‬

‫)‪2 br / M + br / bb (2 logM/bb–1(br / M) -1‬‬

‫‪146‬‬
‫ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﻠﻮﻙ ﻫﺎﻱ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮﺩﺭﺗﻮ‬

‫‪s‬‬ ‫‪r‬‬ ‫ﻣﺤﺎﺳﺒﻪ ﺗﺘﺎ‬

‫‪for each tuple tr in r do begin‬‬


‫‪for each tuple ts in s do begin‬‬
‫‪test pair (tr,ts) to see if they satisfy the join condition θ‬‬

‫‪if they do, add tr • ts to the result.‬‬


‫‪end‬‬
‫‪end‬‬
‫ﻋﻨﻮﺍﻥ ﺍﺭﺗﺒﺎﻁ ﺩﺭﻭﻧﻲ ﺩﺭﻳﻚ ﭘﻴﻮﻧﺪ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫‪ r‬ﺑﻪ ﻋﻨﻮﺍﻥ ﺍﺭﺗﺒﺎﻁ ﺑﻴﺮﻭﻧﻲ ﻭ ‪ s‬ﺏ‬

‫ﺑﺪﻭﻥ ﺩﺭﻧﻈﺮﮔﺮﻓﺘﻦ ﺷﺎﺧﺺ ﻫﺎ ﺑﺎ ﻫﺮ ﺷﺮﺍﻳﻄﻲ ﭘﺬﻳﺮﺵ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﻧﺠﺎﻡ ﮔﻴﺮﺩ‪.‬‬

‫ﺩﺭ ﺍﺭﺗﺒﺎﻃﺎﺕ ﺩﻭﻃﺮﻓﻪ ﻫﺰﻳﻨﻪ ﻫﺎ ﺑﺎﻳﺪ ﺑﺮﺭﺳﻲ ﺷﻮﺩ‪.‬‬


‫ﻫﺰﻳﻨﻪ ﺑﺮﺍﻱ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺑﺮﺁﻭﺭﺩ ﺷﺪﻩ ﺍﺳﺖ ﻛﻪ ﻓﻀﺎﻱ ﻣﻮﺟﺪ ﺩﺭ ﺣﺎﻓﻈﻪ ﺗﻨﻬﺎ ﺑﺮﺍﻱ ﻳﻚ ﺑﻼﻙ‬
‫ﺍﺯ ﻫﺮ ﺭﺍﺑﻄﻪ ﻛﺎﻓﻲ ﺍﺳﺖ‪.‬‬
‫‪nr ∗ bs + br‬‬
‫‪nr + br‬‬
‫ﺭﺍﺑﻄﻪ ﻛﻮﭼﻜﻲ ﻛﻪ ﺑﻪ ﻃﻮﺭﻛﺎﻣﻞ ﺩﺭﺣﺎﻓﻈﻪ ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﺑﻪ ﻋﻨﻮﺍﻥ ﺭﺍﺑﻄﻪ ﺩﺭﻭﻧﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ‬
‫ﺷﻮﺩ‪.‬‬

‫‪ ‬ﻛﺎﻫﺶ ﻫﺰﻳﻨﻪ ﺑﻼﻙ ﺍﻧﺘﻘﺎﻟﻲ‪br + bs :‬‬

‫ﺑﺮﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ ﺑﺎﻓﺮﺽ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺩﺭﺩﺳﺘﺮﺱ ﺑﻮﺩﻥ ﺣﺎﻓﻈﻪ‬

‫‪ ‬ﺩﺍﻧﺶ ﺁﻣﻮﺯﺍﻥ ﺑﻪ ﻋﻨﻮﺍﻥ ﺭﺍﺑﻄﻪ ﺧﺎﺭﺟﻲ‬

‫‪147‬‬
‫‪5000 ∗ 400 + 100 = 2,000,100 block transfers, n‬‬
‫‪5000 + 100 = 5100 seeks n‬‬
‫‪ ‬ﻣﺪﺗﻲ ﻛﻪ ﺭﺍﺑﻄﻪ ﺧﺎﺭﺟﻲ ﺑﻪ ﻃﻮﻝ ﻣﻲ ﺍﻧﺠﺎﻣﺪ‬

‫‪10000 ∗ 100 + 400 = 1,000,400 block transfers and n‬‬


‫‪10,400 seeks‬‬
‫ﺍﮔﺮ ﺍﺭﺗﺒﺎﻁ ﺩﺍﻧﺸﺠﻮﻳﻲ ﺑﻪ ﻃﻮﺭ ﻛﺎﻣﻞ ﺩﺭ ﺣﺎﻓﻈﻪ ﻗﺮﺍﺭ ﺑﮕﻴﺮ ﺩ ﻫﺰﻳﻨﻪ ﺑﺮﺁﻭﺭﺩ ﺷﺪﻩ ﺑﺮﺍﻱ‬
‫ﺍﻧﺘﻘﺎﻝ‪500‬ﺑﻼﻙ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬

‫ﺍﻟﮕﻮﺭﻳﺘﻢ ‪ Block nested-loops‬ﺍﻧﺘﺨﺎﺏ ﺑﺮﺗﺮﻱ ﺍﺳﺖ‪.‬‬

‫ﻧﻮﻉ ﺩﻳﮕﺮ ﺍﺯ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﭘﻴﻮﺳﺘﻦ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺁﻥ ﻫﺮ ﺑﻠﻮﻙ ﺍﺯ ﺭﺍﺑﻄﻪ ﺩﺭﻭﻧﻲ ﺑﺎ‬
‫ﻫﺮ ﺑﻠﻮﻙ ﺍﺯ ﺭﺍﺑﻄﻪ ﺑﻴﺮﻭﻧﻲ ﻳﻚ ﺯﻭﺝ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬

‫‪for each block Br of r do begin‬‬


‫‪for each block Bs of s do begin‬‬
‫‪for each tuple tr in Br do begin‬‬
‫‪for each tuple ts in Bs do begin‬‬
‫‪Check if (tr,ts) satisfy the join condition‬‬
‫‪if they do, add tr • ts to the result.‬‬
‫‪end‬‬
‫‪end‬‬
‫‪end‬‬
‫‪end‬‬
‫ﺑﺮﺁﻭﺭﺩ ﺑﺪﺗﺮﻳﻦ ﺷﺮﺍﻳﻂ ﺑﻪ ﺍﻳﻦ ﺷﻜﻞ ﺍﺳﺖ ‪:‬‬

‫‪br ∗ bs + br block transfers + 2 * br seeks‬‬


‫ﻫﺮﺑﻠﻮﻙ ﺩﺭﺭﺍﺑﻄﻪ ﺩﺭﻭﻧﻲ ‪s‬ﻛﻪ ﺑﻪ ﺍﺯﺍﻱ ﻫﺮ ﺑﻠﻮﻙ ﺭﺍﺑﻄﻪ ﺑﻴﺮﻭﻧﻲ ﻳﻜﺒﺎﺭ ﺧﻮﺍﻧﺪﻩ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪148‬‬
‫ﺑﻬﺘﺮﻳﻦ ﺑﺮﺁﻭﺭﺩ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ‪:‬‬

‫‪br + bs block transfers + 2 seeks‬‬


‫ﺭﺍﻩ ﻫﺎﻳﻲ ﺑﺮﺍﻱ ﺑﻬﺒﻮﺩ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﻭ ﺑﻠﻮﻙ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﺣﻠﻘﻪ ﺗﻮ ﺩﺭ ﺗﻮ‪:‬‬

‫‪ l‬ﺩﺭ ﺑﻠﻮﻙ ﺣﻠﻘﻪ ﺗﻮ ﺩﺭ ﺗﻮ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ M — 2‬ﺑﻠﻮﻙ ﺩﻳﺴﻚ ﻭﺍﺣﺪ ﺭﻭﺍﺑﻂ ﺑﻴﺮﻭﻧﻲ‬
‫ﻣﺴﺪﻭﺩ ﻣﻲ ﺷﻮﺩ‪ ،‬ﻛﻪ ﺩﺭ ﺁﻥ ‪ = M‬ﺍﻧﺪﺍﺯﻩ ﺑﻠﻮﻙ ﻫﺎﻱ ﺣﺎﻓﻈﻪ؛ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻭ ﺑﻠﻮﻙ ﺑﺎﻗﻲ‬
‫ﻣﺎﻧﺪﻩ ﺑﺮﺍﻱ ﺑﺎﻓﺮ ﺭﺍﺑﻄﻪ ﺩﺭﻭﻧﻲ ﻭ ﺧﺮﻭﺟﻲ‬

‫‪Cost = br / (M-2) ∗ bs + br block transfers +2 br / (M-2) seeks‬‬


‫‪ l‬ﺍﮔﺮ ﻣﺸﺨﺼﻪ ﻫﺎﻱ ﭘﻴﻮﻧﺪ ﺷﻜﻠﻲ ﺍﺯ ﻳﻚ ﻛﻠﻴﺪ ﻳﺎ ﺭﺍﺑﻄﻪ ﺩﺍﺧﻠﻲ ﺑﺎﺷﺪ ﺩﺍﺧﻠﻲ ﺗﺮﻳﻦ ﺣﻠﻘﻪ‬
‫ﺩﺭ ﺍﺑﺘﺪﺍﻱ ﻛﺎﺭ ﻣﺘﻮﻗﻒ ﻣﻴﺸﻮﺩ‪.‬‬

‫‪ l‬ﺣﺮﻛﺖ)ﺍﺟﺮﺍﻱ( ﻣﺘﻨﺎﻭﺏ ﺣﻠﻘﻪ ﺩﺭﻭﻧﻲ ﺭﻭ ﺑﻪ ﺟﻠﻮ ﻭ ﻋﻘﺐ‪ ،‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﻠﻮﻙ ﻫﺎﻱ ﺑﺎﻗﻲ‬
‫ﻣﺎﻧﺪﻩ ﺩﺭ ﺑﺎﻓﺮ )ﺑﺎ ﺟﺎﻳﮕﺰﻳﻨﻲ ‪.(LRU‬‬

‫‪ ‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺷﺎﺧﺺ ﺩﺭ ﺍﺭﺗﺒﺎﻁ ﺩﺭﻭﻧﻲ ﺍﮔﺮ ﺩﺭ ﺩﺳﺘﺮﺱ ﺍﺳﺖ )ﺍﺳﻼﻳﺪ ﺑﻌﺪﻱ(‪.‬‬

‫ﭘﻴﻮﻧﺪ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ‬


‫‪ n‬ﻣﺮﺍﺟﻌﺎﺕ ﺑﻪ ﺷﺎﺧﺺ ﻣﻲ ﺗﻮﺍﻧﺪ ﺟﺎﻳﮕﺰﻳﻦ ﺍﺳﻜﻦ ﻫﺎﻱ ﻓﺎﻳﻞ ﺷﻮﺩ ﺍﮔﺮ‬

‫‪ l‬ﭘﻴﻮﻧﺪ ‪ equi-join‬ﻳﺎ ‪ natural join‬ﺍﺳﺖ ﻭ‬

‫‪ l‬ﻣﺸﺨﺼﻪ ﭘﻴﻮﻧﺪ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺱ ﺑﻮﺩﻥ ﻳﻚ ﺷﺎﺧﺺ ﺭﻭﻱ ﺍﺭﺗﺒﺎﻁ ﺩﺭﻭﻧﻲ ﺍﺳﺖ ‪.‬‬

‫‪ ‬ﻣﻲ ﺗﻮﺍﻥ ﻳﻚ ﺷﺎﺧﺺ ﻓﻘﻂ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﭘﻴﻮﻧﺪ ﻫﺎ ﺍﻳﺠﺎﺩ ﻛﺮﺩ‪.‬‬

‫‪ n‬ﺑﺮﺍﻱ ﻫﺮ ﺗﺎﭘﻞ ‪ TR‬ﺩﺭ ﺭﺍﺑﻄﻪ ﻱ ﺑﻴﺮﻭﻧﻲ ‪ ،R‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺷﺎﺧﺺ ﺑﺮﺍﻱ ﻣﺮﺍﺟﻌﻪ ﺑﻪ ﺗﺎﭘﻞ ﻫﺎ ﺩﺭ ‪s‬‬
‫ﻛﻪ ﺷﺮﺍﻳﻂ ﭘﻴﻮﺳﺘﻦ ﺑﻪ ﺗﺎﭘﻞ ‪ TR‬ﺑﺮﺁﻭﺭﺩ ﺷﺪﻩ ﺍﺳﺖ ‪.‬‬

‫‪149‬‬
‫‪ n‬ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ‪ :‬ﻓﻀﺎﻳﺎﻓﺮ ﻓﻘﻂ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ﻳﻚ ﺻﻔﺤﻪ ﺍﺯ ‪ r‬ﺑﺎﺷﺪﻭﺑﺮﺍﻱ ﻫﺮﺗﺎﭘﻞ ﺩﺭ ‪ r‬ﻣﺎ ﺑﻪ ﺷﺎﺧﺺ‬
‫ﻣﺮﺍﺟﻌﻪ ﻛﻨﻴﻢ‪.‬‬

‫‪Cost of the join: br (tT + tS) + nr ∗ c n‬‬


‫‪ l‬ﺟﺎﻳﻲ ﻛﻪ ‪ c‬ﻫﺴﺖ ﻫﺰﻳﻨﻪ ﺷﺎﺧﺺ ﻭ ﻭﺍﻛﺸﻲ ﻫﻤﻪ ﻣﻄﺎﺑﻖ ﺗﺎﻳﻞ ‪ s‬ﺑﺮﺍﻱ ﻳﻚ ﺗﺎﭘﻞ ﻳﺎ ‪r‬‬
‫ﺩﺭﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ C‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺮﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ ﺷﻮﺩ ﺍﺯ ﺗﻨﻬﺎ ﻳﻚ ﺍﻧﺘﺨﺎﺏ ﺭﻭﻱ ﺗﺎﭘﻞ ‪ s‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺷﺮﺍﻳﻂ ﭘﻴﻮﻧﺪ‪.‬‬

‫‪ n‬ﺍﮔﺮﺷﺎﺧﺺ ﻫﺎﻱ ﻗﺎﺑﻞ ﺩﺳﺘﺮﺱ ﺗﺎﭘﻞ ‪ r‬ﻭ ‪ s‬ﺩﺍﺭﻱ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﭘﻴﻮﻧﺪ ﺑﺎﺷﻨﺪ ﺍﺯ ﺍﺭﺗﺒﺎﻁ ﺑﺎ ﺗﺎﭘﻞ‬
‫ﻫﺎﻱ ﻛﻤﺘﺮﻱ ﺑﻪ ﻋﻨﻮﺍﻥ ﺍﺭﺗﺒﺎﻁ ﺑﻴﺮﻭﻧﻲ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻨﺪ ‪.‬‬

‫ﻣﺜﺎﻝ ﺍﺯ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﭘﻴﻮﻧﺪ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ‬


‫ﻣﺤﺎﺳﺒﻪ ﻣﺜﺎﻝ ﺩﺍﻧﺸﺠﻮﻳﻲ ‪،‬ﺩﺍﻧﺸﺠﻮ ﺑﻪ ﻋﻨﻮﺍﻥ ﺭﺍﺑﻄﻪ ﺧﺎﺭﺟﻲ ﺩﺭﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ ‪.‬‬

‫‪ID‬ﺑﺎ ﺳﻪ ﺷﺎﺧﺺ ﻛﻪ ﺩﺭ ﻫﺮ‬ ‫ﺍﺟﺎﺯﻩ ﺩﻫﻴﺪ ‪B+‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻛﻠﻴﺪ ﺍﺻﻠﻲ ﮔﺮﻓﺘﻪ ﺷﻮﺩ ﺭﻭﻱ ﻓﻴﻠﺪ‬
‫ﻣﺮﺣﻠﻪ ‪ 20‬ﻭﺭﻭﺩﻱ ﺩﺍﺭﺩ‪.‬‬

‫ﺍﺯ ﺁﻧﺠﺎﻛﻪ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ‪10000‬ﺗﺎﭘﻞ ﺑﺎ ﺍﺭﺗﻔﺎﻉ ﺩﺭﺧﺖ ‪ 4‬ﺯﻣﺎﻧﺒﺮ ﺍﺳﺖ ﻭ ﺑﻴﺸﺘﺮ ﺩﺳﺘﺮﺳﻲ ﺑﻪ‬
‫ﺩﺍﺩﻩ ﺍﺻﻠﻲ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪.‬‬

‫ﺗﺎﭘﻞ‪ 5000‬ﺩﺍﻧﺸﺠﻮﻳﻲ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪: Cost of block nested loops join‬‬

‫‪400*100 + 100 = 40,100 block transfers + 2 * 100 = 200 ‬‬


‫‪seeks‬‬
‫‪ ‬ﺑﺎ ﻓﺮﺽ ﺑﺪﺗﺮﻳﻦ ﺣﺎﻟﺖ ﺣﺎﻓﻈﻪ‬

‫‪ ‬ﺷﺎﻳﺪ ﺑﺎ ﺣﺎﻓﻈﻪ ﺑﻴﺸﺘﺮ ﺑﻪ ﻃﻮﺭ ﻗﺎﺑﻞ ﺗﻮﺟﻬﻲ‬

‫‪: Cost of indexed nested loops join‬‬

‫‪150‬‬
‫‪100 + 5000 * 5 = 25,100 block transfers and seeks. ‬‬
‫‪ ‬ﻫﺰﻳﻨﻪ ﻫﺎﻱ ‪CPU‬ﺑﻪ ﺗﻈﺮ ﻣﻴﺮﺳﺪ ﻛﻪ ﻛﻤﺘﺮﺍﺯ ﭘﻴﻮﻧﺪ ﺑﻠﻮﻙ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮﺳﺖ ‪.‬‬

‫‪: Merge - Join‬‬


‫ﻣﺮﺗﺐ ﻛﺮﺩﻥ ﻫﺮﺩﻭﺍﺭﺗﺒﺎﻁ ﺑﺮ ﺍﺳﺎﺱ ﻓﻴﻠﺪ ﭘﻴﻮﻧﺪ)ﺍﮔﺮ ﻗﺒﻼ ﻣﺮﺗﺐ ﻧﺸﺪﻩ ﺑﺎﺷﺪ(‪.‬‬

‫ﺍﺩﻏﺎﻡ ﺭﻭﺍﺑﻂ ﻣﺮﺗﺐ ﺷﺪﻩ ﺑﺮﺍﻱ ﭘﻴﻮﻧﺪ ﺁﻧﻬﺎ‪:‬‬

‫‪ .1‬ﮔﺎﻡ ﭘﻴﻮﻧﺪ ﺷﺒﻴﻪ ﺑﻪ ﺍﺩﻏﺎﻡ ﺩﺭ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺍﺳﺖ ‪.‬‬

‫‪ .2‬ﺍﺧﺘﻼﻑ ﺍﺻﻠﻲ ﺩﺭ ﻫﻨﺪﻝ ﻛﺮﺩﻥ ﻣﻘﺎﺩﻳﺮ ﺷﺒﻴﻪ ﺑﻪ ﻫﻢ ﺩﺭ ﻓﺎﻳﻞ ﭘﻴﻮﺳﺘﮕﻲ ﺍﺳﺖ‪ ،‬ﻫﺮﺟﻔﺖ‬
‫ﺩﺭ ﻓﺎﻳﻞ ﭘﻴﻮﺳﺘﮕﻲ ﺑﺎﻳﺪ ﺩﺍﺭﺍﻱ ﻣﻘﺎﺩﻳﺮ ﻳﻜﺴﺎﻥ ﺑﺎﺵﻧﺪ ‪.‬‬

‫‪ ‬ﺍﻳﻦ ﺭﻭﺵ ﻣﻲ ﺗﻮﺍﻧﺪ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﻓﻘﻂ ﺑﺮﺍﻱ ﭘﻴﻮﻧﺪﻫﺎﻱ ﻃﺒﻴﻌﻲ ﻭ ﭘﻴﻮﻧﺪﻫﺎﻱ ﻣﻌﺎﺩﻝ ﺑﺎﺷﻨﺪ ‪.‬‬

‫‪ ‬ﻫﺮ ﺑﻠﻮﻙ ﻧﻴﺎﺯ ﺑﻪ ﺗﻨﻬﺎ ﻳﻚ ﺑﺎﺭ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻥ ﺩﺍﺭﺩ )ﻓﺮﺽ ﺗﻤﺎﻡ ﺗﺎﭘﻞ ﻫﺎﺑﺮﺍﻳﮕﺮﻓﺘﻦ ﻫﺮ‬
‫ﻣﻘﺪﺍﺭﻣﺸﺨﺺ ﺍﺯ ﻓﻴﻠﺪ ﭘﻴﻮﺳﺘﮕﻲ ﺩﺭﺣﺎﻓﻈﻪ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ (‪.‬‬

‫‪ ‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻫﺰﻳﻨﻪ ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ‪:‬‬


‫‪br + bs block transfers + br / bb + bs / bb seeks‬‬
‫)ﺑﻌﻼﻭﻩ ﻫﺰﻳﻨﻪ ﻣﺮﺗﺐ ﺷﺪﻥ ﺩﺭﺻﻮﺭﺗﻲ ﻛﻪ ﻣﺮﺗﺐ ﻧﺒﺎﺷﺪ ( ‪.‬‬

‫‪151‬‬
‫‪ :hybrid merge-join ‬ﺍﮔﺮﺭﺍﺑﻄﻪ ﺍﻱ ﻣﺮﺗﺐ ﺷﺪﻩ ﻭ ﺍﺯ ﺳﻮﻱ ﺩﻳﮕﺮ ‪secondary B+-‬‬
‫‪tree index‬ﺭﻭﻱ ﻓﺎﻳﻞ ﭘﻴﻮﺳﺘﮕﻲ ﺍﺳﺖ‪.‬‬

‫ﺍﺩﻏﺎﻡ ﺭﺍﺑﻄﻪ ﻣﺮﺗﺐ ﺷﺪﻩ ﺑﺎ ﺑﺮگ ﻧﻮﺷﺘﻪ ﻫﺎﻱ ‪.B+-tree‬‬

‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﻧﺘﻴﺠﻪ ﺑﺮﺭﻭﻱ ﺍﺩﺭﺳﻲ ﺍﺯ ﺗﺎﭘﻞ ﺭﺍﺑﻄﻪ ﻣﺮﺗﺐ ﻧﺸﺪﻩ ‪.‬‬

‫ﺍﺳﻜﻦ ﺍﺭﺗﺒﺎﻁ ﻫﺎﻱ ﻧﺎﻣﺮﺗﺐ ﺑﺮﺍﻱ ﻧﻈﻢ ﺁﺩﺭﺱ ﻓﻴﺰﻳﻜﻲ ﻭ ﺍﺩﻏﺎﻡ ﺑﺎ ﻧﺘﻴﺠﻪ ﻗﺒﻠﻲ‪ ،‬ﺑﺮﺍﻱ‬
‫ﺟﺎﻳﮕﺰﻳﻨﻲ ﺁﺩﺭﺱ ﺗﻮﺳﻂ ﺗﺎﭘﻞ ﻭﺍﻗﻌﻲ‪.‬‬

‫‪ ‬ﺍﺳﻜﻦ ﻣﺘﻮﺍﻟﻲ ﻛﺎﺭﺍﻳﻲ ﺑﻴﺸﺘﺮﻱ ﻧﺴﺒﺖ ﻣﺮﺍﺟﻌﻪ ﺗﺼﺎﺩﻓﻲ ﺩﺍﺭﺩ ‪.‬‬

‫‪:Hash - Join‬‬

‫‪Hash-Join :‬ﺍﻟﮕﻮﺭﻳﺘﻢ‬

‫ﻣﺤﺎﺳﺒﻪ ‪ hash-join‬ﺩﺭ ‪ r‬ﻭ ‪ s‬ﺑﻪ ﺷﺮﺡ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬

‫‪152‬‬
‫‪ .1‬ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﺭﺍﺑﻄﻪ ‪ s‬ﺍﺯ ﺗﺎﺑﻊ ﻫﺶ ‪ h‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﺪ ‪ .‬ﺩﺭ ﻫﻨﮕﺎﻡ ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﻳﻚ‬
‫ﺭﺍﺑﻄﻪ‪ ،‬ﻳﻚ ﺑﻠﻮﻙ ﺍﺯ ﺣﺎﻓﻈﻪ ﺑﻌﻨﻮﺍﻥ ﺑﺎﻓﺮ ﺧﺮﻭﺟﻲ ﺑﺮﺍﻱ ﻫﺮ ﭘﺎﺭﺗﻴﺸﻦ ﻣﺤﻔﻮﻅ ﻣﻲ ﺑﺎﺷﺪ ‪.‬‬

‫‪ .2‬ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ‪ r‬ﻧﻴﺰ ﺑﻪ ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ‪.‬‬

‫‪ .3‬ﺑﺮﺍﻱ ﻫﺮ ‪:i‬‬

‫‪ hash‬ﺑﺮ ﺭﻭﻱ ﺣﺎﻓﻈﻪ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ‬ ‫• ﻓﺮﺍﺧﻮﺍﻧﻲ ‪ s‬ﺑﻪ ﺣﺎﻓﻈﻪ ﻭ ﺍﻳﺠﺎﺩ ﺷﺎﺧﺺ‬
‫ﻭﻳﮋﮔﻲ)ﻓﻴﻠﺪ( ﭘﻴﻮﺳﺘﮕﻲ‪.‬‬

‫ﺍﻳﻦ ﺷﺎﺧﺺ ‪ hash‬ﻳﻚ ﺗﺎﺑﻊ ﻣﺘﻔﺎﻭﺕ ‪ hash‬ﻗﺒﻞ ﺍﺯ ﻳﻚ ‪ h‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫• ﻓﺮﺍﺧﻮﺍﻧﻲ ‪tuble‬ﻫﺎ ﺩﺭ ‪ ri‬ﺍﺯ ﺩﻳﺴﻚ ﻳﻜﻲ ﻳﻜﻲ ﺍﻧﺠﺎﻡ ﻣﻲ ﺷﻮﺩ ‪ .‬ﺑﺮﺍﻱ ﻫﺮ ‪tuple tr‬‬
‫ﻣﺤﻠﻲ ﻣﻄﺎﺑﻖ ﺑﺎ ‪tuple ts‬ﺩﺭ ‪ si‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺎﺧﺺ ‪hash‬ﺣﺎﻓﻈﻪ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ ‪.‬‬
‫ﺧﺮﻭﺟﻲ ﺗﺮﻛﻴﺒﻲ ﺍﺯ ﻭﻳﮋﮔﻲ ﻫﺎﻱ )ﻓﻴﻠﺪﻫﺎﻱ( ﺁﻧﻬﺎﺳﺖ‪.‬‬

‫ﺍﺭﺗﺒﺎﻁ ‪ s‬ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ‪build input :‬‬

‫ﺭﺍﺑﻄﻪ ‪ r‬ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ‪probe input :‬‬

‫ﻣﻘﺪﺍﺭ ‪ n‬ﻭ ﺗﺎﺑﻊ ﻫﺶ ‪h‬ﻃﻮﺭﻱ ﺍﻧﺘﺨﺎﺏ ﻣﻲ ﺷﻮﻧﺪ ﻛﻪ ‪ si‬ﺑﺎﻳﺪ ﺩﺭ ﺣﺎﻓﻈﻪ ﻣﺘﻨﺎﺳﺐ ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ‪.‬‬

‫• ﻣﻌﻤﻮﻻ ‪n‬ﺍﻧﺘﺨﺎﺏ ﻣﻲ ﺷﻮﺩ ﺍﺯ ‪ bs/M * f‬ﺟﺎﻫﺎﻳﻲ ﻛﻪ ‪ f‬ﺩﺭ ﻓﺮﻣﻮﻝ ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﻳﻚ‬
‫”‪ “fudge factor‬ﺍﺳﺖ ﻛﻪ ﻋﺪﺩ ﺭﻧﺪﻱ ﺣﺪﻭﺩ ‪ 1.2‬ﻣﻲ ﺑﺎﺷﺪ‪.‬‬

‫• ﭘﺮﻭﺏ)ﻛﺎﻭﺷﮕﺮ( ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎﻱ ﺭﺍﺑﻄﻪ ‪ si‬ﻧﻴﺎﺯﻱ ﺑﻪ ﺣﺎﻓﻈﻪ ﻣﻨﺎﺳﺐ ﻧﺪﺍﺭﺩ‪.‬‬

‫ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ‬ ‫‪ M‬ﺍﺯ ﺣﺎﻓﻈﻪ ﺑﺎﺷﺪ‪ ،‬ﻧﻴﺎﺯ ﺑﻪ‬ ‫ﺍﮔﺮ ﺗﻌﺪﺍﺩ ﭘﺎﺭﺗﻴﺸﻦ ‪ n‬ﺑﻴﺸﺘﺮ ﺍﺯ ﺗﻌﺪﺍﺩ ﺻﻔﺤﺎﺕ‬
‫ﺑﺎﺯﮔﺸﺘﻲ ﺍﺳﺖ‪.‬‬

‫• ‪instead of partitioning n ways, use M – 1 partitions for s‬‬


‫• ﺍﺯ ‪ M – 1‬ﭘﺎﺭﺗﻴﺸﻦ ﺑﺮﺍﻱ ‪ s‬ﺑﻪ ﺟﺎﻱ ‪ n‬ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ ‪.‬‬

‫• ﻋﻼﻭﻩ ﺑﺮ ‪ M – 1‬ﭘﺎﺭﺗﻴﺸﻦ ﺍﺯ ﻳﻚ ﺗﺎﺑﻊ ‪ hash‬ﻧﻴﺰ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬


‫‪153‬‬
‫• ﺍﺳﺘﻔﺪﻩ ﺍﺯ ﻫﻤﺎﻥ ﺭﻭﺵ ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﺑﺮﺍﻱ ‪.r‬‬

‫‪:Handling of Overflows‬‬
‫ﺍﮔﺮﺑﺮﺧﻲ ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎ ﺗﺎﭘﻞ ﻫﺎﻱ ﺑﻴﺸﺘﺮﻱ ﻧﺴﺒﺖ ﺑﻪ ﺑﺮﺧﻲ ﺩﻳﮕﺮ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻨﺪ ﭘﺎﺭﺗﻴﺸﻦ‬
‫ﻧﺎﻣﺘﻮﺍﺯﻥ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ Hash-table overflow‬ﺩﺭﭘﺎﺭﺗﻴﺸﻦ ‪ si‬ﺭﺥ ﻣﻲ ﺩﻫﺪ ﺍﮔﺮ ‪ si‬ﺩﺭﺣﺎﻓﻈﻪ ﻣﺘﻨﺎﺳﺐ ﻗﺮﺍﺭ‬


‫ﻧﮕﻴﺮﺩ ﻛﻪ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﺍﻳﻦ ﺩﻻﻳﻞ ﺑﺎﺷﺪ ‪.‬‬

‫ﺗﻌﺪﺍﺩﻱ ﺍﺯ ﺗﺎﭘﻞ ﻫﺎﻱ ‪ s‬ﺩﺭ ﻓﻴﻠﺪ ﭘﻴﻮﺳﺘﮕﻲ ﺩﺍﺭﺍﻱ ﺍﺭﺯﺵ ﻳﻜﺴﺎﻥ ﻫﺴﺘﻨﺪ ‪.‬‬

‫ﺗﺎﺑﻊ ﻫﺶ ﺑﺪ‪.‬‬

‫‪ Overflow resolution‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭﻓﺎﺯ ﺳﺎﺧﺖ ﺍﺗﻔﺎﻕ ﺑﻴﺎﻓﺘﺪ )ﺳﺮﺭﻳﺰ(‪.‬‬

‫ﭘﺎﺭﺗﻴﺸﻦ ‪ si‬ﺑﻴﺸﺘﺮ ﺑﺎ ﺗﻮﺍﺑﻊ ﻫﺶ ﻣﺘﻔﺎﻭﺗﻲ ﺗﻘﺴﻴﻢ ﺑﻨﺪﻱ ﺷﺪﻩ‪.‬‬

‫ﭘﺎﺭﺗﻴﺸﻦ ‪ ri‬ﺑﺎﻳﺪ ﺗﻘﺴﻴﻢ ﺑﻨﺪﻱ ﻳﻜﺴﺎﻥ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬

‫‪) Overflow avoidance‬ﺍﺟﺘﻨﺎﺏ ﺍﺯ ﺳﺮﺭﻳﺰ ( ﺍﻧﺠﺎﻡ ﺑﺎ ﺩﻗﺖ ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﺑﺮﺍﻱ‬


‫ﺟﻠﻮﮔﻴﺮﻱ ﺍﺯ ﺳﺮﺭﻳﺰ ﺩﺭ ﻃﻮﻝ ﻓﺎﺯ ﺳﺎﺧﺖ‪.‬‬

‫ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ ﭘﺎﺭﺗﻴﺸﻦ ﺳﺎﺧﺖ ﺍﺭﺗﺒﺎﻁ ﺩﺍﺧﻠﻲ ﺑﺎ ﺑﺴﻴﺎﺭﻱ ﺍﺯ ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎ ﻭ‬


‫ﺳﭙﺲ ﺗﺮﻛﻴﺐ ﺁﻧﻬﺎ‪.‬‬

‫ﺩﻭ ﺭﻭﻳﻜﺮﺩ ﺷﻜﺖ ﺑﺎﺗﻌﺪﺍﺩ ﺯﻳﺎﺩﻱ ﻣﻮﺍﺭﺩ ﺗﻜﺮﺍﺭﻱ‪.‬‬

‫‪ :Fallback option‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺣﻠﻘﻪ ﻫﺎﻱ ﭘﻴﻮﻧﺪﻱ ﺗﻮﺩﺭﺗﻮ ﺑﺮﺍﻱ ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎﻱ‬


‫‪.overflow‬‬

‫‪154‬‬
‫ﻫﺰﻳﻨﻪ ﻫﺎﻱ ‪: Hash-Join‬‬

‫‪ ‬ﺍﮔﺮ ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﺑﺎﺯﮔﺸﺘﻲ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﻧﺒﺎﺷﺪ ﻫﺰﻳﻨﻪ ‪ hash join‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬

‫‪3(br + bs) +4 ∗ nh block transfers +‬‬


‫‪2( br / bb + bs / bb) seeks‬‬

‫‪ ‬ﺍﮔﺮ ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﺑﺎﺯﮔﺸﺘﻲ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺎﺷﺪ‪:‬‬

‫‪ s‬ﺑﺮﺍﻱ ﺣﺪﺍﻗﻞ ‪ M‬ﺑﻼﻙ ﺍﺯﻫﺮ ﭘﺎﺭﺗﻴﺸﻦ‬ ‫ﺗﻌﺪﺍﺩﭘﺎﺱ ﻫﺎﻱ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺑﺮﺍﻱ ﭘﺎﺭﺗﻴﺸﻦ ﺳﺎﺧﺖ ﺍﺭﺗﺒﺎﻁ‬
‫ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪:‬‬

‫‪logM/bb–1(bs/M)‬‬

‫‪ ‬ﺍﻧﺘﺨﺎﺏ ﺭﺍﺑﻄﻪ ﻛﻮﭼﻜﺘﺮ ﺑﻪ ﻋﻨﻮﺍﻥ ﺭﺍﺑﻄﻪ ﺳﺎﺧﺖ ﻭ ﺳﺎﺯ ﺑﻬﺘﺮﻳﻦ ﺍﻧﺘﺨﺎﺏ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﺑﺮﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ ﻧﻬﺎﻳﻲ‪:‬‬


‫‪2(br + bs) logM/bb–1(bs/M) + br + bs block transfers+‬‬
‫‪br / bb + bs / bb) logM/bb–1(bs/M)  seeks‬‬

‫‪ ‬ﺍﮔﺮﺗﻤﺎﻡ ﻭﺭﻭﺩﻱ ﻫﺎﻱ ﺳﺎﺧﺖ ﻭﺳﺎﺯ ﺑﺘﻮﺍﻧﺪ ﺩﺭ ﺣﺎﻓﻈﻪ ﺍﺻﻠﻲ ﻧﮕﻬﺪﺍﺭﻱ ﺷﻮﺩ ﻧﻴﺎﺯﻱ ﺑﻪ ﻫﻴﭻ‬
‫ﭘﺎﺭﺗﻴﺸﻦ ﺑﻨﺪﻱ ﻧﻴﺴﺖ‪.‬‬

‫‪ ‬ﻫﺰﻳﻨﻪ ﺑﺮﺍﻱ ‪ br + bs.‬ﻗﺎﺑﻞ ﻛﺎﻫﺶ ﺩﺍﺩﻥ ﺍﺳﺖ‪.‬‬

‫ﻣﺜﺎﻝ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ‪Hash-Join‬‬

‫ﻓﺮﺽ ﻣﻲ ﻛﻨﻴﻢ ﺣﺎﻓﻈﻪ ﺍﻱ ﺑﺎ ﺳﺎﻳﺰ ‪ 20‬ﺑﻼﻙ ﺩﺍﺭﻳﻢ‪.‬‬

‫‪binstructor= 100 and bteaches = 400.‬‬

‫‪155‬‬
‫ﺳﺎﺯﻧﺪﻩ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ ،build input‬ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎﻱ ﺭﺍ ﺑﻪ ‪ 5‬ﻗﺴﻤﺖ ﺑﺎ ﺳﺎﻳﺰ ‪ 20‬ﺑﻼﻛﻲ‬
‫ﺗﻘﺴﻴﻢ ﻣﻴﻜﻨﺪ‪ ،‬ﻛﻪ ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎ ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﻳﻚ ﮔﺬﺭﮔﺎﻩ ﻳﺎ ﭘﺎﺱ ﺍﺟﺮﺍ ﺷﻮﻧﺪ‪.‬‬

‫ﻛﻪ ﺍﻟﺒﺘﻪ ﻣﻴﺘﻮﺍﻥ ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎ ﺭﺍ ﺑﺎ ﺳﺎﻳﺰ ﻫﺮ ﻳﻚ ‪ ، 80‬ﺩﺭ ﻳﻚ ﮔﺬﺭﮔﺎﻩ ﺍﺟﺮﺍ ﻧﻤﻮﺩ‪.‬‬

‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﻫﺰﻳﻨﻪ ﻧﻬﺎﻳﻲ ﺑﺮﺍﺑﺮ ﺍﺳﺖ ﺑﺎ‪:‬‬

‫‪seeks 3(100 + 400) = 1500 block transfers +2( 100/3 + 400/3) = 336‬‬

‫‪Hybrid Hash–Join:‬‬

‫ﺑﻬﺘﺮﻳﻦ ﺍﺳﺘﻔﺎﺩﻩ ﺯﻣﺎﻧﻲ ﺍﺳﺖ ﻛﻪ ﺣﺎﻓﻈﻪ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ﻛﺎﻓﻲ ﺑﺰﺭگ ﺍﺳﺖ ﻭ ﺳﺎﺧﺖ ﻭ ﺳﺎﺯ ﻭﺭﻭﺩﻱ ﻫﺎ‬
‫ﺑﺰﺭﮔﺘﺮ ﺍﺯ ﺣﺎﻓﻈﻪ ﺍﺳﺖ‪.‬‬

‫ﻭﻳﮋﮔﻲ ﺍﺻﻠﻲ ﺍﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ‪:‬‬

‫ﻧﮕﻬﺪﺍﺭﻱ ﺍﻭﻟﻴﻦ ﭘﺎﺭﺗﻴﺸﻦ ﺳﺎﺧﺖ ﺩﺭ ﺣﺎﻓﻈﻪ‬

‫‪ ‬ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺣﺎﻓﻈﻪ ﺍﻱ ﺑﺎ ‪ 25‬ﺑﻼﻙ‪ ،‬ﻛﻪ ﺳﺎﺯﻧﺪﻩ ﻣﻴﺘﻮﺍﻧﺪ ﺁﻧﺮﺍ ﺑﻪ ‪ 5‬ﭘﺎﺭﺗﻴﺸﻦ ‪ 20‬ﺑﻼﻛﻲ‬
‫ﺗﻘﺴﻴﻢ ﺑﻨﺪﻱ ﻛﻨﺪ‪.‬‬

‫♦ ﺗﻘﺴﻴﻢ ﺑﻨﺪﻱ ﺣﺎﻓﻈﻪ‪:‬‬

‫‪ ‬ﺍﻭﻟﻴﻦ ﭘﺎﺭﺗﻴﺸﻦ ‪ 20‬ﺑﻠﻮﻙ ﺍﺯ ﺣﺎﻓﻈﻪ ﺭﺍ ﺍﺷﻐﺎﻝ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪ 4‬ﭘﺎﺭﺗﻴﺸﻦ ﺩﻳﮕﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ‬ ‫‪ ‬ﻳﻚ ﺑﻠﻮﻙ ﺑﺮﺍﻱ ﻭﺭﻭﺩﻱ ﻭﻫﺮﺑﻠﻮﻙ ﺑﺮﺍﻱ ﺑﺎﻓﺮ‬
‫ﺷﻮﺩ ‪.‬‬

‫‪ ‬ﻧﻜﺘﻪ ﺁﻣﻮﺯﺵ ‪ :‬ﺍﻳﻨﻜﻪ ﭘﺎﺭﺗﻴﺸﻦ ﻫﺎ ﺑﻪ ﺻﻮﺭﺕ ﻳﻜﺴﺎﻥ ﺑﻪ ‪ 5‬ﭘﺎﺭﺗﻴﺸﻦ ﺑﺎ ﺳﺎﻳﺰ ‪ 80‬ﺗﻘﺴﻴﻢ ﺷﺪﻩ‬
‫ﺍﻧﺪ‪.‬‬

‫‪156‬‬
‫♦ ﺑﺮﺍﻱ ﺍﻭﻟﻴﻦ ﺑﺎﺭ ﺍﺯ ﺭﻭﺵ ﺟﺴﺘﺠﻮ ﺑﻪ ﺟﺎﻱ ﻧﻮﺷﺘﻦ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ ‬ﻫﺰﻳﻨﻪ ‪ 3(80 + 320) + 20 +80 = 1300‬ﺑﻼﻙ ﺍﻧﺘﻘﺎﻟﻲ ‪،Hybrid hash-join‬‬


‫ﻣﻴﺘﻮﺍﻧﺪ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ‪1500‬ﻫﺶ ﭘﻴﻮﻧﺪﻱ ﺑﺎﺷﺪ‪.‬‬

‫‪ Hybrid hash-join ‬ﺑﻴﺸﺘﺮ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ ﺍﮔﺮ‪M >> :‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺩﻳﮕﺮ‪:‬‬

‫‪ :Duplicate elimination ‬ﺟﻬﺖ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﻫﺶ ﻫﺎ ﻭ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﻫﺎﺳﺖ ‪.‬‬

‫ﺩﺭ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺩﻭﻧﺴﺨﻪ ﺍﻱ‪ ،‬ﻫﺮ ﻧﺴﺨﻪ ﺍﺯ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﻗﺎﺑﻞ ﺣﺬﻑ ﻣﻲ ﺑﺎﺷﺪ ‪.‬‬

‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‪ :‬ﻧﺴﺨﻪ ﻫﺎ ﺣﻴﻦ ﺍﺟﺮﺍ ﻗﺎﺑﻞ ﺣﺬﻑ ﺷﺪﻥ ﻫﺴﺘﻨﺪ‪ ،‬ﻛﻪ ﺑﻪ ﺧﻮﺑﻲ ﻣﺮﺍﺣﻞ‬
‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺩﺭ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺍﺩﻏﺎﻣﻲ ﺍﺳﺖ ‪.‬‬

‫‪ Hashing‬ﻣﺎﻧﻨﺪ ﻧﺴﺨﻪ ﻫﺎﻱ ﻣﺸﺎﺑﻪ ﺩﺭ ﻳﻚ ﺑﺎﻛﺖ ﻫﺴﺘﻨﺪ ‪.‬‬

‫‪) Aggregation. ‬ﻣﺠﺘﻤﻊ ﺑﻮﺩﻥ( ‪ :‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﻮﺳﻂ ﻳﻚ ﺭﻭﺵ ﻣﺸﺎﺑﻪ ﺭﻭﺵ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ‬
‫ﺷﻮﺩ‪.‬‬

‫ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﻭ ‪ Hashing‬ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﺗﺎﭘﻞ ﻫﺎﻳﻲ ﻛﻪ ﺩﺭﻭﻥ ﻳﻚ ﮔﺮﻭﻩ‬
‫ﻣﺸﺎﺑﻪ ﻫﺴﺘﻨﺪ‪ ،‬ﺑﺎﺷﻨﺪ‪ ،‬ﻭ ﻣﺠﺘﻤﻊ ﺑﻮﺩﻥ ﺗﻮﺍﺑﻊ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺮﺍﻱ ﻫﺮ ﮔﺮﻭﻩ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ‬
‫ﺷﻮﺩ‪.‬‬

‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‪ :‬ﺗﺮﻛﻴﺐ ﺗﺎﭘﻞ ﻫﺎ ﺩﺭ ﻳﻚ ﮔﺮﻭﻩ ﻣﺸﺎﺑﻪ‪ ،‬ﻃﻲ ﺍﺟﺮﺍﻱ ﻋﻤﻠﻴﺎﺕ ﺻﻮﺭﺕ ﻣﻲ‬
‫ﮔﻴﺮﺩ‪ ،‬ﻛﻪ ﺍﻳﻦ ﺑﻮﺳﻴﻠﻪ ﻣﻴﺰﺍﻥ ﺑﺮﺁﻭﺭﺩ ﺷﺪﻩ ﺍﺯ ﻣﺠﺘﻤﻊ ﺑﻮﺩﻥ ﺁﻧﻬﺎ ﺗﻌﻌﻴﻦ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪157‬‬
‫‪ ‬ﺑﺮﺍﻱ ﺷﻤﺎﺭﺵ‪ ،‬ﺣﺪﺍﻗﻞ‪ ،‬ﺣﺪﺍﻛﺜﺮ‪ ،‬ﻣﺠﻤﻮﻉ‪ :‬ﻣﻴﺰﺍﻥ ﻣﺠﺘﻤﻊ ﺑﻮﺩﻥ ﻧﮕﺪﺍﺭﻱ ﺷﺪﻩ‬
‫ﺑﺮﻭﻱ ﺗﺎﭘﻞ ﻫﺎﺳﺖ‪.‬‬

‫‪ ‬ﺑﺮﺍﻱ ﻣﻴﺎﻧﮕﻴﻦ‪ :‬ﻣﻘﺎﺩﻳﺮ ﺷﻤﺎﺭﺵ ﺷﺪﻩ ﺟﻤﻊ ﺷﺪﻩ ﻭ ﺑﺮ ﺗﻌﺪﺍﺩ ﺷﻤﺎﺭﺵ ﻫﺎ ﺗﻘﺴﻴﻢ‬
‫ﻣﻲ ﺷﻮﺩ‪.‬‬

‫ﺍﺭﺯﻳﺎﺑﻲ ﺁﺯﻣﺎﻳﺸﺎﺕ‪:‬‬

‫‪ ‬ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﻛﻪ ﺗﺎ ﺍﻛﻨﻮﻥ ﺩﻳﺪﻳﻢ‪ ،‬ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﻋﻤﻠﻴﺎﺕ ﻫﺎﻱ ﻓﺮﺩﻱ ﺍﺳﺖ‪.‬‬

‫‪ ‬ﺟﺎﻳﮕﺰﻳﻦ ﻫﺎﻳﻲ ﺑﺮﺍﻱ ﺍﺭﺯﻳﺎﺑﻲ ﻛﻞ ﻋﺒﺎﺭﺕ ﻳﻚ ﺩﺭﺧﺖ ‪:‬‬

‫‪ Materialization‬ﻳﺎ ﺗﺤﻘﻖ‪ :‬ﺗﻮﻟﻴﺪ ﻧﺘﺎﻳﺞ ﺍﺯ ﻋﺒﺎﺭﺗﻲ ﻛﻪ ﻭﺭﻭﺩﻱ ﺭﻭﺍﺑﻂ ﻭ ﻳﺎ ﺩﺭ ﺣﺎﻝ‬


‫ﻣﺤﺎﺳﺒﻪ‪ ،‬ﺍﺳﺖ ﺁﻥ ﺭﺍ ﺑﺮ ﺭﻭﻱ ﺩﻳﺴﻚ ﺫﺧﻴﺮﻩ ﻭ ﺗﻜﺮﺍﺭ ﻛﻨﻴﺪ ‪.‬‬

‫‪ Pipelining‬ﻳﺎ ﻟﻮﻟﻪ ﮔﺬﺍﺭﻱ ‪ :‬ﺭﻭﻱ ﺗﺎﭘﻞ ﻫﺎﻱ ﻋﻤﻠﻴﺎﺕ ﭘﺪﺭ ﺣﺘﻲ ﺑﻌﻨﻮﺍﻥ ﻳﻚ‬
‫ﻋﻤﻠﻴﺎﺕ ﺩﺭ ﺣﺎﻝ ﺍﺟﺮﺍ ﮔﺬﺭ ﺩﻫﻴﺪ ‪.‬‬

‫‪ ‬ﻣﺎ ﺩﺭﺑﺎﺭﻩ ﺁﻟﺘﺮﻧﺎﺗﻴﻮ ﻫﺎﻱ ﺑﺎﻻ ﺑﺎ ﺟﺰﻳﻴﺎﺕ ﺑﻴﺸﺘﺮ ﺩﺭ ﺣﺎﻝ ﻣﻄﺎﻟﻌﻪ ﻫﺴﺘﻴﻢ ‪.‬‬

‫‪:Materialization‬‬

‫ﺍﺭﺯﻳﺎﺑﻲ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ‪ :‬ﺍﺭﺯﻳﺎﺑﻲ ﻳﻚ ﻋﻤﻠﻴﺎﺕ ﺩﺭ ﻳﻚ ﺯﻣﺎﻥ‪ ،‬ﺩﺭ ﭘﺎﻳﻴﻦ ﺗﺮﻳﻦ ﺳﻄﺢ ﺷﺮﻭﻉ ﻣﻲ ﺷﻮﺩ ‪.‬‬
‫ﻧﺘﺎﻳﺞ ﻣﻴﺎﻧﻲ ﻣﺤﻘﻖ ﺷﺪﻩ ﺭﺍ ﺑﺮﺍﻱ ﺭﻭﺍﺑﻂ ﻣﻮﻗﺖ ﺗﺎ ﺍﺭﺯﻳﺎﺑﻲ ﻋﻤﻠﻴﺎﺕ ﺳﻄﺢ ﺑﻌﺪﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ ‪.‬‬

‫ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺩﺭ ﺷﻜﻞ ﺯﻳﺮ‪ ،‬ﻣﺤﺎﺳﺒﻪ ﻭ ﺫﺧﻴﺮﻩ ﻛﻨﻴﺪ‪:‬‬

‫) ‪σ building ="Watson" (department‬‬

‫‪158‬‬
‫ﺳﭙﺲ ﺑﺎ ﺩﺳﺘﻮﺭﺍﺕ ﺭﺍﻫﻨﻤﺎ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺤﺎﻕ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻭ ﺫﺧﻴﺮﻩ ﻛﻨﻴﺪ ﻭ ﺩﺭ ﻧﻬﺎﻳﺖ ﻋﻤﻠﻴﺎﺕ‬
‫ﭘﺮﺗﻮ)ﭘﺮﻭﺟﻜﺸﻦ( ﺭﺍ ﺭﻭﻱ ﻛﻠﻤﻪ ‪name‬ﻣﺤﺎﺳﺒﻪ ﻛﻨﻴﺪ‪.‬‬

‫‪ n‬ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﻫﻤﻴﺸﻪ ﻗﺎﺑﻞ ﺍﺟﺮﺍﺳﺖ‬

‫‪ n‬ﻫﺰﻳﻨﻪ ﻧﻮﺷﺘﻦ ﻧﺘﺎﻳﺞ ﺭﻭﻱ ﺩﻳﺴﻚ ﻭ ﺧﻮﺍﻧﺪﻥ ﻣﺠﺪﺩ ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺴﻴﺎﺭ ﺑﺎﻻ ﺑﺎﺷﺪ‬

‫ﻓﺮﻣﻮﻝ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﻣﺎ ﺑﺮﺍﻱ ﺍﻧﺠﺎﻡ ﻋﻢﻟﻴﺎﺕ ﺑﺎ ﭼﺸﻢ ﭘﻮﺷﻲ ﺍﺯ ﻫﺰﻳﻨﻪ ﻧﻮﺷﺘﻦ ﻧﺘﺎﻳﺞ ﺭﻭﻱ ﺩﻳﺴﻚ ‪:‬‬

‫‪ ‬ﻫﺰﻳﻨﻪ ﻛﻞ = ﻣﺠﻤﻮﻉ ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﻋﻤﻠﻴﺎﺗﻬﺎﻱ ﻓﺮﺩﻱ ‪ +‬ﻫﺰﻳﻨﻪ ﻧﻮﺷﺘﻦ ﻧﺘﺎﻳﺞ‬


‫ﻣﻴﺎﻧﻲ ﺑﺮﻭﻱ ﺩﻳﺴﻚ‬

‫‪ n‬ﺩﻭ ﺑﺎﻓﺮ‪ :‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻭ ﺑﺎﻓﺮ ﺧﺮﻭﺟﻲ ﺑﺮﺍﻱ ﻫﺮ ﻳﻚ ﺍﺯ ﻋﻤﻠﻴﺎﺕ‪ ،‬ﻭﻗﺘﻲ ﻛﻪ ﻳﻜﻲ ﭘﺮ ﺍﺳﺖ ﻭ ﻧﻮﺷﺘﻦ‬
‫ﺁﻥ ﺑﺮ ﺭﻭﻱ ﺩﻳﺴﻚ ﺩﺭ ﺣﺎﻟﻲ ﻛﻪ ﺑﺎﻓﺮ ﺩﻳﮕﺮ ﺍ ﺩﺭ ﺣﺎﻝ ﭘﺮ ﺷﺪﻥ ﺍﺳﺖ‬

‫‪ l‬ﺍﺟﺎﺯﻩ ﻣﻲ ﺩﻫﺪ ﺗﺎ ﻫﻤﭙﻮﺷﺎﻧﻲ ﺑﻴﻦ ﻧﻮﺷﺘﻦ ﻭ ﻣﺤﺎﺳﺒﻪ ﺍﻳﺠﺎﺩ ﺷﻮﺩ ﻭ ﺯﻣﺎﻥ ﺍﺟﺮﺍ ﺭﺍ‬
‫ﻛﺎﻫﺶ ﻣﻲ ﺩﻫﺪ‪.‬‬

‫‪:Pipelining‬‬

‫‪ :Pipelined evaluation‬ﺍﺭﺯﻳﺎﺑﻲ ﭼﻨﺪﻳﻦ ﻋﻤﻠﻴﺎﺕ ﺑﻪ ﻃﻮﺭ ﻫﻤﺰﻣﺎﻥ‪ ،‬ﻭ ﺍﻧﺘﻘﺎﻝ ﻧﺘﺎﻳﺞ ﺣﺎﺻﻞ ﺍﺯ‬
‫ﻳﻚ ﻋﻤﻠﻴﺎﺕ ﺑﻪ ﭘﺎﺱ ﺑﻌﺪﻱ‪.‬‬

‫ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺩﺭ ﺩﺭﺧﺖ ﻋﺒﺎﺭﺕ ﻗﺒﻠﻲ‪ ،‬ﻧﺘﻴﺠﻪ ﺍﻱ ﺫﺧﻴﺮﻩ ﻧﺸﺪﻩ‪،‬‬

‫‪159‬‬
‫ﺑﺠﺎﻱ ﭘﻴﻮﻧﺪ ﻣﺴﺘﻘﻴﻢ ﺗﺎﭘﻞ ﻫﺎ ﻛﻪ ﺑﻄﻮﺭ ﻣﺸﺎﺑﻪ ﻧﺘﻴﺠﻪ ﭘﺎﺱ ﺗﺎﭘﻞ ﻫﺎ ﺭﻭﻱ ﻃﺮﺡ ﺫﺧﻴﺮﻩ ﻧﻤﻲ‬
‫ﻛﻨﺪ‪.‬‬

‫‪ ‬ﺗﺤﻘﻴﻘﺎﺕ ﺍﺭﺯﺍﻥ ﺗﺮ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ ﻛﻪ ‪ :‬ﻧﻴﺎﺯﻱ ﺑﻪ ﺫﺧﻴﺮﻩ ﺍﺭﺗﺒﺎﻁ ﻣﻮﻗﺖ ﺭﻭﻱ ﺩﻳﺴﻚ ﻧﻴﺴﺖ‬

‫‪ ‬ﺍﻣﻜﺎﻥ ‪ Pipelining‬ﻫﺴﺖ ﺍﻣﺎ ﻧﻪ ﻫﻤﻴﺸﻪ ﺑﻌﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ‪hash-join.‬‬

‫‪ ‬ﺑﺮﺍﻱ ‪ pipelining‬ﻣﻮﺛﺮ ﺍﺳﺖ ﺍﺳﻔﺎﺩﻩ ﺍﺯ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﺍﺭﺯﻳﺎﺑﻲ ﻛﻪ ﻫﺮ ﺗﺎﭘﻞ ﺧﺮﻭﺟﻲ ﺑﻪ‬
‫ﻋﻨﻮﺍﻥ ﺗﺎﭘﻞ ﻭﺭﻭﺩﻱ ﻋﻤﻠﻴﺎﺕ ﺩﺭﻳﺎﻓﺖ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫‪ Pipelines ‬ﺑﻪ ﺩﻭ ﺭﻭﺵ ﻗﺎﺑﻞ ﺍﺟﺮﺍﺳﺖ ‪ :‬ﻫﺪﺍﻳﺖ ﺗﻘﺎﺿﺎ ) ‪ (demand driven‬ﻭ‬


‫ﻫﺪﺍﻳﺖ ﺗﻮﻟﻴﺪ) ‪(producer driven‬‬

‫‪ ‬ﻫﺪﺍﻳﺖ ﺗﻘﺎﺿﺎ ﻳﺎ ﺍﺭﺯﻳﺎﺑﻲ ‪lazy‬‬

‫ﺳﻴﺴﺘﻢ ﺩﺭﺧﻮﺍﺳﺖ ﺗﺎﭘﻞ ﺑﻌﺪﻱ ﺭﺍ ﺍﺯﻋﻤﻠﻴﺎﺕ ﺳﻄﺢ ﺑﺎﻻﺗﺮ ﺗﻜﺮﺍﺭ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫)ﻋﻤﻠﻴﺎﺕ ﻓﺮﺯﻧﺪ ( ﺑﺮﺍﻱ‬ ‫ﻫﺮﻳﻚ ﺍﺯ ﺩﺭﺧﻮﺍﺳﺖ ﻫﺎﻱ ﺗﺎﭘﻞ ﺑﻌﺪﻱ ﺍﺯ ﺯﻳﺮ ﻋﻤﻠﻴﺎﺕ ﻫﺎ‬
‫ﺧﺮﻭﺟﻲ ﺗﺎﭘﻞ ﺑﻌﺪﺏ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪.‬‬

‫ﺩﺭﺑﻴﻦ ﻓﺮﺍﺧﻮﺍﻧﻲ ﻫﺎ )ﺗﻤﺎﺱ ﻫﺎ ‪(calls‬ﻋﻤﻠﻴﺎﺕ ﺿﻤﻦ ﺣﻔﻆ ‪ state‬ﺷﻨﺎﺳﺎﻳﻲ ﻣﻲ‬


‫ﻛﻨﺪ ﭼﻪ ﭼﻴﺰﻱ ﺭﺍ ﺑﻪ ﻋﻤﻠﻴﺎﺕ ﺑﻌﺪﻱ ﺑﺮﮔﺮﺩﺍﻧﺪ‬

‫‪ ‬ﺩﺭ ‪producer-driven or eager pipelining‬‬

‫ﺍﭘﺮﺍﺗﻮﺭ ﻫﺎ ﺑﺎ ﺍﺷﺘﻴﺎﻕ ﺗﺎﭘﻞ ﻫﺎ ﺭﺍ ﺗﻮﻟﻴﺪ ﻣﻲ ﻛﻨﻨﺪ ﻭ ﺍﻧﻬﺎ ﺭﺍ ﺑﻪ ﻭﺍﻟﺪﻫﺎﻱ ﺧﻮﺩ ﺍﻧﺘﻘﺎﻝ ﻣﻲ‬
‫ﺩﻫﻨﺪ ‪.‬‬

‫‪ n‬ﺩﺭﺍﻳﻦ ﺑﻴﻦ ﺍﭘﺮﺍﺗﻮﺭﻫﺎ ﺑﺎﻓﺮﻫﺎ ﺭﺍ ﻛﻪ ﺑﻌﻨﻮﺍﻥ ﻓﺮﺯﻧﺪ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺍﻧﺪ ﻧﮕﻬﺪﺍﺭﻱ‬
‫ﻣﻲ ﻛﻨﻨﺪ ‪.‬‬

‫‪160‬‬
‫‪ n‬ﺍﮔﺮﺑﺎﻓﺮﭘﺮﺑﺎﺷﺪ ‪ ،‬ﻓﺮﺯﻧﺪ ﻣﻨﺘﻈﺮﺧﺎﻟﻲ ﺷﺪﻥ ﺑﺎﻓﺮ ﻣﻲ ﺷﻮﺩ ﻭﭘﺲ ﺍﺯ ﺁﻥ ﺗﺎﭘﻞ‬
‫ﺑﻴﺸﺘﺮﻱ ﺗﻮﻟﻴﺪ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺯﻣﺎﻧﺒﻨﺪﻱ ﺳﻴﺴﺘﻢ ﻓﻀﺎ ﺩﺭ ﺑﺎﻓﺮ ﺧﺮﻭﺟﻲ ﻭ ﭘﺮﺩﺍﺯﺵ ﺗﺎﭘﻞ ﻫﺎﻱ ﺑﻴﺸﺘﺮ ﻭﺭﻭﺩﻱ‬
‫ﺭﺍ ﻣﻲ ﺗﻮﺍﻧﺪ ﻣﺪﻳﺮﻳﺖ ﻛﻨﺪ‬

‫‪ ‬ﻣﺪﻝ ﻫﺎﻱ ﺍﺯ ﺍﻳﻦ ﺭﻭﺵ ‪ pull :‬ﻭ ‪push‬‬

‫‪161‬‬
‫ﻓﺼﻞ ‪:8‬‬
‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﭘﺮﺱ ﻭ ﺟﻮ‬

‫‪162‬‬
‫ﻣﻘﺪﻣﻪ‬ ‫•‬
‫ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﺑﻴﺎﻥ ﺭﺍﺑﻄﻪ ﺍﻱ‬ ‫•‬
‫ﻛﺎﺗﺎﻟﻮگ ﺍﻃﻼﻋﺎﺕ ﺑﺮﺍﻱ ﺗﺨﻤﻴﻦ ﻫﺰﻳﻨﻪ‬ ‫•‬
‫ﺍﻃﻼﻋﺎﺕ ﺁﻣﺎﺭﻱ ﺑﺮﺍﻱ ﺗﺨﻤﻴﻦ ﻫﺰﻳﻨﻪ‬ ‫•‬
‫ﺑﻬﺎﻱ ﭘﺎﻳﻪ ﻱ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‬ ‫•‬
‫ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﭘﻮﻳﺎ ﺑﺮﺍﻱ ﺍﻧﺘﺨﺎﺏ ﻃﺮﺡ ﻫﺎﻱ ﺍﺭﺯﻳﺎﺑﻲ‬ ‫•‬
‫ﭼﺸﻢ ﺍﻧﺪﺍﺯﻫﺎﻱ ﻋﻤﻠﻲ‬ ‫•‬

‫‪163‬‬
‫ﻣﻘﺪﻣﻪ‬

‫ﺭﺍﻩ ﻫﺎﻱ ﻣﺘﻨﺎﻭﺏ ﺑﺮﺍﻱ ﺍﺭﺯﻳﺎﺑﻲ ﺟﺴﺘﺠﻮﻱ ﻣﻔﺮﻭﺽ ‪:‬‬


‫• ﺑﻴﺎﻥ ﻫﺎﻱ ﻣﺸﺎﺑﻪ‬
‫• ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﻣﺘﻔﺎﻭﺕ ﺑﺮﺍﻱ ﻫﺮ ﻋﻤﻠﻜﺮﺩ‬

‫ﻳﻚ ﻃﺮﺡ ﺍﺭﺯﻳﺎﺑﻲ ﺑﻪ ﻃﻮﺭ ﺩﻗﻴﻖ ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺑﺮﺍﻱ ﻫﺮ ﻋﻤﻠﻜﺮﺩ ﭼﻪ ﺍﻟﮕﻮﺭﻳﺘﻤﻲ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﻭ‬
‫ﻫﻤﭽﻨﻴﻦ ﭼﮕﻮﻧﮕﻲ ﺍﺟﺮﺍﻱ ﻫﻤﺎﻫﻨﮓ ﻋﻤﻠﻜﺮﺩ ﻫﺎ ﺭﺍ ﺑﻴﺎﻥ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫ﻫﻤﭽﻨﻴﻦ ﺑﺎﻳﺪ ﺩﺍﻧﺴﺖ ﻛﻪ ﭼﮕﻮﻧﻪ ﻃﺮﺡ ﻫﺎﻱ ﺍﺟﺮﺍﻱ ﺟﺴﺘﺠﻮ ﺭﺍ ﺑﺮ ﺭﻭﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻱ ﻣﻮﺭﺩ ﻧﻈﺮ ﺧﻮﺩ‪،‬‬
‫ﻣﻼﺣﻈﻪ ﻛﺮﺩ‪.‬‬

‫‪164‬‬
‫ﻫﺰﻳﻨﻪ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺑﻴﻦ ﻃﺮﺡ ﻫﺎﻱ ﺍ ﺭﺯﻳﺎﺑﻲ ﺑﺮﺍﻱ ﻳﻚ ﺟﺴﺘﺠﻮ )‪ (query‬ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﻫﻨﮕﻔﺖ ﺷﻮﻧﺪ ‪.‬‬
‫ﮔﺎﻡ ﻫﺎ ﺩﺭ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺟﺴﺘﺠﻮﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ‬ ‫‪‬‬
‫‪ .1‬ﺗﻮﻟﻴﺪ ﺍﺟﺮﺍﻫﺎﻱ ﻣﺸﺎﺑﻪ ﻣﻨﻄﻘﻲ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ‬
‫‪ .2‬ﻳﺎﺩﺩﺍﺷﺖ ﻛﺮﺩﻥ ﻧﺘﻴﺠﻪ ﻱ ﺍﺟﺮﺍﻫﺎ ﺑﺮﺍﻱ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻥ ﻃﺮﺡ ﻫﺎﻱ ﺟﺴﺘﺠﻮﻱ ﻣﺘﻨﺎﻭﺏ‬
‫‪ .3‬ﺍﻧﺘﺨﺎﺏ ﺍﺭﺯﺍﻧﺘﺮﻳﻦ ﻃﺮﺡ ﺑﺮ ﭘﺎﻳﻪ ﻱ ﻫﺰﻳﻨﻪ ﻱ ﺗﺨﻤﻴﻨﻲ‬
‫ﺗﺨﻤﻴﻦ ﻃﺮﺡ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ ﺷﺎﻣﻞ ‪:‬‬ ‫‪‬‬
‫• ﺍﻃﻼﻋﺎﺕ ﺁﻣﺎﺭﻱ ﺩﺭﺑﺎﺭﻩ ﻱ ﺭﺍﺑﻄﻪ ﻫﺎ ﺳﺖ‪ ،‬ﻣﺜﺎﻝ ‪ :‬ﺗﻌﺪﺍﺩ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎ‪ ،‬ﺗﻌﺪﺍﺩ ﻣﻘﺎﺩﻳﺮ ﺑﺮﺗﺮ ﺑﺮﺍﻱ ﻫﺮ‬
‫ﺧﺎﺻﻴﺖ‬
‫• ﺗﺨﻤﻴﻦ ﺍﻣﺎﺭﻱ ﺑﺮﺍﻱ ﻧﺘﺎﻳﺞ ﻣﺘﻮﺳﻂ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﻱ ﻫﺰﻳﻨﻪ ﻱ ﺍﺟﺮﺍ ﻫﺎﻱ ﭘﻴﭽﻴﺪﻩ‬
‫• ﻣﺤﺎﺳﺒﻪ ﻱ ﻫﺰﻳﻨﻪ ﻱ ﻓﺮﻣﻮﻟﻪ ﻛﺮﺩﻥ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﻣﺎﺭ‬

‫ﺗﻮﻟﻴﺪ ﺍﺟﺮﺍﻫﺎﻱ ﺗﺸﺎﺑﻪ‬


‫ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﺍﺟﺮﺍﻫﺎﻱ ﺭﺍﺑﻄﻪ ﺍﻱ‪:‬‬

‫ﺩﻭ ﺍﺟﺮﺍﻱ ﺟﺒﺮ ﺭﺍﺑﻄﻪ ﺍﻱ ﺭﺍ ﻣﺸﺎﺑﻪ ﻣﻲ ﺗﻮﺍﻥ ﮔﻔﺖ ﺍﮔﺮ ﺩﻭ ﺍﺟﺮﺍ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎﻱ ﻣﺴﺎﻭﻱ ﺑﺮ ﺭﻭﻱ ﭘﺎﻳﮕﺎﻩ‬
‫ﺻﻮﺭﺕ ﻣﺠﻤﻮﻋﻪ ﻫﺎﻱ ﭼﻨﺪ ﺗﺎﻳﻲ‬ ‫ﺩﺍﺩﻩ ﻱ ﻗﺎﻧﻮﻧﻲ ﺗﻮﻟﻴﺪ ﻛﻨﻨﺪ ‪.‬ﺩﺭ‪ ،SQL‬ﻭﺭﻭﺩﻱ ﻫﺎ ﻭ ﺧﺮﻭﺟﻲ ﻫﺎ ﺑﻪ‬
‫ﻫﺴﺘﻨﺪ‪.‬ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ ﺑﻴﺎﻥ ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺍﺟﺮﺍﻫﺎﻱ ﺩﻭ ﻓﺮﻡ ﺑﺎ ﻫﻢ ﺑﺮﺍﺑﺮﻧﺪ ﻭ ﻣﻲ ﺗﻮﺍﻥ ﺍﺟﺮﺍﻱ ﻓﺮﻡ ﺍﻭﻟﻲ ﺭﺍ‬
‫ﺑﺎ ﺩﻭﻣﻲ ﺟﺎﺑﺠﺎ ﻛﺮﺩ‪.‬‬
‫ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ‪:‬‬

‫‪ .1‬ﺍﺭﺗﺒﺎﻁ ﺑﻴﻦ ﻋﻤﻠﻜﺮﺩﻫﺎﻱ ﺍﻧﺘﺨﺎﺏ ) ‪ ( selection‬ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺍﺯ ﺑﻴﻦ ﺑﺮﺩ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ‬
‫‪ selection‬ﻫﺎﻱ ﻣﺴﺘﻘﻞ ﻣﺘﻮﺍﻟﻲ‪.‬‬

‫)) ‪σ θ ∧θ ( E ) = σ θ (σ θ ( E‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬

‫‪ .2‬ﻋﻤﻠﻜﺮﺩﻫﺎﻱ ‪ selection‬ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﺎ ﻫﻢ ﻣﺒﺎﺩﻟﻪ ﻛﺮﺩ )ﺟﺎﺑﺠﺎ ﻛﺮﺩ(‪.‬‬

‫‪165‬‬
‫)) ‪σ θ (σ θ ( E )) = σ θ (σ θ ( E‬‬
‫‪1‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪1‬‬

‫‪ .3‬ﻓﻘﻂ ﺁﺧﺮﻳﻦ ﻋﻤﻠﻜﺮﺩ ﺩﺭ ﺗﻮﺍﻟﻲ ‪ ،‬ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ ﻭ ﺑﻘﻴﻪ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺣﺬﻑ ﻛﺮﺩ ‪.‬‬

‫) ‪Π L1 (Π L2 ( (Π Ln ( E )))) = Π L1 ( E‬‬

‫‪ Selection .4‬ﻫﺎ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﺎ ﻫﻢ ﺗﺮﻛﻴﺐ ﻛﺮﺩ ﺑﺎ ﭘﻴﻮﺳﺘﻦ ﺗﺘﺎ ‪.‬‬

‫‪ .5‬ﻋﻤﻠﻜﺮﺩﻫﺎﻱ ﺗﺮﻛﻴﺐ ﺗﺘﺎ ﻗﺎﺑﻞ ﻣﺒﺎﺩﻟﻪ )ﺟﺎﺑﺠﺎ ﻛﺮﺩﻥ( ﻫﺴﺘﻨﺪ‪.‬‬

‫‪ (a) .6‬ﺗﺮﻛﻴﺐ ﻃﺒﻴﻌﻲ ﻋﻤﻠﻜﺮﺩﻫﺎ ﺷﺮﻛﺖ ﭘﺬﻳﺮ ﻫﺴﺘﻨﺪ ‪.‬‬

‫)‪ (b‬ﺗﺮﻛﻴﺐ ﺗﺘﺎ ﺑﻪ ﺷﺮﺡ ﺯﻳﺮ ﺷﺮﻛﺖ ﭘﺬﻳﺮ ﺍﺳﺖ‬

‫‪ θ2‬ﺷﺎﻣﻞ ﺧﺎﺻﻴﺖ ﻫﺎﻱ ‪ E2‬ﻭ ‪ E3‬ﺍﺳﺖ‬

‫ﺗﺼﻮﻳﺮﻱ ﺍﺯ ﻧﻤﺎﻳﺶ ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ‬

‫‪166‬‬
‫‪ .7‬ﻋﻤﻠﻜﺮﺩ ﺍﻧﺘﺨﺎﺏ ) ‪ ( selection‬ﺗﻘﺴﻴﻢ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﺑﻴﺶ ﺍﺯ ﻋﻤﻠﻜﺮﺩ ﺗﺮﻛﻴﺐ ﺗﺘﺎ‪ ،‬ﺩﺭ ﺯﻳﺮ ﺩﻭ‬
‫ﻣﻮﺭﺩ ﺍﺯ ﺷﺮﺍﻳﻂ ﺫﻛﺮ ﺷﺪﻩ‪:‬‬
‫‪ (a‬ﺯﻣﺎﻧﻲ ﻛﻪ ﺗﻤﺎﻣﻲ ﺧﺼﻮﺻﻴﺎﺕ ﺩﺭ ‪ θ0‬ﺁﻣﺪﻩ ‪،‬ﺗﻨﻬﺎ ﺧﺼﻮﺻﻴﺎﺕ ﻳﻜﻲ ﺍﺯ ﺍﺟﺮﺍﻫﺎ )‪ (E1‬ﻣﻲ‬
‫ﭘﻴﻮﻧﺪﺩ‪.‬‬

‫‪ (b‬ﺯﻣﺎﻧﻴﻜﻪ ‪ θ 1‬ﺗﻤﺎﻡ ﺧﺼﻮﺻﻴﺎﺕ ‪ E1‬ﺭﺍ ﻭ ‪ θ2‬ﺗﻤﺎﻡ ﺧﺼﻮﺻﻴﺎﺕ ‪ E2‬ﺭﺍ ﺷﺎﻣﻞ ﻣﻲ ﺷﻮﺩ‪:‬‬

‫‪ .8‬ﻃﺮﺡ ﺗﻘﺴﻴﻢ ﻋﻤﻠﻜﺮﺩ ﻫﺎﻱ ﻓﺮﺍﺗﺮ ﺍﺯ ﺗﺘﺎ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻣﺘﺼﻞ ﻣﻲ ﺷﻮﻧﺪ ‪:‬‬
‫‪ (a‬ﺍﮔﺮ ﺗﺘﺎ ﺗﻨﻬﺎ ﺍﺯ ‪ L1 ∪ L2‬ﭘﺪﻳﺪ ﺁﻳﺪ‪:‬‬

‫‪∏L ∪ L ( E1‬‬ ‫‪θ‬‬ ‫‪E2 ) =( ∏L ( E)1‬‬ ‫‪θ‬‬ ‫) ‪( ∏L ( E2‬‬


‫‪1‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪2‬‬

‫ﺑﺎﺷﺪ ﺁﻧﮕﺎﻩ‪:‬‬ ‫‪θ‬‬ ‫‪ (b‬ﺍﮔﺮ ﺍﺯ ﭘﻴﻮﺳﺘﻦ ‪E2 E1‬‬


‫• ﺑﺎﻳﺪ ﺍﺟﺎﺯﻩ ﺩﺍﺩ ‪ L1‬ﻭ ‪ L2‬ﺑﻪ ﺗﺮﺗﻴﺐ ﺑﻪ ﺻﻮﺭﺕ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺧﺼﻮﺻﻴﺎﺕ ‪ E1‬ﻭ ‪ E2‬ﺑﺎﺷﻨﺪ‪.‬‬
‫• ﺑﺎﻳﺪ ﺍﺟﺎﺯﻩ ﺩﺍﺩ ﺗﺎ ‪ L3‬ﺧﺼﻮﺻﻴﺘﻲ ﺍﺯ ‪ E1‬ﺑﺎﺷﺪ ﻛﻪ ﺩﺭ ﺷﺮﺍﻳﻂ ﺗﺘﺎ ﺑﭙﻴﻮﻧﺪﺩ ﺍﻣﺎ ﺩﺭ ‪L1 ∪ L2‬‬
‫ﻧﺒﺎﺷﺪ‪.‬‬

‫‪167‬‬
‫• ﺑﺎﻳﺪ ﺍﺟﺎﺯﻩ ﺩﺍﺩ ﺗﺎ ‪ L4‬ﺧﺼﻮﺻﻴﺘﻲ ﺍﺯ ‪ E2‬ﺑﺎﺷﺪ ﻛﻪ ﺩﺭ ﺷﺮﺍﻳﻂ ﺗﺘﺎ ﺑﭙﻴﻮﻧﺪﺩ ﺍﻣﺎ ﺩﺭ ‪L1 ∪ L2‬‬
‫ﻧﺒﺎﺷﺪ‪.‬‬

‫‪ .9‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﻋﻤﻠﻜﺮﺩ ﻫﺎﻱ ﺍﺗﺼﺎﻝ ﻭ ﺗﻘﺎﻃﻌﻲ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺟﺎﺑﺠﺎ ﻛﺮﺩ ‪.‬‬

‫‪E1 ∪ E2 = E 2 ∪ E1‬‬
‫‪E1 ∩ E2 = E 2 ∩ E1‬‬
‫ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺍﺗﺼﺎﻝ ﻫﺎ ﻭ ﺗﻘﺎﻃﻊ ﻫﺎ ﺷﺮﻛﺖ ﭘﺬﻳﺮﻧﺪ ‪.‬‬ ‫‪.10‬‬
‫)‪(E1 ∪ E2) ∪ E3 = E1 ∪ (E2 ∪ E3‬‬
‫)‪(E1 ∩ E2) ∩ E3 = E1 ∩ (E2 ∩ E3‬‬
‫ﻋﻤﻠﻜﺮﺩ ‪ selection‬ﻓﺮﺍﺗﺮ ﺍﺯ ∩ ‪ ∪,‬ﻭ ‪ -‬ﺗﻌﻤﻴﻢ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﺪ‬ ‫‪.11‬‬
‫)‪σθ (E1 – E2) = σθ (E1) – σθ(E2‬‬
‫ﻭ ﻫﻤﭽﻨﻴﻦ ‪:‬‬

‫‪σθ (E1 – E2) = σθ(E1) – E2‬‬


‫ﻃﺮﺡ ﻋﻤﻠﻜﺮﺩ ﺗﻮﺯﻳﻊ ﻓﺮﺍﺗﺮ ﺍﺯ ﺍﺗﺼﺎﻝ ﺍﺳﺖ‬ ‫‪.12‬‬
‫))‪ΠL(E1 ∪ E2) = (ΠL(E1)) ∪ (ΠL(E2‬‬
‫ﺗﻤﺮﻳﻦ‪ :‬ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻬﻲ ﺍﻳﺠﺎﺩ ﻛﻨﻴﺪ‪:‬‬

‫‪ o‬ﮔﺮﻭﻫﻲ ﺑﺎ ﻋﻤﻠﻜﺮﺩ ﺍﺟﺘﻤﺎﻉ‬


‫‪ o‬ﺧﺎﺭﺟﻲ ﺗﺮﻳﻦ ﻋﻤﻠﻜﺮﺩ ﺍﺗﺼﺎﻝ ﺭﺍ ﺭﻫﺎ ﻛﻨﻴﺪ‬

‫ﻣﺜﺎﻟﻲ ﺑﺮﺍﻱ ﺗﻐﻴﻴﺮ ﺷﻜﻞ )ﺩﮔﺮ ﮔﻮﻧﻲ(‪Pushing Selections:‬‬

‫‪ :Query‬ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻧﺎﻣﻬﺎﻱ ﺗﻤﺎﻣﻲ ﺁﻣﻮﺯﻧﺪﮔﺎﻥ ﺩﺭﺑﺨﺶ ﻣﻮﺳﻴﻘﻲ ‪ ،‬ﻫﻤﺮﺍﻩ ﺑﺎ ﻋﻨﻮﺍﻥ ﺩﺭﺳﻬﺎﻳﻲ ﻛﻪ‬ ‫‪‬‬
‫ﺁﻧﻬﺎ ﺁﻣﻮﺯﺵ ﻣﻲ ﺩﻫﻨﺪ‪.‬‬

‫‪168‬‬
‫”‪Πname, title(σdept_name= “Music‬‬
‫))))‪Πcourse_id, title (course‬‬ ‫‪(teaches‬‬ ‫‪(instructor‬‬

‫ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﺎﻧﻮﻥ ‪.7(a‬‬ ‫‪‬‬


‫))‪Πname, title((σdept_name= “Music”(instructor‬‬
‫)))‪Πcourse_id, title (course‬‬ ‫‪(teaches‬‬

‫ﺍﺟﺮﺍﻱ ‪ selection‬ﺩﺭ ﺍﻭﻟﻴﻦ ﺯﻣﺎﻧﻲ ﻛﻪ ﺍﻧﺪﺍﺯﻩ ﻱ ﺭﺍﺑﻄﻪ ﻱ ﻣﺘﺼﻞ ﺷﺪﻩ ﺗﺎ ﺣﺪ ﻣﻤﻜﻦ ﻛﻮﭼﻚ ﺷﺪﻩ‬ ‫‪‬‬
‫ﺑﺎﺷﺪ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﺍﺳﺖ‪.‬‬

‫ﻣﺜﺎﻟﻲ ﺑﺮﺍﻱ ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﻣﻀﺎﻋﻒ‬

‫‪ :Query‬ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻧﺎﻡ ﺗﻤﺎﻡ ﺍﻣﻮﺯﻧﺪﻩ ﻫﺎ ﺩﺭ ﺑﺨﺶ ﻣﻮﺳﻴﻘﻲ ﻛﻪ ﺩﺭ ﺳﺎﻝ‪ 2009‬ﺗﺪﺭﻳﺲ ﻛﺮﺩﻩ ﺍﻧﺪ ‪.‬‬ ‫‪‬‬
‫ﻫﻤﺮﺍﻩ ﺑﺎ ﻧﺎﻡ ﺩﺭﻭﺳﻲ ﻛﻪ ﺁﻧﻬﺎ ﺩﺭﺱ ﺩﺍﺩﻩ ﺍﻧﺪ‪.‬‬
‫‪Πname, title(σdept_name= “Music”∧year = 2009‬‬
‫))))‪Πcourse_id, title (course‬‬ ‫‪(teaches‬‬ ‫‪(instructor‬‬
‫ﺟﺎﺑﺠﺎﻳﻲ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﺗﺼﺎﻝ ﺷﺮﻛﺖ ﭘﺬﻳﺮﻱ )ﻗﺎﻧﻮﻥ ‪.(6a‬‬ ‫‪‬‬
‫‪Πname, title(σdept_name= “Music”∧gear = 2009‬‬
‫)))‪Πcourse_id, title (course‬‬ ‫)‪teaches‬‬ ‫‪((instructor‬‬

‫ﻓﺮﻡ ﺩﻭﻣﻲ ﺩﺭ ﻓﺮﺻﺘﻲ ﺑﺎ ﺑﻜﺎﺭﮔﻴﺮﻱ ﻗﺎﻧﻮﻥ "ﺍﺟﺮﺍﻱ ﺍﻧﺘﺨﺎﺑﻬﺎﻱ ﺯﻭﺩﺗﺮ" ‪،‬پﺩﻳﺪ ﻣﻲ ﺁﻳﺪ ‪.‬‬ ‫‪‬‬
‫)‪σ year = 2009 (teaches) σdept_name = “Music” (instructor‬‬
‫ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﭼﻨﺪﮔﺎﻧﻪ‬

‫‪169‬‬
Pushing Project:‫ﻣﺜﺎﻟﻲ ﺑﺮﺍﻱ ﺗﻐﻴﻴﺮ ﺷﻜﻞ‬

:‫ﺷﺎﻣﻞ‬ 
teaches) Πname, title(σdept_name= “Music” (instructor)
Πcourse_id, title (course))))

: ‫ﻫﻨﮕﺎﻣﻴﻜﻪ ﻣﺎ ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﻛﻨﻴﻢ‬ 


teaches) (σdept_name = “Music” (instructor

: ‫ﻣﺎ ﺭﺍﺑﻄﻪ ﺍﻱ ﺭﺍ ﻛﻪ ﺭﻭﻱ ﺍﻟﮕﻮﻱ ﺯﻳﺮ ﻓﺮﺍﻫﻢ ﻣﻲ ﻛﻨﻴﻢ‬

(ID, name, dept_name, salary, course_id, sec_id, semester, year)

‫ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﻛﻨﻨﺪﻭ ﺣﺬﻑ ﻛﺮﺩﻥ‬8b ‫ﻭ‬8a ‫ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﻣﺸﺎﺑﻪ ﺳﺎﺯﻱ‬push ‫ﻃﺮﺡ ﻫﺎﻱ‬ 
:‫ﺧﺼﻮﺻﻴﺎﺕ ﻏﻴﺮ ﺿﺮﻭﺭﻱ ﺍﺯ ﻧﺘﺎﻳﺞ ﻣﺘﻮﺳﻂ ﺩﺭ ﺯﻳﺮ ﻧﺸﺎﻥ ﺩﺍﺩﻩ ﺷﺪﻩ‬

teaches)) Πname, title(Πname, course_id (σdept_name= “Music” (instructor)


Πcourse_id, title (course))))
170
‫ﺍﺟﺮﺍﻱ ﻃﺮﺡ ﺑﻪ ﺳﺎﺩﮔﻲ ﻛﺎﻫﺶ ﺍﻧﺪﺍﺯﻩ ﻱ ﺭﺍﺑﻄﻪ ﻱ ﻣﺘﺼﻞ ﺷﺪﻩ ﺍﺳﺖ ‪.‬‬ ‫‪‬‬
‫(‬ ‫ﻣﺜﺎﻟﻲ ﺑﺮﺍﻱ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺍﺗﺼﺎﻝ )‪Join Ordering‬‬
‫• ﺑﺮﺍﻱ ﺗﻤﺎﻣﻲ ﺭﻭﺍﺑﻂ ‪ r1‬ﻭ ‪ r2‬ﻭ ‪: r3‬‬

‫)‪r3‬‬ ‫‪(r2‬‬ ‫‪r3 = r1‬‬ ‫)‪r2‬‬ ‫‪(r1‬‬


‫‪ r3‬ﻛﺎﻣﻼ ﺑﺰﺭگ ﺑﻮﺩﻩ ﻭ ‪ r2 r1‬ﻛﻮﭼﻚ ﺑﺎﺷﺪ‪ ،‬ﺍﻧﮕﺎﻩ ﻣﺎ ﺭﺍﺑﻄﻪ ﻱ ﺯﻳﺮ ﺭﺍ ﺍﻧﺘﺨﺎﺏ‬ ‫• ﺍﮔﺮ ‪r2‬‬
‫ﻣﻲ ﻛﻨﻴﻢ‪:‬‬

‫‪r3‬‬ ‫)‪r2‬‬ ‫‪(r1‬‬


‫ﺑﺎ ﺍﻳﻦ ﻭﺟﻮﺩ ﻣﺎ ﺭﺍﺑﻄﻪ ﻱ ﻛﻮﭼﻜﺘﺮﻱ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻭ ﺫﺧﻴﺮﻩ ﻣﻲ ﻛﻨﻴﻢ ‪.‬‬

‫(‬ ‫ﻣﺜﺎﻟﻲ ﺑﺮﺍﻱ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺍﺗﺼﺎﻝ )‪join Ordering‬‬


‫• ﺑﺼﻮﺭﺕ ﺯﻳﺮ ﺑﻴﺎﻥ ﻣﻲ ﺷﻮﺩ‪.‬‬

‫)‪teaches) Πname, title(σdept_name= “Music” (instructor‬‬


‫))))‪Πcourse_id, title (course‬‬
‫• ﺍﺑﺘﺪﺍ ﻣﺤﺎﺳﺒﻪ‬

‫‪Πcourse_id, title (course) compute teaches‬‬


‫ﺍﻧﺠﺎﻡ ﻣﻲ ﮔﻴﺮﺩ ﻭ ﺳﭙﺲ ﻧﺘﻴﺠﻪ ﻱ ﺍﺗﺼﺎﻝ ﺍﻧﺠﺎﻡ ﻣﻲ ﮔﻴﺮﺩ ﺑﺎ‬

‫)‪σdept_name= “Music” (instructor‬‬


‫ﺍﻣﺎ ﻧﺘﻴﺠﻪ ﻱ ﺍﻭﻟﻴﻦ ﺍﺗﺼﺎﻝ ﻣﺎﻧﻨﺪ ﻳﻚ ﺭﺍﺑﻄﻪ ﻱ ﺑﺰﺭگ ﺧﻮﺍﻫﺪ ﺷﺪ ‪.‬‬

‫• ﺍﻣﺎ ﺑﺨﺶ ﻛﻮﭼﻜﻲ ﺍﺯ ﺁﻣﻮﺯﺵ ﺩﺍﻧﺸﮕﺎﻩ ﻣﺎﻧﻨﺪ ﺑﺨﺶ ﻣﻮﺳﻴﻘﻲ ﺍﺳﺖ ‪.‬‬
‫‪ o‬ﺑﻬﺘﺮ ﺍﺳﺖ ﺍﻳﻨﮕﻮﻧﻪ ﻣﺤﺎﺳﺒﻪ ﺭﺍ ﺍﻧﺠﺎﻡ ﺩﺍﺩ‪:‬‬

‫)‪teaches σdept_name= “Music” (instructor‬‬


‫ﺷﻤﺎﺭﺵ ﺑﻴﺎﻥ ﻫﺎﻱ ﻣﺘﺸﺎﺑﻪ‬

‫‪171‬‬
‫• ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺟﺴﺘﺠﻮﻫﺎ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ ﺑﺮﺍﻱ ﺑﻴﺎﻧﻬﺎﻱ ﺗﻮﻟﻴﺪ ﺭﺩﻩ ﺑﻨﺪﻱ ﺷﺪﻩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ‬
‫ﻛﻨﺪ‪.‬‬
‫• ﺗﻮﻟﻴﺪ ﺗﻤﺎﻣﻲ ﺑﻴﺎﻥ ﻫﺎﻱ ﻣﺘﺸﺎﺑﻪ ﺑﺎ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﺍﻧﺠﺎﻡ ﻣﻲ ﮔﻴﺮﺩ ‪:‬‬
‫ﺗﻜﺮﺍﺭ‬ ‫‪o‬‬
‫ﺑﻜﺎﺭﮔﻴﺮﻱ ﺗﻤﺎﻣﻲ ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ ﺑﻜﺎﺭﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺭﻭﻱ ﻫﺮﻳﻚ ﺍﺯ ﺯﻳﺮ ﺑﻴﺎﻧﻬﺎ‪.‬‬ ‫‪‬‬
‫‪ ‬ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﺑﻴﺎﻧﻬﺎﻱ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﻱ ﺟﺪﻳﺪ ﺑﻪ ﻣﺠﻤﻮﻋﻪ ﻱ ﺑﻴﺎﻧﻬﺎﻱ ﻣﺘﺸﺎﺑﻪ ‪.‬‬
‫‪ ‬ﺗﺎ ﺯﻣﺎﻧﻴﻜﻪ ﻫﻴﭻ ﺑﻴﺎﻥ ﻣﺘﺸﺎﺑﻪ ﺟﺪﻳﺪ ﻱ ﻧﻤﺎﻧﺪ ‪.‬‬
‫ﺩﻭﻣﻌﺒﺮ‬ ‫‪o‬‬
‫‪‬‬
‫ﻃﺮﺡ ﺗﻮﻟﻴﺪ ﺑﻬﻴﻨﻪ ﺷﺪﻩ ﺑﺮ ﭘﺎﻳﻪ ﻱ ﻗﻮﺍﻧﻴﻦ ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﺍﺳﺖ ‪.‬‬
‫‪selection‬ﻫﺎ ‪projection ،‬ﻫﺎ ﻭ ‪join‬ﻫﺎ‬ ‫‪ ‬ﻣﻮﺍﺭﺩ ﺧﺎﺹ ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮ ﻓﻘﻂ ﺑﺎ‬
‫ﺍﻧﺠﺎﻡ ﻣﻲ ﮔﻴﺮﺩ‪.‬‬
‫ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﺑﺮﭘﺎﻳﻪ ﻱ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‬

‫• ﻓﺎﺻﻠﻪ ﻱ ﻧﻴﺎﺯﻣﻨﺪﻱ ﻫﺎ ﺑﺎ ﺍﺷﺘﺮﺍﻙ ﮔﺬﺍﺭﻱ ﺯﻳﺮ ﺑﻴﺎﻧﻬﺎﻱ ﺭﺍﻳﺞ ﻛﺎﻫﺶ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﺪ ‪:‬‬
‫‪ o‬ﺯﻣﺎﻧﻴﻜﻪ ‪ E1‬ﺍﺯ ‪ E2‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ‪ ،‬ﻣﻌﻤﻮﻻ ﺩﺭ ﺳﻄﺢ ﺑﺎﻻ‬
‫ﺍﻳﻦ ﺩﻭ ﺑﺎﻫﻢ ﻣﺘﻤﺎﻳﺰ ﻫﺴﺘﻨﺪ ‪ .‬ﺯﻳﺮﺩﺭﺧﺖ ﻫﺎﻱ ﭘﺎﻳﻴﻦ ﺑﺎ ﻫﻢ ﺑﺮﺍﺑﺮﻧﺪ ﻭ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺍﺯ‬
‫‪ pointer‬ﻫﺎﻱ ﻣﺸﺘﺮﻙ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻨﺪ‪.‬‬
‫‪ ‬ﻣﺜﺎﻝ ‪ :‬ﺯﻣﺎﻧﻴﻜﻪ ﺍﺗﺼﺎﻝ ﺟﺎﺑﺠﺎﻳﻲ ﭘﺬﻳﺮ ﺑﻜﺎﺭﮔﺮﻓﺘﻪ ﺷﺪﻩ‬

‫‪ o‬ﺯﻳﺮ ﺑﻴﻨﻬﺎﻱ ﻣﺴﺎﻭﻱ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺩﺭ ﺯﻣﺎﻧﻬﺎﻱ ﮔﻮﻧﺎﮔﻮﻥ ﺗﻮﻟﻴﺪ ﺷﻮﻧﺪ‬


‫‪ ‬ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻧﺴﺨﻪ ﻫﺎﻱ ﺯﻳﺮ ﺑﻴﺎﻧﻬﺎ ﻭ ﺍﺷﺘﺮﺍﻙ ﻳﻚ ﻛﭙﻲ ‪.‬‬
‫• ﺯﻣﺎﻥ ﻧﻴﺎﺯﻣﻨﺪﻳﻬﺎ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﻛﺎﻫﺶ ﺩﺍﺩ ﺑﺎ ﻋﺪﻡ ﺗﻮﻟﻴﺪ ﺗﻤﺎﻣﻲ ﺑﻴﺎﻧﻬﺎ ‪.‬‬
‫‪ o‬ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﭘﻮﻳﺎ‬

‫‪172‬‬
‫‪ ‬ﻣﺎ ﻳﻚ ﻣﻮﺭﺩ ﺧﺎﺹ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﭘﻮﻳﺎ ﺑﺮﺍﻱ ﺍﺗﺼﺎﻝ ﺑﺎ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﺑﻬﻴﻨﻪ ﺭﺍ‬
‫ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫ﺗﺨﻤﻴﻦ ﻫﺰﻳﻨﻪ‬

‫ﻧﻴﺎﺯ ﺑﻪ ﺁﻣﺎﺭ ﺭﺍﺑﻄﻪ ﻫﺎﻱ ﻭﺭﻭﺩﻱ ﻫﺎ ‪ ،‬ﻣﺜﻞ‪ :‬ﺗﻌﺪﺍﺩ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎ‪ ،‬ﺍﻧﺪﺍﺯﻩ ﻱ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎ ‪ ،‬ﻭﺭﻭﺩﻱ ﻫﺎ ﻣﻲ‬
‫ﺗﻮﺍﻧﻨﺪ ﻧﺘﻴﺠﻪ ﻱ ﺯﻳﺮ ﺑﻴﺎﻧﻬﺎ ﺷﻮﻧﺪ‪:‬‬

‫‪ o‬ﻧﻴﺎﺯ ﺑﻪ ﺗﺨﻤﻴﻦ ﺁﻣﺎﺭﻫﺎﻱ ﻧﺘﺎﻳﺞ ﺍﺟﺮﺍ‬


‫‪ o‬ﺍﻧﺠﺎﻡ ﻧﻴﺎﺯﻫﺎﻱ ﺁﻣﺎﺭ ﺍﺿﺎﻓﻲ‬

‫ﻣﺜﻞ‪ :‬ﺗﻌﺪﺍﺩ ﺍﺭﺯﺷﻬﺎﻱ ﺍﻣﺘﻴﺎﺯﺍﺕ ﺑﺮﺍﻱ ﻳﻚ ﺧﺼﻮﺻﻴﺖ ‪.‬‬


‫ﺍﻧﺘﺨﺎﺏ ﻃﺮﺡ ﻫﺎﻱ ﺍﺭﺯﻳﺎﺑﻲ‬

‫ﺑﻴﺸﺘﺮﻳﻦ ﺑﺮﺭﺳﻲ ﻓﻌﻞ ﻭﺍﻧﻔﻌﺎﻻﺕ ﺗﻜﻨﻴﻚ ﻫﺎﻱ ﺍﺭﺯﻳﺎﺑﻲ ﺯﻣﺎﻧﻲ ﺍﻧﺠﺎﻡ ﻣﻲ ﮔﻴﺮﺩ ﻛﻪ ﻃﺮﺡ ﻫﺎﻱ ﺍﺭﺯﻳﺎﺑﻲ‬
‫ﺍﻧﺘﺨﺎﺏ ﻣﻲ ﺷﻮﻧﺪ ‪ .‬ﺍﻧﺘﺨﺎﺏ ﺍﺭﺯﺍﻧﺘﺮﻳﻦ ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﺮﺍﻱ ﻫﺮ ﻋﻤﻠﻜﺮﺩ ﺑﺼﻮﺭﺕ ﻣﺴﺘﻘﻞ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺮﺍﻱ‬
‫ﻫﻤﻪ ﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎ ﺛﻤﺮﺑﺨﺶ ﻧﺒﺎﺷﺪ ‪ .‬ﺟﺴﺘﺠﻮﻱ ﻛﺎﺭﺑﺮﺩﻱ ﺑﻬﻴﻨﻪ ﺷﺪﻩ ﻋﻨﺎﺻﺮ ﺯﻳﺮ ﺭﺍ ﺗﺮﻛﻴﺐ ﻣﻲ ﻛﻨﺪ ‪:‬‬

‫‪ (1‬ﺟﺴﺘﺠﻮﻱ ﺗﻤﺎﻡ ﻃﺮﺡ ﻫﺎ ﻭ ﺍﻧﺘﺨﺎﺏ ﺑﻬﺘﺮﻳﻦ ﻃﺮﺡ ﺩﺭ ﺭﻭﺷﻲ ﺑﻪ ﺳﺒﻚ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ ‪.‬‬
‫‪ (2‬ﺑﻬﺮﻩ ﮔﻴﺮﻱ ﺍﺯ ﻛﺸﻒ ﻛﻨﻨﺪﻩ ﻫﺎ ﺑﺮﺍﻱ ﺍﻧﺘﺨﺎﺏ ﻳﻚ ﺑﺮﻧﺎﻣﻪ‪.‬‬
‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﻣﺒﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ‬

‫‪. . . rn.‬‬ ‫‪r2‬‬ ‫ﺗﻔﻜﺮ ﺩﺭ ﻛﺸﻒ ﺑﻬﺘﺮﻳﻦ ﻣﻨﻈﻢ ﺳﺎﺯﻱ ﺍﺗﺼﺎﻝ ﺑﺮﺍﻱ ‪r1‬‬

‫!)‪ . (2(n – 1))!/(n – 1‬ﻣﻨﻈﻢ ﺳﺎﺯﻱ ﻫﺎﻱ ﺍﺗﺼﺎﻝ ﮔﻮﻧﺎﮔﻮﻥ ﺑﺮﺍﻱ ﺑﻴﺎﻥ ﺑﺎﻻ ‪ .‬ﺯﻣﺎﻧﻴﻜﻪ ‪ n=7‬ﻭﻋﺪﺩ‬
‫ﺑﺮﺍﺑﺮﺳﺖ ﺑﺎ ‪ 665280 ,‬ﻭ ﺑﺎ ‪ n=10‬ﻋﺪﺩﺑﺰﺭﮔﺘﺮ ﺍﺯ ‪ 176‬ﺑﻴﻠﻴﻮﻥ ﻣﻲ ﺷﻮﺩ ‪ .‬ﻧﻴﺎﺯﻱ ﺑﻪ ﺗﻮﻟﻴﺪ ﻫﻤﻪ‬
‫ﻱ ﻣﻨﻈﻢ ﺳﺎﺯﻱ ﻫﺎﻱ ﺍﺗﺼﺎﻻﺕ ﻧﻴﺴﺖ ‪ .‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﭘﻮﻳﺎ‪ ،‬ﻛﻢ ﻫﺰﻳﻨﻪ ﺗﺮﻳﻦ ﻣﻨﻈﻢ ﺳﺎﺯﻱ‬
‫ﻣﺤﺎﺳﺒﻪ ﺷﺪﻩ ﺍﺳﺖ ‪.‬ﺗﻨﻬﺎ ﻓﻘﻂ ﻳﻜﺒﺎﺭ ﻭ‬ ‫ﺍﺗﺼﺎﻝ ﺑﺮﺍﻱ ﻫﺮ ﺯﻳﺮ ﻣﺠﻤﻮﻋﻪ ﺍﺯ }‪{r1, r2, . . . rn‬‬
‫ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺑﺮﺍﻱ ﺍﺳﺘﺎﺩﻩ ﻱ ﺑﻌﺪﻱ ﺍﺳﺖ‪.‬‬

‫ﺑﺮﺍﻱ ﻳﺎﻓﺘﻦ ﺑﻬﺘﺮﻳﻦ ﺍﺗﺼﺎﻝ ﺑﺮﺍﻱ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺍﺭﺗﺒﺎﻃﺎﺕ ‪ n‬ﻫﺎ ‪:‬‬

‫‪173‬‬
‫• ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺑﻬﺘﺮﻳﻦ ﻃﺮﺡ ﺑﺮﺍﻱ ﻣﺠﻤﻮﻋﻪ ‪ S‬ﻛﻪ ﺍﺭﺗﺒﺎﻃﺎﺕ ‪ n‬ﻫﺎ ﺍﺳﺖ‪ ،‬ﺷﺎﻣﻞ ﺗﻤﺎﻣﻲ ﻃﺮﺡ ﻫﺎﻱ‬
‫ﻣﻤﻜﻦ ﺑﻪ ﺷﻜﻞ ‪ (S – S1) S1‬ﻛﻪ ﺩﺭﺁﻥ ‪ S1‬ﻫﺮ ﺯﻳﺮ ﻣﺠﻤﻮﻋﻪ ﻱ ﻏﻴﺮ ﺧﺎﻟﻲ ﺍﺯ ‪ S‬ﺍﺳﺖ‪.‬‬
‫• ﻣﺤﺎﺳﺒﻪ ﻱ ﺑﺎﺯﮔﺸﺘﻲ ﻫﺰﻳﻨﻪ ﻫﺎ ﺑﺮﺍﻱ ﺍﺗﺼﺎﻝ ﺯﻳﺮﻣﺠﻤﻮﻋﻪ ﻫﺎﻱ ‪ S‬ﺍﺳﺖ ﻛﻪ ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ‬
‫ﻫﺰﻳﻨﻪ ﻱ ﻫﺮ ﻃﺮﺡ ﺍﻧﺠﺎﻡ ﻣﻲ ﮔﻴﺮﺩ‪ .‬ﺍﻧﺘﺨﺎﺏ ﺍﺭﺯﺍﻧﺘﺮﻳﻦ ﺩﺭ ‪ 2n – 2‬ﻫﺎﻱ ﻣﺘﻨﺎﻭﺏ‪.‬‬
‫• ﻣﻮﺭﺩ ﻣﺒﻨﺎ ﺑﺮﺍﻱ ﺑﺎﺯﮔﺸﺖ‪ :‬ﺍﺭﺗﺒﺎﻁ ﻣﻨﻔﺮﺩ ﻃﺮﺡ ﺩﺳﺘﺮﺳﻲ ‪.‬‬
‫• ﺑﻜﺎﺭﮔﻴﺮﻱ ﺗﻤﺎﻣﻲ ‪ selection‬ﻫﺎ ﺭﻭﻱ ‪ Ri‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﻬﺘﺮﻳﻦ ﺍﻧﺘﺨﺎﺏ ﺩﺭ ﻓﻬﺮﺳﺖ ﻫﺎﻱ‬
‫ﺭﻭﻱ ‪.Ri‬‬

‫• ﺯﻣﺎﻧﻴﻜﻪ ﻃﺮﺡ ﺑﺮﺍﻱ ﻫﺮ ﺯﻳﺮ ﻣﺠﻤﻮﻋﻪ ﻱ ﻣﺤﺎﺳﺒﻪ ﺷﺪﻩ ‪ ،‬ﺫﺧﻴﺮﻩ ﻭ ﺍﺳﺘﻔﺎﺩﻩ ﻣﺠﺪﺩ ﻣﻲ ﺷﻮﺩ ﻭ‬
‫ﺩﻭﺑﺎﺭﻩ ﺧﻮﺍﺳﺘﻪ ﻣﻲ ﺷﻮﺩ ﺑﻪ ﺟﺎﻱ ﻣﺤﺎﺳﺒﻪ ﻣﺠﺪﺩ ﺁﻥ ‪.‬‬

‫ﺍﻟﮕﻮﺭﻳﺘﻢ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺗﺮﺗﻴﺐ ﺍﺗﺼﺎﻝ‬

‫ﺑﺮﺧﻲ ﺍﺯ ﺗﺒﺪﻳﻼﺕ ﺑﺮﺍﻱ ﺍﺟﺎﺯﻩ ﻓﻬﺮﺳﺖ ﻫﺎﻱ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮﺩﺭﺗﻮ ﺍﺗﺼﺎﻝ ﻣﻲ ﻳﺎﺑﻨﺪ ﺭﻭﻱ ﺍﺭﺗﺒﺎﻃﺎﺗﻲ ﻛﻪ‬
‫‪ Selection‬ﻫﺎﻳﻲ ﺩﺍﺭﺩ‪.‬‬
‫ﺩﺭﺧﺖ ﻫﺎﻱ ﺍﺗﺼﺎﻝ ﻋﻤﻖ ﭼﭗ‬

‫ﺩﺭ ﺩﺭﺧﺘﻬﺎﻱ ﺍﺗﺼﺎﻝ ﻋﻤﻖ ﭼﭗ ﻭﺭﻭﺩﻱ ﺳﻤﺖ ﺭﺍﺳﺖ ﺑﺮﺍﻱ ﻫﺮ ﺍﺗﺼﺎﻝ ﻳﻚ ﺭﺍﺑﻄﻪ ﺍﺳﺖ‪ ،‬ﻧﻪ ﻧﺘﻴﺠﻪ ﺍﻱ ﺍﺯ‬
‫ﺍﺗﺼﺎﻝ ﻣﺘﻮﺳﻂ‪.‬‬

‫‪174‬‬
‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ‬

‫ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ ﻓﻴﺰﻳﻜﻲ ﺍﺟﺎﺯﻩ ﻣﻲ ﺩﻫﻨﺪ ﻛﻪ ﻃﺮﺡ ﺟﺴﺘﺠﻮﻱ ﻣﻨﻄﻘﻲ ﺑﺮﮔﺮﺩﺍﻧﺪﻩ ﺷﺪﻩ ﺑﻪ ﺑﻬﻴﻨﻪ ﺳﺎﺯ ﻣﻮﺛﺮ‬
‫ﺑﺮ ﻣﺒﻨﺎﻱ ﻗﻮﺍﻧﻴﻦ ﺗﺸﺎﺑﻪ ﻭﺍﺑﺴﺘﻪ ﺍﺳﺖ ﺑﻪ‪:‬‬

‫ﻧﻤﺎﻳﺶ ﻓﻀﺎﻱ ﻛﺎﺭﺍﻣﺪ ﺑﻴﺎﻧﻬﺎﻳﻲ ﻛﻪ ﻣﻤﺎﻧﻌﺖ ﻣﻲ ﻛﻨﺪ ﺍﺯ ﺳﺎﺧﺘﻦ ﻛﭙﻲ ﻫﺎﻱ ﭼﻨﺪﮔﺎﻧﻪ ﺑﺮ‬
‫ﺭﻭﻱ ﺯﻳﺮ ﺑﻴﺎﻧﻬﺎ‪.‬‬
‫ﺗﻜﻨﻴﻚ ﻫﺎﻱ ﻛﺎﺭﺁﻣﺪ ﺑﺮﺍﻱ ﻛﺸﻒ ﻧﺴﺨﻪ ﻫﺎﻱ ﺍﺳﺘﺨﺮﺍﺟﻲ ﺍﺯ ﺑﻴﺎﻧﻬﺎ‪.‬‬
‫ﻓﺮﻡ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﭘﻮﻳﺎ ﺑﺮ ﻣﺒﻨﺎﻱ ﺣﻔﻆ ﻛﺮﺩﻥ ﻛﻪ ﺫﺧﻴﺮﻩ ﻣﻲ ﻛﻨﺪ ﺑﻬﺘﺮﻳﻦ ﻃﺮﺡ ﺑﺮﺍﻱ‬
‫ﺯﻳﺮ ﺍﺟﺮﺍﻱ ﺍﻭﻟﻴﻦ ﺯﻣﺎﻥ ﺑﻬﻴﻨﻪ ﺷﺪﻩ ﻭ ﻣﺠﺪﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﺩﺭ ﻓﺮﺍﺧﻮﺍﻧﻲ ﺗﻜﺮﺍﺭ ﺑﻬﻴﻨﻪ‬
‫ﺳﺎﺯﻱ ﺷﺪﻩ ﺩﺭ ﺯﻳﺮ ﺑﻴﺎﻧﻬﺎﻱ ﺑﺮﺍﺑﺮ‪.‬‬
‫ﺗﻜﻨﻴﻚ ﻫﺎﻱ ﻫﺮﺱ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ ﻛﻪ ﺟﻠﻮﮔﻲﺭﻱ ﻣﻲ ﻛﻨﺪ ﺍﺯ ﺗﻮﻟﻴﺪ ﻫﻤﻪ ﻃﺮﺡ ﻫﺎ ‪.‬‬

‫ﭘﻴﺸﮕﺎﻣﻲ ﺑﺎ ﭘﺮﻭژﻩ ﻱ ﻭﻟﻜﺎﻧﻮ ﻭ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺩﺭﺑﻬﻴﻨﻪ ﺳﺎﺯ ‪. SQL Server‬‬


‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺍﻛﺘﺸﺎﻓﻲ‬

‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﻣﺒﺘﻨﻲ ﺑﺮﻫﺰﻳﻨﻪ ﭘﺮﻫﺰﻳﻨﻪ ﺍﺳﺖ ‪،‬ﺣﺘﻲ ﺑﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﭘﻮﻳﺎ ‪.‬ﺳﻴﺴﺘﻢ ﻫﺎ ﻣﻲ ﺗﻮﺍﻧﻨﺪ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﻛﻨﻨﺪ ﺍﺯ ﺭﻭﺵ ﺍﻛﺘﺸﺎﻓﻲ ﺑﺮﺍﻱ ﻛﺎﻫﺶ ﺗﻌﺪﺍﺩ ﺍﻧﺘﺨﺎﺑﻬﺎ ﻛﻪ ﺑﺎﻳﺪ ﺳﺎﺧﺘﻪ ﺷﻮﺩ ﺩﺭ ﻣﺪﻝ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ ‪.‬‬
‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺍﻛﺘﺸﺎﻓﻲ ‪،‬ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮ ﺭﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﻗﻮﺍﻧﻴﻦ ﻛﻪ ﻣﻌﻤﻮﻻ ﻣﻮﺟﺐ‬
‫ﺑﻬﺒﻮﺩ ﻧﻤﺎﻳﺶ ﺍﺟﺮﺍ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﻣﻲ ﺩﻫﺪ‪:‬‬

‫‪175‬‬
‫ﺍﺟﺮﺍﻱ ﺳﺮﻳﻊ ‪) selection‬ﻛﺎﻫﺶ ﺗﻌﺪﺍﺩ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎ (‬ ‫‪‬‬
‫ﺍﺟﺮﺍﻱ ﺳﺮﻳﻊ ‪) projection‬ﻛﺎﻫﺶ ﺗﻌﺪﺍﺩ ﺧﺼﻮﺻﻴﺎﺕ (‬ ‫‪‬‬
‫‪ selection‬ﻭ ﺍﺗﺼﺎﻝ ﻋﻤﻠﻜﺮﺩﻫﺎ ‪).‬ﺑﺎ ﻛﻮﭼﻚ‬ ‫ﺍﺟﺮﺍﻱ ﺑﻴﺸﺘﺮﻳﻦ ﻣﺤﺪﻭﺩﻛﻨﻨﺪﻩ ﻫﺎﻱ‬ ‫‪‬‬
‫ﻛﺮﺩﻥ ﺍﻧﺪﺍﺯﻩ ﻱ ﻧﺘﻴﺠﻪ( ﻗﺒﻞ ﺍﺯ ﺑﻘﻴﻪ ﻱ ﻋﻤﻠﻜﺮﺩ ﻫﺎﻱ ﻣﺸﺎﺑﻪ ‪.‬‬
‫ﺑﻌﻀﻲ ﺍﺯ ﺳﻴﺴﺘﻢ ﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻓﻘﻂ ﺑﻪ ﺻﻮﺭﺕ ﺍﻛﺘﺸﺎﻓﻲ‪ ،‬ﺑﻘﻴﻪ ﻱ ﺍﻛﺘﺸﺎﻓﻲ ﻫﺎ‬ ‫‪‬‬
‫ﺑﺎ ﺑﺨﺸﻲ ﺍﺯ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ ﺗﺮﻛﻴﺐ ﻣﻲ ﺷﻮﻧﺪ ‪.‬‬

‫ﺳﺎﺧﺘﺎﺭ ﺑﻬﻴﻨﻪ ﺳﺎﺯ ﺟﺴﺘﺠﻮ‬

‫ﺑﻴﺸﺘﺮ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻫﺎ ﻓﻘﻂ ﻋﻤﻖ ﭼﭗ ﺍﺗﺼﺎﻝ ﺩﺳﺘﻮﺭﺍﺕ ﺭﺍ ﺑﺮﺭﺳﻲ ﻣﻲ ﻛﻨﺪ ‪ .‬ﺑﻌﻼﻭﻩ ﺭﻭﺵ ﻫﺎﻱ ﺍﻛﺘﺸﺎﻓﻲ‬
‫ﺑﺮﺍﻱ ﻓﺸﺎﺭ ‪selection‬ﻫﺎ ﻭ ‪ projection‬ﻫﺎ ﺩﺭﺧﺖ ﺟﺴﺘﺠﻮ ﺭﺍ ﭘﺎﻳﻴﻦ ﻣﻲ ﺁﻭﺭﺩ‪ .‬ﻛﺎﻫﺶ ﭘﻴﭽﻴﺪﮔﻲ‬
‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﻭ ﺗﻮﻟﻴﺪ ﻃﺮﺡ ﻫﺎﻱ ﻗﺎﺑﻞ ﺟﻮﺍﺑﮕﻮﻳﻲ ﺑﻪ ﺧﻂ ﺍﺭﺯﻳﺎﺑﻲ ‪ .‬ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺍﻛﺘﺸﺎﻓﻲ ﺩﺭ ﺑﺮﺧﻲ ﺍﺯ‬
‫ﻭﺭژﻥ ﻫﺎﻱ ﺍﻭﺭﺍﻛﻞ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫** ﭘﻴﭽﻴﺪﮔﻲ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺟﺴﺘﺠﻮ ﺩﺭ ‪SQL‬‬

‫ﺳﺎﺧﺘﺎﺭ ﺑﻬﻴﻨﻪ ﺳﺎﺯ ﺟﺴﺘﺠﻮ‬

‫ﺭﺍ‬ ‫ﺑﺮﺧﻲ ﺍﺯ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻫﺎﻱ ﺟﺴﺘﺠﻮ ﺍﻧﺘﺨﺎﺏ ﻫﺎﻱ ﺍﻛﺘﺸﺎﻓﻲ ﺭﺍ ﻭ ﺗﻮﻟﻴﺪ ﻃﺮﺡ ﻫﺎﻱ ﺩﺳﺘﺮﺳﻲ ﻣﺘﻨﺎﻭﺏ‬
‫ﻛﺎﻣﻞ ﻣﻲ ﻛﻨﺪ‪.‬‬

‫‪ o‬ﻣﻌﺒﺮ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪﻩ ﻱ ﺗﻜﺮﺍﺭ ﺷﻮﻧﺪﻩ‬


‫‪ ‬ﻧﻮﺷﺘﻦ ﺩﻭﺑﺎﺭﻩ ﻱ ﺍﻛﺘﺸﺎﻓﻲ ﺑﻼﻙ ﺳﺎﺧﺘﺎﺭ ﺗﻮﺩﺭﺗﻮ ﻭ ﺍﺟﺘﻤﺎﻉ ‪.‬‬
‫‪ ‬ﭘﻴﺮﻭﻱ ﺩﺳﺘﻮﺭﻫﺎﻱ ﺍﺗﺼﺎﻝ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ ﺑﺮﺍﻱ ﻫﺮ ﺑﻼﻙ ‪.‬‬
‫‪ o‬ﺑﺮﺧﻲ ﺍﺯ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻫﺎ ﺑﻜﺎﺭ ﻣﻲ ﮔﻴﺮﻧﺪ ﺗﻐﻴﻴﺮ ﺷﻜﻞ ﻫﺎ ﺭﺍ ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮﻱ ﻛﺎﻣﻞ ﻭ ﻋﺪﻡ‬
‫ﻭﺍﺑﺴﺘﮕﻲ ﺑﻪ ﺑﻼﻙ ﺳﺎﺧﺘﺎﺭ‪.‬‬
‫‪ o‬ﺑﻮﺩﺟﻪ ﻱ ﻫﺰﻳﻨﻪ ﻱ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺑﺮﺍﻱ ﺗﻮﻗﻒ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺳﺮﻳﻊ )ﺍﮔﺮ ﻫﺰﻳﻨﻪ ﻃﺮﺡ ﻛﻨﺘﺮ ﺍﺯ‬
‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺑﺎﺷﺪ‪(.‬‬

‫‪176‬‬
‫‪ o‬ﻃﺮﺡ ﻣﺨﺰﻥ ﺑﺮﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ ﻱ ﻣﺠﺪﺩ ﻗﺒﻞ ﺍﺯ ﻣﺤﺎﺳﺒﻪ ﻱ ﻃﺮﺡ ﺍﮔﺮ ﺟﺴﺘﺠﻮ ﻧﺎﺷﻲ ﺍﺯ‬
‫ﭘﺎﻳﺪﺍﺭﻱ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﺩﺭ ﺟﺴﺘﺠﻮ‪.‬‬

‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻛﺘﺸﺎﻓﻲ ﻫﺎ ‪ ،‬ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺟﺴﺘﺠﻮ ﻣﺒﺘﻨﻲ ﺑﺮ ﻫﺰﻳﻨﻪ ﺭﺍ ﺩﺭ ﻣﺨﺎﺭﺝ ﻛﻠﻲ ﺗﺤﻤﻴﻞ ﻗﺎﺑﻞ‬
‫ﺗﻮﺟﻬﻲ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫‪ o‬ﺍﻣﺎ ﺍﺭﺯﺵ ﺁﻥ ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮﻫﺎ ﭘﺮﻫﺰﻳﻨﻪ ﺍﺳﺖ ‪.‬‬


‫‪ o‬ﺑﻬﻴﻨﻪ ﺳﺎﺯﻫﺎ گﺍﻫﻲ ﺍﺯ ﺍﻛﺘﺸﺎﻓﻲ ﻫﺎﻱ ﺳﺎﺩﻩ ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮﻫﺎﻱ ﺧﻴﻠﻲ ﺍﺭﺯﺍﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ‬
‫ﻛﻨﻨﺪ ﻭ ﺷﻤﺎﺭﺵ ﺟﺎﻣﻊ ﺭﺍ ﺑﺮﺍﻱ ﺟﺴﺘﺠﻮﻫﺎﻱ ﮔﺮﺍﻥ ﺍﺟﺮﺍ ﻣﻲ ﻛﻨﺪ ‪.‬‬

‫ﺁﻣﺎﺭ ﺑﺮﺍﻱ ﺗﺨﻤﻴﻦ ﻫﺰﻳﻨﻪ )ﺍﻃﻼﻋﺎﺕ ﺁﻣﺎﺭﻱ ﺑﺮﺍﻱ ﺗﺨﻤﻴﻦ ﻫﺰﻳﻨﻪ(‬

‫‪ : nr ‬ﺗﻌﺪﺍﺩ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎ ﺩﺭ ﺭﺍﺑﻄﻪ ﻱ ‪. r‬‬


‫‪ : br ‬ﺗﻌﺪﺍﺩ ﺑﻼﻙ ﻫﺎ ﻛﻪ ﺷﺎﻣﻞ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎﻱ ‪ r‬ﺍﺳﺖ‪.‬‬
‫‪ : lr ‬ﺍﻧﺪﺍﺯﻩ ﻱ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎﻱ ‪. r‬‬
‫‪ : fr ‬ﺍﻧﺴﺪﺍﺩ ﻓﺎﻛﺘﻮﺭ ‪r‬‬
‫‪ : V(A, r): ‬ﺗﻌﺪﺍﺩ ﺍﻣﺘﻴﺎﺯﺍﺕ ﻣﻘﺎﺩﻳﺮﺍﺳﺖ ﻛﻪ ﻧﺸﺎﻥ ﺩﻩ ﻥﺩﻩ ‪ r‬ﺑﺮﺍﻱ ﺧﺼﻮﺻﻴﺖ ﺍﺳﺖ ﻭ ‪ A‬ﺑﺮﺍﺑﺮ‬
‫ﺑﺎ ﺍﻧﺪﺍﺯﻩ ﻱ )‪ ∏A(r‬ﺍﺳﺖ‪.‬‬
‫‪ ‬ﺍﮔﺮ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎﻱ ‪ r‬ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺑﺼﻮﺭﺕ ﻓﻴﺰﻳﻜﻲ ﺩﺭ ﻳﻚ ﻓﺎﻳﻞ ﺁﻧﮕﺎﻩ ‪:‬‬
‫‪nr ‬‬
‫‪‬‬
‫= ‪br‬‬ ‫‪‬‬
‫‪f r ‬‬
‫‪‬‬
‫‪‬‬

‫ﻧﻤﺎﻳﺶ ﻧﺤﻮﻩ ﻱ ﺍﻧﺘﺸﺎﺭ‬

‫• ﻧﻤﺎﻳﺶ ﻧﺤﻮﻩ ﻱ ﺍﻧﺘﺸﺎﺭ ﺭﻭﺯ ﺧﺼﻮﺻﻴﺖ ﺳﻦ ﺩﺭ ﺭﺍﺑﻄﻪ ﻱ ﺍﻓﺮﺍﺩ ‪.‬‬

‫‪177‬‬
‫ﺑﺮﺁﻭﺭﺩ ﺍﻧﺪﺍﺯﻩ ‪selection‬‬
‫• )‪σA=v(r‬‬
‫‪ : nr / V(A,r) o‬ﺗﻌﺪﺍﺩ ﺭﻛﻮﺭﺩﻫﺎ ﻛﻪ ﺭﺿﺎﻳﺖ ‪ selection‬ﺭﺍ ﺍﻳﺠﺎﺩ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫‪ o‬ﺷﺮﺍﻳﻂ ﻣﺘﺴﺎﻭﻱ ﺭﻭﻱ ﻛﻠﻴﺪ ﺧﺼﻮﺻﻴﺖ ‪ :‬ﺍﻧﺪﺍﺯﻩ ﻱ ﺗﺨﻤﻴﻦ=‪.1‬‬
‫• )‪σA≤V(r) (case of σA ≥ V(r) is symmetric‬‬
‫‪ C o‬ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ ﺗﺨﻤﻴﻦ ﺗﻌﺪﺍﺩ ﭼﻨﺪﺗﺎﻳﻲ ﻫﺎ‬
‫‪ o‬ﺍﮔﺮ )‪ min(A,r‬ﻭ )‪ max(A,r‬ﺩﺭ ﻛﺎﺗﺎﻟﻮگ ﺩﺭ ﺩﺳﺘﺮﺳﻨﺪ‪.‬‬

‫• ﺍﮔﺮ ﻧﻤﺎﻳﺶ ﻧﺤﻮﻩ ﻱ ﺍﻧﺘﺸﺎﺭ ﺩﺭ ﺩﺳﺘﺮﺱ ﺑﺎﺷﺪ‪ ،‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﺨﻤﻴﻦ ﺑﺎﻻ ﺭﺍ ﺗﺼﺤﻴﺢ ﻛﻨﺪ ‪.‬‬
‫• ﺩﺭ ﻏﻴﺎﺏ ﺍﻃﻼﻋﺎﺕ ﺁﻣﺎﺭﻱ ‪ C‬ﻓﺮﺽ ﺷﺪﻩ ﺍﺳﺖ ﺗﺎ ‪ nr / 2‬ﺑﺎﺷﺪ‪.‬‬

‫‪178‬‬
‫ﻫﺎ ﻱ ﺷﺎﺧﻪ ﺍﻱ ﺗﻮ ﺩﺭ ﺗﻮ‪:‬‬ ‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ‪sub query‬‬
‫• ﻣﺜﺎﻝ ﻛﻮﺋﺮﻱ ﺷﺎﺧﻪ ﺍﻱ ﺗﻮ ﺩﺭ ﺗﻮ‪:‬‬
‫‪selectname‬‬
‫‪from instructor‬‬
‫* ‪where exists (select‬‬
‫‪from teaches‬‬
‫)‪where instructor.ID = teaches.ID and teaches.year = 2007‬‬
‫‪SQL‬ﻣﻔﻬﻮﻣﻲ ﺍﺯ ﺭﻓﺘﺎﺭ ‪sub query‬ﻫﺎ ﺗﻮ ﺩﺭ ﺗﻮ ﺍﺳﺖ ﺩﺭ ﻛﻪ ﺩﺭ ﺁﻥ ﺗﻮﺍﺑﻊ ﺭﺍ ﻛﻪ ﭘﺎﺭﺍﻣﺘﺮﻫﺎ ﻣﻴﮕﻴﺮﺩ ﻭ‬
‫ﻳﻚ ﺍﺭﺯﺵ ﻭﺍﺣﺪ ﻳﺎ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺍﺭﺯﺵ ﻫﺎ ﺭﺍ ﺑﺎﺯ ﻣﻲ ﮔﺮﺩﺍﻧﺪ‪ .‬ﭘﺎﺭﺍﻣﺘﺮﻫﺎﻱ ﻣﺘﻐﻴﺮ ﺍﺯ ﻛﻮﺋﺮﻱ ﺩﺭ ﺳﻄﺢ‬
‫ﺑﻴﺮﻭﻧﻲ ﻫﺴﺘﻨﺪ ﻛﻪ ﺩﺭ ‪ Sub query‬ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪ ،‬ﺍﻳﻦ ﻣﺘﻐﻴﺮﻫﺎ ﻣﺘﻐﻴﺮﻫﺎﻱ‬
‫ﻫﻤﺒﺴﺘﮕﻲ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫ﻣﻔﻬﻮﻡ‪ Sub query ،‬ﺗﻮﺩﺭﺗﻮ ﻳﻚ ﺑﺎﺭ ﺑﺮﺍﻱ ﻫﺮ ﺗﺎﭘﻞ ﺩﺭ ﻣﻘﻄﻊ ﻣﺤﺼﻮﻝ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺗﻮﺳﻂ ﺳﻄﺢ‬
‫ﺧﺎﺭﺟﻲ ﺍﺳﺖ‪ .‬ﭼﻨﻴﻦ ﺍﺭﺯﻳﺎﺑﻲ‪ ،‬ﺍﺭﺯﻳﺎﺑﻲ ﺍﺭﺗﺒﺎﻁ ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫ﺗﻮﺟﻪ‪ :‬ﺩﺭ ﺷﺮﺍﻳﻂ ﺩﻳﮕﺮ ﻛﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﭘﻴﻮﺳﺘﻦ ﻗﺒﻞ ﺍﺯ ﺍﺟﺮﺍﻱ ‪ Sub query‬ﻫﺎﻱ ﺗﻮ‬
‫ﺩﺭ ﺗﻮ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ ﺑﮕﻴﺮﺩ ‪ .‬ﺍﺭﺯﻳﺎﺑﻲ ﻫﺎﻱ ﻫﻤﺒﺴﺘﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﻛﺎﻣﻼ ﻧﺎﻛﺎﺭﺁﻣﺪ ﺑﺎﺷﻨﺪ ‪ .‬ﺗﻌﺪﺍﺩ‬
‫ﺯﻳﺎﺩﻱ ﺍﺯ ﺗﻤﺎﺱ ﻣﻤﻜﻦ ﺍﺳﺖ ﺍﺯ ‪sub query‬ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﺳﺎﺧﺘﻪ ﺷﻮﺩ ‪ .‬ﻣﻤﻜﻦ ﺍﺳﺖ ﻳﻚ ﻧﺘﻴﺠﻪ ﻏﻴﺮ‬
‫ﺿﺮﻭﺭﻱ ﺗﺼﺎﺩﻓﻲ ‪ I / O‬ﺑﻪ ﻭﺟﻮﺩ ﺁﻳﺪ ‪ .‬ﺑﻬﻴﻨﻪ ‪ SQL‬ﺗﻼﺵ ﺑﺮﺍﻱ ﺗﺒﺪﻳﻞ ﻭ ﭘﻴﻮﻧﺪ ‪sub query‬ﻫﺎ ﺗﻮ ﺩﺭ‬
‫ﺗﻮ ﻛﻪ ﺩﺭ ﺁﻥ ﻣﻤﻜﻦ ﻗﺎﺩﺭ ﺑﻪ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﻜﻨﻴﻚ ﻫﺎﻱ ﻛﺎﺭﺁﻣﺪ ﭘﻴﻮﻧﺪ ﺑﺎﺷﺪ ‪.‬‬
‫ﻣﺜﺎﻝ‪ :‬ﻛﻮﺋﺮﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﺯﻭﺩﺗﺮ ﺭﺍ ﻣﻲ ﺗﻮﺍﻥ ﺑﺎﺯﻧﻮﻳﺴﻲ ﻛﺮﺩ‬
‫‪select name‬‬
‫‪from instructor, teaches‬‬
‫‪where instructor.ID = teaches.ID and teaches.year = 2007‬‬
‫ﺗﻮﺟﻪ‪ :‬ﺍﻳﻦ ﺩﻭﻛﻮﺋﺮﻱ ﻣﺨﺘﻠﻒ ‪ 2‬ﻧﺴﺨﻪ ﺗﻜﺮﺍﺭﻱ ﺗﻮﻟﻴﺪ ﻛﺮﺩﻩ ﺍﻧﺪ )ﭼﺮﺍ؟(‬
‫‪ teaches‬ﻣﻲ ﺗﻮﺍﻧﺪ ﻧﺴﺨﻪ ﺗﻜﺮﺍﺭﻱ ‪ IDs‬ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ‪ ،‬ﻣﻲ ﺗﻮﺍﻧﺪ ﻧﺴﺨﻪ ﺗﻜﺮﺍﺭﻱ ﺭﺍ ﺑﻪ ﺩﺭﺳﺘﻲ‬
‫ﻫﻤﺎﻧﻄﻮﺭ ﻛﻪ ﻣﺎ ﺧﻮﺍﻫﻴﻢ ﺩﻳﺪ ﺍﺻﻼﺡ ﻛﻨﺪ‬

‫‪179‬‬
‫• ﻋﻤﻮﻣﺎ‪ ،‬ﻣﻤﻜﻦ ﻧﻴﺴﺖ ﻣﺴﺘﻘﻴﻤﺎ ﺍﺯ ﺳﻄﺢ ﺟﺰ ﺧﺎﺭﺟﻲ ‪query‬ﺑﻪ ﺳﻤﺖ ﺟﺰ ‪Sub query‬ﺗﻮ ﺩﺭ ﺗﻮ‬
‫ﺣﺮﻛﺖ ﻛﻨﻴﻢ‪ .‬ﺭﺍﺑﻄﻪ ﺑﻪ ﻃﻮﺭ ﻣﻮﻗﺖ ﺍﻳﺠﺎﺩ ﺷﺪﻩ‪ ،‬ﻭ ﺩﺭ ﺑﺪﻧﻪ ﺳﻄﺢ ﺑﻴﺮﻭﻧﻲ ‪ query‬ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ‬
‫ﻣﻴﮕﻴﺮﺩ‪.‬‬

‫ﺑﻪ ﻃﻮﺭ ﻛﻠﻲ‪ SQL, query ،‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺑﺎﺯ ﻧﻮﻳﺴﻲ ﺷﻮﺩ‪:‬‬
‫ﺑﺎﺯﻧﻮﻳﺴﻲ‪:‬‬
‫…‪select‬‬
‫‪fromL1‬‬
‫* ‪whereP1and exists (select‬‬
‫‪fromL2‬‬
‫)‪whereP2‬‬
‫ﺑﻪ‪:‬‬
‫‪create tablet1 as‬‬
‫‪select distinct V‬‬
‫‪from L2‬‬
‫‪1‬‬
‫‪where P2‬‬

‫… ‪select‬‬
‫‪from L1,t1‬‬
‫‪2‬‬
‫‪where P1and P2‬‬
‫‪1‬‬
‫‪P2 ‬ﺷﺎﻣﻞ ﮔﺬﺍﺭﻩ ﺩﺭ ‪P2‬ﻛﻪ ﻫﻴﭻ ﻣﺘﻐﻴﺮ ﻫﻤﺒﺴﺘﮕﻲ ﺭﺍ ﺷﺎﻣﻞ ﻧﻴﺴﺖ‪.‬‬
‫‪2‬‬
‫‪ reintroduces P2 ‬ﺷﺎﻣﻞ ﮔﺬﺍﺭﻩ ﻣﺘﻐﻴﺮﻫﺎﻱ ﻫﻤﺒﺴﺘﮕﻲ‪ ،‬ﺑﺎ ﺭﻭﺍﺑﻂ ﻣﻨﺎﺳﺐ ﺗﻐﻴﻴﺮ ﻧﺎﻡ ﺍﺳﺖ ‪.‬‬
‫‪V ‬ﺷﺎﻣﻞ ﺗﻤﺎﻡ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﻣﻮﺭﺩ ﺍﺳﺘﻔﺎﺩﻩ ﺩﺭ ﮔﺬﺍﺭﻩ ﺑﺎ ﻣﺘﻐﻴﺮ ﻫﻤﺒﺴﺘﮕﻲ ﺍﺳﺖ‪.‬‬
‫‪ ‬ﺩﺭ ﻣﺜﺎﻝ ﻣﺎ‪ query ،‬ﺍﺻﻠﻲ ﺷﺎﺧﻪ ﺍﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﻣﻲ ﺗﻮﺍﻧﺪ ﺗﻐﻴﻴﺮ ﭘﻴﺪﺍ ﻛﻨﺪ‬
‫‪create table t1as‬‬
‫‪select distinct ID‬‬
‫‪180‬‬
‫‪from teaches‬‬
‫‪where year = 2007‬‬

‫‪select name‬‬
‫‪from instructor, t1‬‬
‫‪where t1.ID = instructor.ID‬‬
‫ﺭﻭﻧﺪ ﺟﺎﺑﺠﺎﻳﻲ ﻳﻚ ‪query‬ﺗﻮ ﺩﺭ ﺗﻮ ﺑﻮﺍﺳﻄﻪ ﻳﻚ ‪query‬ﺑﺎ ﭘﻴﻮﺳﺘﻦ ﺭﺍ )ﺍﺣﺘﻤﺎﻻ ﺑﺎ ﻳﻚ ﺍﺭﺗﺒﺎﻁ‬
‫ﻣﻮﻗﺖ( ‪ decorrelation‬ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫• ‪ Decorrelation‬ﭘﻴﭽﻴﺪﻩ ﺗﺮ ﺍﺳﺖ ﺯﻣﺎﻧﻲ ﻛﻪ‪ Sub query :‬ﺍﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﺑﺮﺍﻱ ﺍﺟﺘﻤﺎﻉ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﺷﻮﺩ‪ ،‬ﻳﺎ ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻧﺘﻴﺠﻪ ‪sub query‬ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮﺭ ﺑﺮﺍﻱ ﺗﺴﺖ ﺷﺒﺎﻫﺖ)ﺑﺮﺍﺑﺮﻱ(ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﺷﻮﺩ‪ ،‬ﻳﺎﺯﻣﺎﻧﻲ ﻛﻪ ﺷﺮﺍﻳﻂ ﺍﺭﺗﺒﺎﻁ ‪sub query‬ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﺑﻪ ‪query‬ﻫﺎﻱ ﺩﻳﮕﺮ ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ‬
‫ﺑﺎﺷﺪ‪.‬‬

‫‪:‬‬ ‫ﺩﻳﺪﮔﺎﻩ‪materialized‬‬
‫ﺩﻳﺪﮔﺎﻩ‪ ، materialized‬ﺩﻳﺪﮔﺎﻫﻲ ﺍﺳﺖ ﻛﻪ ﻣﺤﺘﻮﻳﺎﺕ ﺁﻥ ﻣﺤﺎﺳﺒﻪ ﻭ ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﺍﺳﺖ ‪.‬‬
‫‪create view department_total_salary(dept_name, total_salary)as‬‬
‫)‪select dept_name, sum(salary‬‬
‫‪from instructor‬‬
‫‪group by dept_name‬‬
‫ﺗﺤﻘﻖ ﺩﻳﺪﮔﺎﻩ ﻓﻮﻕ ﺑﺴﻴﺎﺭ ﻣﻔﻴﺪ ﺧﻮﺍﻫﺪ ﺑﻮﺩ ﺍﮔﺮ ‪ total salary‬ﺗﻮﺳﻂ ‪ department‬ﺍﻏﻠﺐ ﻣﻮﺭﺩ‬
‫ﻧﻴﺎﺯ ﺑﺎﺷﺪ ‪ .‬ﺻﺮﻓﻪ ﺟﻮﻳﻲ ﺳﻌﻲ ﺩﺭ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺗﺎﭘﻞ ﻫﺎﻱ ﭼﻨﺪﮔﺎﻧﻪ ﻭ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﻣﻘﺪﺍﺭ ﺑﻪ ﺁﻧﻬﺎ ﻣﻲ‬
‫ﻛﻨﺪ‪.‬‬

‫‪:‬‬ ‫‪Materialized View Maintenance‬‬


‫ﻭﻇﻴﻔﻪ ﻧﮕﻬﺪﺍﺭﻱ ﻳﻚ ﺩﻳﺪﮔﺎﻩ ‪ materialized‬ﺑﺮﻭﺯ ﺭﺳﺎﻧﻲ ﺩﺍﺩﻩ ﺑﺎ ﺩﺍﺩﻩ ﻱ ﺍﺳﺎﺳﻲ ﺍﺳﺖ ﻛﻪ ﺑﻪ‬
‫ﻋﻨﻮﺍﻥ‪ Materialized View Maintenance‬ﺷﻨﺎﺧﺘﻪ ﺷﺪﻩ ﺍﺳﺖ ‪ .‬ﺩﻳﺪﮔﺎﻩ ﻫﺎﻱ‬
‫‪ materialized‬ﻣﻲ ﺗﻮﺍﻥ ﺑﺎ ﻣﺤﺎﺳﺒﻪ ﻣﺠﺪﺩ ﺩﺭ ﻫﺮ ﺑﺮﻭﺯ ﺭﺳﺎﻧﻲ ﻧﮕﻬﺪﺍﺭﻱ ﻛﺮﺩ ‪.‬‬

‫‪181‬‬
‫ﮔﺰﻳﻨﻪ ﺑﻬﺘﺮ ﺍﺳﺖ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪incremental view maintenance‬ﺍﺳﺖ‪ .‬ﺗﻐﻴﻴﺮﺍﺕ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‬
‫ﺑﻪ ﺭﻭﺍﺑﻂ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﺗﻐﻴﻴﺮﺍﺕ ‪materialized view‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ ﻛﻪ ﺳﭙﺲ ﺏﺭﻭﺯ ﺭﺳﺎﻧﻲ‬
‫ﻣﻴﺸﻮﻧﺪ‪ View Maintenance .‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺑﺎ ﻣﺤﺮﻙ ﻫﺎﻱ ﺗﻌﺮﻳﻒ ﺩﺳﺘﻲ ﺩﺭ ﺩﺭﺝ‪ ،‬ﺣﺬﻑ‪ ،‬ﻭ ﺑﻪ‬
‫ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺮ ﺭﺍﺑﻄﻪ ﺩﺭ ‪ view definition‬ﺍﻧﺠﺎﻡ ﺷﻮﺩ ﻭ ﻧﻮﺷﺘﻦ ﺩﺳﺘﻲ ﻛﺪ ﺑﺮﺍﻱ ﺏﺭﻭﺯ ﺭﺳﺎﻧﻲ‬
‫‪view whenever‬ﺭﻭﺍﺑﻂ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﻛﻪ ﺑﻪ ﺭﻭﺯ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬
‫ﺭﻭﺵ ﻫﺎﻱ ﻓﻮﻕ ﺑﻪ ﻃﻮﺭ ﻣﺴﺘﻘﻴﻢ ﺗﻮﺳﻂ ﺑﺴﻴﺎﺭﻱ ﺍﺯ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻣﻴﺸﻮﻧﺪ‪.‬‬

‫ﭘﻴﻮﺳﺘﻦ ﻋﻤﻠﻴﺎﺕ ‪:‬‬

‫‪r‬ﻭ ‪ update‬ﺑﺮﺍﻱ ‪ r‬ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ‪.‬‬ ‫‪s = materialized view v‬‬ ‫•‬
‫‪new‬‬ ‫‪old‬‬
‫‪r‬ﺗﻔﻜﻴﻚ ﻛﺮﺩﻥ ﻭﺿﻌﻴﺖ ﻫﺎﻱ ‪old‬ﻭ‪ new‬ﺍﺯ ﺭﺍﺑﻄﻪ ‪r‬‬ ‫• ﻭ ‪ Let r‬ﻭ‬
‫• ﺣﺎﻻﺕ ﻳﻚ ﺩﺭﺝ ﺑﺮﺍﻱ ‪ r‬ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‬
‫‪new‬‬ ‫‪old‬‬
‫‪r‬‬ ‫)‪sas (r ∪ir‬‬ ‫• ﻣﺎ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺑﻨﻮﻳﺴﻴﻢ ‪s‬‬
‫‪old‬‬
‫‪(r‬‬ ‫• ﻭ ﺑﺎﺯﻧﻮﻳﺴﻲ ﺑﺎﻻ ﺑﺼﻮﺭﺕ)‪s) ∪ (ir s‬‬
‫‪old‬‬
‫‪(r‬ﺳﺎﺩﻩ ﺷﺪﻩ ﺍﺭﺯﺵ ‪old‬ﺍﺯ‪ materialized view‬ﺍﺳﺖ ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ‬ ‫• ﺍﻣﺎ )‪s‬‬
‫ﺗﻐﻴﻴﺮﺍﺕ‪ incremental‬ﺑﺮﺍﻱ ‪ view‬ﻓﻘﻂ ‪ir s‬ﺍﺳﺖ‪.‬‬
‫‪new‬‬ ‫‪old‬‬
‫‪v‬‬ ‫ﺑﻨﺎﺑﺮﺍﻳﻦ‪ ،‬ﺑﺮﺍﻱ ﺩﺭﺝ ﻫﺎ )‪= v ∪(ir s‬‬ ‫•‬
‫‪new‬‬ ‫‪old‬‬
‫‪v‬‬ ‫• ﺑﻪ ﻃﻮﺭ ﻣﺸﺎﺑﻪ ﺑﻪ ﺣﺬﻑ ﻫﺎ )‪= v –(dr s‬‬

‫ﻋﻤﻠﻴﺎﺕ ‪ Selection‬ﻭ‪: Projection‬‬

‫• ‪Selection‬ﻫﺎ‪ :‬ﺷﺎﻣﻞ ﻳﻚ ‪viewv = σθ(r),‬‬


‫‪new‬‬ ‫‪old‬‬
‫‪v‬‬ ‫• )‪= v ∪σθ(ir‬‬

‫‪182‬‬
‫‪new‬‬ ‫‪old‬‬
‫• )‪v = v - σθ(dr‬‬
‫• ‪ projection‬ﻳﻚ ﻋﻤﻠﻴﺎﺕ ﺩﺷﻮﺍﺭ ﺗﺮ ﺍﺳﺖ‬
‫• })‪R = (A,B), and r(R) = { (a,2), (a,3‬‬
‫• )‪∏A(r‬ﻳﻚ )‪ tuple (a‬ﻣﺠﺮﺩ ﺩﺍﺭﺩ‪.‬‬
‫• ﺍﮔﺮ ﻣﺎ )‪ tuple (a,2‬ﺭﺍ ﺍﺯ ‪r‬ﺣﺬﻑ ﻛﻨﻴﻢ‪ ،‬ﻧﺒﺎﻳﺪ )‪ tuple (a‬ﺍﺯ)‪ ∏A(r‬ﺣﺬﻑ ﺷﻮﺩ‬
‫) )‪R‬ﺭﺍ ﺣﺬﻑ ﺍﻣﺎ ﺍﮔﺮ)‪ (a,3‬ﺑﺨﻮﺑﻲ ﺣﺬﻑ ﺷﺪ ﻣﺎ ﺑﺎﻳﺪ ‪ tuple‬ﺭﺍ ﺣﺬﻑ ﻛﻨﻴﻢ ‪.‬‬
‫• ﺑﺮﺍﻱ ﻫﺮ ﺗﺎﭘﻞ ﺩﺭ )‪projection ∏A(r‬ﻣﺎ ﻳﻚ ﺗﻌﺪﺍﺩ ﺍﺯ ﺯﻣﺎﻥ ﻫﺎﻱ ﻣﺸﺘﻖ ﺷﺪﻩ ﺭﺍ ﻧﮕﻪ ﻣﻲ‬
‫ﺩﺍﺭﻳﻢ‪.‬‬
‫• ﺩﺭﺝ ﺩﺭ ﻳﻚ ﺗﺎﭘﻞ ‪ ،r‬ﺍﮔﺮ ﺑﺮﺍﻳﻨﺪﺗﺎﭘﻞ ﺩﺭ )‪ ∏A(r‬ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻣﺎ ﺍﻓﺰﺍﻳﺶ ﺗﻌﺪﺍﺩ ﺭﺍ‬
‫ﺩﺍﺭﻳﻢ‪ ،‬ﻭﮔﺮﻧﻪ ﻣﺎ ﺍﺿﺎﻓﻪ ﺷﺪﻥ ﻳﻚ ﺗﺎﭘﻞ ﺟﺪﻳﺪ ﺑﺎ‪ count = 1‬ﺭﺍ ﺩﺍﺭﻳﻢ ‪.‬‬
‫• ﺩﺭ ﻣﻮﺭﺩ ﺣﺬﻑ ﻳﻚ ﺗﺎﭘﻞ ﺍﺯ ‪،R‬ﻛﺎﻫﺶ ﻣﺘﻨﺎﻇﺮ ﺗﻌﺪﺍﺩ ﺗﺎﭘﻞ ﺩﺭ )‪ ∏A(r‬ﺩﺍﺭﻳﻢ‪.‬‬
‫• ﺍﮔﺮ ﺗﻌﺪﺍﺩ ‪ 0‬ﺷﻮﺩ‪ ،‬ﻣﺎ ﺗﺎﭘﻞ ﺭﺍ ﺍﺯ)‪ ∏A(r‬ﺣﺬﻑ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺍﺩﻏﺎﻡ‪:‬‬

‫)‪(r‬‬
‫• ‪v = Agcount(B) :count‬‬
‫• ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﺎﭘﻞ ﻫﺎ ‪i‬ﺩﺭﺝ ﻣﻴﺸﻮﻧﺪ‪.‬‬
‫‪r‬‬
‫• ﺑﺮﺍﻱ ﻫﺮ ﺗﺎﭘﻞ ‪r‬ﺩﺭ ‪،i‬ﺍﮔﺮ ﮔﺮﻭﻩ ﻣﺘﻨﺎﻇﺮ ﺣﺎﺿﺮ ﺩﺭ ‪ V‬ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪،‬ﻣﺎ‬
‫‪r‬‬
‫ﺍﻓﺰﺍﻳﺶ ‪ count‬ﺭﺍ ﺩﺍﺭﻳﻢ‪ ،‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ ﻣﺎ ﻳﻚ ﺗﺎﭘﻞ ﺟﺪﻳﺪ ﺑﺎ ‪count‬‬
‫‪= 1‬ﺍﺿﺎﻓﻪ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫• ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﺎﭘﻞ ﻫﺎ ‪d‬ﺣﺬﻑ ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫‪r‬‬
‫• ﺑﺮﺍﻱ ﻫﺮ ﺗﺎﭘﻞ ‪t‬ﺩﺭ ‪i‬ﻣﺎ ﮔﺮﻭﻩ ‪t.A‬ﺭﺍ ﺩﺭ ‪v‬ﺟﺴﺘﺠﻮ ﻣﻲ ﻛﻨﻴﻢ‪ ،‬ﻭ ‪ 1‬ﺭﺍ ﺍﺯ ‪Count‬‬
‫‪r‬‬
‫ﮔﺮﻭﻩ ﻛﻢ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫• ﺍﮔﺮ ‪ 0 count‬ﺷﻮﺩ‪ ،‬ﺗﺎﭘﻞ ﺑﺮﺍﻱ ﮔﺮﻭﻩ ‪t.A‬ﺍﺯ ‪ v‬ﺭﺍ ﺣﺬﻑ ﻣﻲ‬
‫ﻛﻨﻴﻢ‪.‬‬
‫)‪(r‬‬
‫)‪v = Agsum(B‬‬ ‫• ‪:sum‬‬

‫‪183‬‬
‫• ﻣﺎ ﺑﺮﺍﻱ ﺑﺮﻗﺮﺍﺭﻱ ‪ sum‬ﺩﺭ ﻳﻚ ﺭﻭﺵ ﺳﺎﺩﻩ ‪،count‬ﻣﺎ ﺑﺠﺰ‪ add/substract‬ﺩﺭ‬
‫ﺍﺭﺯﺵ ‪ B‬ﺑﻪ ﺍﺭﺯﺍﻱ‪ adding/substracting‬ﻣﻘﺪﺍﺭ ‪1‬ﺭﺍ ﺑﻪ ‪ count‬ﻣﻲ ﺩﻫﻴﻢ‪.‬‬
‫‪ tupels‬ﺭﺍ ﺣﻔﻆ‬ ‫• ﻋﻼﻭﻩ ﺑﺮ ﺍﻳﻦ ﻣﺎ ‪ count‬ﻣﺮﺗﺒﻪ ﺷﻨﺎﺳﺎﻳﻲ ﮔﺮﻭﻩ ﻫﺎﻱ ﺑﺪﻭﻥ‬
‫ﻣﻴﻜﻨﻴﻢ ‪.‬ﻣﺜﻞ ﮔﺮﻭﻩ ﻫﺎﻱ ‪ deleted‬ﺍﺯ ‪.v‬‬
‫• ﺑﺮﺍﻱ ‪sum‬ﻧﻤﻲ ﺗﻮﺍﻥ ﺑﻪ ﺳﺎﺩﮔﻲ ﺗﺴﺖ ﺍﻧﺠﺎﻡ ﺩﺍﺩ‪) .‬ﭼﺮﺍ؟(‬
‫• ﺑﻜﺎﺭ ﺑﺮﺩﻥ ‪ ،avg‬ﻣﺎ ﻣﻘﺪﺍﺭ ‪sum‬ﻭ ‪ count‬ﺭﺍ ﻧﮕﻪ ﻣﻲ ﺩﺍﺭﻳﻢ‬
‫ﺍﺩﻏﺎﻡ ﺍﺭﺯﺵ ﻫﺎ ﺑﺼﻮﺭﺕ ﺟﺪﺍﮔﺎﻧﻪ ﺍﺳﺖ‪ ،‬ﻭ ﺩﺭ ﭘﺎﻳﺎﻥ ﺗﻘﺴﻴﻢ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫• ‪Max‬ﻭ‪v = Agmin(B) (r) : min‬‬
‫ﺑﻜﺎﺭ ﺑﺮﺩﻥ ‪ inserts‬ﺩﺭ ‪r‬ﺑﺴﻴﺎﺭ ﺳﺎﺩﻩ ﻭ ﺁﺳﺎﻥ ﺍﺳﺖ‪.‬‬ ‫•‬
‫• ﻧﮕﻬﺪﺍﺭﻱ ﻣﺠﻤﻮﻉ ﺍﺭﺯﺵ ﻫﺎﻱ ‪ max‬ﻭ ‪ min‬ﺩﺭ ﺣﺬﻑ ﻣﻤﻜﻦ ﺍﺳﺖ ﭘﺮ ﻫﺰﻳﻨﻪ‬
‫ﺑﺎﺷﺪ‪ .‬ﻣﺎ ﺑﻘﻴﻪ ‪tupel‬ﻫﺎﻱ ‪r‬ﺏ ﺭﺍ ﻛﻪ ﺩﺭ ﮔﺮﻭﻩ ﻣﺸﺎﺑﻪ ﻫﺴﺘﻨﺪ ﺭﺍ ﺟﺴﺘﺠﻮ ﻣﻲ‬
‫ﻛﻨﻴﻢ ﻭ ﻣﻘﺪﺍﺭ ‪ minimum‬ﺟﺪﻳﺪ ﺭﺍ ﭘﻴﺪﺍ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫ﺩﻳﮕﺮ ﻋﻤﻠﻴﺎﺕ ‪:‬‬
‫• ﻣﺠﻤﻮﻋﻪ‪v = r ∩s: intersection‬‬
‫• ﻫﻨﮕﺎﻣﻲ ﻳﻚ ﺗﺎﭘﻞ ﺩﺭ‪ inserted، r‬ﻣﻲ ﺷﻮﺩ ﻛﻪ ﻣﺎ ﭼﻚ ﻣﻲ ﻛﻨﻴﻦ ﺩﺭ ‪ s‬ﺣﺎﺿﺮ‬
‫ﺍﺳﺖ ﺍﮔﺮ ﺣﺎﺿﺮ ﺑﻮﺩ ﺁﻥ ﺭﺍ ﺑﻪ‪ v‬ﺍﺿﺎﻓﻪ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫• ﺍﮔﺮ ﺗﺎﭘﻞ ﺍﺯ ‪ deleted‬ﺣﺬﻑ ﺷﺪ‪ ،‬ﻣﺎ ﺁﻥ ﺭﺍ ﺍﺯ ‪ intersection‬ﺣﺬﻑ ﻛﻨﻴﻢ ﺍﮔﺮ‬
‫ﺁﻥ ﺣﺎﺿﺮ ﺑﻮﺩ‪.‬‬
‫• ‪Update‬ﻫﺎ ﺩﺭ ‪s‬ﻣﺘﻘﺎﺭﻥ ﻫﺴﺘﻨﺪ‪.‬‬
‫• ﺩﻳﮕﺮ ﻣﺠﻤﻮﻋﻪ ﻋﻤﻠﻴﺎﺕ ﻫﺎ‪ union ،‬ﻭ ﻣﺠﻤﻮﻋﻪ ﻭ ‪ defference‬ﻫﺴﺘﻨﺪ ﻛﻪ ﺩﺭ‬
‫ﻳﻚ ﺭﻭﺵ ﻣﺸﺎﺑﻪ ﺑﻜﺎﺭ ﻣﻲ ﺭﻭﻧﺪ ‪.‬‬
‫• ﭘﻴﻮﻧﺪﻫﺎﻱ ﺑﻴﺮﻭﻧﻲ ﺩﺭ ﺭﻭﺵ ﻫﺎﻱ ﻣﺸﺎﺑﻪ ﭘﻴﻮﻧﺪﻫﺎ ﺑﻜﺎﺭ ﻣﻲ ﺭﻭﻧﺪ ﺍﻣﺎ ﺑﺎ ﺗﻌﺪﺍﺩﻱ ﻛﺎﺭ ﺍﺿﺎﻓﻲ ‪.‬‬
‫• ﻣﺎ ﺍﺯﺟﺰﺋﻴﺎﺕ ﺻﺮﻑ ﻧﻈﺮ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫ﻛﺎﺭﺑﺮﺩ ﻋﺒﺎﺭﺍﺕ‪:‬‬

‫ﻫﺮ ﺯﻳﺮ‬ ‫• ﻋﺒﺎﺭﺍﺕ ﺩﺭﺳﺖ ﻭ ﻛﺎﻣﻞ ﺑﻜﺎﺭ ﻣﻲ ﺭﻭﺩ‪ ،‬ﻣﺎ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ ﺻﻌﻮﺩﻱ ﻋﺒﺎﺭﺍﺕ ﻣﺸﺘﻖ ﻧﺘﻴﺠﻪ‬
‫ﻋﺒﺎﺭﺍﺕ ﺭﺍ ﺩﺭ ﻧﻈﺮ ﻣﻴﮕﻴﺮﻳﻢ ‪ ،‬ﺍﺯ ﻛﻮﭼﻜﺘﺮﻳﻦ ﺯﻳﺮ ﻋﺒﺎﺭﺕ ﺷﺮﻭﻉ ﻣﻲ ﻛﻨﻴﻢ ‪.‬‬

‫‪184‬‬
‫• ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ E1E2 ،‬ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺩﺭ ﺁﻥ ﻫﺮ ﻳﻚ ﺍﺯ ‪E1‬ﻭ ‪E2‬ﻣﻤﻜﻦ ﺍﺳﺖ ﻳﻚ ﻋﺒﺎﺭﺕ‬
‫ﭘﻴﭽﻴﺪﻩ ﺑﺎﺷﻨﺪ‪.‬‬
‫• ﻓﺮﺽ ﻛﻨﻴﺪ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﺎﭘﻞ ﻫﺎ ‪ inserted‬ﺩﺭ‪ E1‬ﺗﻮﺳﻂ ‪D1‬ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫• ﻣﺤﺎﺳﺒﻪ ﭘﻴﺸﺘﺮ‪ ،‬ﺍﺯ ﻛﻮﭼﻜﺘﺮﻳﻦ ﺯﻳﺮ ﻋﺒﺎﺭﺍﺕ ﺍﻭﻝ ﺑﻪ ﻛﺎﺭ ﮔﺮﻓﺘﻪ ﺷﺪﻩ‬
‫ﺍﺳﺖ‪.‬‬
‫‪D1‬ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‬ ‫• ﺳﭙﺲ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺗﺎﭘﻞ ﻫﺎ ‪ inserted‬ﺩﺭ‪E1E2‬ﺗﻮﺳﻂ ‪E2‬‬
‫• ﺍﻳﻦ ﺗﻨﻬﺎ ﻳﻚ ﺭﻭﺵ ﻣﻌﻤﻮﻝ ﻧﮕﻬﺪﺍﺭﻱ ﭘﻴﻮﻧﺪ ﻫﺎ ﺳﺖ ‪.‬‬

‫‪:‬‬ ‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ‪query‬ﻭ‪Materialized Views‬‬


‫• ﺑﺎﺯﻧﻮﻳﺴﻲ‪query‬ﻫﺎ ﺑﺮﺍﻱ ﺍﺳﺘﻔﺎﺩﻩ‪: materialized views‬‬
‫‪ v = r‬ﺩﺭ ﺩﺳﺘﺮﺱ ﺍﺳﺖ‪.‬‬ ‫• ﻳﻚ‪s ، materialized views‬‬
‫‪r‬‬ ‫‪s‬‬ ‫• ﻳﻚ ﻛﺎﺭﺑﺮ ‪ submits‬ﻳﻚ ‪t،query‬‬
‫‪v‬‬ ‫• ﻣﺎ ﻣﻲ ﺗﻮﺍﻧﻴﻢ ﺑﺮﺍﻱ ‪ query‬ﺑﺎﺯﻧﻮﻳﺴﻲ ﻛﻨﻴﻦ ﺑﻪ ﻋﻨﻮﺍﻥ‪t‬‬
‫• ﺍﻳﻨﻜﻪ ﺍﻧﺠﺎﻡ ﺍﻳﻦ ﻛﺎﺭ ﺑﺴﺘﮕﻲ ﺑﻪ ﺑﺮﺁﻭﺭﺩ ﻫﺰﻳﻨﻪ ﺩﻭ ﺟﺎﻳﮕﺰﻳﻦ ﺩﺍﺭﺩ ‪.‬‬
‫• ﺟﺎ ﺑﺠﺎﻳﻲ ﻳﻚ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ materialized view‬ﺗﻮﺳﻂ ‪: view definition‬‬
‫‪v = r‬ﺩﺭ ﺩﺳﺘﺮﺱ ﺍﺳﺖ‬ ‫ﻳﻚ‪s ، materialized view‬‬ ‫•‬
‫• ﻛﺎﺭﺑﺮ ‪ submits‬ﻳﻚ )‪queryσA=10(v‬‬
‫• ﻫﻤﭽﻨﻴﻦ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ‪ S‬ﻳﻚ ﺷﺎﺧﺺ ﻣﺸﺘﺮﻙ ﺻﻔﺖ ‪b‬ﻭ ‪ r‬ﻳﻚ ﺷﺎﺧﺺ‬
‫ﻣﺸﺘﺮﻙ ﺻﻔﺖ‪ a‬ﺍﺳﺖ‪.‬‬
‫‪،r‬ﻛﻪ ﻣﻲ‬ ‫• ﺑﻬﺘﺮﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺑﺮﺍﻱ ﺍﻳﻦ ‪ query‬ﻣﻤﻜﻦ ﺍﺳﺖ ﺟﺎﺑﺠﺎﻳﻲ ‪V‬ﺗﻮﺳﻂ ‪s‬‬
‫)‪queryσA=10(r‬‬ ‫ﺗﻮﺍﻧﺪ ﻣﻨﺠﺮ ﺑﻪ ﻃﺮﺡ ‪s‬‬
‫• ﺑﻬﻴﻨﻪ ﺳﺎﺯ ‪query‬ﺑﺎﻳﺪ ﺗﻤﺪﻳﺪ ﺷﺪﻩ ﺷﺎﻣﻞ ﺗﻤﺎﻡ ﻣﻮﺍﺭﺩ ﻓﻮﻕ ﻭ ﺑﻬﺘﺮﻳﻦ ﻃﺮﺡ ﻛﻠﻲ ﺭﺍ ﺍﻧﺘﺨﺎﺏ ﻛﻨﺪ ‪.‬‬

‫‪:‬‬ ‫‪Materialized View Selection‬‬


‫‪Materialized Views‬‬ ‫• ‪":Materialized View Selection‬ﺑﻬﺘﺮﻳﻦ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ‬
‫ﭼﻴﺴﺖ؟ "‬

‫‪185‬‬
‫• ‪ " :Index selection‬ﺑﻬﺘﺮﻳﻦ ﻣﺠﻤﻮﻋﻪ ﻱ ﺷﺎﺧﺼﻬﺎ ﺑﺮﺍﻱ ﺍﻳﺠﺎﺩ ﭼﻴﺴﺖ؟ "‬
‫• ﻧﺰﺩﻳﻚ ﺗﺮﻳﻦ ﺭﺍﺑﻄﻪ‪materialized view selection ،‬‬
‫• ﺍﻣﺎ ﺳﺎﺩﻩ‬
‫• ‪Materialized view selection‬ﻭ ﺍﻧﺘﺨﺎﺏ ﺷﺎﺧﺺ ﺑﺮ ﺍﺳﺎﺱ ﻧﻮﻉ ﺣﺠﻢ ﻛﺎﺭﺳﻴﺴﺘﻢ )ﻛﻮﺋﺮﻱ ﻫﺎ‬
‫ﻭ ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ(‬
‫• ﻫﺪﻑ ﻧﻤﻮﻧﻪ‪ :‬ﺑﻪ ﺣﺪﺍﻗﻞ ﺭﺳﺎﻧﺪﻥ ﺯﻣﺎﻥ ﺣﺠﻢ ﻛﺎﺭ ﺍﺟﺮﺍﻳﻲ‪ ،‬ﻣﻮﺿﻮﻉ ﺑﻪ ﻣﺤﺪﻭﺩﻳﺖ ﺩﺭ‬
‫ﻓﻀﺎ ﻭ ﺯﻣﺎﻥ ﮔﺮﻓﺘﻪ ﺷﺪﻩ ﺑﺮﺍﻱ ﺑﺮﺧﻲ ﺍﺯ ﻛﻮﺋﺮﻱ ﻫﺎﻱ ﺑﺤﺮﺍﻧﻲ ‪ /‬ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ‬
‫• ﻳﻜﻲ ﺍﺯ ﻣﺮﺍﺣﻞ ﺩﺭ ﺗﻨﻈﻴﻢ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‬
‫• ﺑﻴﺸﺘﺮ ﺩﺭ ﻣﻮﺭﺩ ﺗﻨﻈﻴﻢ ﺩﺭ ﻓﺼﻞ ﺑﻌﺪ ﺻﺤﺒﺖ ﻣﻲ ﺷﻮﺩ‬
‫• ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺗﺠﺎﺭﻱ ﺗﻬﻴﻪ ﺍﺑﺰﺍﺭ )ﻧﺎﻣﻴﺪﻩ ﻣﻲ ﺷﻮﺩ "ﺩﺳﺘﻴﺎﺭﺍﻥ ﺗﻨﻈﻴﻢ " ﻭ ﻳﺎ »ﻧﺎﺑﻐﻪ ﻫﺎ "(‬
‫‪Materialized view‬‬ ‫ﺑﺮﺍﻱ ﻛﻤﻚ ﺑﻪ ﻣﺪﻳﺮﻳﺖ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ﺍﻧﺘﺨﺎﺏ ﺷﺪﻩ ﭼﻪ ﺷﺎﺧﺺ ﻫﺎ ﻭ‬
‫ﺍﻳﺠﺎﺩﺷﻮﺩ‪.‬‬

‫‪Top-K Queries:‬‬
‫* ‪select‬‬
‫‪from r, s‬‬
‫‪wherer.B = s.B‬‬
‫‪order byr.Aascending‬‬
‫‪limit 10‬‬
‫ﺟﺎﻳﮕﺰﻳﻦ ‪ :1‬ﺷﺎﺧﺺ ﺣﻠﻘﻪ ﻫﺎﻱ ﺗﻮ ﺩﺭ ﺗﻮ ﭘﻴﻮﻧﺪ ﺑﺎ ‪ r‬ﺑﻪ ﻋﻨﻮﺍﻥ ﺧﺎﺭﺟﻲ‬
‫ﺟﺎﻳﮕﺰﻳﻦ ‪ :2‬ﺑﺮﺁﻭﺭﺩ ﺑﺎﻻﺗﺮﻳﻦ ﺍﺭﺯﺵ ‪r.A‬ﺩﺭ ﻧﺘﻴﺠﻪ ﻭ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ )‪selection (and r.A<= H‬ﺩﺭ‬
‫ﺁﻥ ﺑﻨﺪ‪ .‬ﻭ ﺍﮔﺮ ﻧﺘﺎﻳﺞ ﻛﻤﺘﺮ ﺍﺯ‪10‬ﺑﺎﺷﺪ‪ ،‬ﺳﻌﻲ ﻣﺠﺪﺩ ﺑﺎ ‪H‬ﺑﺰﺭﮔﺘﺮ‬

‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺑﺮﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ‪:‬‬


‫ﻣﺸﻜﻞ ‪Halloween‬‬

‫‪186‬‬
‫‪update R set A = 5 * A‬‬
‫‪where A > 10‬‬
‫ﺍﮔﺮ ﺷﺎﺧﺺ ﺩﺭ ‪ A‬ﺑﺮﺍﻱ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺗﺎﭘﻞ ﺭﺿﺎﻳﺖ ‪ A> 10‬ﺍﺳﺘﻔﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‪،‬ﺗﺎﭘﻞ ﻫﺎﻱ ﺑﻼﻓﺎﺻﻠﻪ ﺑﻪ‬
‫ﺭﻭﺯ ﺷﺪﻩ‪ ،‬ﻫﻤﺎﻥ ﺗﺎﭘﻞ ﻣﻤﻜﻦ ﺍﺳﺖ ﭼﻨﺪ ﺑﺎﺭ ﻳﺎﻓﺖ ﺷﻮﺩ ‪.‬‬
‫• ﺭﺍﻩ ﺣﻞ ‪ :1‬ﺑﻪ ﺗﺎﺧﻴﺮ ﺍﻧﺪﺍﺧﺘﻦ ﻫﻤﻴﺸﻪ ﺏﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ‬
‫• ﺟﻤﻊ ﺁﻭﺭﻱ ﺏﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ )ﺍﺭﺯﺵ ﻫﺎﻱ ﻗﺪﻳﻤﻲ ﻭ ﺟﺪﻳﺪ ﺍﺯ ﺗﺎﭘﻞ ﻫﺎ( ﻭ ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﺍﺭﺗﺒﺎﻁ ﻭ‬
‫ﺷﺎﺧﺺ ﺩﺭ ﮔﺬﺭ ﺩﻭﻡ‬
‫• ﺍﺷﻜﺎﻝ‪ :‬ﺳﺮﺑﺎﺭ ﺍﺿﺎﻓﻲ ﺣﺘﻲ ﺍﮔﺮ ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﺗﻨﻬﺎ ﺩﺭ ‪R.B‬ﺍﺳﺖ‪ ،‬ﻧﻪ ﺩﺭ ﻭﻳﮋﮔﻲ ﺩﺭ‬
‫ﺷﺮﺍﻳﻂ ﺍﻧﺘﺨﺎﺏ‪.‬‬
‫• ﺭﺍﻩ ﺣﻞ ‪ :2‬ﺗﺎﺧﻴﺮ ﺗﻨﻬﺎ ﺩﺭ ﺻﻮﺭﺕ ﻟﺰﻭﻡ‬
‫• ﺍﻧﺠﺎﻡ ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻓﻮﺭﻱ ﺍﮔﺮ ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻭﻳﮋﮔﻲ ﻫﺎﻱ ﻛﻪ ﺩﺭ ﺁﻥ ﺑﻨﺪ ﺍﺳﺖ ﺗﺎﺛﻴﺮ ﻧﺪ ﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﻭ‬
‫ﺩﺭﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﺗﺎﺧﻴﺮ ﺑﻪ ﺭﻭﺯ ﺭﺳﺎﻧﻲ ﻫﺎ ‪.‬‬

‫ﺑﻪ ﺣﺪﺍﻗﻞ ﺭﺳﺎﻧﺪﻥ ﭘﻴﻮﻧﺪ‪:‬‬

‫• ‪Join minimization‬‬
‫‪selectr.A, r.B‬‬
‫‪from r, s‬‬
‫‪wherer.B = s.B‬‬
‫• ﺑﺮﺭﺳﻲ ﻛﻨﻴﺪ ﺍﮔﺮ ﭘﻴﻮﺳﺘﻦ ﺑﻪ ‪ s‬ﺍﺳﺖ‪ ،‬ﺁﻥ ﺣﺬﻑ ﺷﻮﺩ‪.‬‬
‫ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﺷﺮﻁ ﭘﻴﻮﻧﺪ ﻛﻠﻴﺪ ﺧﺎﺭﺟﻲ ﺍﺯ ‪r‬ﺑﻪ‪s‬ﺍﺳﺖ ‪r.B ،‬ﺑﻪ ﻋﻨﻮﺍﻥ ﺗﻬﻲ ﻧﻴﺴﺖ ﺍﻋﻼﻡ ﻛﺮﺩ‪ ،‬ﻭ ﻧﻪ‬
‫ﺍﻧﺘﺨﺎﺏ ﺍﺯ‪.s‬‬
‫ﺳﺎﻳﺮ ﺷﺮﺍﻳﻂ ﻛﺎﻓﻲ ﻣﻤﻜﻦ ﺍﺳﺖ‪:‬‬
‫‪selectr.A, s2.B‬‬
‫‪from r, s as s1, s as s2‬‬
‫‪wherer.B=s1.B andr.B = s2.B and s1.A < 20 and s2.A < 10‬‬
‫‪187‬‬
‫ﭘﻴﻮﺳﺘﻦ ﺑﻪ ‪ S1‬ﺯﻳﺎﺩﻱ ﺍﺳﺖ ﻭ ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﻭﺭ ﺍﻧﺪﺍﺧﺘﻪ ﺷﻮﺩ )ﻫﻤﺮﺍﻩ ﺑﺎ ﺍﻧﺘﺨﺎﺏ ﺍﺯ ‪.(S1‬‬
‫• ﺑﺴﻴﺎﺭﻱ ﺍﺯ ﭘﮋﻭﻫﺶ ﻫﺎ ﺩﺭ ﺍﻳﻦ ﻣﻨﻄﻘﻪ ‪ 70s/80s‬ﺍﺳﺖ‪.‬‬

‫‪:‬‬ ‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ‪multi query‬‬


‫ﻣﺜﺎﻝ‬
‫‪Q1: select * from (r natural join t) natural join s‬‬
‫‪Q2: select * from (r natural join u) natural join s‬‬
‫ﻫﺮ ﺩﻭ ﻧﻤﺎﻳﺶ ﻛﻮﺋﺰﻱ ﺑﻴﻦ ﺯﻳﺮ ﻋﺒﺎﺭﺍﺕ ﻣﺸﺘﺮﻙ ﺑﻪ ﺍﺷﺘﺮﺍﻙ ﮔﺬﺍﺷﺘﻪ ﻣﻲ ﺷﻮﺩ )‪ r‬ﭘﻴﻮﻧﺪ ﻃﺒﻴﻌﻲﺑﻪ ‪(s‬‬
‫ﻣﻤﻜﻦ ﺍﺳﺖ ﻣﻔﻴﺪ ﺑﺎﺷﺪ ﺑﺮﺍﻱ ﻣﺤﺎﺳﺒﻪ )‪ r‬ﭘﻴﻮﻧﺪ ﻃﺒﻴﻌﻲﺑﻪ ‪ (s‬ﻳﻚ ﺑﺎﺭ ﻭ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺁﻥ ﺩﺭ ﻫﺮ ﺩﻭ‬
‫ﻛﻮﺋﺮﻱ‪‌ ،‬ﺍﻣﺎ ﺍﻳﻦ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﺑﺮﺧﻲ ﺷﺮﺍﻳﻂ ﭘﺮ ﻫﺰﻳﻨﻪ ﺷﻮ ﺩ‪ ،‬ﺏﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ r) ،‬ﭘﻴﻮﻧﺪ ﻃﺒﻴﻌﻲﺑﻪ ‪(s‬‬
‫ﻣﻤﻜﻦ ﺍﺳﺖ ﭘﺮ ﻫﺰﻳﻨﻪ ﺷﻮﺩ‪ ،‬ﻗﺼﺪ ﺩﺍﺭﺩ ﻫﻤﺎﻧﻄﻮﺭ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﻧﺸﺎﻥ ﻣﻲ ﺩﻫﺪ ﻣﻤﻜﻦ ﺍﺳﺖ ﺩﺭ ﻛﻮﺋﺮﻱ‬
‫ﻫﺎ ﺍﺭﺯﺍﻧﺘﺮ ﺷﻮﺩ‪.‬‬
‫ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ‪ multi query:‬ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﺑﻬﺘﺮﻳﻦ ﻃﺮﺡ ﻛﻠﻲ ﺑﺮﺍﻱ ﻳﻚ ﻣﺠﻤﻮﻋﻪ ﺍﺯ ﻛﻮﺋﺮﻱ ﻫﺎ‪ ،‬ﺑﻪ‬
‫ﺍﺷﺘﺮﺍﻙ ﮔﺬﺍﺭﻱ ﺯﻳﺮ ﻋﺒﺎﺭﺕ ﻫﺎﻱ ﻣﺸﺘﺮﻙ ﺑﻴﻦ ﻛﻮﺋﺮﻳﻬﺎﻳﻲ ﻛﻪ ﺩﺭ ﺁﻥ ﻣﻔﻴﺪ ﺍﺳﺖ ‪ .‬ﺷﻨﺎﺳﺎﻳﻲ ﻭ ﺑﻬﺮﻩ‬
‫ﺑﺮﺩﺍﺭﻱ ﺍﺯ ‪sub expressions‬ﻫﺎﻱ ﻣﺸﺘﺮﻙ ﺩﺭ ﻃﺮﺡ ﻫﺎﻱ ﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮﺩ ﻛﻮﺋﺮﻱ ﺑﻬﻴﻨﻪ‪ ،‬ﻛﻪ ﻣﻤﻜﻦ‬
‫ﺍﺳﺖ ﻫﻤﻴﺸﻪ ﺑﻬﺘﺮﻳﻦ ﻃﺮﺡ ﻧﺒﺎﺵﺩ‪ ،‬ﺍﻣﺎ ﭘﻴﺎﺩﻩ ﺳﺎﺯﻱ ﺁﻥ ﺍﺭﺯﺍﻥ ﺍﺳﺖ ‪.‬‬
‫ﺑﻪ ﺍﺷﺘﺮﺍﻙ ﮔﺬﺍﺷﺘﻦ ﺍﺳﻜﻦ ‪ :‬ﻣﻮﺭﺩ ﺧﺎﺹ ﺍﺯ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ‪ multi query‬ﺍﺳﺖ ﺏﻃﻮﺭ ﮔﺴﺘﺮﺩﻩ ﻣﻮﺭﺩ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻗﺮﺍﺭ ﻣﻲ ﮔﻴﺮﺩ‪ .‬ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﻛﻮﺋﺮﻱ ﻫﺎ ﻧﻤﻴﺘﻮﺍﻧﺪ ‪sub expressions‬ﻣﺸﺘﺮﻙ ﺑﻪ ﺍﺷﺘﺮﺍﻙ‬
‫ﻋﻨﻮﺍﻥ ﻳﻚ ﻧﺘﻴﺠﻪ‪ View Maintenance ،‬ﻧﻤﻴﺘﻮﺍﻧﺪ ‪ sub expressions‬ﺭﺍ ﺑﻪ ﺍﺷﺘﺮﺍﻙ‬ ‫ﺑﮕﺬﺍﺭﺩ ﺏ‬
‫ﺑﮕﺬﺍﺭﺩ‪ .‬ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ‪Multi query‬ﻣﻲ ﺗﻮﺍﻧﺪ ﺩﺭ ﭼﻨﻴﻦ ﺷﺮﺍﻳﻄﻲ ﻣﻔﻴﺪ ﺑﺎﺷﺪ‬

‫‪:‬‬ ‫ﭘﺎﺭﺍﻣﺘﺮ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ‪query‬‬


‫ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‬

‫‪188‬‬
‫* ‪select‬‬
‫‪from r natural join s‬‬
‫‪.a< $1 where‬‬
‫ﻣﻘﺪﺍﺭ ﭘﺎﺭﺍﻣﺘﺮ ‪ $1‬ﺩﺭ ﺯﻣﺎﻥ ﻛﺎﻣﭙﺎﻳﻞ ﻣﺸﺨﺺ ﺷﺪﻩ ﻧﻴﺴﺖ‬
‫• ﺗﻨﻬﺎ ﺩﺭ ﺯﻣﺎﻥ ﺍﺟﺮﺍ ﻣﺸﺨﺺ ﻣﻲ ﺷﻮﺩ‬
‫• ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻣﺨﺘﻠﻒ ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺮﺍﻱ ﻣﻘﺎﺩﻳﺮ ﻣﺨﺘﻠﻒ ﺍﺯ ‪ $1‬ﻣﻄﻠﻮﺏ ﺑﺎﺷﺪ‬
‫• ﺭﺍﻩ ﺣﻞ ‪ :1‬ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺩﺭ ﺯﻣﺎﻥ ﺍﺟﺮﺍ‪ ،‬ﻫﺮ ﻛﻮﺋﺮﻱ ﺯﻣﺎﻥ ﺭﺍ ﻣﺸﺎﻫﺪﻩ ﻛﻨﻴﺪ‬
‫ﻣﻲ ﺗﻮﺍﻧﺪ ﭘﺮ ﻫﺰﻳﻨﻪ ﺑﺎﺷﺪ‬ ‫•‬
‫• ﺭﺍﻩ ﺣﻞ ‪ :2‬ﭘﺎﺭﺍﻣﺘﺮﻱ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﻛﻮﺋﺮﻱ‪:‬‬
‫• ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ ﺗﻮﻟﻴﺪ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻫﺎ‪ ،‬ﻣﻨﺎﺳﺐ ﺑﺮﺍﻱ ﻣﻘﺎﺩﻳﺮ ﻣﺨﺘﻠﻒ ﺍﺯ ‪$1‬‬
‫• ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺑﻬﻴﻨﻪ ﻣﻌﻤﻮﻻ ﺑﺮﺍﻱ ‪ 1‬ﺗﺎ ‪ 3‬ﭘﺎﺭﺍﻣﺘﺮ ﻛﻮﭼﻚ‬
‫• ﻣﻮﺿﻮﻉ ﻛﻠﻴﺪﻱ‪ :‬ﭼﮕﻮﻧﻪ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻣﺠﻤﻮﻋﻪ ﺍﻱ ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺑﻬﻴﻨﻪ ﻣﻮﺛﺮ‬
‫• ﻳﻜﻲ ﺍﺯ ﺑﻬﺘﺮﻳﻦ ﺍﻳﻦ ﻣﺠﻤﻮﻋﻪ ﻫﺎ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ‪ $1‬ﻣﺸﺨﺺ ﺩﺭ ﺯﻣﺎﻥ ﺍﺟﺮﺍ ﺍﻧﺘﺨﺎﺏ ﺷﻮﺩ‬
‫• ﺭﺍﻩ ﺣﻞ ‪ :3‬ﺫﺧﻴﺮﻩ ﺳﺎﺯﻱ ﻃﺮﺡ ﻛﻮﺋﺮﻱ‬
‫• ﺍﮔﺮ ﺑﻬﻴﻨﻪ ﺳﺎﺯ ﺗﺼﻤﻴﻢ ﻣﻲ ﮔﻴﺮﺩ ﻛﻪ ﻃﺮﺡ ﻫﻤﺎﻥ ﺑﺎﺷﺪ ﺑﻪ ﺍﺣﺘﻤﺎﻝ ﺯﻳﺎﺩ ﺑﻪ ﺑﻬﻴﻨﻪ ﻛﺮﺩﻥ ﺑﺮﺍﻱ‬
‫ﺗﻤﺎﻡ ﻣﻘﺎﺩﻳﺮ ﭘﺎﺭﺍﻣﺘﺮ ﻣﻲ ﭘﺮﺩﺍﺯﺩ‪ ،‬ﺁﻥ ﻃﺮﺡ ﺭﺍ ﺫﺧﻴﺮﻩ ﻭ ﺩﻭﺑﺎﺭﻩ ﺑﺎﺯﻳﺎﺑﻲ ﻣﻴﻜﻨﺪ‪،‬ﻭﮔﺮﻧﻪ ﺩﻭﺑﺎﺭﻩ ﺑﻬﻴﻨﻪ‬
‫ﺳﺎﺯﻱ ﻫﺮ ﺯﻣﺎﻥ ﺍﻧﺠﺎﻡ ﻣﻴﺸﻮﺩ‪.‬‬
‫• ﺍﺟﺮﺍ ﺩﺭ ﺑﺴﻴﺎﺭﻱ ﺍﺯ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ‬

‫ﺛﺒﺎﺕ ﺑﺮﻧﺎﻣﻪ ﺩﺭ ﺳﺮﺍﺳﺮ ﺗﻐﻴﻴﺮﺍﺕ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‪:‬‬

‫• ﭼﻪ ﻣﻲ ﺷﻮﺩ ﺍﮔﺮ ‪ ٪95‬ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﺳﺮﻳﻊ ﺩﺭ ﭘﺎﻳﮕﺎﻩ ﺩﺍﺩﻩ ‪ /‬ﺑﻬﻴﻨﻪ ﺳﺎﺯ ﻧﺴﺨﻪ ‪ N +1‬ﻧﺴﺒﺖ ﺑﻪ‬
‫‪N‬ﺑﺎﺷﻨﺪ‪،‬ﺍﻣﺎ ‪ 5‬ﺩﺭﺻﺪ ﻛﻨﺪﺗﺮ ﻫﺴﺘﻨﺪ؟‬
‫• ﭼﺮﺍ ﺑﺎﻳﺪ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻱ ﻛﻨﺪﺗﺮ ﺑﻬﻴﻨﻪ ﺳﺎﺯ ﺟﺪﻳﺪ ﻭ ﺑﻬﺒﻮﺩ ﻳﺎﺑﻨﺪ؟‬
‫• ﺟﻮﺍﺏ‪ :‬ﺩﻭ ﺍﺷﺘﺒﺎﻫﺎﺕ ﻣﻲ ﺗﻮﺍﻧﺪ ﻳﻚ ﺩﺭﺳﺖ ﺭﺍ ﺑﺴﺎﺯﺩ‪،‬ﺩﺭﺳﺖ ﻛﺮﺩﻥ ﻳﻚ ﺍﺷﺘﺒﺎﻩ ﻣﻲ‬
‫ﺗﻮﺍﻧﺪ ﺍﻭﺿﺎﻉ ﺭﺍ ﺑﺪﺗﺮ!‬
‫• ﺭﻭﺵ ﻫﺎ‪:‬‬
‫‪189‬‬
‫• ﻧﻜﺎﺕ ﺑﻪ ﺗﻨﻈﻴﻢ ﻛﻮﺋﺮﻱ ﻫﺎ ﺍﺟﺎﺯﻩ ﻣﻴﺪﻫﺪ‬
‫• ﻣﻬﺎﺟﺮﺕ ﺑﺮﺍﻱ ﺳﻴﺴﺘﻢ ﻫﺎﻱ ﺑﺰﺭگ ﺑﺪﻭﻥ ﺩﺳﺘﺮﺳﻲ ﺑﻪ ﻛﺪ ﻣﻨﺒﻊ ﻛﺎﺭﺑﺮﺩﻱ ﻧﻴﺴﺖ ‪.‬‬
‫• ﺗﻨﻈﻴﻢ ﺳﻄﺢ ﺑﻬﻴﻨﻪ ﺳﺎﺯﻱ‪ ،‬ﺑﻪ ﻃﻮﺭ ﭘﻴﺶ ﻓﺮﺽ ﻧﺴﺨﻪ ‪) N‬ﺍﻭﺭﺍﻛﻞ(‬
‫• ﻭ ﻣﻬﺎﺟﺮﺕ ﻳﻚ ﻛﻮﺋﺮﻱ ﺩﺭ ﺯﻣﺎﻥ ﭘﺲ ﺍﺯ ﺁﺯﻣﺎﻳﺶ ﻫﺮ ﺩﻭ ﻃﺮﺡ ﺩﺭ ﺑﻬﻴﻨﻪ ﺳﺎﺯ ﺟﺪﻳﺪ‬
‫• ﺻﺮﻓﻪ ﺟﻮﻳﻲ ﺩﺭ ﻃﺮﺡ ﻧﺴﺨﻪ ‪N‬ﻭ ﺩﺍﺩﻥ ﻧﺴﺨﻪ ﺑﻬﻴﻨﻪ ‪N +1‬‬
‫• ‪XML , Sybase‬ﻧﻤﺎﻳﻨﺪﻩ ﻃﺮﺡ ﻫﺎ ﻫﺴﺘﻨﺪ)‪SQL‬ﺳﺮﻭﺭ(‬

‫‪190‬‬
191
192
193

You might also like