# Shopify ఇన్వెంటరీ రిజర్వేషన్లను MySQLలోకి తరలించింది

Published: 2026-10-10

Shopify తన ఇన్వెంటరీ రిజర్వేషన్ సిస్టమ్‌ను Redis నుండి ఇప్పటికే ఇన్వెంటరీ లెడ్జర్‌ను కలిగి ఉన్న MySQL డేటాబేస్‌లోకి మార్చింది. వ్యక్తిగతంగా లాక్ చేయగల యూనిట్ వరుసల బౌండెడ్ పూల్, ఏకకాల చెక్‌అవుట్‌లను విభిన్న అర్హత గల యూనిట్‌లను ఎంచుకోవడానికి SKIP LOCKEDని ఉపయోగించడానికి అనుమతిస్తుంది. ఈ డిజైన్ ట్రాన్సాక్షన్ సరిహద్దులు, ప్రైమరీ-కీ లేఅవుట్, రీప్లెనిష్‌మెంట్ నియమాలు మరియు చెక్‌అవుట్ అంతటా కనెక్షన్ హోల్డ్ సమయాన్ని పర్యవేక్షించడంపై కూడా ఆధారపడి ఉంటుంది.

Canonical: https://thedailydiff.dev/te/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ను ఎందుకు ఎంచుకోవాలి? లాక్‌లను సురక్షితంగా ఎలా దాటవేయాలి? ఇది ది డైలీ డిఫ్, అంతర్గతంగా. మరియు వేగవంతమైన ప్రశ్నలు ఇప్పటికీ సీలింగ్‌ను ఎందుకు తాకాయి? 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 దాటవేయబడిన లాక్ చేయబడిన వరుసలను మినహాయిస్తుంది, కాబట్టి మాన్యువల్ దాని ఫలితాన్ని అస్థిరమైన వీక్షణగా పిలుస్తుంది. ఇది పూర్తి స్టాక్ కౌంట్ లేదా సరసమైన మలుపు తీసుకోవడాన్ని అందించదు. అందుబాటు నిర్ణయం మరియు రీప్లెనిష్‌మెంట్ నియమాలను దాని చుట్టూ ఉంచండి.

### అసలు సీలింగ్ ఎక్కడ ఉంది?

2:26 మరియు ఆ సీలింగ్? ఇతర చెక్‌అవుట్ కోడ్ డేటాబేస్ కనెక్షన్‌లను చాలా కాలం పాటు ఉంచింది. Shopify కాల్‌అర్‌లను ట్యాగ్ చేసింది మరియు కనెక్షన్ హోల్డ్ సమయాన్ని కొలిచింది, తర్వాత చెక్‌అవుట్ మార్గాన్ని శుభ్రం చేసింది మరియు థ్రెడ్ కన్కరెన్సీని తిరిగి పరిశీలించింది. వేగవంతమైన ప్రశ్నలు ఇప్పటికీ ప్రశ్న వెలుపల క్యూలో ఉండగలవు.

### నేను ఈ డిజైన్‌ను ఎందుకు షిప్ చేయాలి?

2:38 వారు రెండు సిస్టమ్‌లను Redis అధికారికంతో షాడో-రైట్ చేశారు, ఫలితాలను పోల్చారు, ఆపై కిల్‌స్విచ్‌తో క్రమంగా మార్చారు. నా తీర్పు షిప్ ఇట్. నేను షేర్డ్ ట్రాన్సాక్షన్ సరిహద్దు మరియు ఆ రోల్‌బ్యాక్ చేయగల రోల్‌అవుట్‌ను షిప్ చేస్తాను, మొత్తం చెక్‌అవుట్ మార్గం ఇన్‌స్ట్రుమెంట్ చేయబడింది. దీని గురించి మీకు ప్రశ్న ఉందా? వ్యాఖ్యలలో ఉంచండి. మరియు ఇది ఈ రోజుకు డిఫ్.

2:54 నేను ఆక్సిరిసి నుండి నికో. బాధ్యతాయుతంగా విలీనం చేయండి.

## మూలాలు

- [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
