# Shopify ইনভেন্টরি রিজার্ভেশন মাইএসকিউএল-এ স্থানান্তরিত করেছে

Published: 2026-10-10

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

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

## এই ভিডিওতে যা আছে

- পুরানো রেডিস কোয়ান্টিটি-কাউন্টার মডেল সমসাময়িকতা পরিচালনা করত, কিন্তু রিজার্ভেশন ক্লিনআপ এবং মাইএসকিউএল লেজার আপডেট একটি একক স্থানীয় অ্যাটমিক ট্রানজ্যাকশন শেয়ার করতে পারত না।
- প্রতিস্থাপনটি প্রতি আইটেম/অবস্থান সংমিশ্রণে 1,000 এ সীমাবদ্ধ একটি পুলে প্রতি উপলব্ধ ইউনিটের জন্য একটি সারি ব্যবহার করে। একটি খালি পুল একটি রিফ্লেশমেন্ট লকের পিছনে অপেক্ষারত সমসাময়িক অনুরোধগুলির সাথে ইনলাইন রিফ্লেশমেন্ট ট্রিগার করতে পারে।
- কম্পোজিট প্রাইমারি কী হল (শপ\_আইডি, ইনভেন্টরি\_আইটেম\_আইডি, ইনভেন্টরি\_গ্রুপ\_আইডি, আইডি)। Shopify তার প্রোটোটাইপে লক ওভারহেড কমিয়েছে এবং গ্যাপ লকগুলি এড়াতে READ COMMITTED ব্যবহার করেছে যা রিফ্লেশমেন্ট বন্ধ করে দিয়েছিল।
- রিজার্ভেশন রেকর্ড সন্নিবেশ করার আগে রিজার্ভগুলি পুল সারি মুছে ফেলে। প্রতিশ্রুতিবদ্ধ করা ডেটাবেস লকগুলি প্রকাশ করে যখন সংরক্ষিত হোল্ড পেমেন্ট জুড়ে থাকে; সফল পেমেন্ট লেজার দাবি করে এবং একটি পরবর্তী অ্যাটমিক ট্রানজ্যাকশনে রিজার্ভেশন সরিয়ে দেয়।
- মাইএসকিউএল SKIP LOCKED-কে একটি অসামঞ্জস্যপূর্ণ ভিউ হিসাবে ডকুমেন্ট করে যা লক করা সারিগুলিকে বাদ দেয়। এটি একটি সম্পূর্ণ স্টক গণনা বা ন্যায্য পালাবদল প্রতিষ্ঠা করে না, শুধুমাত্র সারি-স্তরের লকগুলিতে প্রযোজ্য এবং স্টেটমেন্ট-ভিত্তিক রেপ্লিকেশনের জন্য অনিরাপদ।
- উৎস উদাহরণে expires\_at অন্তর্ভুক্ত রয়েছে, কিন্তু Shopify মাইএসকিউএল এক্সপিরেশন-ক্লিনআপ অ্যালগরিদম ডকুমেন্ট করে না। ভিডিওর রিলিজ/এক্সপাইরি শাখা একটি ব্যাখ্যামূলক জীবনচক্রের প্রয়োজন।
- অন্যান্য চেকআউট কোডে সংযোগ ধারণের সময় ছিল চূড়ান্ত থ্রুপুট বাধা। Shopify উভয় সিস্টেমের শ্যাডো-রাইট করেছে, ফলাফল তুলনা করেছে এবং রেডিস কিল-সুইচ ফলব্যাক সহ ধীরে ধীরে পরিবর্তন করেছে।

## অধ্যায়

- 0:00 কেন রিজার্ভেশন মাইএসকিউএল-এ স্থানান্তরিত করবেন?
- 0:29 কেন দুটি স্টোর ঝুঁকিপূর্ণ ছিল?
- 0:52 লক করা যায় এমন ইউনিট কী হবে?
- 1:15 পুল খালি হলে কী হবে?
- 2:14 SKIP LOCKED কী বাদ দেয়?
- 2:26 আসল সীমা কোথায় ছিল?
- 2:38 আমি কেন এই ডিজাইনটি শিপ করব?

## অনুবাদিত প্রতিলিপি

