টাইম জোন ছাড়া টাইমস্ট্যাম্প ব্যবহারের জন্য বৈধ ব্যবহারের কেস কী?


40

এর মধ্যে পার্থক্যগুলির বিষয়ে একটি দীর্ঘ এবং যথেষ্ট বর্ণনামূলক উত্তর রয়েছে

  • TIMESTAMP WITH TIME ZONE বনাম
  • TIMESTAMP WITHOUT TIME ZONE

প্রাপ্তিসাধ্য এই তাই পোস্টে । আমি যা জানতে চাই তা হ'ল: আসলে ব্যবহারের জন্য কি কোনও বৈধ ব্যবহারের মামলা রয়েছে TIMESTAMP WITHOUT TIME ZONEবা এটিকে একটি অ্যান্টি-প্যাটার্ন হিসাবে বিবেচনা করা উচিত?


এই প্রশ্নটি "প্রাথমিকভাবে মতামত ভিত্তিক" বন্ধ হওয়ার ঝুঁকিটি চালায়। আমি নীচে আমার উত্তরে কিছু উদ্দেশ্যমূলক মতামত দেওয়ার চেষ্টা করেছি।
কলিন 'হার্ট

2
এই সমস্যাটি একেবারে বাস্তব, প্রতিটি ডাটা টাইপের একটি খুব আলাদা অর্থ রয়েছে। সুতরাং আমি অবশ্যই এই প্রশ্নটিকে প্রাথমিকভাবে মতামত ভিত্তিক হিসাবে বিবেচনা করব না।
তুলিল বাউরক

উত্তর:


29

এই স্থানের অনেক বিবৃত করা হয়, কিন্তু আমি এটা মূল্য সবসময় উল্লেখ যখন আমরা তুলনা মনে timestamp with time zoneসঙ্গে timestamp without time zoneপ্রকারসমূহ: সংরক্ষণ করে না সময় অঞ্চল টাইমস্ট্যাম্প সঙ্গে বরাবর তথ্য । এটি যা করে তা হ'ল ইউটিসি টাইম জোনে প্রতিটি ডেটা সংরক্ষণ করা, যেমন ডক্সে বলা হয়েছে :timestamp WITH time zone

টাইম জোনের সাথে টাইমস্ট্যাম্পের জন্য, অভ্যন্তরীণভাবে সঞ্চিত মান সর্বদা ইউটিসিতে থাকে (ইউনিভার্সাল সমন্বিত সময়, Greenতিহ্যগতভাবে গ্রিনিচ গড় সময়, জিএমটি) নামে পরিচিত। একটি ইনপুট মান যেটিতে একটি স্পষ্ট সময় অঞ্চল নির্দিষ্ট থাকে সেই সময় অঞ্চলের উপযুক্ত অফসেট ব্যবহার করে ইউটিসিতে রূপান্তরিত হয়। যদি ইনপুট স্ট্রিংয়ে কোনও টাইম জোনটি বর্ণিত না হয়, তবে এটি সিস্টেমের টাইমজোন প্যারামিটার দ্বারা নির্দেশিত টাইম জোনে বলে মনে করা হয় এবং টাইমজোন জোনের অফসেট ব্যবহার করে ইউটিসিতে রূপান্তরিত হয়।

এটি কিছু ক্ষেত্রে ব্যবহারের জন্য বৈধ হিসাবে বিবেচিত timestamp WITHOUT time zoneহয় যেখানে (1) সবকিছু একই টাইমজোনে থাকে বা (২) অ্যাপ্লিকেশন স্তরটি সময় অঞ্চলটি পরিচালনা করে এবং কেবলমাত্র একটি নির্দিষ্ট সময় অঞ্চলে (সাধারণত ইউটিসি) সমস্ত কিছু সঞ্চয় করে। তবে এটিকে একটি এন্টি-প্যাটার্ন হিসাবেও বিবেচনা করা হয়, সহজ, কারণ (1) এর সঠিক সমাধানটি সিস্টেমের জন্য প্রদত্ত এক টাইমজোনকে টাইমজোন সেটিংটি কনফিগার করা এবং (2) ইতিমধ্যে সমাধান করা হয়েছে, কারণ পোস্টগ্রিসকিউএল ইতিমধ্যে একই টাইমজোনটিতে সমস্ত কিছু সঞ্চয় করে রাখে as (ইউটিসি).

