Firestore در حالت Native از دو مجموعه عملیات تشکیل شده است - عملیات Firestore Core و عملیات Firestore Pipeline.
عملیات Firestore Core قابلیتهای استاندارد ایجاد، خواندن، بهروزرسانی، و حذف (CRUD) سند را بههمراه پشتیبانی داخلی برای پرسمانهای گوش دادن همزمان و پایداری آفلاین ارائه میدهد. یک تفاوت عملیاتی متمایز در این نسخه این است که نمایهها اختیاری هستند و بهطور خودکار برای فیلدهای تکی ایجاد نمیشوند. اگرچه این کار به پُرسمانها اجازه میدهد بدون پیکربندی نمایه پیشپرداخت اجرا شوند، پُرسمانهای نمایهنشده بهطور پیشفرض کل مجموعه را اسکن میکنند. این امر میتواند با رشد مجموعه داده منجر به افزایش تأخیر و هزینهها شود.
عملیات Firestore Pipeline یکی از ویژگیهای اصلی نسخه Firestore Enterprise است که بر روی یک موتور پُرسمان پیشرفته ساخته شده است تا دامنه پُرسمانهای ممکن را بهطور قابلتوجهی گسترش دهد. عملیات خط لوله از نحو پُرسمان انعطافپذیر و روش نمایهسازی متمایزی استفاده میکند که در آن نمایهها اختیاری هستند و بهطور خودکار ایجاد نمیشوند، و این امر عملیات بازیابی دادههای پیشرفته را برای برنامهها امکانپذیر میکند.
ویژگیهای عملیات Firestore Core
عملیات Core امکان عملیات استاندارد CRUD و پُرسمانهای گوش دادن همزمان را فراهم میکند. بااینحال، هنگام استفاده از این عملیات در نسخه Enterprise، رفتار اساسی مربوط به نمایهسازی و صورتحساب بهطور قابلتوجهی درمقایسه با نسخه Standard تغییر میکند.
عملکرد و تداوم
عملیات اصلی نحو زنجیرهای آشنای روش (برای مثال، .where()، .orderBy()) را که در نسخه استاندارد استفاده میشود حفظ میکند. این عملیات از پُرسمانهای گوش دادن همزمان و پایداری آفلاین برای کارخواههای وب و تلفن همراه پشتیبانی میکند. توصیه میشود از این عملیات برای حجم کاری تراکنشی استاندارد، جستجوهای ساده، و انتقال کد برنامه موجود استفاده کنید.
نمایهسازی سفارشی
برخلاف نسخه Standard، عملیات Core در نسخه Enterprise بهطور خودکار نمایههای تکفیلدی ایجاد نمیکند. نمایهها اختیاری هستند و برای اجرای پُرسمان الزامی نیستند. اگر نمایه خاصی وجود نداشته باشد، پُرسمان کل مجموعه را اسکن میکند. درحالیکه پُرسمانهای نمایهنشده امکان نمونهسازی سریع را فراهم میکنند، ممکن است با رشد مجموعه دادهها، عملکرد کندتری داشته باشند و هزینه بیشتری داشته باشند. توسعهدهندگان باید بهطور دستی نمایهها را ایجاد کنند تا عملکرد پُرسمان را بهینهسازی کنند و مصرف «واحد خواندن» را کاهش دهند.
مدل صورتحساب (واحدمحور)
هزینه «واحدهای خواندن» بهجای تعداد سند، در بخشهای ۴ کیلوبایتی کسر میشود. یک پُرسمان نمایهنشده که مجموعه بزرگی را اسکن میکند، براساس کل بایتهای اسکنشده در همه اسناد، «واحدهای خواندن» مصرف خواهد کرد. واحدهای نوشتن در بخشهای ۱ کیلوبایتی شارژ میشوند. نوشتن سند، واحدهایی را برای دادهها بهعلاوه واحدهای اضافی برای هر ورودی نمایه بهروزشده مصرف میکند. برخلاف نسخه Standard که نمایهسازی تکفیلدی خودکار را اعمال میکند، اکنون میتوانید فیلدهای خاصی را برای نمایهسازی انتخاب کنید تا هزینههای نوشتن و عملکرد را بهینهسازی کنید.
ویژگیهای عملیات Firestore Pipeline
نسخه Firestore Enterprise با عملیات Pipeline از یک موتور پُرسمان پیشرفته استفاده میکند که بسیاری از محدودیتهای موجود در نسخه Firestore Standard را برطرف میکند. عملیات خط لوله صدها ویژگی پُرسمان اضافی ارائه میدهد. عملیات Pipeline قابلیتهای زیر را دارد:
نحو ترکیبپذیر مرحلهمحور
پرسوجوهای خط لوله با تعریف کردن مجموعهای از مراحل متوالی که بهترتیب اجرا میشوند ساخته میشوند. این قابلیت امکان انجام عملیات پیچیده را فراهم میکند، مانند فیلتر کردن روی نتیجه یک انبوهش، که قبلاً امکانپذیر نبود.
مثال زیر پُرسمان خط لولهای را نشان میدهد که تعداد شناسههای محصول متمایز مشاهدهشده در ماه گذشته را پیدا میکند:
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()
قابلیتهای گسترشیافته
پرسوجوی Pipeline تعداد زیادی قابلیت جدید معرفی میکند، ازجمله:
- انبوهشها: پشتیبانی از توابع انبوهش جدید (مثل
sum(...)،min(...)، وcount_distinct(...)) همراه با فیلدهای گروهبندی دلخواه. - اتصالهای رابطهای: اتصالهای سمت سرور را در مجموعهها و زیرمجموعهها بااستفاده از زیرپرسشهای همبسته انجام دهید.
- فیلتر کردن پیچیده: پشتیبانی از صدها عملکرد اضافی برای بیان
عبارات
where(...)پیچیده دلخواه، ازجملهregex_match(...)،add(...)، وstr_contains(...)، همه بدون الزامات نمایه سخت. - Partial Reads / Projections: Retrieve dynamic subsets of documents using
select(...),remove_fields(...), and many other document manipulation stages.
برای کسب اطلاعات بیشتر درباره این قابلیتها، پرسوجو کردن دادهها با عملیات خط لوله را ببینید.
پشتیبانی همزمان و آفلاین
برای استفاده از «همزمان» و «آفلاین»، توسعهدهندگان میتوانند از عملیات Firestore Core در نسخه Firestore Enterprise استفاده کنند.
یکپارچهسازی ابزار و کارخواه
نسخه Enterprise شامل ویژگیهای تخصصی برای تعامل با پُرسمانهای Pipeline و مدیریت آنها است:
- توضیح و نمایهسازی پُرسمان: میتوانید از نتایج «توضیح پُرسمان» برای درک تعداد واحدهای خواندن یا نوشتن مصرفشده توسط پُرسمان و تحلیل اجرای آن استفاده کنید.
- اطلاعات آماری پرسمان: نسخه Enterprise از «اطلاعات آماری پرسمان» پشتیبانی میکند که به شما کمک میکند با ارائه شفافیت درباره پرسمانهای برتری که در پایگاه داده شما اجرا میشوند و ویژگیهای عملکرد آنها، تعیین کنید نمایهها کجا میتوانند برای بهبود عملکرد و هزینه ایجاد شوند
- انواع نمایه جدید: میتوانید نمایههای تخصصی برای نسخه Enterprise ایجاد کنید، ازجمله انواع نمایه مانند نمایههای پراکنده، غیرپراکنده، و یکتا. همچنین از ایجاد و ویرایش نمایههای جستجوی برداری برای پایگاههای داده Enterprise پشتیبانی میکند.
تفاوتهای بین نسخه Firestore Standard و نسخه Firestore Enterprise
تفاوت عملیاتی اصلی بین عملیات Core و عملیات Pipeline در مدیریت نمایهسازی است که مستقیماً بر عملکرد و هزینه تأثیر میگذارد.
| نسخه استاندارد - عملیات اصلی | نسخه Enterprise - عملیات اصلی و عملیات خط لوله | |
| شرایط نمایهسازی | نمایهها برای پُرسمانها الزامی است.
نمایهها برای فیلدهای مجزا بهطور خودکار ایجاد میشوند، درحالیکه پُرسمانهای پیچیدهتر به نمایههای ترکیبی یا نمایههای گروه مجموعه متکی هستند که باید بهصورت دستی پیکربندی شوند. |
نمایهها الزامی نیستند و بنابراین برای پُرسمانها اختیاری هستند.
نمایهها را درصورت نیاز تعریف میکنید. نسخه Enterprise همچنین از طیف گستردهتری از انواع نمایه، ازجمله نمایههای غیرپراکنده/پراکنده و منحصربهفرد پشتیبانی میکند. |
| فیلدهای نمایهشده | اگر فیلد __name__ اضافی ازقبل وجود نداشته باشد، بهطور خودکار به فیلدهای نمایهشده اضافه میشود. | __name__ بهطور خودکار به فیلدهای نمایهشده اضافه نمیشود. اگر __name__ برای برنامهتان مهم است، باید آن را بهطور صریح در فیلدهای نمایهشده مشخص کنید. |
| نرمالسازی ترتیب مرتبسازی | بند order by پُرسمان با افزودن فیلدهای نابرابری و فیلد __name__ در انتها (اگر ازقبل وجود نداشته باشد) نرمالسازی میشود. این کار ترتیب یکتا و قطعی نتایج را تضمین میکند، صرفنظر از اینکه چه فیلدهای دیگری در عبارت order by وجود دارد. | ترتیب مرتبسازی عادیسازی نشده است. ترتیب مرتبسازی مانند مرتبسازی صعودی a فقط تضمین میکند که نتایج براساس فیلد a مرتب شدهاند. Cloud Firestore از نمایههای موجود شما برای برگرداندن نتایج با کارآمدترین ترتیب ممکن استفاده خواهد کرد. بنابراین، اگر a در مجموعه نتایج یکتا نباشد، ترتیب نتایج ممکن است از پُرسمانی به پُرسمان دیگر بسته به پیکربندی نمایه، استراتژیهای اجرا، و غیره متفاوت باشد. برای تضمین ترتیب یکتا و قطعی نتایج، باید فیلد یکتایی مثل __name__ را به ترتیب مرتبسازی اضافه کنید. |
| عملکرد | پُرسمانهای نمایهشده: عملکرد و هزینه با اندازه مجموعه نتایج شما مقیاسبندی میشود. |
پرسوجوهای نمایهنشده: عملکرد و هزینه با اندازه مجموعه داده شما مقیاسبندی میشود. پُرسمانهای نمایهشده: عملکرد و هزینه با اندازه مجموعه نتایج شما مقیاسبندی میشود. توصیه میکنیم برای ایجاد نمایه و بهبود عملکرد و هزینه پُرسمانهایتان از ابزارهای Query Explain و Query Insights استفاده کنید. |
| پیامد هزینه فضای ذخیرهسازی | سربار فضای ذخیرهسازی از نمایههای خودکار و نمایههای ترکیبی به شما تحمیل میشود. | در هزینههای فضای ذخیرهسازی صرفهجویی میکنید زیرا نمایهها بهطور خودکار برای هر فیلد ایجاد نمیشوند. |
| مبنای هزینه | هزینه براساس هر عملیات خواندن، نوشتن، و حذف سند محاسبه میشود. | هزینه براساس واحد خواندن (بخشهای ۴ کیلوبایتی) و واحد نوشتن (بخشهای ۱ کیلوبایتی) محاسبه میشود. نوشتن ورودیهای نمایه «واحد نوشتن» مصرف میکند.
با چند مثال با قیمتگذاری جدید آشنا شوید. |
| قوانین امنیتی | قوانین امنیتی با درستیسنجی اجازههای خواندن/نوشتن از مجموعهها محافظت میکنند. | قوانین امنیتی با درستیسنجی اجازههای خواندن/نوشتن از مجموعهها محافظت میکنند. در راهنمای مدل داده، با نحوه مدلسازی دادههایتان برای پشتیبانی از پُرسمانهای Pipeline آشنا شوید. |