নেটিভ মোডে ফায়ারস্টোর দুই ধরনের অপারেশন নিয়ে গঠিত — ফায়ারস্টোর কোর অপারেশন এবং ফায়ারস্টোর পাইপলাইন অপারেশন।
ফায়ারস্টোর কোর অপারেশনগুলো স্ট্যান্ডার্ড ডকুমেন্ট ক্রিয়েট, রিড, আপডেট এবং ডিলিট (CRUD) কার্যকারিতার পাশাপাশি রিয়েল-টাইম লিসেন কোয়েরি এবং অফলাইন পার্সিস্টেন্সের জন্য বিল্ট-ইন সাপোর্ট প্রদান করে। এই সংস্করণে একটি স্বতন্ত্র অপারেশনাল পার্থক্য হলো, ইনডেক্সগুলো ঐচ্ছিক এবং একক ফিল্ডের জন্য স্বয়ংক্রিয়ভাবে তৈরি হয় না। যদিও এটি আগে থেকে ইনডেক্স কনফিগারেশন ছাড়াই কোয়েরি চালানোর সুযোগ দেয়, ইনডেক্সবিহীন কোয়েরিগুলো ডিফল্টভাবে পুরো কালেকশনটি স্ক্যান করবে। ডেটাসেট বড় হওয়ার সাথে সাথে এটি ল্যাটেন্সি এবং খরচ বাড়িয়ে দিতে পারে।
ফায়ারস্টোর পাইপলাইন অপারেশনস হলো ফায়ারস্টোর এন্টারপ্রাইজ এডিশনের একটি প্রধান বৈশিষ্ট্য, যা একটি উন্নত কোয়েরি ইঞ্জিনের উপর ভিত্তি করে তৈরি এবং সম্ভাব্য কোয়েরির পরিসরকে উল্লেখযোগ্যভাবে প্রসারিত করে। পাইপলাইন অপারেশনস একটি নমনীয় কোয়েরি সিনট্যাক্স এবং একটি স্বতন্ত্র ইনডেক্সিং পদ্ধতি ব্যবহার করে, যেখানে ইনডেক্সগুলো ঐচ্ছিক এবং স্বয়ংক্রিয়ভাবে তৈরি হয় না, যা অ্যাপ্লিকেশনগুলোর জন্য উন্নত ডেটা পুনরুদ্ধার কার্যক্রম সক্ষম করে।
ফায়ারস্টোর কোর অপারেশনের বৈশিষ্ট্যসমূহ
কোর অপারেশনগুলো সাধারণ CRUD অপারেশন এবং রিয়েল-টাইম লিসেন কোয়েরির সুযোগ দেয়। তবে, এন্টারপ্রাইজ সংস্করণে এই অপারেশনগুলো ব্যবহার করার সময়, স্ট্যান্ডার্ড সংস্করণের তুলনায় ইনডেক্সিং এবং বিলিং সংক্রান্ত অন্তর্নিহিত আচরণে উল্লেখযোগ্য পরিবর্তন আসে।
কার্যকারিতা এবং ধারাবাহিকতা
কোর অপারেশনগুলোতে স্ট্যান্ডার্ড সংস্করণে ব্যবহৃত পরিচিত মেথড-চেইনিং সিনট্যাক্স (যেমন, .where() , .orderBy() ) বজায় রাখা হয়েছে। এই অপারেশনগুলো মোবাইল এবং ওয়েব ক্লায়েন্টদের জন্য রিয়েল-টাইম লিসেন কোয়েরি এবং অফলাইন পার্সিস্টেন্স সমর্থন করে। সাধারণ ট্রানজ্যাকশনাল ওয়ার্কলোড, সাধারণ লুকআপ এবং বিদ্যমান অ্যাপ্লিকেশন কোড মাইগ্রেশনের জন্য এই অপারেশনগুলো ব্যবহার করার পরামর্শ দেওয়া হয়।
কাস্টম ইনডেক্সিং
স্ট্যান্ডার্ড সংস্করণের বিপরীতে, এন্টারপ্রাইজ সংস্করণের কোর অপারেশন স্বয়ংক্রিয়ভাবে একক-ফিল্ড ইনডেক্স তৈরি করে না। ইনডেক্স ঐচ্ছিক এবং একটি কোয়েরি চালানোর জন্য এটি আবশ্যক নয়। যদি কোনো নির্দিষ্ট ইনডেক্স অনুপস্থিত থাকে, তবে কোয়েরিটি একটি সম্পূর্ণ কালেকশন স্ক্যান করে। যদিও ইনডেক্সবিহীন কোয়েরি দ্রুত প্রোটোটাইপিংয়ের সুযোগ দেয়, ডেটাসেট বড় হওয়ার সাথে সাথে এগুলোর পারফরম্যান্স ধীর হতে পারে এবং খরচও বাড়তে পারে। কোয়েরির পারফরম্যান্স অপ্টিমাইজ করতে এবং রিড ইউনিট ব্যবহার কমাতে ডেভেলপারদের অবশ্যই ম্যানুয়ালি ইনডেক্স তৈরি করতে হবে।
বিলিং মডেল (ইউনিট-ভিত্তিক)
রিড ইউনিট প্রতি ডকুমেন্ট সংখ্যার পরিবর্তে ৪ কিলোবাইট (KB) ট্রাঞ্চে চার্জ করা হয়। একটি আনইনডেক্সড কোয়েরি যখন একটি বড় কালেকশন স্ক্যান করে, তখন এটি সমস্ত ডকুমেন্ট জুড়ে স্ক্যান করা মোট বাইটের উপর ভিত্তি করে রিড ইউনিট খরচ করে। রাইট ইউনিট ১ কিলোবাইট (KB) ট্রাঞ্চে চার্জ করা হয়। একটি ডকুমেন্ট লেখার জন্য ডেটার জন্য ইউনিট খরচ হয় এবং আপডেট করা প্রতিটি ইনডেক্স এন্ট্রির জন্য অতিরিক্ত ইউনিট খরচ হয়। স্ট্যান্ডার্ড এডিশনের মতো নয়, যেখানে স্বয়ংক্রিয়ভাবে একক-ফিল্ড ইনডেক্সিং বাধ্যতামূলক, এখন আপনি রাইট খরচ এবং পারফরম্যান্স অপ্টিমাইজ করার জন্য ইনডেক্স করার জন্য নির্দিষ্ট ফিল্ড বেছে নিতে পারেন।
ফায়ারস্টোর পাইপলাইন অপারেশনের বৈশিষ্ট্যসমূহ
পাইপলাইন অপারেশনস সহ ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণটি একটি উন্নত কোয়েরি ইঞ্জিন ব্যবহার করে, যা ফায়ারস্টোর স্ট্যান্ডার্ড সংস্করণের অনেক বিদ্যমান সীমাবদ্ধতা দূর করে। পাইপলাইন অপারেশনস শত শত অতিরিক্ত কোয়েরি বৈশিষ্ট্য প্রদান করে। পাইপলাইন অপারেশনস-এর নিম্নলিখিত সক্ষমতাগুলো রয়েছে:
পর্যায়-ভিত্তিক রচনাযোগ্য সিনট্যাক্স
পাইপলাইন কোয়েরি তৈরি করা হয় ধারাবাহিক কয়েকটি পর্যায় নির্ধারণের মাধ্যমে, যেগুলো ক্রমানুসারে সম্পাদিত হয়। এর ফলে জটিল অপারেশন করা সম্ভব হয়, যেমন কোনো অ্যাগ্রিগেশনের ফলাফলের ওপর ফিল্টারিং করা, যা আগে সম্ভব ছিল না।
নিম্নলিখিত উদাহরণটি একটি পাইপলাইন কোয়েরি দেখায় যা গত মাসে দেখা অনন্য প্রোডাক্ট আইডিগুলির সংখ্যা খুঁজে বের করে:
guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
return
}
let snapshot = try await db.pipeline()
.collection("productViews")
.where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
.aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
.execute()
সম্প্রসারিত সক্ষমতা
পাইপলাইন কোয়েরি বহুবিধ নতুন সক্ষমতা নিয়ে এসেছে, যার মধ্যে রয়েছে:
- অ্যাগ্রিগেশন: নতুন অ্যাগ্রিগেশন ফাংশন (যেমন
sum(...),min(...), এবংcount_distinct(...)) এবং যথেচ্ছ গ্রুপিং ফিল্ডের সমন্বয়ে ব্যবহারের সুবিধা। - জটিল ফিল্টারিং: যেকোনো জটিল
where(...)স্টেটমেন্ট প্রকাশের জন্য শত শত অতিরিক্ত ফাংশনের সমর্থন, যার মধ্যে রয়েছেregex_match(...),add(...)এবংstr_contains(...), এবং এগুলোর কোনোটির জন্যই কঠোর ইনডেক্সের প্রয়োজন হয় না। - আংশিক পঠন / প্রক্ষেপণ:
select(...),remove_fields(...)এবং ডকুমেন্ট ম্যানিপুলেশনের অন্যান্য বিভিন্ন ধাপ ব্যবহার করে ডকুমেন্টের ডাইনামিক সাবসেট পুনরুদ্ধার করুন।
এই সক্ষমতাগুলো সম্পর্কে আরও জানতে, পাইপলাইন অপারেশন ব্যবহার করে ডেটা কোয়েরি দেখুন।
রিয়েলটাইম এবং অফলাইন সাপোর্ট
রিয়েলটাইম এবং অফলাইন সুবিধা ব্যবহার করার জন্য, ডেভেলপাররা ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণে ফায়ারস্টোর কোর অপারেশনগুলো ব্যবহার করতে পারেন।
ক্লায়েন্ট এবং টুলিং ইন্টিগ্রেশন
এন্টারপ্রাইজ সংস্করণে পাইপলাইন কোয়েরিগুলির সাথে ইন্টারঅ্যাক্ট করতে এবং পরিচালনা করার জন্য বিশেষায়িত বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে:
- কোয়েরি ব্যাখ্যা ও প্রোফাইলিং: একটি কোয়েরি কী পরিমাণ রিড বা রাইট ইউনিট ব্যবহার করে এবং এর এক্সিকিউশন বিশ্লেষণ করতে, আপনি কোয়েরি এক্সপ্লেইন-এর ফলাফল ব্যবহার করতে পারেন।
- কোয়েরি ইনসাইটস: এন্টারপ্রাইজ এডিশন কোয়েরি ইনসাইটস সমর্থন করে, যা আপনার ডাটাবেসে চালিত শীর্ষ কোয়েরিগুলো এবং তাদের পারফরম্যান্সের বৈশিষ্ট্যগুলো সম্পর্কে স্বচ্ছ ধারণা দিয়ে পারফরম্যান্স ও খরচ উন্নত করার জন্য কোথায় ইনডেক্স তৈরি করা যেতে পারে তা নির্ধারণ করতে সাহায্য করে।
- নতুন ইনডেক্স টাইপ: আপনি এন্টারপ্রাইজ সংস্করণের জন্য বিশেষায়িত ইনডেক্স তৈরি করতে পারেন, যার মধ্যে স্পার্স, নন-স্পার্স এবং ইউনিক ইনডেক্সের মতো টাইপ অন্তর্ভুক্ত। এটি এন্টারপ্রাইজ ডেটাবেসের জন্য ভেক্টর সার্চ ইনডেক্স তৈরি এবং সম্পাদনা করাও সমর্থন করে।
ফায়ারস্টোর স্ট্যান্ডার্ড এবং ফায়ারস্টোর এন্টারপ্রাইজের মধ্যে পার্থক্য
কোর এবং পাইপলাইন অপারেশনের মধ্যে প্রধান কার্যগত পার্থক্যটি হলো ইনডেক্সিং-এর ব্যবস্থাপনা, যা সরাসরি কর্মক্ষমতা এবং খরচকে প্রভাবিত করে।
| স্ট্যান্ডার্ড সংস্করণ - মূল কার্যক্রম | এন্টারপ্রাইজ সংস্করণ - কোর এবং পাইপলাইন অপারেশন | |
| সূচীকরণের প্রয়োজনীয়তা | কোয়েরির জন্য ইনডেক্স প্রয়োজন। স্বতন্ত্র ফিল্ডের জন্য ইনডেক্স স্বয়ংক্রিয়ভাবে তৈরি হয়, অন্যদিকে আরও জটিল কোয়েরিগুলো কম্পোজিট ইনডেক্স বা কালেকশন গ্রুপ ইনডেক্সের উপর নির্ভর করে, যেগুলো ম্যানুয়ালি কনফিগার করতে হয়। | কোয়েরির জন্য ইনডেক্স আবশ্যক নয়, এবং তাই এটি ঐচ্ছিক। প্রয়োজন অনুযায়ী আপনি ইনডেক্স নির্ধারণ করতে পারেন। এন্টারপ্রাইজ সংস্করণ নন-স্পার্স/স্পার্স এবং ইউনিক ইনডেক্স সহ আরও বিস্তৃত পরিসরের ইনডেক্স টাইপ সমর্থন করে। |
| কর্মক্ষমতা | ইনডেক্সড কোয়েরি: আপনার ফলাফল সেটের আকারের সাথে এর পারফরম্যান্স এবং খরচ বৃদ্ধি পায়। | ইনডেক্সবিহীন কোয়েরি: আপনার ডেটাসেটের আকারের সাথে পারফরম্যান্স এবং খরচ বৃদ্ধি পায়। ইনডেক্সড কোয়েরি: আপনার ফলাফল সেটের আকারের সাথে এর পারফরম্যান্স এবং খরচ বৃদ্ধি পায়। আপনার কোয়েরিগুলোর পারফরম্যান্স ও খরচ উন্নত করতে এবং ইনডেক্স তৈরি করার জন্য আমরা কোয়েরি এক্সপ্লেইন (Query Explain) ও কোয়েরি ইনসাইটস (Query Insights) টুলগুলো ব্যবহার করার পরামর্শ দিই। |
| স্টোরেজ খরচের প্রভাব | স্বয়ংক্রিয় ইনডেক্স এবং কম্পোজিট ইনডেক্সের কারণে আপনার স্টোরেজ ওভারহেড হয়। | প্রতিটি ফিল্ডের জন্য স্বয়ংক্রিয়ভাবে ইনডেক্স তৈরি না হওয়ায় আপনার স্টোরেজ খরচ সাশ্রয় হয়। |
| খরচের ভিত্তিতে | প্রতিটি ডকুমেন্ট পড়া , লেখা এবং মুছে ফেলার অপারেশনের জন্য চার্জ প্রযোজ্য। | প্রতিটি রিড ইউনিট (৪কেবি ট্রাঞ্চ) এবং রাইট ইউনিট (১কেবি ট্রাঞ্চ) অনুযায়ী চার্জ প্রযোজ্য। ইনডেক্স এন্ট্রি লিখতে রাইট ইউনিট খরচ হয়। কিছু উদাহরণের মাধ্যমে নতুন মূল্য নির্ধারণ পদ্ধতি সম্পর্কে জানুন। |
| নিরাপত্তা নিয়মাবলী | নিরাপত্তা বিধিগুলি পঠন/লিখন অনুমতি যাচাই করার মাধ্যমে সংগ্রহগুলিকে সুরক্ষিত রাখে। | নিরাপত্তা বিধিগুলি পঠন/লিখন অনুমতি যাচাই করার মাধ্যমে ডেটা সংগ্রহকে সুরক্ষিত রাখে। ডেটা মডেল গাইড থেকে জানুন, কীভাবে পাইপলাইন কোয়েরি সমর্থন করার জন্য আপনার ডেটা মডেল করতে হয়। |