এখন, এই দুটি নিচে দিয়ে, আমি ব্যবহারের জন্য শুধুমাত্র একটি ভাল কারণ নিয়ে আসতে পারি timestamp WITHOUT time zone। আপনি যখন ভবিষ্যতে ইভেন্টগুলি সঞ্চয় করতে চান এবং যখন আমরা সেই সময়টি পেয়েছি তখন অবশ্যই কোনও ধরণের সতর্কতা শুরু করতে হবে। এটি timestamp WITH time zoneযদি সময় অঞ্চল সম্পর্কে অঞ্চলের আইন দ্বারা সংজ্ঞায়িত নিয়মগুলি কখনই পরিবর্তিত হয় না তবে এটির পক্ষে ভাল হতে পারে । সবচেয়ে সাধারণ নিয়ম যা পরিবর্তিত হয় তা হ'ল ডে লাইট সেভিং টাইম (ডিএসটি) গ্রহণ বা না নিয়ে।

উদাহরণস্বরূপ, কল্পনা করুন যে আপনি আছেন, আসুন বলুন, 2013-06-15(ডিএসটি তে এখনও হয়নি) কিছু অনুষ্ঠানের সময়সূচী তৈরি 2013-01-15 10:00হবে (যা ইতিমধ্যে ডিএসটিতে হবে), এবং 2013-06-15আপনার অঞ্চলে ডিএসটি গ্রহণ করার জন্য মনোনীত করা হয়েছিল; তবে, এর কিছু সময় পরে, সরকার এই নিয়ম পরিবর্তন করেছে এবং বলেছে যে আপনার অঞ্চল আর ডিএসটি ব্যবহার করবে না, এবং হঠাৎ আপনার নির্ধারিত সময়টি 2013-01-15 11:00(পরিবর্তে 10:00) হয়ে যায় , যদি আপনি ব্যবহার করেন timestamp WITH time zone, এবং আপনার টিজেড কনফিগারেশনগুলি আপ-টু-ডেট রাখেন। অবশ্যই আপনি খেয়াল করতে পারেন যে এই অঞ্চলের ক্ষেত্রে / সময়সীমার ক্ষেত্রে আপনার আগ্রহের নিয়ম পরিবর্তনগুলি ট্র্যাক করে রাখলে এবং প্রভাবিত রেকর্ডগুলি আপডেট করে তবে সময় অঞ্চলগুলির সাথেও এই জাতীয় কেসগুলির সাথে চিকিত্সা করা সম্ভব।

উল্লেখযোগ্য যে কিছু অঞ্চল প্রায়শই এই নিয়মগুলি পরিবর্তন করে (যেমন ব্রাজিলের মতো, কিছু রাজ্য - পুরো দেশই নয় - প্রায়শই পরিবর্তন হয়) তবে বেশিরভাগ ক্ষেত্রে এটি এটিকে খুব আগে পরিবর্তন করে, তাই আপনার ব্যবহারকারীরা কেবল খুব দূরে নির্ধারিত ইভেন্টের দ্বারা প্রভাবিত হবেন would বর্তমান সময়

যা যা বলা হয়েছিল, তার সাথে আমার আরও একটি পরামর্শ রয়েছে। আপনার যদি ব্যবহারকারী, লগ, বা বিভিন্ন টাইমজোনগুলিতে কিছু থাকে তবে তারা কোথাও থেকে আসা সময় অঞ্চলটি সংরক্ষণ করুন এবং চয়ন করুন এবং ব্যবহার করুন timestamp with time zone। এইভাবে আপনি (1) বিভিন্ন উত্সের জন্য একে অপরের কাছাকাছি সংঘটিত ঘটনাগুলি (তাদের সময়সীমাগুলি থেকে পৃথক) এবং (2) ঘটনাটি ঘটেছে আসল সময়টি (ঘড়ির সময়) প্রদর্শন করতে পারেন।