মূল ইংরেজি বর্ণনা থেকে অনূদিত। উপলব্ধ অডিও এবং ক্যাপশন YouTube দ্বারা নিয়ন্ত্রিত।

### কেন রিজার্ভেশন মাইএসকিউএল-এ স্থানান্তরিত করবেন?

0:00 একটি চেকআউট দ্রুত থাকতে রেডিস এর প্রয়োজন। Shopify ইনভেন্টরি রিজার্ভেশন মাইএসকিউএল-এ স্থানান্তরিত করেছে, প্রতি ইউনিটে একটি সারি ব্যবহার করে একটি বাউন্ডেড পুলে। কেন মাইএসকিউএল বেছে নেবেন? আপনি কীভাবে নিরাপদে লক এড়ান? এটি দ্য ডেইলি ডিফার আড়ালে। এবং কেন দ্রুত প্রশ্নগুলি এখনও একটি সীমায় আঘাত করছিল? Shopify হল অনলাইন এবং ব্যক্তিগতভাবে বিক্রয়ের জন্য একটি বাণিজ্য প্ল্যাটফর্ম। রেডিস একটি ইন-মেমরি ডেটা স্টোর।

0:21 মাইএসকিউএল একটি রিলেশনাল ডেটাবেস, এবং Shopify ইতিমধ্যেই তার ইনভেন্টরি লেজার রাখত সেখানে। একজন ক্রেতা অর্থপ্রদান করার সময় একটি রিজার্ভেশন সংক্ষেপে স্টক ধারণ করে।

### কেন দুটি স্টোর ঝুঁকিপূর্ণ ছিল?

0:29 তাদের রেডিস মডেল একটি আইটেম কাউন্টার হ্রাস করত। একটি প্রদত্ত অর্ডার দাবি করার অর্থ ছিল মাইএসকিউএল লেজার আপডেট করা এবং রেডিস পরিষ্কার করা। সেই পৃথক লেখাগুলি স্টককে দুবার বিক্রি বা অনুপলব্ধ করে দিতে পারত যখন এটি বিক্রিযোগ্য হওয়া উচিত ছিল। পুরানো মডেলে অবস্থান সচেতনতারও অভাব ছিল। প্রতিস্থাপনকে এমন কোথাও থেকে স্টক বেছে নিতে হবে যা অর্ডার পূরণ করতে পারে। ভুল মহাদেশের একটি গুদাম একটি চমৎকার ডেটাবেস এন্ট্রি এবং একটি ভয়ঙ্কর ডেলিভারি প্রতিশ্রুতি দেয়। আগের মাইএসকিউএল প্রচেষ্টাগুলি একটি কোয়ান্টিটি সারি ব্যবহার করত, তাই প্রতিদ্বন্দ্বী চেকআউটগুলি একই

### লক করা যায় এমন ইউনিট কী হবে?

0:56 লকে সারিবদ্ধ হত। একটি স্প্রেডশীট সেলের চারপাশে একটি ভেলভেট রোপের কথা ভাবুন। বেশি কর্মী যোগ করা কেবল সারি দীর্ঘ করে। Shopify লক করা যায় এমন বস্তুটি পরিবর্তন করেছে। প্রতিটি উপলব্ধ ইউনিট তার নিজস্ব সারি পায়। একটি লকিং রিড অন্য ট্রানজ্যাকশন ধারণ করে এমন ইউনিটগুলি এড়িয়ে যায় এবং অন্যান্য যোগ্য ইউনিটগুলি নির্বাচন করে। বিভিন্ন কর্মীরা বিভিন্ন সারি অর্জন করতে পারে, যখন হট কাউন্টার তাদের পথ থেকে দূরে থাকে।

### পুল খালি হলে কী হবে?

1:15 সেই পুলটি প্রতি আইটেম এবং অবস্থানের জন্য এক হাজার সারিতে সীমাবদ্ধ। রিফ্লেশমেন্ট লেজার থেকে আসে। যদি এটি খালি হয়, রিজার্ভ পথ ইনলাইন রিফ্লেশমেন্ট করে, প্রতিদ্বন্দ্বী অনুরোধগুলি একটি রিফ্লেশমেন্ট লকের পিছনে অপেক্ষা করে। খালি পুল মানে খালি গুদাম নয়। রিজার্ভ নির্বাচিত পুল সারি মুছে ফেলে, তারপর একটি ট্রানজ্যাকশনে রিজার্ভেশন রেকর্ড সন্নিবেশ করে। কমিট ডেটাবেস লকগুলি প্রকাশ করে।

