ডেটাওয়ারহাউজ ডিজাইন: সংযুক্ত তারিখের সময় মাত্রা বনাম পৃথক দিন এবং সময়ের মাত্রা এবং সময় অঞ্চল ones


10

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

কিমবল টেবিলটিকে খুব বড় হওয়া থেকে রোধ করতে দিনের মাত্রা থেকে আলাদা দিনের মাত্রা রাখার পরামর্শ দেয় (ডেটা ওয়্যারহাউস টুলকিট পৃষ্ঠা ২৪০) যা সূক্ষ্ম মনে হলেও এর অর্থ হ'ল প্রতিটি টাইম জোনের জন্য আমাদের ফ্যাক্ট টেবিলগুলিতে দুটি কী রয়েছে আমাদের সমর্থন করতে হবে (একটি তারিখের জন্য এবং একটি দিনের সময়ের জন্য)।

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

আমরা যদি 15 মিনিটের শস্যটি করি তবে আমাদের তারিখের সময় মাত্রা সারণীতে প্রতি বছর 131,400 (24 * 15 * 365) সারি থাকবে যা পারফরম্যান্সের জন্য খুব ভয়াবহ শোনায় না তবে আমরা কিছু পরীক্ষা না করা পর্যন্ত আমরা নিশ্চিতভাবে জানতে পারব না প্রোটোটাইপ ক্যোয়ারী ফ্যাক্ট টেবিলে আলাদা টাইম জোনের কী থাকার সাথে অন্য উদ্বেগটি হ'ল ক্যোরিয়াকে পছন্দসই টাইমজোনের ভিত্তিতে ভিন্ন কলামে ডাইমেনশন টেবিলটিতে যোগ দিতে হবে, সম্ভবত এটি এসএসএএস আপনার জন্য যত্ন নিয়েছে, আমি নিশ্চিত নই ।

কোন চিন্তা জন্য ধন্যবাদ, -ম্যাট


1
এই প্রশ্নটি স্ট্যাক ওভারফ্লোতেও রয়েছে: stackoverflow.com/questions/2507289/…
সমস্ত ব্যবসায়ের জন

উত্তর:


5

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

এছাড়াও, আপনার কেবল একটি টাইমকি থাকা উচিত। GMT / EST যে কোনও সময় সিদ্ধান্ত নিন - তারপরে এটি ফ্যাক্ট টেবিলটিতে ব্যবহার করুন। অন্য সময় অঞ্চল ভিত্তিতে যদি আপনার রিপোর্টগুলি চালনার দরকার হয় তবে এটি কেবল আপনার অ্যাপ্লিকেশন বা ক্যোয়ারিতে রূপান্তর করুন।


ঠিক আছে, এর অর্থ দাঁড়ায় যে ব্যবহারকারীরা তখন তাদের সময় অঞ্চলের উপর ভিত্তি করে ডেটাগুলি গ্রুপ করতে পারবেন না, তবে এটি সম্ভবত এমন কিছু যা আমরা নকশাটি সহজ করার জন্য ছাড়া বাঁচতে পারি।
ম্যাট Palmerlee

@ ম্যাটপালমারলি: ব্যবহারকারীরা যদি তাদের এগুলি দেয় তবে সময় অঞ্চল অনুসারে তারা দলবদ্ধ করতে পারবেন। আমি সাধারণত এটিকে Geographyটেবিলের মধ্যে অন্তর্ভুক্ত করতাম তবে কোনওটি প্রয়োগ না হলে আপনি এটিকে আপনার ফ্যাক্ট টেবিলের একটি বৈশিষ্ট্য হিসাবে যুক্ত করতে পারেন।
সমস্ত ট্রেডের জোন

5

একাধিক টাইম অঞ্চলকে সমর্থন করার জন্য এবং আমাদের যথাসম্ভব দক্ষ হতে আমরা কীভাবে আমাদের ডেটাওয়্যারহাউস বাস্তবায়নের সিদ্ধান্ত নিয়েছি তার ঠিক অনুসরণ করে: আমরা সময় অঞ্চলগুলির একটি সারণী (আইডি, নাম, ইত্যাদি ...) তৈরি করার পাশাপাশি একটি "টাইম অঞ্চলকে বেছে নিয়েছি ব্রিজ "টেবিল যা দেখতে দেখতে:

time_zone_bridge
---------------
date_key_utc
time_key_utc
timezone_id
date_key_local
time_key_local