আপনি বলছেন: "সময় অঞ্চল সহ টাইমস্ট্যাম্প ব্যবহার করার জন্য আমি কেবলমাত্র একটি ভাল কারণ নিয়ে আসতে পারি"। যদি এটি টাইপো না হয় তবে আপনি কি সত্যিই পরামর্শ দিচ্ছেন যে "টাইমস্ট্যাম্প ব্যতীত টাইমস্ট্যাম্প" "টাইমস্টোন উইথ টাইমস্ট্যাম্প" এর চেয়ে ভুল বোঝাবুঝি তৈরি করার পক্ষে আরও উপযুক্ত / কম প্রবণ? এটাই আমার কাছে পাল্টা স্বজ্ঞাত বলে মনে হচ্ছে।
মার্কাস জুনিয়াস ব্রুটাস

@ মার্কাসজুনিয়াস ব্রুটাস, এর জন্য দুঃখিত, এটি সত্যিই একটি টাইপো ছিল এবং আমি অন্যভাবে ভাবলাম ... সম্পাদিত উত্তরটি দেখুন।
ম্যাথিউস ওল

Codeblog.jonskeet.uk/2019/03/27/… ঠিক এই ভবিষ্যতের-ইভেন্ট-নিয়ম-সম্ভবত-পরিবর্তনের দৃশ্যের সাথে গভীরভাবে আলোচনা করেছে (একই সমঝোতার সাথে)
বেনি

17

হ্যাঁ. ব্যবহারের ক্ষেত্রে আছে TIMESTAMP WITHOUT TIME ZONE

  • সাধারণ ব্যবসায়িক অ্যাপ্লিকেশনগুলিতে এই ধরণের জন্য শুধুমাত্র ব্যবহৃত হবে:
    • ভবিষ্যতে অ্যাপয়েন্টমেন্ট বুকিং
    • বিভিন্ন সময় অঞ্চল জুড়ে একই সময়ের দিনের প্রতিনিধিত্ব করা, যেমন টোকিও এবং প্যারিসে ২৩ শে দুপুরের সময় (একই সময়ের একই সময়ের দুটি পৃথক মুহূর্ত)
  • ট্র্যাকিং মুহুর্তের জন্য, টাইমলাইনে নির্দিষ্ট পয়েন্টগুলি সর্বদা ব্যবহার করুন TIMESTAMP WITH TIME ZONE, না WITHOUT

TIMESTAMP WITHOUT TIME ZONEমান না টাইমলাইনে, উপর একটি বিন্দু না প্রকৃত মুহূর্ত। তারা প্রায় 26-27 ঘন্টা (বিশ্বজুড়ে সময় অঞ্চলগুলির পরিসীমা) বরাবর টাইমলাইনে সম্ভাব্য মুহুর্তগুলি সম্পর্কে সম্ভাব্য পয়েন্টগুলি সম্পর্কে মোটামুটি ধারণা উপস্থাপন করে । আপনি কোনও সময় অঞ্চল বা ইউটিসি-থেকে অফসেট প্রয়োগ না করা পর্যন্ত তাদের আসল অর্থ নেই ।

প্র: ক্রিসমাস

উদাহরণস্বরূপ, বলুন যে আপনার ছুটির দিন / পবিত্র দিনগুলি রেকর্ড করা দরকার।

Table: holiday_

Column: year_         Type: SMALLINT
Column: description_  Type: VARCHAR
Column: start_        Type: TIMESTAMP WITHOUT TIME ZONE

এই বছরের 25 ডিসেম্বর মধ্যরাতের পরে ক্রিসমাস শুরু হওয়ার বিষয়টি রেকর্ড করতে আমাদের 2016-12-25 00:00:00কোনও সময় অঞ্চল ছাড়াই বলা দরকার । সান্টা দিনের প্রথম দিকে তিনি মধ্যরাতের ঠিক পরে অকল্যান্ড এনজেডে যান, কারণ এটি পৃথিবীর প্রথম দিকের মধ্যরাতগুলির একটি। তারপরে তিনি পশ্চিম দিকে তার পথে কাজ করছেন, পরের মধ্যরাতের সাথে সাথেই তিনি শীঘ্রই ফিলিপাইনে পৌঁছেছেন। তারপরে রেইন্ডারটি পশ্চিমের দিকে অগ্রসর হয়ে তার মধ্যরাতে ভারতে পৌঁছে যা অকল্যান্ডের মধ্যরাতের বেশ কয়েক ঘন্টা পরে ঘটেছিল। অনেক পরে এখনও প্যারিস এফআর মধ্যে মধ্যরাত, এবং এখনও মন্ট্রিয়েল সিএ মধ্যে মধ্যরাত। বিভিন্ন মুহুর্তে সান্তার দ্বারা এই সমস্ত দর্শনগুলি সময় হ'ল , তবুও সমস্ত স্থানীয় অঞ্চলের নিজস্ব মধ্যরাতে প্রতি মধ্যরাতের পরেই ঘটেছিল।

