BigQuery এ অ্যারে - কীভাবে ক্যোয়ারী পারফরম্যান্স উন্নতি করতে হবে এবং স্টোরেজ অনুকূলিত করতে পারে

এই পোস্টের মাধ্যমে, আমি quতিহ্যবাহী ডেটা মডেলগুলির উপর বিশ্লেষণাত্মক ব্যবহারের ক্ষেত্রে বিগকোয়ারির শক্তিকে বাড়ানোর জন্য বিগকোয়ারি অ্যারে ব্যবহারের সুবিধাগুলিকে চিত্রিত করতে চাই।

গুদামগুলির জন্য ডেটা মডেল বিকল্পগুলি

সাধারণত ডেটা গুদামগুলি বিশ্লেষণাত্মক এবং প্রতিবেদনের প্রয়োজন অনুসারে ওএলএপি বৈশিষ্ট্যগুলি সহ ডিজিটাল ডেটাবেসগুলির এক্সটেনশান। একটি ডেটা মডেল দৃষ্টিকোণ থেকে, তারা এখনও অন্তর্নিহিত টেবিল কাঠামোতে আরডিবিএমএস অনুকরণ করে। পারফরম্যান্সের জন্য, টেবিলগুলিতে যোগদানের ওভারহেড হ্রাস করার জন্য গুদামে টেবিলগুলি ডি-স্বাভাবিক করা হয়। অপ্রয়োজনীয় ডেটা সংরক্ষণ করে ব্যয়ে যোগদানের ব্যয় হ্রাস করার জন্য এটি একটি প্রমাণিত সেরা অনুশীলন।

প্রেরণা

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

এই ধারণাটি চিত্রিত করার জন্য, একটি কাল্পনিক সকার স্পোর্টস স্টোরের অর্ডারিং সিস্টেমের নিম্নলিখিত তিনটি ডেটা মডেল অন্বেষণ করে বিভিন্ন ডেটা মডেলের দক্ষতা মূল্যায়ন করতে দিন।

  1. একটি নরমালাইজড ডেটা মডেল যেখানে অর্ডার এবং অর্ডার লাইন দুটি পৃথক টেবিল হিসাবে সংরক্ষণ করা হয়
  2. একটি ডি-নর্মালাইজড ডেটা মডেল যেখানে অর্ডার এবং অর্ডার লাইন একই টেবিলে সংরক্ষণ করা হয় যেখানে লাইন স্তরে আদেশের ডেটা পুনরাবৃত্তি হয়
  3. বিগকোয়ারি অ্যারেগুলিতে সুবিধাজনক একটি ডি-নর্মালাইজড ডেটা মডেল যেখানে অর্ডার এবং অর্ডার লাইন একই টেবিলে সংরক্ষণ করা হয় তবে অর্ডার ডেটা পুনরাবৃত্তি হয় না

BigQuery এ অ্যারে

অ্যারেগুলি বিগকিউরিতে মাল্টি-মান কলাম রয়েছে, যেখানে একটি অ্যারে ক্ষেত্রে একাধিক মান থাকে (একই ডেটা ধরণের)

প্রতিটি সারিতে বহুবিধ মান কলাম থাকতে পারে

অ্যারে সহ এই টেবিলের কাঠামোটি অ্যারে প্রাইসেসলিস্টের প্রতিটি মানের সাথে এর মান পুনরাবৃত্তি না করে প্রজাতি_গোষ্ঠী (স্তন্যপায়ী) এর মানের মধ্যে একটি সম্পর্ক বজায় রাখে। সুতরাং অ্যারে ব্যবহার করে ডেটা সঞ্চয় করা স্টোরেজকে হ্রাস করে (স্তন্যপায়ী প্রাণীরা 3 বারের পরিবর্তে একবারে সংরক্ষণ করা হয়)। তবে এই কাঠামোটি সাধারণত এসকিউএল স্টাইল বিশ্লেষণকে সমর্থন করে না। এই কাঠামোটিকে এসকিউএল স্টাইলের রেজাল্ট সেটে রূপান্তর করতে, UNNEST ব্যবহার করুন, যা অ্যারেটিকে প্যাক করে এবং প্রতিটি প্রজাতির তালিকাতে প্রজাতির_গোষ্ঠীর মানকে ক্রস জোনের মতো প্রতিলিপি করে।