এইভাবে আমরা আমাদের সাধারণ তারিখ এবং সময় মাত্রা টেবিলগুলি ছোট রাখতে পারি, আমাদের সমস্ত তথ্য ইউটিসির তারিখ / সময় কীগুলির সাথে লিঙ্ক করে রাখি, তারপরে যদি আমাদের আলাদা টাইম জোনের দ্বারা প্রতিবেদন / গোষ্ঠীটির প্রয়োজন হয় তবে আমাদের কেবল টাইম জোনের ব্রিজ টেবিলের মাধ্যমে যোগ দিতে হবে এবং স্থানীয় তারিখ / সময় কীগুলি তারিখ এবং সময় মাত্রা সারণীতে ফিরে যান। এসএসআইএস থেকে অনুরোধ করা সি # কোড ব্যবহার করে আমরা আমাদের টাইম জোন ব্রিজ টেবিলটি তৈরি করি কারণ এটি সরাসরি স্কেল সার্ভার থেকে টিজেড স্টাফ করার চেয়ে কম জটিল ছিল।


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

1
ব্রিজ টেবিলের জন্য আমাদের প্রাথমিক ক্লাস্টার কীটি ইউটিসি তারিখ / সময় কলাম + টাইমজোন আইডি (যদি আমি সঠিকভাবে মনে করি) হয়, যেহেতু সমস্ত ফ্যাক্ট টেবিল টাইম কীগুলি ইউটিসি তে থাকবে, আপনি ইউটিসি মাধ্যমে সেতুতে যোগদান করবেন you'll কী + টিজেড আইডি, এটিতে ক্লাস্টারড ইনডেক্স থাকা ভাল কাজ করতে পারে। যদিও আপনার প্রয়োজনের জন্য বোধগম্য তা করুন। আমি আনন্দিত যে আমার উত্তরটি কাউকে সাহায্য করেছে, আমি মনে করি এটি একটি ভাল পদ্ধতির এবং আমাদের সমস্ত পরীক্ষার থেকে, এটি এখনও যুক্তিযুক্তভাবে দ্রুত, যখন যেখানে ক্লজটির কথা আসে তখনই সাবধানতা অবলম্বন করুন: আপনি যত তাড়াতাড়ি চান তারিখের সীমাটি ছড়িয়ে দিন out আপনার প্রশ্নে সম্ভব।
ম্যাট Palmerlee

এটিতে কি কেবল পুরো তারিখ থাকে? বা যদি আপনার ফ্যাক্ট টেবিলটিতে আপনার 86000 "তারিখ / সময় কী" মান থাকে তবে সেতুর টেবিলটিতে 86000 সারি থাকবে * এন সমর্থিত সময় অঞ্চলগুলি, এবং এটি কেবল সেই এক দিনের জন্য?
অ্যারন বারট্র্যান্ড

1
সম্ভবত আপনি সঠিক টেবিলে সংজ্ঞাটি যুক্ত করতে পারেন, যাতে পাঠকরা প্রাথমিক, অনন্য সীমাবদ্ধতা দেখতে পান।
ypercubeᵀᴹ

অ্যারোনবার্ট্র্যান্ড এটিতে আপনার ডেটা ট্র্যাক করতে শস্যের উপর নির্ভর করে (বা আপনি যে গ্রানুলারিটি পছন্দ করেন) তার উপর নির্ভর করে, আমাদের ক্ষেত্রে আমাদের ফ্যাক্ট টেবিলগুলিতে কেবলমাত্র 15 মিনিটের গ্রানুলারিটির প্রয়োজন হয় তাই এটি প্রতি সময়সীমায় আমরা কেবল 4 * 24 = 96 রেকর্ড সমর্থন করতে চাই, যা সম্পূর্ণ যুক্তিসঙ্গত।
ম্যাট Palmerlee

2

আমি একটি গুদামের ধারণাটি একটি সম্মিলিত DateTimeমাত্রা ব্যবহার করে প্রত্যাখ্যান করে দেখেছি, তবে এর কারণ সম্পর্কে আমি খুব স্পষ্ট কারণ দেখিনি seen কিছুটা সরল করা, এখানে এখনই তৈরি করা ফ্যাক্ট সারণী:

Transactions
(
...
CreatedDateTimeSK         INT NOT NULL,  -- Four bytes per date...
AuthorizedDateTimeSK      INT NOT NULL,
BatchSubmittedDateTimeSK  INT NOT NULL,
BatchApprovedDateTimeSK   INT NOT NULL,
SettlementDateTimeSK      INT NOT NULL,
LocalTimeZoneSK           TINYINT NOT NULL  -- ...plus one byte for the time zone
)

DateTimeক্ষেত্র তারিখসময় টেবিলে যোগ দিন:

DateTimes
(
DateTimeSK   INT NOT NULL PRIMARY KEY,
SQLDate      DATE NOT NULL,
SQLDateTime  DATETIME2(0) NOT NULL,
Year         SMALLINT NOT NULL,
Month        TINYINT NOT NULL,
Day          TINYINT NOT NULL,
Hour         TINYINT NOT NULL,
Minute       TINYINT NOT NULL CHECK (Minute IN (0, 30)),
...
)

এটি আধঘন্টার রেজোলিউশনে, সুতরাং প্রতিদিন 48 টি রেকর্ড রয়েছে, 20 বছরে 350,400 - বেশ পরিচালনাযোগ্য।

