Architecture Decision Record

Active theme: Light

← সিদ্ধান্ত রেকর্ডের উদাহরণ

টাইমস্ট্যাম্প ফরম্যাট

সূচি:

সারসংক্ষেপ

বিষয়

আমরা টাইমস্ট্যাম্প এবং আমাদের সব সিস্টেম ও তৃতীয় পক্ষের সিস্টেমে ভালোভাবে কাজ করে এমন একটি সামঞ্জস্যপূর্ণ টাইমস্ট্যাম্প ফরম্যাট ব্যবহার করে কখন কী ঘটে তা ট্র্যাক করতে সক্ষম হতে চাই।

আমরা এমন সিস্টেমের সঙ্গে মিথস্ক্রিয়া করি, যাদের টাইমস্ট্যাম্প ফরম্যাট ভিন্ন:

  • JSON বার্তার কোনো নিজস্ব টাইমস্ট্যাম্প ফরম্যাট নেই, তাই টাইমস্ট্যাম্পকে স্ট্রিংয়ে এবং স্ট্রিংকে টাইমস্ট্যাম্পে রূপান্তর কীভাবে করব, অর্থাৎ কীভাবে সিরিয়ালাইজ/ডিসিরিয়ালাইজ করব, তা আমাদের বেছে নিতে হবে।

  • কিছু অ্যাপ্লিকেশন UTC সময়ের বদলে স্থানীয় সময় ব্যবহার করতে সেট করা। স্থানীয় সময় অনুযায়ী ঘটনা ট্রিগার করা প্রকল্পের মতো যেসব প্রকল্পকে স্থানীয় সময়ের সঙ্গে মানিয়ে নিতে হয়, তাদের জন্য এটি সুবিধাজনক হতে পারে।

  • কিছু সিস্টেমের সময় নির্ভুলতার প্রয়োজন ও সক্ষমতা ভিন্ন, যেমন সেকেন্ড বনাম মিলিসেকেন্ড বনাম ন্যানোসেকেন্ডের সময় রেজোল্যুশন ব্যবহার। উদাহরণস্বরূপ, Linux অপারেটিং সিস্টেমের date কমান্ড ডিফল্ট সময় নির্ভুলতা হিসেবে সেকেন্ড ব্যবহার করে, আর Nasdaq স্টক এক্সচেঞ্জ ডিফল্ট সময় নির্ভুলতা হিসেবে ন্যানোসেকেন্ড চায়।

সিদ্ধান্ত

আমরা ন্যানোসেকেন্ড নির্ভুলতাসহ ISO 8601 টাইমস্ট্যাম্প মান ফরম্যাট বেছে নিই, বিশেষভাবে "YYYY-MM-DDTHH:MM:SS.NNNNNNNNNZ"।

ফরম্যাটটি বছর, মাস, দিন, ঘণ্টা, মিনিট, সেকেন্ড, ন্যানোসেকেন্ড এবং Zulu সময় অঞ্চল (যা UTC, GMT নামেও পরিচিত) দেখায়।

অবস্থা

সিদ্ধান্ত হয়েছে।

বিস্তারিত

অনুমান

টাইমস্ট্যাম্প থেকে স্ট্রিংয়ে (সিরিয়ালাইজ) এবং স্ট্রিং থেকে টাইমস্ট্যাম্পে (ডিসিরিয়ালাইজ) রূপান্তরের জন্য এই টাইমস্ট্যাম্প টেক্সট স্ট্রিংগুলো আমাদের সামলাতে হবে।

আমরা এমন একটি ফরম্যাট চাই, যা সাধারণভাবে ব্যবহার করা সহজ, রূপান্তর করা সহজ এবং মানুষের পড়তে সহজ।

আমরা বিস্তৃত পরিসরের বাহ্যিক সিস্টেমের সঙ্গে সামঞ্জস্য চাই, যেগুলো আমরা নিয়ন্ত্রণ করতে পারি না, যেমন বিশ্লেষণ সিস্টেম, ডেটাবেস সিস্টেম, আর্থিক সিস্টেম।

