چند راه مختلف برای بهبود عملکرد Firebase Realtime Database در برنامه شما وجود دارد. برای اینکه بدانید چه کاری می توانید برای بهینه سازی عملکرد Realtime Database خود انجام دهید، داده ها را از طریق ابزارهای مختلف نظارت Realtime Database جمع آوری کنید، سپس تغییراتی را در برنامه یا استفاده Realtime Database اعمال کنید.
نظارت بر عملکرد Realtime Database
بسته به سطح جزئیاتی که نیاز دارید، میتوانید دادههای مربوط به عملکرد Realtime Database خود را از طریق چند ابزار مختلف جمعآوری کنید:
- نمای اجمالی سطح بالا: از ابزار نمایه ساز برای فهرستی از پرس و جوهای فهرست نشده و یک نمای اجمالی بیدرنگ عملیات خواندن/نوشتن استفاده کنید.
- برآورد مصرف صورتحساب: از معیارهای استفاده موجود در کنسول Firebase برای مشاهده میزان مصرف صورتحساب و معیارهای عملکرد سطح بالا استفاده کنید.
- بررسی دقیق: از Cloud Monitoring برای نگاهی دقیق تر به نحوه عملکرد پایگاه داده شما در طول زمان استفاده کنید.
بهبود عملکرد با متریک
پس از جمعآوری دادهها، بهترین شیوهها و استراتژیهای زیر را بر اساس حوزه عملکردی که میخواهید بهبود دهید، بررسی کنید.
استراتژی های بهبود عملکرد در یک نگاه | ||
---|---|---|
متریک | توضیحات | بهترین شیوه ها |
بارگذاری/استفاده | بهینه سازی میزان ظرفیت پایگاه داده شما در پردازش درخواست ها در هر زمان معین (که در معیارهای **Load** یا **io/database_load** منعکس می شود). | ساختار داده خود را بهینه کنید داده های خرد شده در میان پایگاه های داده بهبود کارایی شنونده دانلودها را با قوانین مبتنی بر پرس و جو محدود کنید بهینه سازی اتصالات |
اتصالات فعال | تعداد اتصالات همزمان و فعال به پایگاه داده خود را متعادل کنید تا زیر حد 200000 اتصال باقی بمانید. | داده های خرد شده در میان پایگاه های داده ارتباطات جدید را کاهش دهید |
پهنای باند خروجی | اگر دانلودها از پایگاه داده شما بالاتر از آنچه می خواهید به نظر می رسند، می توانید کارایی عملیات خواندن خود را بهبود بخشیده و هزینه رمزگذاری را کاهش دهید. | بهینه سازی اتصالات ساختار داده خود را بهینه کنید دانلودها را با قوانین مبتنی بر پرس و جو محدود کنید استفاده مجدد از جلسات SSL بهبود کارایی شنونده دسترسی به داده ها را محدود کنید |
ذخیره سازی | مطمئن شوید که دادههای استفاده نشده را ذخیره نمیکنید، یا دادههای ذخیرهشده خود را در سایر پایگاههای داده و/یا محصولات Firebase متعادل کنید تا در حد نصاب باقی بمانند. | پاک کردن داده های استفاده نشده ساختار داده خود را بهینه کنید داده های خرد شده در میان پایگاه های داده از Cloud Storage for Firebase استفاده کنید |
بهینه سازی اتصالات
درخواست های RESTful مانند GET
و PUT
هنوز نیاز به اتصال دارند، حتی اگر این اتصال کوتاه مدت باشد. این اتصالات مکرر و کوتاه مدت در واقع می توانند هزینه اتصال، بارگذاری پایگاه داده و پهنای باند خروجی را نسبت به اتصالات بیدرنگ و فعال به پایگاه داده شما افزایش دهند.
در صورت امکان، به جای REST API، از SDK های بومی برای پلتفرم برنامه خود استفاده کنید. SDK ها اتصالات باز را حفظ می کنند و هزینه های رمزگذاری SSL و بار پایگاه داده را کاهش می دهند که می تواند با REST API اضافه شود.
اگر از REST API استفاده می کنید، برای حفظ اتصال باز یا استفاده از رویدادهای ارسال شده توسط سرور ، از HTTP keep-alive استفاده کنید، که می تواند هزینه های دست دادن SSL را کاهش دهد.
داده های خرد شده در چندین پایگاه داده
تقسیم دادههای شما در چندین نمونه Realtime Database ، که به عنوان اشتراکگذاری پایگاه داده شناخته میشود، سه مزیت را ارائه میدهد:
- با تقسیم کردن آنها در نمونه های پایگاه داده، تعداد کل اتصالات همزمان و فعال مجاز در برنامه خود را افزایش دهید.
- تعادل بار در نمونه های پایگاه داده
- اگر گروههای مستقلی از کاربران دارید که فقط به مجموعه دادههای مجزا نیاز دارند، از نمونههای پایگاه داده مختلف برای توان عملیاتی بالاتر و تأخیر کمتر استفاده کنید.
اگر در طرح قیمت گذاری Blaze هستید، می توانید چندین نمونه پایگاه داده را در یک پروژه Firebase ایجاد کنید و از یک روش احراز هویت کاربر مشترک در نمونه های پایگاه داده استفاده کنید.
درباره نحوه و زمان اشتراک گذاری داده ها بیشتر بیاموزید.
ساخت ساختارهای داده کارآمد
از آنجایی که Realtime Database داده ها را از گره های فرزند مسیر و همچنین مسیر بازیابی می کند، منطقی است که ساختار داده خود را تا حد امکان صاف نگه دارید. به این ترتیب، میتوانید بهطور انتخابی دادههای مورد نیاز خود را بازیابی کنید، بدون اینکه دادههای غیر ضروری را برای مشتریان بارگیری کنید.
به ویژه، هنگام ساختاردهی داده های خود، نوشتن و حذف را در نظر بگیرید. برای مثال، حذف مسیرهایی با هزاران برگ به طور بالقوه گران است. تقسیم آنها به مسیرهایی با چندین زیردرخت و برگ های کمتر در هر گره می تواند سرعت حذف را افزایش دهد.
علاوه بر این، هر نوشتن می تواند 0.1٪ از کل استفاده از پایگاه داده شما را به خود اختصاص دهد. دادههای خود را به گونهای ساختار دهید که به شما امکان میدهد نوشتههای دستهای را در یک عملیات واحد بهعنوان بهروزرسانیهای چندمسیری از طریق روشهای update()
در SDK یا درخواستهای RESTful PATCH
بچینید.
برای بهینه سازی ساختار داده و بهبود عملکرد، بهترین روش ها را برای ساختارهای داده دنبال کنید.
جلوگیری از دسترسی غیرمجاز
با Realtime Database Security Rules از عملیات غیرمجاز در پایگاه داده خود جلوگیری کنید. برای مثال، استفاده از قوانین میتواند از سناریویی جلوگیری کند که در آن کاربر مخرب به طور مکرر کل پایگاه داده شما را دانلود میکند.
درباره استفاده از قوانین پایگاه داده بیدرنگ Firebase بیشتر بیاموزید.
از قوانین مبتنی بر پرس و جو برای محدود کردن دانلودها استفاده کنید
Realtime Database Security Rules دسترسی به داده ها را در پایگاه داده شما محدود می کند، اما آنها همچنین می توانند به عنوان محدودیت هایی برای داده های بازگردانده شده از طریق عملیات خواندن عمل کنند. هنگامی که از قوانین مبتنی بر پرس و جو استفاده می کنید، همانطور که توسط query.
عباراتی مانند query.limitToFirst
، کوئری ها فقط داده های محدود شده توسط قانون را بازیابی می کنند.
به عنوان مثال، قانون زیر دسترسی خواندن را به 1000 نتیجه اول یک پرس و جو، طبق اولویت، محدود می کند:
messages: {
".read": "query.orderByKey &&
query.limitToFirst <= 1000"
}
// Example query:
db.ref("messages").limitToFirst(1000)
.orderByKey("value")
درباره Realtime Database Security Rules بیشتر بیاموزید.
پرس و جوهای شاخص
نمایه سازی داده های شما، کل پهنای باندی را که برای هر درخواستی که برنامه شما اجرا می کند، کاهش می دهد.
استفاده مجدد از جلسات SSL
با صدور بلیط جلسه TLS هزینه های سربار رمزگذاری SSL را در اتصالات از سر گرفته شده کاهش دهید. اگر به اتصالات مکرر و ایمن به پایگاه داده نیاز دارید، این به ویژه مفید است.
بهبود کارایی شنونده
شنوندگان خود را تا جایی که می توانید در پایین مسیر قرار دهید تا میزان داده هایی را که همگام می کنند محدود کنید. شنوندگان شما باید به داده هایی که می خواهید دریافت کنند نزدیک باشند. به ریشه پایگاه داده گوش ندهید، زیرا باعث دانلود کل پایگاه داده شما می شود.
برای محدود کردن دادههایی که عملیات گوش دادن شما برمیگرداند، جستارهایی اضافه کنید و از شنوندههایی استفاده کنید که فقط بهروزرسانیهای دادهها را دانلود میکنند - برای مثال، on()
به جای once()
. برای اقداماتی که واقعاً به بهروزرسانی دادهها نیاز ندارند، .once()
را رزرو کنید. علاوه بر این، برای بهترین عملکرد، هر زمان که ممکن است، درخواستهای خود را با استفاده از orderByKey()
مرتب کنید. مرتبسازی با orderByChild()
میتواند 6 تا 8 برابر کندتر باشد، و مرتبسازی با orderByValue()
میتواند برای مجموعههای داده بزرگ بسیار کند باشد، زیرا نیاز به خواندن کل مکان از لایه پایداری دارد.
مطمئن شوید که شنوندهها را نیز به صورت پویا اضافه کردهاید و زمانی که دیگر لازم نیست، آنها را حذف کنید.
پاک کردن داده های استفاده نشده
به طور دوره ای هرگونه داده استفاده نشده یا تکراری را در پایگاه داده خود حذف کنید. میتوانید برای بازرسی دستی دادههایتان نسخههای پشتیبان اجرا کنید یا بهطور دورهای از آنها در یک سطل Google Cloud Storage نسخه پشتیبان تهیه کنید. همچنین میزبانی داده های ذخیره شده را از طریق Cloud Storage for Firebase در نظر بگیرید.
کدهای مقیاس پذیر را ارسال کنید که می توانید آن را به روز کنید
برنامههای تعبیهشده در دستگاههای اینترنت اشیا باید شامل کدهای مقیاسپذیر باشند که بتوانید به راحتی آنها را بهروزرسانی کنید. اطمینان حاصل کنید که موارد استفاده را به طور کامل آزمایش کرده اید، سناریوهایی را که ممکن است پایگاه کاربری خود را به صورت تصاعدی افزایش دهید، در نظر بگیرید و توانایی استقرار به روز رسانی در کد خود را ایجاد کنید. بهدقت تغییرات عمدهای را که ممکن است لازم باشد انجام دهید، در نظر بگیرید، مثلاً اگر تصمیم دارید دادههای خود را به اشتراک بگذارید.