নেটিভ মোডে Firestore-এ দুই সেট অপারেশন থাকে - Firestore Core অপারেশন এবং Firestore Pipeline অপারেশন।
Firestore Core অপারেশন স্ট্যান্ডার্ড ডকুমেন্ট তৈরি, পড়া, আপডেট করা এবং মুছে ফেলার (CRUD) কার্যকারিতা প্রদান করে, সাথে রিয়েল-টাইম লিসেন কোয়েরি এবং অফলাইন পারসিস্টেন্সের জন্য বিল্ট-ইন সহায়তা প্রদান করে। এই সংস্করণে একটি স্বতন্ত্র অপারেশনাল পার্থক্য হল যে ইনডেক্সগুলি ঐচ্ছিক এবং একক ফিল্ডের জন্য অটোমেটিক তৈরি হয় না। এটি আগাম ইন্ডেক্স কনফিগারেশন ছাড়াই কোয়েরি এক্সিকিউট করার অনুমতি দেয়, ইন্ডেক্স না করা কোয়েরি ডিফল্ট হিসেবে সম্পূর্ণ কালেকশন স্ক্যান করবে। ডেটাসেট বাড়ার সাথে সাথে এটি লেটেন্সি এবং খরচ বাড়াতে পারে।
Firestore Pipeline অপারেশন হল Firestore Enterprise এডিশনের একটি কেন্দ্রীয় ফিচার, যা সম্ভাব্য কোয়েরির রেঞ্জ উল্লেখযোগ্যভাবে বাড়ানোর জন্য একটি উন্নত কোয়েরি ইঞ্জিনে তৈরি করা হয়েছে। পাইপলাইন অপারেশনগুলি একটি নমনীয় কোয়েরি সিনট্যাক্স এবং একটি স্বতন্ত্র ইন্ডেক্সিং পদ্ধতি ব্যবহার করে যেখানে ইন্ডেক্সগুলি ঐচ্ছিক এবং স্বয়ংক্রিয়ভাবে তৈরি হয় না, যা অ্যাপ্লিকেশনের জন্য উন্নত ডেটা পুনরুদ্ধার অপারেশন সক্ষম করে।
Firestore Core অপারেশনের ফিচার
কোর অপারেশন স্ট্যান্ডার্ড CRUD অপারেশন এবং রিয়েল-টাইম লিসেন কোয়েরির অনুমতি দেয়। তবে, Enterprise সংস্করণে এইসব অপারেশন ব্যবহার করার সময়, ইন্ডেক্সিং ও বিলিং সংক্রান্ত অন্তর্নিহিত আচরণ Standard সংস্করণের তুলনায় উল্লেখযোগ্যভাবে পরিবর্তিত হয়।
কার্যকারিতা এবং ধারাবাহিকতা
কোর অপারেশনগুলি স্ট্যান্ডার্ড সংস্করণে ব্যবহৃত পরিচিত মেথড-চেনিং সিনট্যাক্স (যেমন, .where(), .orderBy()) বজায় রাখে। এইসব
অপারেশন রিয়েল-টাইম লিসেন কোয়েরি এবং মোবাইল ও ওয়েব ক্লায়েন্টের জন্য অফলাইন পারসিস্টেন্স
সাপোর্ট করে। স্ট্যান্ডার্ড ট্রানজ্যাকশন সংক্রান্ত ওয়ার্কলোড, সহজ লুকআপ ও আগে থেকে থাকা অ্যাপ্লিকেশন কোড মাইগ্রেশনের জন্য
এইসব অপারেশন ব্যবহার করার সাজেশন দেওয়া হয়।
কাস্টম ইন্ডেক্সিং
Standard সংস্করণের মতো, Enterprise সংস্করণে Core অপারেশন অটোমেটিক সিঙ্গল-ফিল্ড ইন্ডেক্স তৈরি করে না। ইনডেক্স ঐচ্ছিক এবং কোয়েরি এক্সিকিউট করার জন্য প্রয়োজন নেই। কোনও নির্দিষ্ট ইন্ডেক্স না থাকলে, কোয়েরি সম্পূর্ণ কালেকশন স্ক্যান করে। ইনডেক্স না করা কোয়েরি দ্রুত প্রোটোটাইপিংয়ের সুবিধা দিলেও, ডেটাসেট বড় হওয়ার সাথে সাথে এগুলি ধীর গতিতে কাজ করতে পারে এবং খরচও বেশি হতে পারে। কোয়েরি পারফর্ম্যান্স অপ্টিমাইজ করতে এবং রিড ইউনিট ব্যবহার কমাতে ডেভেলপারদের ম্যানুয়ালি ইনডেক্স তৈরি করতে হবে।
বিলিং মডেল (ইউনিট-ভিত্তিক)
প্রতিটি ডকুমেন্ট গণনা করার পরিবর্তে ৪ কেবি ট্রাঞ্চে রিড ইউনিট চার্জ করা হয়। একটি ইনডেক্স না করা কোয়েরি যা একটি বড় সংগ্রহ স্ক্যান করে, সেটি সমস্ত ডকুমেন্ট জুড়ে স্ক্যান করা মোট বাইটের উপর ভিত্তি করে রিড ইউনিট ব্যবহার করবে। রাইট ইউনিটের জন্য ১কেবি ট্রাঞ্চে চার্জ করা হয়। কোনও ডকুমেন্ট লেখার সময় ডেটার জন্য ইউনিট এবং আপডেট করা প্রতিটি ইন্ডেক্স এন্ট্রির জন্য অতিরিক্ত ইউনিট খরচ হয়। স্ট্যান্ডার্ড এডিশনের মতো নয়, যা অটোমেটিক সিঙ্গেল-ফিল্ড ইন্ডেক্সিং এনফোর্স করে, আপনি এখন লেখার খরচ ও পারফর্ম্যান্স অপ্টিমাইজ করতে ইন্ডেক্স করার জন্য নির্দিষ্ট ফিল্ড বেছে নিতে পারবেন।
Firestore Pipeline অপারেশনের ফিচার
পাইপলাইন অপারেশন সহ Firestore Enterprise এডিশন একটি উন্নত কোয়েরি ইঞ্জিন ব্যবহার করে যা Firestore Standard এডিশনের অনেক বিদ্যমান সীমাবদ্ধতা দূর করে। পাইপলাইন অপারেশন শত শত অতিরিক্ত কোয়েরি ফিচার প্রদান করে। পাইপলাইন অপারেশনের নিম্নলিখিত ক্ষমতা আছে:
স্টেজ-ভিত্তিক কম্পোজেবল সিনট্যাক্স
পাইপলাইন কোয়েরি তৈরি করা হয় একাধিক সিকোয়েন্সিয়াল স্টেজের সিরিজ সংজ্ঞায়িত করার মাধ্যমে, যেগুলি ক্রমানুসারে এক্সিকিউট করা হয়। এটি জটিল অপারেশন করার সুবিধা দেয়, যেমন, অ্যাগ্রিগেশনের ফলাফলে ফিল্টার করা, যা আগে সম্ভব ছিল না।
নিম্নলিখিত উদাহরণে একটি পাইপলাইন কোয়েরি দেখানো হয়েছে যা গত মাসে দেখা অনন্য প্রোডাক্ট আইডির সংখ্যা খুঁজে বের করে:
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(...)) জন্য সহায়তা যা ইচ্ছামতো গ্রুপিং ফিল্ডের সাথে যুক্ত। - রিলেশনাল জয়েন: সম্পর্কিত সাবকোয়েরি ব্যবহার করে কালেকশন ও সাবকালেকশন জুড়ে সার্ভার-সাইড জয়েন পারফর্ম করুন।
- জটিল ফিল্টারিং:
regex_match(...),add(...)এবংstr_contains(...)সহ যথেচ্ছভাবে জটিলwhere(...)স্টেটমেন্ট প্রকাশ করার জন্য শত শত অতিরিক্ত ফাংশনের জন্য সহায়তা, সবই হার্ড ইনডেক্সের প্রয়োজনীয়তা ছাড়াই। - আংশিক রিড / প্রোজেকশন:
select(...),remove_fields(...)এবং অন্যান্য অনেক ডকুমেন্ট ম্যানিপুলেশন স্টেজের মাধ্যমে ডকুমেন্টের ডায়নামিক সাবসেট ফিরিয়ে আনুন।
এইসব ক্ষমতা সম্পর্কে আরও জানতে, পাইপলাইন অপারেশনের মাধ্যমে ডেটা কোয়েরি করা দেখুন।
রিয়েল-টাইম ও অফলাইন সহায়তা
রিয়েল-টাইম ও অফলাইন ব্যবহার করতে, ডেভেলপাররা Firestore Enterprise এডিশনে Firestore Core অপারেশন ব্যবহার করতে পারেন।
ক্লায়েন্ট ও টুলিং ইন্টিগ্রেশন
Enterprise সংস্করণে Pipeline কোয়েরি ম্যানেজ করা ও ইন্টার্যাক্ট করার জন্য বিশেষ ফিচার অন্তর্ভুক্ত:
- কোয়েরি ব্যাখ্যা ও প্রোফাইলিং: কোনও কোয়েরি কতগুলি রিড বা রাইট ইউনিট ব্যবহার করে তা বুঝতে এবং এর এক্সিকিউশন বিশ্লেষণ করতে আপনি কোয়েরি ব্যাখ্যা করার ফলাফল ব্যবহার করতে পারেন।
- কোয়েরি ইনসাইট: Enterprise এডিশন কোয়েরি ইনসাইটকে সাপোর্ট করে যা আপনার ডেটাবেসে রান করা সেরা কোয়েরি এবং সেগুলির পারফর্ম্যান্সের বৈশিষ্ট্য সম্পর্কে ভিজিবিলিটি প্রদান করে পারফর্ম্যান্স এবং খরচ উন্নত করার জন্য কোথায় ইন্ডেক্স তৈরি করা যেতে পারে তা নির্ধারণ করতে সাহায্য করে
- নতুন ইন্ডেক্সের ধরন: আপনি Enterprise এডিশনের জন্য বিশেষ ইন্ডেক্স তৈরি করতে পারবেন, যার মধ্যে স্পার্স, নন-স্পার্স ও অনন্য ইন্ডেক্সের মতো ইন্ডেক্সের ধরন অন্তর্ভুক্ত। এছাড়াও, এটি Enterprise ডেটাবেসের জন্য ভেক্টর সার্চ ইন্ডেক্স তৈরি ও এডিট করতে সাহায্য করে।
Firestore Standard এডিশন ও Firestore Enterprise এডিশনের মধ্যে পার্থক্য
কোর অপারেশন এবং পাইপলাইন অপারেশনের মধ্যে প্রধান অপারেশনাল পার্থক্য হল ইনডেক্সিং ম্যানেজমেন্ট, যা সরাসরি পারফর্ম্যান্স এবং খরচকে প্রভাবিত করে।
| Standard সংস্করণ - মূল অপারেশন | Enterprise এডিশন - কোর অপারেশন ও পাইপলাইন অপারেশন | |
| ইনডেক্সিং সংক্রান্ত প্রয়োজনীয়তা | কোয়েরির জন্য ইনডেক্স প্রয়োজন।
ব্যক্তিগত ফিল্ডের জন্য ইন্ডেক্স অটোমেটিক তৈরি করা হয়, তবে আরও জটিল কোয়েরি কম্পোজিট ইন্ডেক্স বা কালেকশন গ্রুপ ইন্ডেক্সের উপর নির্ভর করে যা ম্যানুয়ালি কনফিগার করতে হয়। |
ইনডেক্স প্রয়োজন হয় না, তাই কোয়েরির জন্য এটি ঐচ্ছিক।
আপনি প্রয়োজন অনুযায়ী ইন্ডেক্স নির্ধারণ করেন। এছাড়াও, Enterprise এডিশন আরও অনেক ধরনের ইন্ডেক্স সাপোর্ট করে, যার মধ্যে নন-স্পার্স/স্পার্স এবং অনন্য ইন্ডেক্স অন্তর্ভুক্ত। |
| ইন্ডেক্স করা ফিল্ড | ইনডেক্স করা ফিল্ডে আগে থেকে না থাকলে, অতিরিক্ত __name__ ফিল্ড অটোমেটিক যোগ করা হয়। | __name__ ইন্ডেক্স করা ফিল্ডে অটোমেটিক যোগ করা হয় না। আপনার অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ হলে, আপনাকে ইন্ডেক্স করা ফিল্ডে স্পষ্টভাবে __name__ উল্লেখ করতে হবে। |
| সাজানোর ক্রম স্বাভাবিক করা | কোয়েরির order by ক্লজটি শেষে (যদি আগে থেকে না থাকে) অসমতা ফিল্ড এবং __name__ ফিল্ড যোগ করে স্বাভাবিক করা হয়। এটি ফলাফলের একটি অনন্য, নির্ধারক ক্রমের গ্যারান্টি দেয়, তা নির্বিশেষে অন্য কোন ফিল্ডগুলি ক্লজ অনুসারে ক্রমে রয়েছে। | সাজানোর ক্রমের কোনও নরমালাইজেশন নেই। a ASC সাজান-এর মতো ক্রমানুসারে সাজানোর সেটিং শুধুমাত্র এই গ্যারেন্টি দেয় যে ফলাফল a ফিল্ড অনুযায়ী সাজানো হয়েছে। Cloud Firestore আপনার আগে থেকে থাকা ইন্ডেক্স ব্যবহার করে সবচেয়ে দক্ষ ক্রমে ফলাফল দেখাবে। তাই, ফলাফল সেটের মধ্যে a অনন্য না হলে, ইন্ডেক্স কনফিগারেশন, এক্সিকিউশন স্ট্র্যাটেজি ইত্যাদির উপর নির্ভর করে কোয়েরি অনুযায়ী ফলাফলের ক্রম আলাদা হতে পারে। ফলাফলের অনন্য, নির্ধারক ক্রম নিশ্চিত করতে, আপনাকে ক্রমানুসারে সাজানোর সেটিংয়ে __name__-এর মতো অনন্য ফিল্ড যোগ করতে হবে। |
| পারফর্ম্যান্স | ইনডেক্স করা কোয়েরি: আপনার ফলাফল সেটের সাইজ অনুযায়ী পারফর্ম্যান্স ও খরচ স্কেল করা হয়। |
আনইনডেক্সড কোয়েরি: আপনার ডেটাসেটের সাইজের সাথে পারফর্ম্যান্স ও খরচ স্কেল করে। ইনডেক্স করা কোয়েরি: আপনার ফলাফল সেটের সাইজ অনুযায়ী পারফর্ম্যান্স ও খরচ স্কেল করা হয়। ইনডেক্স তৈরি করতে এবং আপনার কোয়েরির পারফর্ম্যান্স ও খরচ উন্নত করতে আমরা Query Explain এবং Query Insights টুল ব্যবহার করার সাজেশন দিই। |
| স্টোরেজের খরচ সংক্রান্ত প্রভাব | অটোমেটিক ইন্ডেক্স ও কম্পোজিট ইন্ডেক্সের জন্য আপনার স্টোরেজ ওভারহেড হয়। | আপনি স্টোরেজের খরচ বাঁচাতে পারবেন কারণ প্রতিটি ফিল্ডের জন্য ইন্ডেক্স অটোমেটিক তৈরি হয় না। |
| মূল্যের ভিত্তিতে | প্রতিটি ডকুমেন্ট পড়া, লেখা এবং মুছে ফেলার জন্য চার্জ করা হয়। | রিড ইউনিট (৪কেবি ট্রাঞ্চ) এবং রাইট ইউনিট (১কেবি ট্রাঞ্চ) প্রতি চার্জ করা হয়। ইনডেক্স এন্ট্রি লেখার জন্য রাইট ইউনিট খরচ হয়।
কিছু উদাহরণ সহ নতুন দাম সম্পর্কে জানুন। |
| নিরাপত্তা সংক্রান্ত নিয়ম | নিরাপত্তা সংক্রান্ত নিয়ম রিড/রাইট সংক্রান্ত অনুমতি যাচাই করার মাধ্যমে কালেকশন সুরক্ষিত রাখে। | নিরাপত্তা সংক্রান্ত নিয়ম রিড/রাইট সংক্রান্ত অনুমতি যাচাই করার মাধ্যমে কালেকশন সুরক্ষিত রাখে। ডেটা মডেল গাইডে পাইপলাইন কোয়েরি সাপোর্ট করার জন্য আপনার ডেটা কীভাবে মডেল করবেন তা জানুন। |