সীমাবদ্ধতা

কিছু সিস্টেমের সময় নির্ভুলতার সীমাবদ্ধতা আছে। উদাহরণস্বরূপ, macOS অপারেটিং সিস্টেমের date কমান্ড সেকেন্ডে সময় নির্ভুলতা প্রিন্ট করতে পারে, কিন্তু ন্যানোসেকেন্ডে পারে না।

অবস্থানসমূহ

আমরা বিভিন্ন বিকল্প বিবেচনা করেছি:

  • Unix epoch, অর্থাৎ একটি ক্রমবর্ধমান সংখ্যা।

  • সংক্ষিপ্ত টেক্সট ফরম্যাট "YYYYMMDDTHHMMSSNNNNNNNNN"।

  • স্থানীয় সময় অঞ্চল বনাম UTC সময় অঞ্চল ব্যবহার।

যুক্তি

সাধারণ ব্যবহারের জন্য আমরা কাঁচা গতি/আকারের চেয়ে মানুষের পড়তে/লিখতে সহজ হওয়াকে বেশি মূল্য দিই।

সাধারণ ব্যবহারের জন্য আমরা এমন একটি ফরম্যাট চাই, যা মেশিন সিস্টেমে ঠিকভাবে কাজ করে, এবং নমুনা ডেটা লেখা, JSON আউটপুট পড়া, লগ ফাইলে grep করা ইত্যাদির মতো হাতে-কলমেও ভালো কাজ করে।

অসাধারণ ব্যবহারের জন্য, যেমন হাই পারফরম্যান্স কম্পিউটিং, আমরা প্রত্যাশা করি আমাদের বেছে নেওয়া যেকোনো টেক্সট ফরম্যাটকে প্রোগ্রামিং ভাষার অন্তর্নির্মিত তারিখ অবজেক্ট টাইপের মতো দ্রুততর ফরম্যাটে টেক্সট রূপান্তর করে অপ্টিমাইজ করতে চাইব। তাই HPC-র জন্য টেক্সট ফরম্যাট খুব একটা গুরুত্বপূর্ণ নয়।

প্রভাব

আমাদের বিভিন্ন টেক্সট সিস্টেম ও সময় সিস্টেম এই ফরম্যাটে একত্রিত হবে।

সম্পর্কিত

সম্পর্কিত সিদ্ধান্ত

সময়ের পার্থক্য বা সময়কালও ট্র্যাক করার একটি দ্রুত/সহজ উপায় আমরা চাইতে পারি। Unix epoch টাইমস্ট্যাম্পে এগুলো সহজ।

সম্পর্কিত প্রয়োজনীয়তা

আমরা আমাদের সিদ্ধান্ত সমন্বয় করতে চাইতে পারি, যেমন Splunk, Sumo, ELK ইত্যাদির জন্য নির্দিষ্ট ধরনের লগিং বার্তা স্ট্যাম্পের সম্পর্কিত কোনো প্রয়োজনীয়তা থাকলে।

সম্পর্কিত উপকরণ

ভাষার ফরম্যাটার ও পার্সার:

Rosetta Code উদাহরণ:

SixArm উদাহরণ:

সম্পর্কিত নীতি

সহজে ফেরানো যায়। আমরা বেশ সহজেই Unix epoch-এর মতো ভিন্ন ফরম্যাটে বদলাতে পারি।

অকাল অপ্টিমাইজেশন পিছিয়ে দিন। সাধারণ ব্যবহারের জন্য ড্যাশ ও কোলন ব্যবহার করা ফরম্যাটের মতো কয়েকটি অতিরিক্ত অক্ষর নিয়ে আমরা খুব একটা মাথা ঘামাই না।

টীকা

এখানে টীকা যোগ করুন।