সুতরাং 2016-12-25 00:00:00ক্রিসমাসের শুরু হিসাবে কোনও সময় অঞ্চল ছাড়াই রেকর্ডিং তথ্যমূলক এবং বৈধ, তবে কেবল অস্পষ্ট। আপনি "অকল্যান্ডে ক্রিসমাস" বা "মন্ট্রিয়ালের ক্রিসমাস" না বলা পর্যন্ত আমাদের সময় মতো একটি নির্দিষ্ট মুহূর্ত থাকে না। আপনি যদি প্রতি মুহুর্তে নিলটিকে স্পর্শ করে আসল মুহুর্তটি রেকর্ড করছেন তবে আপনি টাইপের TIMESTAMP WITH TIME ZONEপরিবর্তে ব্যবহার করবেন WITHOUT

ক্রিসমাসের অনুরূপ নতুন বছরের প্রাক্কালে। যখন টাইমস স্কোয়ার বল নিউ ইয়র্কে ড্রপ , সিয়াটেল মানুষের এখনও তাদের শ্যাম্পেন হিম এবং তাদের প্রস্তুত করছি পার্টি শিং । তবুও আমরা নতুন বছরের মুহুর্তের ধারণাটি2017-01-01 00:00:00 একটি হিসাবে রেকর্ড করব TIMESTAMP WITHOUT TIME ZONE। বিপরীতে, আমরা যদি নিউইয়র্কে বলটি নামার সময় রেকর্ড করতে চাই বা সিয়াটেলের লোকেরা যখন শিং ফুঁকিয়েছিল, আমরা পরিবর্তে এই তিনটি ঘন্টা বাদে এই প্রকৃত মুহূর্তগুলি রেকর্ড TIMESTAMP WITH TIME ZONEকরতে ব্যবহার করব (না WITHOUT) would

প্র: কারখানার শিফট

অন্য উদাহরণ হতে পারে এমন নীতি রেকর্ড করা যা বিভিন্ন স্থান জুড়ে দেয়াল-ঘড়ির সময় জড়িত । বলুন আমাদের ডেট্রয়েট, ড্যাসেল্ডার্ফ এবং দিল্লিতে কারখানা রয়েছে। যদি আমরা বলি যে তিনটি কারখানায় প্রথম শিফটটি সকাল সাড়ে এগারোটায় মধ্যাহ্নভোজনের বিরতিতে সকাল AM টায় শুরু হয়, এটি একটি হিসাবে রেকর্ড করা যেতে পারে TIMESTAMP WITHOUT TIME ZONE। আবার, এই তথ্যটি অস্পষ্ট উপায়ে কার্যকর তবে আমরা সময় অঞ্চল প্রয়োগ না করা অবধি নির্দিষ্ট সময় নির্দিষ্ট করে না indicate একটি নতুন দিন পূর্ব দিকে খুব ভোরে উদয় হয়। সুতরাং দিল্লি কারখানাটি সকাল 6 টায় প্রথম খোলা হবে। ঘন্টাখানেক পরে ড্যাসেল্ডর্ফ কারখানাটি সকাল 6 টা থেকে কাজ শুরু করে। কিন্তু ডেট্রয়েট কারখানাটি যখন অন্য 6 টা ঘটবে তখন আর ছয় ঘন্টা পরে খোলা থাকে না।