এসকিউএল স্টাইল ফলাফল সেট, যে কোনও এসকিউএল ধরণের বিশ্লেষণ প্রয়োগের জন্য উপযুক্ত fit
দ্রষ্টব্য: একবার স্তন্যপায়ী প্রাণীর (16 বাইট) এবং সরীসৃপ (18 বাইট) সঞ্চয় করে, আমরা কেবল একটি কলামে (2 * 16 + 3 * 18 = 86) সঞ্চয় বাইট (72%) সংরক্ষণ করেছি saved একাধিক কলাম সহ টেরাবাইট স্কেল টেবিলের জন্য এটি প্রজেক্ট করুন, এটি অবিলম্বে স্টোরেজ ব্যয় সাশ্রয়ে অনুবাদ করে।

এখানে ডেটাটাইপগুলি এবং আরও অ্যারেতে স্টোরেজ আকারের গণনা করার জন্য বিগকোয়ারি স্টোরেজ মূল্য নির্ধারণ করুন

নমুনা তথ্য

অ্যারে এবং এলোমেলো সংখ্যার যাদু ব্যবহার করে, এই কোয়েরিটি প্রতি 5 সেকেন্ডের জন্য একটি অর্ডার তৈরি করে একটি অর্ডার সিস্টেমের অনুকরণ করে, আমাদের মাসে মাসে প্রায় 518K অর্ডার দেয়। এক বছর পর্যন্ত প্রসারিত, ক্যোয়ারীটি মোট 22 এম অর্ডার লাইনের সাথে 6.3 এম র্যান্ডম অর্ডার উত্পন্ন করে, তিনটি তথ্য মডেলের কর্মক্ষমতা পরীক্ষা করার জন্য পর্যাপ্ত অর্ডার ভলিউম তৈরি করে।

ডেটা সেটআপ

এই গিথুব রেপো ডাউনলোড করুন এবং সেটআপ চালান sh স্ক্রিপ্টগুলি 3 ডেটা মডেলের জন্য ডেটা পপুলেট করে।

তথ্য মডেল

সাধারণ ডেটা মডেল

অর্ডার এবং লাইনের মধ্যে সাধারণত মাস্টার বিশদ সম্পর্কিত

ডি-নরমালাইজড ডেটা মডেল

অর্ডার, গ্রাহক আইডিসহ প্রতিটি লাইনের জন্য পুনরাবৃত্তি আদেশের তারিখ সহ ডি-সাধারন মডেল

বিগকিউরি অ্যারে দিয়ে ডি-নরমালাইজড

অর্ডার এবং লাইনগুলি একই সারিতে সংরক্ষণ করা হয়েছে, তবে প্রতিটি লাইনের জন্য পুনরাবৃত্তি করা হয়নি

কর্মক্ষমতা পরীক্ষা

অনুসন্ধানের মাধ্যমে এই ডেটা মডেলগুলিকে পরীক্ষার জন্য রাখার জন্য কিছু রিপোর্টিং কোয়েরি চালানো যাক

  1. গ্রাহক দ্বারা মোট অর্ডার
  2. মাস দ্বারা অর্ডার মোট
  3. আইটেম দ্বারা মোট অর্ডার

এখানে প্রতিটি ক্যোয়ারির জন্য নেওয়া কী কী মেট্রিকগুলির তুলনা করা হয়েছে

ডি-নরমালাইজড মডেলগুলি বিকিউ অ্যারে মডেলগুলি সর্বনিম্ন বাইটগুলি প্রসেস করে এবং সময় গ্রহণ করে সেগুলি সহ সমস্ত মেট্রিকের উপর আরও ভাল পারফরম্যান্স করেছে

ডাটা মডেল দ্বারা টেবিলগুলির আকারের তুলনা করা

মেট্রিকসের ক্যোয়ারী

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

পর্যবেক্ষণ

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

প্রস্তাবনা

ডেটা মডেলগুলি সংজ্ঞায়িত করার সময় অনুকূল পারফরম্যান্সের জন্য নিম্নলিখিতগুলি বিবেচনা করুন

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

এই ছোট ডিজাইনের সময় সিদ্ধান্তগুলি সঞ্চয়ী হিসাবে অতিরিক্ত যোগ করতে পারে কারণ প্রতিটি অতিরিক্ত বাইট প্রতিবার এটি পুনরুদ্ধার ও প্রক্রিয়াজাতকরণের সময় স্টোরেজ ব্যয় এবং কোয়েরি ব্যয়কে যুক্ত করে।

আরও পড়া / অনুশীলন

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