# Shopify-এ ইনভেণ্টৰি সংৰক্ষণ MySQL-লৈ স্থানান্তৰ কৰিলে

Published: 2026-10-10

Shopify-এ ইয়াৰ ইনভেণ্টৰি সংৰক্ষণ প্ৰণালী Redis-ৰ পৰা MySQL ডেটাবেছলৈ স্থানান্তৰ কৰিলে য'ত ইতিমধ্যে ইনভেণ্টৰি খতিয়ান আছিল। ব্যক্তিগতভাৱে লক কৰিব পৰা ইউনিট শাৰীৰ এটা সীমাবদ্ধ পুলে সমসাময়িক চেকআউটবোৰক বিভিন্ন যোগ্য ইউনিট নিৰ্বাচন কৰিবলৈ SKIP LOCKED ব্যৱহাৰ কৰিবলৈ দিয়ে। এই ডিজাইনটো লেনদেনৰ সীমা, প্ৰাথমিক-কী বিন্যাস, পুনৰ ভৰ্তিৰ নিয়ম আৰু চেকআউটত সংযোগ ধৰি ৰখাৰ সময় পৰ্যবেক্ষণৰ ওপৰতো নিৰ্ভৰ কৰে।

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

## এই ভিডিঅ’টোত কি আছে

- পুৰণি Redis কোৱাণ্টিটি-কাউণ্টাৰ মডেলটোৱে সমসাময়িকতাক নিয়ন্ত্ৰণ কৰিছিল, কিন্তু সংৰক্ষণ পৰিষ্কাৰ আৰু MySQL খতিয়ান আপডেটে এটা একক স্থানীয় পাৰমাণৱিক লেনদেন ভাগ কৰিব নোৱাৰিলে।
- প্ৰতিস্থাপনটোৱে প্ৰতিটো বস্তু/স্থানৰ সংমিশ্ৰণৰ বাবে ১,০০০-ত সীমাবদ্ধ এটা পুলত প্ৰতিটো উপলব্ধ ইউনিটৰ বাবে এটা শাৰী ব্যৱহাৰ কৰে। এটা খালী পুলে পুনৰ ভৰ্তি লকলৰ পিছত অপেক্ষা কৰি থকা সমসাময়িক অনুৰোধৰ সৈতে ইনলাইন পুনৰ ভৰ্তি ট্ৰিগাৰ কৰিব পাৰে।
- যৌগিক প্ৰাথমিক কী হৈছে (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 মই কিয় এই ডিজাইনটো SHIP কৰিম?

## অনূদিত ট্ৰান্সক্ৰিপ্ট

মূল ইংৰাজী বৰ্ণনাৰ পৰা অনুবাদ কৰা হৈছে। উপলব্ধ অডিঅ’ আৰু কেপচন ইউটিউবে নিয়ন্ত্ৰণ কৰে।

### সংৰক্ষণবোৰ 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-এ কলকাৰীসকলক টেগ কৰিছিল আৰু সংযোগ ধৰি ৰখাৰ সময় জুখিছিল, তাৰ পিছত চেকআউট পথটো পৰিষ্কাৰ কৰিছিল আৰু থ্ৰেড সমসাময়িকতা পুনৰীক্ষণ কৰিছিল। দ্ৰুত কোৱেৰীবোৰ এতিয়াও কোৱেৰীৰ বাহিৰত শাৰী পাতিব পাৰে।

### মই কিয় এই ডিজাইনটো SHIP কৰিম?

2:38 তেওঁলোকে Redis কর্তৃত্বশীল কৰি দুয়োটা চিষ্টেম ছায়া-লিখিছিল, ফলাফল তুলনা কৰিছিল, তাৰ পিছত কীল চুইচৰ সৈতে লাহে লাহে সলনি কৰিছিল। মোৰ ৰায় হৈছে SHIP IT। মই শ্বেয়াৰ কৰা লেনদেনৰ সীমা আৰু সেই ৰ'লবেকলযোগ্য ৰ'লআউটটো SHIP কৰিম, সম্পূৰ্ণ চেকআউট পথটো ইনষ্ট্ৰুমেণ্ট কৰাৰ সৈতে। এই বিষয়ে কিবা প্ৰশ্ন আছেনে? কমেন্টত দিয়ক। আৰু এইটোৱেই আজিৰ বাবে diff।

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