এই ধারণাটির সাথে (যখন কারখানার শিফটটি সাধারণত শুরু হয়) এর historicalতিহাসিক সত্যের সাথে প্রতিটি কারখানার কর্মী কখন নির্দিষ্ট সময় তাদের শিফ্টটি শুরু করতে ক্লক-ইন করেছিলেন to ক্লক-ইন একটি আসল মুহূর্ত, সময়রেখার একটি আসল পয়েন্ট is সুতরাং আমরা রেকর্ড করব টাইপ TIMESTAMP WITH TIME ZONEপরিবর্তে একটি কলামে WITHOUTটাইপ।

সুতরাং, হ্যাঁ, এখানে বৈধ ব্যবহারের ক্ষেত্রে রয়েছে TIMESTAMP WITHOUT TIME ZONE। তবে ব্যবসায়িক অ্যাপ্লিকেশনগুলির সাথে আমার অভিজ্ঞতায় এগুলি তুলনামূলকভাবে বিরল। ব্যবসায়, আমরা প্রকৃত মুহুর্তগুলি সম্পর্কে যত্নবান হয়ে থাকি: চালানটি আসলে কখন আসে, কখন সেই চুক্তিটি কার্যকর হয়, সেই মুহুর্তে transaction ব্যাংকের লেনদেন কার্যকর হয়েছিল। সুতরাং যেমন সাধারণ পরিস্থিতিতে, আমরা TIMESTAMP WITH TIME ZONEটাইপ চাই ।

আরও আলোচনার জন্য, অনুরূপ প্রশ্নের আমার উত্তরটি দেখুন , আমি কি ইউটিসি টাইমস্ট্যাম্পগুলি বা শিফটের জন্য লোকালটাইম সংরক্ষণ করব

Postgres

নোট করুন যে টাইমস্ট্যাম্প সন্নিবেশ করার সময় পোস্টগ্রাস নির্দিষ্টভাবে নির্দিষ্ট সময় অঞ্চল তথ্য কখনই সংরক্ষণ করে না

  • TIMESTAMP WITH TIME ZONE
    • ইনপুট ডেটা সহ অন্তর্ভুক্ত যে কোনও নির্দিষ্ট সময় অঞ্চল বা অফসেটটি ইউটিসিতে মানটি সামঞ্জস্য করতে এবং সঞ্চিত ব্যবহৃত হয়। উত্তীর্ণ অঞ্চল / অফসেট তথ্যটি পরে বাতিল করা হয়। TIMESTAMP WITH TIME ZONEযেমন ভাবেন TIMESTAMP WITH RESPECT FOR TIME ZONE
    • ভারতে এই বছরের March ই মার্চ দুপুর বারোটার ইনপুটটি সাড়ে পাঁচ ঘণ্টা: সাড়ে AM টা থেকে বিয়োগ করে তার সময়সীমাটি ইউটিসির সাথে সামঞ্জস্য করবে।
  • TIMESTAMP WITHOUT TIME ZONE
    • ইনপুট ডেটার সাথে অন্তর্ভুক্ত কোনও নির্দিষ্ট সময় অঞ্চল বা অফসেট সম্পূর্ণ উপেক্ষা করা হবে।
    • ভারতে এই বছরের March ই মার্চ দুপুর বারোটার ইনপুট কোনও সামঞ্জস্য ছাড়াই এই বছরের March ই মার্চ রাত ১২ টা হিসাবে রেকর্ড করা হয়েছে।

এসকিউএল স্ট্যান্ডার্ডটি সবেমাত্র তারিখের সময়ের ডেটা ধরণের এবং আচরণের বিষয়গুলিকে স্পর্শ করে। সুতরাং তারিখ-সময় পরিচালনার ক্ষেত্রে ডেটাবেস ব্যাপকভাবে পরিবর্তিত হয়


কারখানার শিফট (বা হাসপাতাল) শিফটে, ডিএসটি পরিবর্তনের দিন যে কেউ কবরস্থান শিফটে কাজ করবেন তার
সময়কালীন

আমি মনে করি শেষ উদাহরণে একটি টাইপো রয়েছে: 'March ই মার্চ দুপুর ১২:০০ এর একটি ইনপুট ..' 12 : 00 ' হিসাবে রেকর্ড করা উচিত (না 21:00)
টিএমট্রন

11

আমি এটিতে একটি অন্য দৃষ্টিভঙ্গি যুক্ত করতে চাই যা অন্যান্য উত্তরে যা লেখা হয়েছে তার বিপরীতে। আমার মতে timestamp with time zoneখুব কম বৈধ ব্যবহারের কেস রয়েছে এবং timestamp without time zoneসাধারণভাবে এটি পছন্দ করা উচিত।

