Shopify ଇନଭେଣ୍ଟୋରୀ ରିଜର୍ଭେସନ୍ ଗୁଡିକୁ MySQL ରେ ସ୍ଥାନାନ୍ତର କଲା
Shopify ଏହାର ଇନଭେଣ୍ଟୋରୀ ରିଜର୍ଭେସନ୍ ସିଷ୍ଟମକୁ Redis ରୁ MySQL ଡାଟାବେସକୁ ସ୍ଥାନାନ୍ତର କଲା ଯାହା ପୂର୍ବରୁ ଇନଭେଣ୍ଟୋରୀ ଲେଜର ଧରି ରଖିଥିଲା | ବ୍ୟକ୍ତିଗତ ଭାବରେ ଲକ୍ ଯୋଗ୍ୟ ୟୁନିଟ୍ ଧାଡିର ଏକ ସୀମିତ ପୁଲ୍ ଏକକାଳୀନ ଚେକଆଉଟ୍ ଗୁଡିକୁ ଭିନ୍ନ ଯୋଗ୍ୟ ୟୁନିଟ୍ ଚୟନ କରିବା ପାଇଁ SKIP LOCKED ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଏ | ଡିଜାଇନ୍ ଟ୍ରାନ୍ସାକସନ୍ ସୀମା, ପ୍ରାଥମିକ-କୀ ଲେଆଉଟ୍, ପୁନଃପୂର୍ତ୍ତି ନିୟମ ଏବଂ ଚେକଆଉଟ୍ ମଧ୍ୟରେ କନେକସନ୍ ହୋଲ୍ଡ ସମୟକୁ ମଧ୍ୟ ନିର୍ଭର କରେ |
Shopify ଏହାର ଇନଭେଣ୍ଟୋରୀ ରିଜର୍ଭେସନ୍ ସିଷ୍ଟମକୁ Redis ରୁ MySQL ଡାଟାବେସକୁ ସ୍ଥାନାନ୍ତର କଲା ଯାହା ପୂର୍ବରୁ ଇନଭେଣ୍ଟୋରୀ ଲେଜର ଧରି ରଖିଥିଲା | ବ୍ୟକ୍ତିଗତ ଭାବରେ ଲକ୍ ଯୋଗ୍ୟ ୟୁନିଟ୍ ଧାଡିର ଏକ ସୀମିତ ପୁଲ୍ ଏକକାଳୀନ ଚେକଆଉଟ୍ ଗୁଡିକୁ ଭିନ୍ନ ଯୋଗ୍ୟ ୟୁନିଟ୍ ଚୟନ କରିବା ପାଇଁ SKIP LOCKED ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଏ | ଡିଜାଇନ୍ ଟ୍ରାନ୍ସାକସନ୍ ସୀମା, ପ୍ରାଥମିକ-କୀ ଲେଆଉଟ୍, ପୁନଃପୂର୍ତ୍ତି ନିୟମ ଏବଂ ଚେକଆଉଟ୍ ମଧ୍ୟରେ କନେକସନ୍ ହୋଲ୍ଡ ସମୟକୁ ମଧ୍ୟ ନିର୍ଭର କରେ |
ଲିଖିତ ସଂସ୍କରଣ ପଢ଼ନ୍ତୁ (English) ↗
ଏହି ଭିଡିଓରେ କ'ଣ ଅଛି
- ପୁରୁଣା Redis ପରିମାଣ-କାଉଣ୍ଟର ମଡେଲ୍ ସମକାଳୀନତାକୁ ନିୟନ୍ତ୍ରଣ କରୁଥିଲା, କିନ୍ତୁ ରିଜର୍ଭେସନ୍ ସଫେଇ ଏବଂ MySQL ଲେଜର ଅପଡେଟ୍ ଗୋଟିଏ ସ୍ଥାନୀୟ ଆଣବିକ ଟ୍ରାନ୍ସାକସନ୍ ଅଂଶୀଦାର କରିପାରିଲା ନାହିଁ |
- ପ୍ରତିସ୍ଥାପନ ପ୍ରତି ଆଇଟମ୍/ସ୍ଥାନ ମିଶ୍ରଣରେ 1,000 ରେ ସୀମିତ ଏକ ପୁଲରେ ପ୍ରତି ଉପଲବ୍ଧ ୟୁନିଟ୍ ପାଇଁ ଗୋଟିଏ ଧାଡି ବ୍ୟବହାର କରେ | ଏକ ଖାଲି ପୁଲ୍ ପୁନଃପୂର୍ତ୍ତି ଲକ୍ ପଛରେ ଅପେକ୍ଷା କରିଥିବା ଏକକାଳୀନ ଅନୁରୋଧ ସହିତ ଇନଲାଇନ୍ ପୁନଃପୂର୍ତ୍ତି ଆରମ୍ଭ କରିପାରିବ |
- କମ୍ପୋଜିଟ୍ ପ୍ରାଥମିକ କୀ ହେଉଛି (shop_id, inventory_item_id, inventory_group_id, id) | Shopify ଏହାର ପ୍ରୋଟୋଟାଇପରେ ଲକ୍ ଓଭରହେଡ୍ ହ୍ରାସ କଲା ଏବଂ ଗ୍ୟାପ୍ ଲକ୍ ଗୁଡିକୁ ଏଡାଇବା ପାଇଁ READ COMMITTED ବ୍ୟବହାର କଲା ଯାହା ପୁନଃପୂର୍ତ୍ତିକୁ ଅବରୋଧ କରୁଥିଲା |
- ରିଜର୍ଭେସନ୍ ରେକର୍ଡ୍ ସଂଯୋଗ କରିବା ପୂର୍ବରୁ ପୁଲ୍ ଧାଡିଗୁଡ଼ିକୁ ଡିଲିଟ୍ କରେ | କମିଟ୍ ଡାଟାବେସ ଲକ୍ ଗୁଡିକୁ ଛାଡିଦିଏ ଯେତେବେଳେ ଷ୍ଟୋର ହୋଲ୍ଡ ପେମେଣ୍ଟ ମାଧ୍ୟମରେ ରହିଥାଏ; ସଫଳ ପେମେଣ୍ଟ ଲେଜରକୁ ଦାବି କରେ ଏବଂ ପରବର୍ତ୍ତୀ ଆଣବିକ ଟ୍ରାନ୍ସାକସନରେ ରିଜର୍ଭେସନ୍ ହଟାଇଦିଏ |
- MySQL SKIP LOCKED କୁ ଏକ ଅସଙ୍ଗତ ଦୃଶ୍ୟ ଭାବରେ ଡକ୍ୟୁମେଣ୍ଟ୍ କରେ ଯାହା ଲକ୍ ହୋଇଥିବା ଧାଡିଗୁଡ଼ିକୁ ଛାଡିଦିଏ | ଏହା ଏକ ସମ୍ପୂର୍ଣ୍ଣ ଷ୍ଟକ ଗଣନା କିମ୍ବା ଉଚିତ ପାଳି ନିର୍ଦ୍ଧାରଣ କରେ ନାହିଁ, କେବଳ ଧାଡି-ସ୍ତରୀୟ ଲକ୍ ଗୁଡିକୁ ପ୍ରଯୁଜ୍ୟ ଏବଂ ଷ୍ଟେଟମେଣ୍ଟ-ଆଧାରିତ ପ୍ରତିକୃତି ପାଇଁ ଅସୁରକ୍ଷିତ ଅଟେ |
- ଉତ୍ସ ଉଦାହରଣରେ expires_at ଅନ୍ତର୍ଭୁକ୍ତ, କିନ୍ତୁ Shopify MySQL ଏକ୍ସପିରେସନ୍-କ୍ଲିନଅପ୍ ଆଲଗୋରିଦମକୁ ଡକ୍ୟୁମେଣ୍ଟ୍ କରେ ନାହିଁ | ଭିଡିଓର ରିଲିଜ୍/ଏକ୍ସପାୟରୀ ଶାଖା ଏକ ବ୍ୟାଖ୍ୟାତ୍ମକ ଜୀବନଚକ୍ର ଆବଶ୍ୟକତା |
- ଅନ୍ୟ ଚେକଆଉଟ୍ କୋଡରେ କନେକସନ୍ ହୋଲ୍ଡ ସମୟ ହେଉଛି ଅନ୍ତିମ ଥ୍ରୁପୁଟ୍ ବଟଲନେକ୍ | Shopify ଉଭୟ ସିଷ୍ଟମକୁ ଛାୟା-ଲେଖିଲା, ଫଳାଫଳ ତୁଳନା କଲା ଏବଂ Redis କିଲ୍-ସ୍ୱିଚ୍ ଫଲବ୍ୟାକ୍ ସହିତ ଧୀରେ ଧୀରେ ସ୍ୱିଚ୍ କଲା |
ଅନୁବାଦିତ ଟ୍ରାନ୍ସକ୍ରିପ୍ଟ
ମୂଳ ଇଂରାଜୀ ବର୍ଣ୍ଣନାରୁ ଅନୁବାଦିତ। ଉପଲବ୍ଧ ଅଡିଓ ଏବଂ କ୍ୟାପ୍ସନ୍ଗୁଡ଼ିକ YouTube ଦ୍ୱାରା ନିୟନ୍ତ୍ରିତ।
କାହିଁକି ରିଜର୍ଭେସନ୍ ଗୁଡିକୁ MySQL ରେ ସ୍ଥାନାନ୍ତର କରିବେ?
0:00 ଏକ ଚେକଆଉଟ୍ ଶୀଘ୍ର ରହିବା ପାଇଁ Redis ଆବଶ୍ୟକ କରେ | Shopify ଇନଭେଣ୍ଟୋରୀ ରିଜର୍ଭେସନ୍ ଗୁଡିକୁ MySQL ରେ ଗୋଟିଏ ୟୁନିଟ୍ ପ୍ରତି ଏକ ଧାଡି ବ୍ୟବହାର କରି ସ୍ଥାନାନ୍ତର କଲା | ସୀମିତ ପୁଲ୍ | MySQL କାହିଁକି ବାଛିବେ? ଆପଣ କିପରି ସୁରକ୍ଷିତ ଭାବରେ ଲକ୍ ଛାଡିବେ? ଏହା The Daily Diff, ପଛରେ | ଏବଂ କାହିଁକି ଦ୍ରୁତ କ୍ୱେରୀଗୁଡ଼ିକ ଏପର୍ଯ୍ୟନ୍ତ ଏକ ଛାତରେ ବାଜୁଥିଲା? Shopify ହେଉଛି ଅନଲାଇନ୍ ଏବଂ ବ୍ୟକ୍ତିଗତ ଭାବରେ ବିକ୍ରୟ ପାଇଁ ଏକ ବାଣିଜ୍ୟ ପ୍ଲାଟଫର୍ମ | Redis ହେଉଛି ଏକ ଇନ୍-ମେମୋରୀ ଡାଟା ଷ୍ଟୋର |
0:21 MySQL ହେଉଛି ଏକ ରିଲେସନାଲ ଡାଟାବେସ, ଏବଂ Shopify ପୂର୍ବରୁ ଏହାର ଇନଭେଣ୍ଟୋରୀ ଲେଜର ରଖିଥିଲା | ସେଠାରେ | ଜଣେ କ୍ରେତା ପେମେଣ୍ଟ କରୁଥିବାବେଳେ ଏକ ରିଜର୍ଭେସନ୍ ସଂକ୍ଷେପରେ ଷ୍ଟକ୍ ଧରି ରଖେ |
କାହିଁକି ଦୁଇଟି ଷ୍ଟୋର ବିପଦଜନକ ଥିଲା?
0:29 ସେମାନଙ୍କର Redis ମଡେଲ୍ ଏକ ଆଇଟମ୍ କାଉଣ୍ଟରକୁ ଡିକ୍ରିମେଣ୍ଟ୍ କଲା | ଏକ ପେଡ୍ ଅର୍ଡର ଦାବି କରିବା ଅର୍ଥ MySQL ଲେଜରକୁ ଅପଡେଟ୍ କରିବା ଏବଂ Redis କୁ ସଫା କରିବା | ସେହି ଅଲଗା ଲେଖାଗୁଡ଼ିକ ଦୁଇଥର ବିକ୍ରି ହୋଇଥିବା ଷ୍ଟକ୍ କିମ୍ବା ଉପଲବ୍ଧ ନ ଥିବା ଛାଡିପାରେ ଯେତେବେଳେ ଏହା | ବିକ୍ରୟ ଯୋଗ୍ୟ ହେବା ଉଚିତ୍ | ପୁରୁଣା ମଡେଲରେ ସ୍ଥାନ ସଚେତନତା ମଧ୍ୟ ନ ଥିଲା | ପ୍ରତିସ୍ଥାପନ ନିଶ୍ଚିତ ଭାବରେ କେଉଁଠାରୁ ଷ୍ଟକ୍ ବାଛିବା ଉଚିତ୍ ଯାହା ଅର୍ଡର ପୂରଣ କରିପାରିବ | ଏକ ଭୁଲ ମହାଦେଶରେ ଥିବା ଏକ ଗୋଦାମ ଏକ ଉତ୍କୃଷ୍ଟ ଡାଟାବେସ ଏଣ୍ଟ୍ରି ଏବଂ ଏକ | ଭୟଙ୍କର ବିତରଣ ପ୍ରତିଶ୍ରୁତି | ପୂର୍ବରୁ MySQL ପ୍ରୟାସଗୁଡ଼ିକ ଏକ ପରିମାଣ ଧାଡି ବ୍ୟବହାର କରୁଥିଲା, ତେଣୁ ପ୍ରତିଦ୍ୱନ୍ଦ୍ୱୀ ଚେକଆଉଟ୍ ଗୁଡ଼ିକ |
ଲକ୍ ଯୋଗ୍ୟ ୟୁନିଟ୍ କ'ଣ ହେବ?
0:56 ସମାନ ଲକ୍ ରେ ଧାଡିରେ ଥିଲା | ଏକ ସ୍ପ୍ରେଡସିଟ୍ ସେଲ୍ ଚାରିପଟେ ଏକ ଭେଲଭେଟ୍ ଦଉଡି କଥା ଚିନ୍ତା କରନ୍ତୁ | ଅଧିକ କର୍ମୀ ଯୋଡିବା କେବଳ ଧାଡିକୁ ଲମ୍ବାଇଥାଏ | Shopify ଲକ୍ ଯୋଗ୍ୟ ଅବଜେକ୍ଟ ପରିବର୍ତ୍ତନ କଲା | ପ୍ରତ୍ୟେକ ଉପଲବ୍ଧ ୟୁନିଟ୍ ଏହାର ନିଜସ୍ୱ ଧାଡି ପାଏ | ଏକ ଲକିଙ୍ଗ୍ ରିଡ୍ ଅନ୍ୟ ୟୁନିଟ୍ ଛାଡିଦିଏ | ଟ୍ରାନ୍ସାକସନ୍ ଧରି ରଖିଥାଏ ଏବଂ ଅନ୍ୟ ଯୋଗ୍ୟ ଚୟନ କରେ | ୟୁନିଟ୍ | ଭିନ୍ନ କର୍ମୀ ଭିନ୍ନ ଧାଡି ହାସଲ କରିପାରିବେ | ଯେତେବେଳେ ହଟ୍ କାଉଣ୍ଟର ସେମାନଙ୍କ ଠାରୁ ଦୂରରେ ରହିଥାଏ |
ପୁଲ୍ ଖାଲି ହେଲେ କ'ଣ ହୁଏ?
1:15 ସେହି ପୁଲ୍ ପ୍ରତି ଆଇଟମ୍ ଏବଂ ସ୍ଥାନ ପାଇଁ ହଜାରେ ଧାଡିରେ ସୀମିତ | ପୁନଃପୂର୍ତ୍ତି ଲେଜରରୁ ଆହରଣ କରେ | ଯଦି ଏହା ଖାଲି ହୁଏ, ରିଜର୍ଭ | ପାଥ୍ ଇନଲାଇନ୍ ପୁନଃପୂର୍ତ୍ତି କରେ, ପ୍ରତିଦ୍ୱନ୍ଦ୍ୱୀ ଅନୁରୋଧ ସହିତ | ଏକ ପୁନଃପୂର୍ତ୍ତି ଲକ୍ ପଛରେ ଅପେକ୍ଷା କରି | ଖାଲି ପୁଲ୍ ର ଅର୍ଥ ଖାଲି ଗୋଦାମ ନୁହେଁ | ରିଜର୍ଭ ନିର୍ବାଚିତ ପୁଲ୍ ଧାଡିଗୁଡ଼ିକୁ ଡିଲିଟ୍ କରେ, ତାପରେ ଏକ ଟ୍ରାନ୍ସାକସନରେ ରିଜର୍ଭେସନ୍ ରେକର୍ଡ୍ ସଂଯୋଗ କରେ | କମିଟ୍ ଡାଟାବେସ ଲକ୍ ଗୁଡିକୁ ଛାଡିଦିଏ |
1:35 ରୋଲବ୍ୟାକ୍ ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ଅଣ୍ଡୁ କରେ | ରିଜର୍ଭେସନ୍ ପେମେଣ୍ଟ ପ୍ରକ୍ରିୟାକରଣ ପରେ ଷ୍ଟୋର ହୋଇଥିବା ଷ୍ଟେଟ୍ ଭାବରେ ବଞ୍ଚିଥାଏ | ସଫଳ ପେମେଣ୍ଟ ଲେଜରକୁ ଦାବି କରେ ଏବଂ ଆଣବିକ ଭାବରେ ରିଜର୍ଭେସନ୍ ହଟାଇଦିଏ | ଡାଟାବେସ ଲକ୍ ଗୁଡିକୁ କେବେହେଲେ ପେମେଣ୍ଟ ଫର୍ମକୁ ଶିଶୁ ଭଳି ଜଗିବାକୁ ପଡ଼େ ନାହିଁ | ସେମାନଙ୍କର କମ୍ପୋଜିଟ୍ ପ୍ରାଥମିକ କୀ ଦୋକାନ, ଆଇଟମ୍, ସହିତ ଆରମ୍ଭ ହୁଏ | ଗ୍ରୁପ୍, ତାପରେ ୟୁନିଟ୍ ପରିଚୟ | ଲୁକଅପ୍ ମିଳାଇବା ସେମାନଙ୍କ ପ୍ରୋଟୋଟାଇପରେ ଇଣ୍ଡେକ୍ସ ଲକିଙ୍ଗ୍ ହ୍ରାସ କଲା | ସେମାନେ ମଧ୍ୟ ରିଡ୍ କମିଟେଡ୍ ବ୍ୟବହାର କରନ୍ତି ଗ୍ୟାପ୍ ଲକ୍ ଗୁଡିକୁ ଏଡାଇବା ପାଇଁ ଯାହା ପୁଲ୍ ଅବରୋଧ କରୁଥିଲା |
1:57 ପୁନଃପୂର୍ତ୍ତି, ଏବଂ ସର୍କୁଲାର୍ ୱେଟ୍ ପ୍ରତିରୋଧ କରିବା ପାଇଁ ଏକ ସୁସଙ୍ଗତ ଟେବୁଲ୍ ଅର୍ଡର | ପ୍ରକାଶିତ ଉଦାହରଣ ଏକ ମିଆଦି ସମୟ ରେକର୍ଡ୍ କରେ | ପରିତ୍ୟକ୍ତ ପେମେଣ୍ଟଗୁଡ଼ିକୁ ଶେଷରେ ଷ୍ଟକ୍ ରିଲିଜ୍ କରିବାକୁ ପଡ଼ିବ, ନଚେତ୍ ସପିଙ୍ଗ୍ କାର୍ଟ | ଏକ ଘରମାଲିକ ହୁଏ | Shopify ର ପୋଷ୍ଟ ସେହି ସଫେଇ ଆଲଗୋରିଦମକୁ ଅନିର୍ଦ୍ଦିଷ୍ଟ ଛାଡିଦିଏ | ତେଣୁ ଏହି ଚିତ୍ର ଜୀବନଚକ୍ର ଆବଶ୍ୟକତା ଦେଖାଏ | ଏହା ହେଉଛି କ୍ୟାଚ୍ |
SKIP LOCKED କ'ଣ ଛାଡିଦିଏ?
2:14 ଲକ୍ ହୋଇଥିବା ଧାଡିଗୁଡ଼ିକୁ Skip locked ବାଦ୍ ଦିଏ, ତେଣୁ ମାନୁଆଲ୍ ଏହାର ଫଳାଫଳକୁ ଏକ ଅସଙ୍ଗତ କୁହେ | ଦୃଶ୍ୟ | ଏହା ଏକ ସମ୍ପୂର୍ଣ୍ଣ ଷ୍ଟକ୍ ଗଣନା କିମ୍ବା ଉଚିତ ପାଳି ନିର୍ଦ୍ଧାରଣ କରେ ନାହିଁ | ଉପଲବ୍ଧତା ନିଷ୍ପତ୍ତି ଏବଂ ପୁନଃପୂର୍ତ୍ତି ନିୟମଗୁଡ଼ିକୁ ଏହାର ଚାରିପଟେ ରଖନ୍ତୁ |
ବାସ୍ତବିକ ଛାତ କେଉଁଠାରେ ଥିଲା?
2:26 ଏବଂ ସେହି ଛାତ? ଅନ୍ୟ ଚେକଆଉଟ୍ କୋଡ୍ ଡାଟାବେସ କନେକସନ୍ ଗୁଡିକୁ ଅଧିକ ସମୟ ଧରି ରଖୁଥିଲା | Shopify କଲରମାନଙ୍କୁ ଟ୍ୟାଗ୍ କଲା ଏବଂ କନେକସନ୍ ହୋଲ୍ଡ ସମୟ ମାପିଲା | ତାପରେ ଚେକଆଉଟ୍ ପାଥ୍ ସଫା କଲା ଏବଂ ଥ୍ରେଡ୍ ସମକାଳୀନତା ପୁନଃ ପରିଦର୍ଶନ କଲା | ଦ୍ରୁତ କ୍ୱେରୀଗୁଡ଼ିକ ଏପର୍ଯ୍ୟନ୍ତ କ୍ୱେରୀ ବାହାରେ ଧାଡିରେ ଥାଇପାରେ |
ମୁଁ ଏହି ଡିଜାଇନ୍ କାହିଁକି ପଠାଇବି?
2:38 ସେମାନେ ଉଭୟ ସିଷ୍ଟମକୁ Redis ପ୍ରାଧିକୃତ ସହିତ ଛାୟା-ଲେଖିଲେ | ଫଳାଫଳ ତୁଳନା କଲେ, ତାପରେ ଏକ କିଲ୍ ସ୍ୱିଚ୍ ସହିତ ଧୀରେ ଧୀରେ ସ୍ୱିଚ୍ କଲେ | ମୋର ରାୟ ହେଉଛି SHIP IT | ମୁଁ ଅଂଶୀଦାର ଟ୍ରାନ୍ସାକସନ୍ ସୀମା ଏବଂ ସେହି ରୋଲବ୍ୟାକେବଲ୍ ରୋଲଆଉଟ୍ ପଠାଇବି | ସମଗ୍ର ଚେକଆଉଟ୍ ପାଥ୍ ଇନଷ୍ଟ୍ରୁମେଣ୍ଟେଡ୍ ସହିତ | ଏ ବିଷୟରେ କିଛି ପ୍ରଶ୍ନ ଅଛି କି? ଏହାକୁ କମେଣ୍ଟରେ ରଖନ୍ତୁ | ଏବଂ ଆଜି ପାଇଁ ଏହା ହେଉଛି ଡିଫ୍ |
2:54 ମୁଁ Axrisi ରୁ Niko | ଦାୟିତ୍ୱର ସହିତ ମିଶାନ୍ତୁ |
ଉତ୍ସଗୁଡ଼ିକ
- We replaced Redis with MySQL for inventory reservations—and it scaledShopify Engineering — Emilie Noel
- Simplified reservation SQL embedded in Shopify's articleShopify Engineering / CourtneySymons on GitHub Gist
- MySQL 8.0 — Locking ReadsOracle / MySQL Reference Manual
- MySQL 8.0 — Transaction Isolation LevelsOracle / MySQL Reference Manual
- What Is Shopify and How Does It Work?Shopify
- Redis quick startsRedis documentation
- What is MySQL?Oracle / MySQL Reference Manual



