ক্ষেত্রের নাম পরিবর্তিত হয়নি কিন্তু অর্থ পরিবর্তিত হয়েছে, এবং নিম্নধারা শান্তভাবে একটি ত্রুটি করেছে: নিষ্কাশন ফলাফলে একটি সংস্করণ নম্বর যোগ করুন
গত সপ্তাহের `amount` প্রতিনিধিত্ব "সেন্ট", কিন্তু এই সপ্তাহে এটি "ইউয়ান" এ পরিবর্তন করা হয়েছে, কিন্তু ক্ষেত্রের নাম পরিবর্তন করা হয়নি। টাইপ চেক এখনও পাস, কিন্তু ব্যবসা ফলাফল মাত্রার দুই আদেশ খারাপ হতে পারে. নিষ্কাশন ইন্টারফেসের সবচেয়ে বিপজ্জনক আপগ্রেড প্রায়শই একটি ত্রুটি স্পষ্টভাবে রিপোর্ট করা নয়, কিন্তু শান্তভাবে অর্থ পরিবর্তন করা।
এই নিবন্ধটি ডেভেলপার এবং ডাউনস্ট্রিম ডেটা টিমের জন্য লেখা হয়েছে যারা নথি নিষ্কাশন ইন্টারফেস বজায় রাখে। নিষ্কাশন ফলাফল আপগ্রেড করার পরে, ক্ষেত্রের নাম পরিবর্তন নাও হতে পারে, কিন্তু তাদের অর্থ ভিন্ন হবে। উদাহরণস্বরূপ, যদি amount "ফেন" থেকে "ইউয়ান" তে পরিবর্তিত হয়, তবে টাইপ চেকটি এখনও পাস হয়, তবে ব্যবসার সংখ্যা দুটি মাত্রার ক্রম দ্বারা পৃথক হতে পারে।
নিম্নলিখিত ব্যাখ্যা করে কিভাবে সংস্করণ নম্বর, পরিষ্কার মাইগ্রেশন ফাংশন এবং মাইগ্রেশন রেকর্ড ব্যবহার করতে হয় এই ধরনের সমস্যা পরিচালনা করতে। এটি পড়ার পরে, আপনি নির্ধারণ করতে পারেন কোন আপগ্রেডের জন্য সংস্করণ স্যুইচিং প্রয়োজন, এবং মাইগ্রেশনের সময় কোন তথ্য রাখা উচিত।
এই নিবন্ধের উদাহরণগুলি সিন্থেটিক নমুনা ব্যবহার করে, এবং কোডটি একটি বিচ্ছিন্ন পরিবেশে উদাহরণ দ্বারা পরীক্ষা করা হয়েছে। এটি সমস্ত বাস্তব ফাইল বা পণ্যের প্রভাবগুলির গ্যারান্টি উপস্থাপন করে না। গুরুত্বপূর্ণ নথিগুলি প্রক্রিয়া করার আগে, দয়া করে মূলগুলি রাখুন এবং পাঠ্যের সীমানা এবং গ্রহণযোগ্য আইটেমগুলি অনুসারে সেগুলি পর্যালোচনা করুন৷
ক্ষেত্রের নাম পরিবর্তন হয়নি কিন্তু এর অর্থ পরিবর্তন হয়েছে। এটা কিভাবে মোকাবেলা করতে? এক বাক্যে উপসংহার
প্রতিটি আউটপুটকে schema_version দিয়ে লেবেল করুন এবং শুধুমাত্র একটি নতুন সংস্করণ লেবেল করার পরিবর্তে ডেটার বিভিন্ন সংস্করণ রূপান্তর করতে সুস্পষ্ট মাইগ্রেশন ফাংশন ব্যবহার করুন৷
| আপনার অবস্থা | প্রস্তাবিত অভ্যাস | কারণ |
|---|---|---|
| শুধু ক্ষেত্র যোগ করুন | একটি নতুন ক্ষেত্র যোগ করুন এবং সংস্করণ রেকর্ড করুন | ক্ষেত্র যোগ করা ইউনিট পরিবর্তনের মত একই জিনিস নয় |
| ক্ষেত্র একক বা শব্দার্থ পরিবর্তন | সংস্করণ অনুসারে যাচাইকারী এবং মাইগ্রেশন ফাংশন নির্বাচন করুন | একই নামের ক্ষেত্রের অর্থ শান্তভাবে পরিবর্তিত হবে |
| পুরানো রেকর্ডে অনির্ধারিত একক আছে | ব্যর্থতা পরিষ্কার করুন, পুরানো তথ্য রাখুন এবং প্রমাণ যোগ করুন | মাইগ্রেশন ফাংশন অনুমান করা উচিত নয় |
| ডাউনস্ট্রিম পুরানো ইন্টারফেস গ্রাস করেছে | একটি সংস্করণ সুইচ সময়সূচী | ডাউনস্ট্রিম থেকে স্বয়ংক্রিয়ভাবে সংখ্যাসূচক শব্দার্থগত পরিবর্তনগুলি সনাক্ত করার আশা করা যায় না |
| নিষ্কাশন ফলাফল সহ অনুবাদ পরীক্ষা করুন | উত্পন্ন ক্ষেত্রগুলির জন্য প্রোটোকল সংস্করণ তথ্য সংরক্ষণ করুন | এটি পরীক্ষা করা সুবিধাজনক "কেন এই সময়টি গতবারের থেকে আলাদা" |
সংস্করণ নম্বর শব্দার্থবিদ্যার সাথে যেতে হবে
একটি ক্ষেত্র যোগ করা ইউনিট পরিবর্তন করার মতো একই জিনিস নয়। আপনি প্রতিটি আউটপুট schema_version দিতে পারেন এবং সংস্করণ অনুসারে যাচাইকারী এবং মাইগ্রেশন ফাংশন নির্বাচন করতে পারেন।
সংস্করণ সংখ্যা নিজেদের দ্বারা সিস্টেম রক্ষা করে না. যদি সমস্ত সংস্করণ একই অবিচ্ছিন্ন পার্সিং যুক্তি অনুসরণ করে তবে এটি কেবল একটি আলংকারিক ক্ষেত্র।
সংস্করণ পার্সিংয়ের চাবিকাঠি
- সংস্করণ অনুসারে পার্সিং নিয়ম নির্বাচন করুন: বিভিন্ন সংস্করণ তাদের নিজস্ব যাচাইকারী ব্যবহার করে।
- মাইগ্রেশন একটি সুস্পষ্ট ডেটা রূপান্তর: এটি একটি নতুন সংস্করণের সাথে সরাসরি পুরানো ডেটা লেবেল করার বিষয়ে নয়৷
- শব্দার্থিক পরিবর্তনগুলি অবশ্যই সনাক্তযোগ্য হতে হবে: নিয়ম যেমন ইউনিট এবং নির্ভুলতা পর্যালোচনা করা উচিত।
নিম্নলিখিত উদাহরণ দেখায় কিভাবে পয়েন্টের পূর্ণসংখ্যাকে দশমিক পরিমাণ স্ট্রিংয়ে রূপান্তর করতে হয়।
একটি নিরীক্ষণযোগ্য মাইগ্রেশন ফাংশন
from decimal import Decimal
def migrate(record):
if record.get("schema_version") != "v1":
raise ValueError("unexpected input version")
cents = record.get("amount_cents")
if type(cents) is not int:
raise ValueError("integer cents required")
return {"schema_version": "v2",
"amount": format(Decimal(cents) / Decimal(100), ".2f"),
"currency": record["currency"]}
old = {"schema_version": "v1", "amount_cents": 12345, "currency": "USD"}
new = migrate(old)
assert new["amount"] == "123.45"
assert old["amount_cents"] == 12345
assert migrate({**old, "amount_cents": -25})["amount"] == "-0.25"
try:
migrate({**old, "amount_cents": True})
except ValueError:
pass
else:
raise AssertionError("bool is not a monetary integer here")
এই উদাহরণটি অনুমান করে যে ইনপুট মুদ্রা একটি শতাংশ ইউনিট সম্পর্ক ব্যবহার করে এবং আউটপুটে দুটি দশমিক স্থান রয়েছে। এটি একটি সার্বজনীন রূপান্তরকারী নয় যা সমস্ত মুদ্রা ইউনিটকে কভার করে।
type(cents) is int ইচ্ছাকৃতভাবে বুলিয়ান মানগুলিকে পাইথনে পূর্ণসংখ্যা সাবক্লাস হিসাবে বাদ দেয় যাতে True কে পেনি হিসাবে গ্রহণ না করা যায়।
📊 মূল তুলনা: শুধুমাত্র সংস্করণ নম্বর এবং সংস্করণ স্থানান্তর
| অনুশীলন | প্রভাব | সীমাবদ্ধতা |
|---|---|---|
শুধুমাত্র schema_version ক্ষেত্র যোগ করুন | আউটপুট সংস্করণ সঙ্গে ট্যাগ করা হয় | যদি সমস্ত সংস্করণ এখনও একই পার্সিং যুক্তি অনুসরণ করে, সংস্করণ নম্বরটি কেবল একটি সজ্জা |
| সংস্করণ অনুসারে বৈধকারী এবং মাইগ্রেশন ফাংশনগুলি নির্বাচন করুন | একই নামের ক্ষেত্রগুলির বিভিন্ন সংস্করণে স্পষ্ট ব্যাখ্যা রয়েছে | আপনাকে প্রতিটি সংস্করণের জন্য রূপান্তর নিয়মগুলি স্পষ্টভাবে উল্লেখ করতে হবে |
মাইগ্রেশন রেকর্ডে কী কী রেখে যাওয়া উচিত?
ট্রেসেবিলিটি এবং ডাইভারশন হ্যান্ডলিংয়ের সুবিধার্থে মাইগ্রেশনের সময় নিম্নলিখিত তথ্য রেকর্ড করার পরামর্শ দেওয়া হয়।
| তথ্য | উদ্দেশ্য | হারিয়ে যাওয়ার ঝুঁকি |
|---|---|---|
| ইনপুট এবং আউটপুট সংস্করণ | সঠিক ব্যাখ্যার নিয়ম চয়ন করুন | একই নামের ক্ষেত্রগুলির বিভ্রান্তিকর অর্থ রয়েছে |
| প্রোগ্রাম সংস্করণটি স্থানান্তরিত করুন | রূপান্তর ফলাফলগুলি পুনরুত্পাদন করুন | আপডেটের পরে ফলাফলগুলি অবর্ণনীয় |
| মূল রেকর্ড করা পরিচয় | উৎসটি প্রত্যাহার করা | নতুন এবং পুরানো ডেটা মেলা যাবে না |
| ব্যর্থতার কারণ | হ্যান্ডলিং করার জন্য ম্যানুয়াল ডাইভারশন | অযোগ্য ডেটা ডিফল্ট মানগুলির সাথে প্রতিস্থাপিত হবে |
ঐতিহাসিক ত্রুটির সাথে অসীমভাবে সামঞ্জস্যপূর্ণ হবেন না
যদি পুরানো রেকর্ডের ইউনিটটি নিজেই অনিশ্চিত হয় তবে স্থানান্তর ফাংশনটি অনুমান করা উচিত নয়। আরও উপযুক্ত পদ্ধতি হ'ল একটি পরিষ্কার ব্যর্থতা ফিরিয়ে দেওয়া, পুরানো তথ্য রাখা এবং পরিপূরক প্রমাণের জন্য অনুরোধ করা।
ডাউনস্ট্রিম ইন্টারফেসগুলির জন্য যা ইতিমধ্যে পুরানো ইন্টারফেসগুলি গ্রাস করেছে, সংস্করণ স্যুইচিংও ব্যবস্থা করা উচিত, এটি স্বয়ংক্রিয়ভাবে সনাক্ত করার প্রত্যাশা করার পরিবর্তে যে সংখ্যাসূচক শব্দার্থ পরিবর্তিত হয়েছে।
তথ্যসূত্র: JSON স্কিমা সাধারণ কীওয়ার্ড
অনুবাদ পরবর্তী যাচাইকরণের জন্যও সংস্করণ সচেতনতা প্রয়োজন
OmniDoc (প্রোডাক্ট এন্ট্রি) অনুবাদগুলি পরীক্ষা করতে নিষ্কাশিত ক্ষেত্রগুলি ব্যবহার করার সময়, কোন প্রোটোকলটি ক্ষেত্রগুলি উত্পন্ন করেছে তা নির্দিষ্ট করুন। উত্স ফাইলগুলি, নিষ্কাশন নিয়ম বা লক্ষ্য ভাষার পরিবর্তনগুলি সমস্ত মিল পদ্ধতিকে প্রভাবিত করতে পারে।
সংস্করণের তথ্য ধরে রাখা "কেন এই সময়টি গতবারের চেয়ে আলাদা" একটি সমস্যা সমাধানের সমস্যা করে তোলে, কেবল এটি মডেলের অস্থিরতার জন্য দায়ী করার পরিবর্তে।
🎯 কোন পদ্ধতিটি আপনার জন্য উপযুক্ত?
আপনি যদি কেবল একটি ক্ষেত্র যুক্ত করেন
সরাসরি একটি ক্ষেত্র যুক্ত করুন এবং আউটপুটে schema_version রেকর্ড করুন।
আপনি যদি কোনও ক্ষেত্রের ইউনিট বা অর্থ পরিবর্তন করতে চান
নতুন সংস্করণের জন্য স্বতন্ত্র যাচাইকারী এবং মাইগ্রেশন ফাংশন লিখুন এবং পুরানো পার্সিং যুক্তি পুনরায় ব্যবহার করবেন না।
যদি আপনার ঐতিহাসিক ডেটা ইউনিট অস্পষ্ট হয়
মাইগ্রেশনকে স্পষ্টভাবে ব্যর্থতা করুন, মূল ডেটা ধরে রাখুন এবং কেবল প্রমাণ পরিপূরক করার পরে প্রক্রিয়া করুন।
❓ প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ)
1. ডিপিএসে কেবল একটি সংস্করণ নম্বর যুক্ত করাই কি যথেষ্ট?
যথেষ্ট নয়। সংস্করণ নম্বরটি কেবল একটি লেবেল; যদি সমস্ত সংস্করণ এখনও একই পার্সিং যুক্তি ব্যবহার করে, তবে এটি ব্যবসায়ের প্রভাবগুলি রক্ষা করতে পারে না।
2. ট্রান্সফার ফাংশনটি কেন বুলিয়ানদের বাদ দেয়?
পাইথনে, বুলিয়ান মানগুলি পূর্ণসংখ্যার উপশ্রেণী, এবং type(cents) is int True কে একটি পয়সা হিসাবে গ্রহণ করা থেকে বিরত রাখতে পারে।
3. পুরানো রেকর্ড ইউনিট অনিশ্চিত হলে আপনার কী করা উচিত?
স্থানান্তর ফাংশনগুলি অনুমান করা উচিত নয়। পরিষ্কার ব্যর্থতা ফেরত দেওয়া উচিত, পুরানো তথ্য সংরক্ষণ করা উচিত এবং অতিরিক্ত প্রমাণের অনুরোধ করা উচিত।
4. মাইগ্রেশন রেকর্ডে কী তথ্য সংরক্ষণ করা দরকার?
সর্বনিম্ন, ইনপুট এবং আউটপুট সংস্করণ, মাইগ্রেশন প্রোগ্রাম সংস্করণ, মূল রেকর্ড পরিচয় এবং ব্যর্থতার কারণগুলি অন্তর্ভুক্ত করুন।
📝 সারসংক্ষেপ
ক্ষেত্রের নাম অপরিবর্তিত থাকার অর্থ এই নয় যে অর্থ অপরিবর্তিত থাকবে। আউটপুটে একটি সংস্করণ নম্বর যুক্ত করা এবং সুস্পষ্ট মাইগ্রেশন ফাংশন এবং মাইগ্রেশন রেকর্ডগুলির সাথে শব্দার্থিক পরিবর্তনগুলি পরিচালনা করা শান্ত ডাউনস্ট্রিম ত্রুটির ঝুঁকি উল্লেখযোগ্যভাবে হ্রাস করতে পারে।
এখনই অভিজ্ঞতা: অনুবাদ শুরু করতে আপনার নথি আপলোড করুন, মূল ফর্ম্যাটিং সংরক্ষণ করুন