প্রথমত, আপনাকে অবশ্যই "ইউটিসি সর্বত্র" প্যাটার্নটি বুঝতে হবে যা সাধারণত সমস্ত অ্যাপ্লিকেশনগুলির জন্য সুপারিশ করা হয় যার খুব বিশেষ প্রয়োজনীয়তা নেই। এর সহজ অর্থ হল যে আপনার অ্যাপ্লিকেশনটির ইউটিসি-তে, সর্বত্র, সর্বকালের সমস্ত টাইমস্ট্যাম্পের প্রতিনিধিত্ব করা উচিত। অবশ্যই, আপনি স্থানীয় তারিখ / সময় ব্যবহারকারীদের প্রদর্শিত হবে, কিন্তু ধারণাটি রেন্ডার করার সময়, আপনার প্রোগ্রামের একেবারে প্রান্তে এগুলি রূপান্তর করা to এটি ইউটিসি টাইমস্ট্যাম্প (যা আপনি কোনও ডাটাবেস থেকে লোড করেছেন) এবং ব্যবহারকারীর টাইমজোন (যা ব্রাউজার থেকে এসেছে) একটি স্থানীয় টাইমস্ট্যাম্পের সাথে একত্রিত করার সঠিক স্থান।

আপনি যদি এই প্যাটার্নটি অনুসরণ করেন তবে timestamp with time zoneতা একটি অ্যান্টি-প্যাটার্ন। আপনার পোস্টগ্র্রেএসকিউএল TimeZoneসেশন ভেরিয়েবলের উপর ভিত্তি করে টাইমস্ট্যাম্পগুলি পড়ার সময় এবং লেখার সময় পোস্টগ্রাইএসকিউএল টাইমজোন রূপান্তর সম্পাদন করা এই ধরণের সমস্ত ধরণের কাজ । আপনার অ্যাপ্লিকেশনটির একেবারে প্রান্তে সময় অঞ্চলগুলি ব্যবহার করার পরিবর্তে, আপনি এটিকে আপনার ডাটাবেসের সাথে যোগাযোগের জন্য এটির হৃদয়স্থলে প্রবর্তন করেছেন। TimeZoneব্যর্থতা এবং বিভ্রান্তির আরেকটি অপ্রয়োজনীয় বিন্দু যুক্ত করে আপনার অবশ্যই পোস্টগ্রিসএসকিউএল সর্বদা সঠিকভাবে কনফিগার করার জন্য যত্নবান হতে হবে।

এবং কি জন্য? আপনি যদি ইউটিসি সর্বত্র প্যাটার্ন অনুসরণ করেন তবে আপনার অ্যাপ্লিকেশনটিতে যেভাবেই কেবল ইউটিসি টাইমস্ট্যাম্প রয়েছে; সুতরাং আপনার ডাটাবেসগুলিতে কেন তাদের জন্য সময় অঞ্চল রূপান্তর করতে বলুন? আপনি কেবল তাদেরকে সঞ্চয় করতে পারে timestamp without time zoneকলাম, এবং এটি বিবেচনা এটা সবসময় ইউটিসি মত। কোনও রূপান্তর নেই, টাইমজোন নেই, জটিলতা নেই।


2
আমি মনে করি যে টাইমস্ট্যাম্পটজের প্রবক্তারা "ইউটিসি সর্বত্র" প্যাটার্নকে সমর্থন করে। এটি কেবলমাত্র প্রয়োগটি প্রয়োগ করতে অ্যাপ / এপিআই বিকাশকারীদের উপর নির্ভর করার পরিবর্তে ডাটাবেস পর্যায়ে প্রয়োগ করা যায়? আপনি যদি এই অনুশীলনটি প্রয়োগ করতে সক্ষম হন তবে কেন নয়? এছাড়াও, আপনি কেবল প্রয়োগ করতে পারেন যে সমস্ত পোস্টগ্রিজ সংযোগগুলি তাদের সময় অঞ্চলকে ইউটিসিতে সেট করে। এমনকি যদি তা না করে তবে আইএসও ফর্ম্যাটটিতে টিজেট অফসেট থাকবে। সুতরাং ইউটিসি হিসাবে একই জিনিস সর্বত্র কিন্তু প্রয়োগ করা হয়নি?
Iamnat