ইভেন্টের তারিখ / সময়গুলি ইউটিসি-তে সংরক্ষণ করা হলে অনুবাদ করা হয় তবে LocalTimeZoneSKক্ষেত্র এবং একটি ব্রিজ টেবিলের সাহায্যে আমরা স্থানীয় সময় পেতে সহজেই যোগ দিতে পারি:

TimeZoneBridge
(
DateTimeSK       INT NOT NULL,
TimeZoneSK       TINYINT NOT NULL,
PRIMARY KEY (DateTimeSK, TimeZoneSK),
LocalDateTimeSK  INT NOT NULL
)

আজই লেনদেন তৈরি করার জন্য, ইউটিসির সময়:

SELECT COUNT(*)
FROM Transactions AS T
  INNER JOIN DateTimes AS CD ON T.CreatedDateTimeSK = CD.DateTimeSK
WHERE CD.SQLDate = '2014-08-22'

স্থানীয় সময়ে লেনদেনের জন্য, আজ তৈরি লেনদেনগুলি পেতে:

SELECT COUNT(*)
FROM Transactions AS T
  INNER JOIN TimeZoneBridge AS TZB ON T.CreatedDateTimeSK = TZB.DateTimeSK AND T.TimeZoneSK = TZB.TimeZoneSK
  INNER JOIN DateTimes AS CD ON TZB.LocalDateTimeSK = CD.DateTimeSK
WHERE CD.SQLDate = '2014-08-22'

আপনি TimeZoneSKকোনও REALঅফসেট (উদাহরণস্বরূপ, মার্কিন কেন্দ্রীয় দিবালোক সময়ের জন্য -5.0) প্রতিস্থাপনের মাধ্যমে জিনিসগুলিকে সরল করার জন্য প্রলুব্ধ হতে পারেন , তবে কোনও ফ্যাক্ট রেকর্ডের জন্য কিছু তারিখ / সময় যদি দিবালোক সংরক্ষণের সময় থাকে এবং কিছু না থাকে তবে এটি ভেঙে যাবে।

যদি কোনও ঘটনা রেকর্ডের ইভেন্টগুলি চালান বা বিমানের মতো বিভিন্ন টাইম জোনে ঘটতে পারে তবে প্রতিটি তারিখের জন্য আপনার জন্য একটি সময় অঞ্চল ক্ষেত্র প্রয়োজন এবং আপনি প্রতি তারিখে পাঁচ বাইট অবধি আপ করতে পারেন।


এটি একটি সৃজনশীল পদ্ধতির। তবে, আপনি যেমন বলেছিলেন যে আপনার সম্মিলিত ডেটটাইম ম্লান টেবিলটিতে আপনার কেবলমাত্র 350,400 সারি থাকবে, আপনি যদি দানাটিকে আরও ভাল রেজোলিউশনে পরিবর্তন করতে শুরু করেন, আপনি দ্রুত লক্ষ লক্ষ রেকর্ডে প্রবেশ করতে পারবেন। যদি আপনি সময় মাত্রার চেয়ে পৃথক তারিখের মাত্রা বেছে নেন তবে আপনার সময় মাত্রা সারণীতে কেবলমাত্র 48 টি সারি এবং আপনার তারিখের মাত্রা সারণীতে প্রতি বছর কেবলমাত্র 365 সারি (বা 20 বছরে 7300 সারি) থাকবে have আপনার ফ্যাক্ট টেবিলটিতে তখন কেবল তারিখ_কি এবং সময়_কির জন্য একটি কলাম রয়েছে। যদি আপনার কাছে এমন কিছু ফ্যাক্ট টেবিল থাকে যা কেবলমাত্র তারিখের গ্রানুলারিটির প্রয়োজন হয় তবে এটি এটিকে আরও নমনীয় করে তোলে।
ম্যাট Palmerlee

1
মাত্রার দশ মিলিয়ন সারি আমাকে উদ্বেগ দেয় না - ডেটা কেবল দশকে একবার পরিবর্তিত হয়, এবং পিকে এবং দুই বা তিনটি সর্বাধিক ব্যবহৃত ক্ষেত্রগুলিতে একটি আচ্ছাদন সূচকটি একটি তুচ্ছ পরিমাণ সার্ভার র‌্যাম গ্রহণ করে। তবে, SMALLINTএক বিলিয়ন-সারি ফ্যাক্ট টেবিলটিতে অর্ধ ডজন এস যুক্ত করা 12 জিবি প্লাস ওভারহেড এবং এখন আপনি আসল অর্থের কথা বলছেন। যে তারিখগুলির জন্য কেবল তারিখটি সংরক্ষণ করা দরকার, আপনি অবশ্যই তাদের অবশ্যই উপযুক্ত তারিখের জন্য "12:00 AM" রেকর্ডে নির্দেশ করতে পারেন।
সমস্ত ট্রেডের জোন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.