1:35 রোলব্যাক পরিবর্তনগুলি বাতিল করে। রিজার্ভেশন সংরক্ষিত অবস্থা হিসাবে পেমেন্ট প্রক্রিয়াকরণ জুড়ে থাকে। সফল পেমেন্ট লেজার দাবি করে এবং অ্যাটমিক্যালি রিজার্ভেশন সরিয়ে দেয়। ডেটাবেস লকগুলি কখনই পেমেন্ট ফর্মের যত্ন নিতে হবে না। তাদের কম্পোজিট প্রাইমারি কী শুরু হয় শপ, আইটেম, গ্রুপ, তারপর ইউনিট পরিচয় দিয়ে। লুকআপের সাথে মেলে তাদের প্রোটোটাইপে ইনডেক্স লকিং হ্রাস করেছে। তারা গ্যাপ লকগুলি এড়াতে রিড কমিটেডও ব্যবহার করে যা পুল

1:57 রিফ্লেশমেন্টকে ব্লক করত, এবং বৃত্তাকার অপেক্ষা রোধ করতে একটি সামঞ্জস্যপূর্ণ টেবিল অর্ডার ব্যবহার করে। প্রকাশিত উদাহরণে একটি মেয়াদ উত্তীর্ণের সময় রেকর্ড করা হয়েছে। পরিত্যক্ত পেমেন্টের জন্য স্টক অবশেষে প্রকাশ করা দরকার, অথবা শপিং কার্ট একটি জমিতে পরিণত হয়। Shopify-এর পোস্টে সেই ক্লিনআপ অ্যালগরিদমটি অনির্দিষ্ট রাখা হয়েছে, তাই এই চিত্রটি জীবনচক্রের প্রয়োজনীয়তা দেখায়। এই হল সমস্যা।

### SKIP LOCKED কী বাদ দেয়?

2:14 লক করা বাদ পড়া সারিগুলি বাদ দেয়, তাই ম্যানুয়াল তার ফলাফলকে একটি অসামঞ্জস্যপূর্ণ ভিউ বলে অভিহিত করে। এটি একটি সম্পূর্ণ স্টক গণনা বা ন্যায্য পালাবদল কোনটিই সরবরাহ করে না। উপলব্ধতার সিদ্ধান্ত এবং এর চারপাশে রিফ্লেশমেন্ট নিয়মগুলি রাখুন।

### আসল সীমা কোথায় ছিল?

2:26 এবং সেই সীমা? অন্যান্য চেকআউট কোড ডেটাবেস সংযোগগুলি খুব দীর্ঘ সময় ধরে রাখছিল। Shopify কলারদের ট্যাগ করেছে এবং সংযোগ ধারণের সময় পরিমাপ করেছে, তারপর চেকআউট পথ পরিষ্কার করেছে এবং থ্রেড সমসাময়িকতা পুনরায় পরীক্ষা করেছে। দ্রুত প্রশ্নগুলি এখনও প্রশ্নের বাইরে সারিবদ্ধ হতে পারে।

### আমি কেন এই ডিজাইনটি শিপ করব?

2:38 তারা রেডিসকে প্রমাণিক হিসাবে উভয় সিস্টেমের শ্যাডো-রাইট করেছে, ফলাফল তুলনা করেছে, তারপর একটি কিল সুইচ সহ ধীরে ধীরে পরিবর্তন করেছে। আমার রায় হল SHIP IT। আমি শেয়ার করা ট্রানজ্যাকশন বাউন্ডারি এবং সেই রোলব্যাকযোগ্য রোলআউট সম্পূর্ণ চেকআউট পথকে যন্ত্রানুষঙ্গ করে শিপ করব। এ বিষয়ে কোনো প্রশ্ন আছে? কমেন্ট বক্সে রাখুন। এবং আজকের জন্য এটাই দ্য ডিফারেন্স।

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