3
প্রথমত, যদি আপনার পোস্টগ্রিএসকিউএল টাইমজোনটি ইউটিসি এবং আপনি টাইমস্ট্যাম্পজ ব্যবহার করে অন্য কিছুতে সেট করে থাকেন তবে আপনার প্রোগ্রামটি ইউটিসি-র নন টাইমস্ট্যাম্পগুলি পড়ছে। এটি কেবল "সর্বত্র ইউটিসি" প্যাটার্ন নয় এবং আপনার ক্লায়েন্টের ভাষার উপর নির্ভর করে প্রচুর জটিলতা তৈরি করতে পারে বা নাও পারে। উভয় ক্ষেত্রেই তুমি ইউটিসি সর্বত্র, অথবা আপনি স্থানীয় টাইমস্ট্যাম্প ব্যবহার করছেন ....
Shay Rojansky

দ্বিতীয়ত, আপনি যদি নিজের অ্যাপ্লিকেশনের সর্বত্র ইউটিসি হন তবে আপনার টাইমস্ট্যাম্পগুলির জন্য আইএসও ফর্ম্যাটে প্রেরণ করার জন্য কোনও জেড টি অফসেট নেই। সুনির্দিষ্ট ভাষাগুলিতে পৃথক হতে চলেছে, তবে আপনি আদর্শভাবে এমন একটি ক্লায়েন্ট টাইপ ব্যবহার করা উচিত যা কোনও ইউটিসি টাইমস্ট্যাম্প (উদাহরণস্বরূপ Instanceনোডাটাইম / জোডাটাইম কোনও) উপস্থাপনে অক্ষম । আপনি মূলত এমন পরিস্থিতি বর্ণনা করছেন যেখানে "ইউটিসি সর্বত্র" প্রায় অনুসরণ করা হয়েছে, বা কিন্ডা অনুসরণ করা হয়েছে ...
শাই রোজনস্কি

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

1
এটি পারে, তবে তারপরে এটি ব্যবহারে আরও কম বুদ্ধি হবে timestamptz। এই ধরণের পুরো বিষয়টি হ'ল পোস্টগ্রিএসকিউএল-তে লেখা এবং লিখিতভাবে মান হিসাবে টাইমজোন রূপান্তর সম্পাদন করা (ডাটাবেসে অভ্যন্তরীণভাবে টাইমস্ট্যাম্পটি সর্বদা ইউটিসি হিসাবে সংরক্ষণ করা হয়)। সর্বদা সেশন সময় অঞ্চলটি ইউটিসিতে সেট করা কার্যকরভাবে সেই রূপান্তরগুলি অক্ষম করে, তবে কেন মোটেই ব্যবহার করবেন timestamptz? আরেকটি উপায় রাখুন, যদি ডাটাবেসের মানগুলি ইউটিসি হয় এবং ডাটাবেসটির ভিতরে এবং বাইরে আসা মানগুলি সর্বদা ইউটিসি হয়, তবে আপনার ডাটাবেসে সময় অঞ্চল সচেতনতা কেন?
শাই রোজনস্কি

2

dateটাইমস্ট্যাম্প এছাড়াও সময় অঞ্চল তথ্য অন্তর্ভুক্ত নেই, এখনো মানুষ অনেক এটি ব্যবহার।

অবশ্যই, এটি নিজের কোনও উত্তর নয়।

এটি ব্যবহারের জন্য বৈধ timestampএবং যে dateকোনও টাইমস্ট্যাম্প এবং তারিখের জন্য যা সর্বদা একই টাইমজোনে থাকে বা কিছু পরিচিত টাইমজোনের তুলনায় সঞ্চিত থাকে।

যদি টাইমজোনটি সর্বদা একই বা অন্তর্নিহিত থাকে তবে এটি সংরক্ষণ না করার চেয়ে এন্টিপ্যাটার্ন বেশি সংরক্ষণ করা (অপ্রয়োজনীয় তথ্য)।

