# Shopify MySQL க்கு இருப்பு முன்பதிவுகளை மாற்றியது

Published: 2026-10-10

Shopify தனது சரக்கு இருப்பு முன்பதிவு அமைப்பை Redis இலிருந்து ஏற்கனவே சரக்கு இருப்புப் பதிவேட்டை வைத்திருக்கும் MySQL தரவுத்தளத்திற்கு மாற்றியது. தனித்தனியாக பூட்டக்கூடிய அலகு வரிசைகளின் ஒரு குறிப்பிட்ட தொகுப்பு, ஒரே நேரத்தில் நடக்கும் சரிபார்ப்புகளை SKIP LOCKED ஐப் பயன்படுத்தி வெவ்வேறு தகுதியான அலகுகளைத் தேர்ந்தெடுக்க அனுமதிக்கிறது. இந்த வடிவமைப்பு பரிவர்த்தனை எல்லைகள், முதன்மை விசை அமைப்பு, மறு நிரப்பு விதிகள் மற்றும் சரிபார்ப்பு முழுவதும் இணைப்பு வைத்திருக்கும் நேரத்தை கவனிப்பதையும் சார்ந்துள்ளது.

Canonical: https://thedailydiff.dev/ta/video/shopify-reservation-locks/

## இந்த வீடியோ எதைப் பற்றி விவாதிக்கிறது

- பழைய 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 கில்-சுவிட்ச் பின்னடைவுடன் படிப்படியாக மாற்றியது.

## அத்தியாயங்கள்

- 0:00 MySQL க்கு ஏன் முன்பதிவுகளை நகர்த்த வேண்டும்?
- 0:29 இரண்டு கடைகள் ஏன் ஆபத்தானவை?
- 0:52 பூட்டக்கூடிய அலகு என்னவாகிறது?
- 1:15 தொகுப்பு காலியாகும்போது என்ன நடக்கும்?
- 2:14 SKIP LOCKED எதை விட்டுவிடுகிறது?
- 2:26 உண்மையான உச்சவரம்பு எங்கே இருந்தது?
- 2:38 இந்த வடிவமைப்பை நான் ஏன் அனுப்ப வேண்டும்?

## மொழிபெயர்க்கப்பட்ட டிரான்ஸ்கிரிப்ட்

அசல் ஆங்கில விளக்கத்திலிருந்து மொழிபெயர்க்கப்பட்டது. கிடைக்கும் ஆடியோ மற்றும் தலைப்புகள் 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 ரோல்பேக் மாற்றங்களை ரத்து செய்கிறது. முன்பதிவு கட்டணச் செயலாக்கம் முழுவதும் சேமிக்கப்பட்ட நிலையாக நீடிக்கும். வெற்றிகரமான கட்டணம் லெட்ஜரைக் கோருகிறது மற்றும் முன்பதிவை அணு ரீதியாக நீக்குகிறது. தரவுத்தள பூட்டுகள் கட்டணப் படிவத்தை கண்காணிக்க வேண்டியதில்லை. அவர்களின் கூட்டு முதன்மை விசை கடை, உருப்படி, குழு, பின்னர் அலகு அடையாளத்துடன் தொடங்குகிறது. தேடலுடன் பொருத்துவது அவர்களின் முன்மாதிரியில் குறியீட்டு பூட்டுதலைக் குறைத்தது. அவர்கள் READ COMMITTED ஐப் பயன்படுத்தி தொகுப்பு மறு நிரப்பலைத் தடுத்த இடைவெளி பூட்டுகளைத் தவிர்க்கவும்,

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 scaled](https://shopify.engineering/scaling-inventory-reservations) — Shopify Engineering — Emilie Noel
- [Simplified reservation SQL embedded in Shopify's article](https://gist.github.com/CourtneySymons/cb5ecbe86331047aae166d5b1f1d555c) — Shopify Engineering / CourtneySymons on GitHub Gist
- [MySQL 8.0 — Locking Reads](https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html) — Oracle / MySQL Reference Manual
- [MySQL 8.0 — Transaction Isolation Levels](https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html) — Oracle / MySQL Reference Manual
- [What Is Shopify and How Does It Work?](https://www.shopify.com/blog/what-is-shopify) — Shopify
- [Redis quick starts](https://redis.io/docs/latest/develop/get-started/) — Redis documentation
- [What is MySQL?](https://dev.mysql.com/doc/refman/8.0/en/what-is-mysql.html) — Oracle / MySQL Reference Manual