টাইমস্ট্যাম্পগুলি প্রযুক্তিগত তথ্য সংরক্ষণের জন্য যেমন অ্যাপ্লিকেশন লগে ব্যবহৃত হয় বা পারফরম্যান্স পরিমাপের জন্যও ব্যবহৃত হতে পারে। এই ক্ষেত্রে, সময় অঞ্চলটিও গুরুত্বহীন হতে পারে।


বিপরীতে, আপনি যদি কোনও বিতরণকারী সিস্টেম বা অন্য যে কোনও সিস্টেমে যেখানে সিস্টেমের অংশগুলি বিভিন্ন সময় অঞ্চল জুড়ে বিতরণ করা হয় সেগুলি ডিজাইন বা কাজ করে থাকেন তবে এটি ব্যবহার না করার জন্য এটি একটি বিরোধী নিদর্শন হিসাবে বিবেচিত হতে পারে timestamp with timezone, যদিও কিছু সিস্টেম চালানোর জন্য ডিজাইন করা হতে পারে এক সময় অঞ্চলে যেমন ইউটিসি। এক্ষেত্রে টাইমজোন যুক্তি প্রয়োগের স্তরে চাপ দেওয়া হতে পারে - তবে আমি এটিকে একটি অ্যান্টি-প্যাটার্ন হিসাবে বিবেচনা করব, হ্যাঁ।


আমি বুঝতে পারি যে নির্দিষ্ট ক্ষেত্রে এটি ব্যবহারে ক্ষতি করে না timestamp without timezone, তবে এটি কি কখনও আমাকে কিছু কিনে দেয়? অন্যথায়, timestamp with timezone dataটাইপটি সর্বদা সমান বা বেশি উপযুক্ত হলে আমি কেন বিরক্ত হব ?
মার্কাস জুনিয়াস ব্রুটাস

অপ্রয়োজনীয় তথ্য সংরক্ষণ না করা আমার মূল যুক্তি হবে। আমি মনে করি তারিখের গাণিতিকটি timestamp without timezoneদ্রুততর হবে, তবে এটি সম্ভবত তখনই গুরুত্বপূর্ণ যখন আপনি কয়েক বিলিয়ন সারি প্রক্রিয়াকরণ করছেন ...
কলিন 'হার্ট

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

2

আপনার অ্যাপ্লিকেশনটি একক সময় অঞ্চলে সীমাবদ্ধ থাকলে স্থানীয় সময়গুলিতে তারিখগুলি / সময়গুলি সংরক্ষণ এবং প্রক্রিয়া করার জন্য লোভনীয় মনে হতে পারে তবে আমি বিশ্বাস করি এটি একটি ভুল be

দিবালোকের সঞ্চয় সঞ্চয় সময় থেকে স্ট্যান্ডার্ড সময়ে স্যুইচ করার সময় স্থানীয় সময় এক ঘন্টা পুনরাবৃত্তি হয় (পার্থক্যটি এক ঘন্টা ধরে ধরে)। যেখানে আমি থাকি এটি সাধারণত সকাল 2 টার দিকে ঘটে তাই স্থানীয় সময় 01:58, 01:59, 01:00 সময় চলে এবং কেবল পুনরাবৃত্ত ঘন্টা শেষে 02:00 এ অগ্রসর হয়।

যদি আপনি স্থানীয় সময় ব্যবহার করে ইভেন্টগুলি অর্ডার করার চেষ্টা করেন যার অর্থ দুটি পৃথক ঘন্টা থেকে ঘটনাগুলি একত্রে মিশ্রিত হয় এবং সেগুলি বাস্তবে ঘটেছিল এমন ক্রমে উপস্থিত না হন।

তুলনা করে ইউটিসির এই সমস্যা নেই এবং পরিষ্কারভাবে আদেশ দিন। সুতরাং, এমনকি কেবলমাত্র একটি টাইম জোনের সাথে কাজ করার পরেও আপনি চান যে ডিবি ইউটিসি-তে সংরক্ষণের সময় এবং প্রক্রিয়া করুক এবং ইনপুট / প্রদর্শনের জন্য স্থানীয় সময় থেকে / রূপান্তর করুক। টাইম জোনের সাথে টাইমস্ট্যাম্পের আচরণ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.