الگوی مناسب استفاده
جهت افزایش مقیاسپذیری برنامهی خود، شما می بایست از میزان load و مصرف افزایش یافتهی آن اطمینان حاصل کنید. این متن دستورالعمل هایی را در مورد بهینه سازی چگونگی عملکرد برنامه شما ارائه میکند. در صورتی می توانید از سرور دیتابیس بکتوری برای نمونه سازی سریع برنامهی خود استفاده کنید و در مورد عملکرد آن نگران نباشید که دستورالعمل های پیشنهادی توسط بکتوری را در هنگام طراحی ابتدایی برنامه خود لحاظ کرده باشید. ما به شدت توصیه می کنیم که قبل از انتشار برنامه خود مطمئن شوید که همه پیشنهادات داده شده را عمل کردهاید. در ذیل، توصیه هایی در مورد نحوه استفاده از سرویس دیتابیس آمده است:
-
سرویس بکتوری در راستای کنترل کیفی و مدیریت کوئری های مختلف شما، از ویژگی نمایه (index) گذاری بر روی جدولهای شما استفاده میکند. بدین صورت که بر اساس میزان مصرف شما در طی کوئریهای مختلف، دادههای شما را به صورت مناسبی نمایهبندی میکند. اگر داده های شما نمایهگذاری نشود، هر کوئری باید تمام داده های یک کلاس را برای بازگشت نتیجه جستجو کند. از سوی دیگر، اگر داده های شما به طور مناسب نمایهگذاری شوند، تعداد اسناد اسکن شده برای بازگشت نتیجه مقدار بسیار کمتری خواهد داشت.
- نوشتن کوئری های کارآمد به معنی استفاده صحیح از نمایه ها است.
برخی از محدودیت های کوئری که مانع استفاده بهینه از نمایه ها می شوند و بهتر است که
شما تا حد ممکن از آنها کمتر استفاده کنید، عبارتند از:
- Not Equal To
- Not Contained In
- Regular Expressions
- Ordered By
به طور مثال محدودیت Not Equal To یا Not Contained In خیلی از اوقات میتواند با شرط Contained In بازنویسی شود تا با استفاده از نمایهی آن ستون، سرعت بیشتری در دریافت پاسخ داشته باشید. کوئری جدید شما بسته به مورد استفاده شما میتواند بازنویسی شود، که البته این موضوع گاهی اوقات به معنای بازنویسی مدل داده شما میتواند باشد.
-
کوئریهایی که محدودیت regular expression (عبارت منظم) دارند، بسیار سنگین و پرهزینه هستند؛ مخصوصا برای کلاس هایی با بیش از 100،000 رکورد؛ و تا حد ممکن باید از آنها اجتناب کرد. به عنوان راهحل جایگزین، هنگامی که شما واقعا قصد استفاده از محدودیت regular expression را دارید، میبایست در ابتدا اطمینان حاصل کنید که محدودیت های دیگری در کوئری، اعضای مجموعهی نتیجه را در مقیاس صدتایی از اشیاء برای یک کوئری کارآمد کاهش دهد.
-
به طور کلی نوشتن کوئریهای محدود به شما این اجازه را می دهد تا تنها اطلاعاتی را که کلاینت نیاز دارد، بازگردانید. این موضوع در محیط موبایل که استفاده از داده محدود است و اتصالات شبکه غیر قابل اعتماد است، حائز اهمیت است. ضمنا شما همواره می خواهید که برنامه تلفن همراه خود responsive عمل کند که این امر به طور مستقیم تحت تاثیر اشیایی است که شما به سمت کلاینت برمیگردانید. به عنوان نمونه در محدود کردن کوئریها، شما می توانید از skip و limit برای صفحهبندی نتایج استفاده کنید و بدین صورت داده ها را تنها در صورت نیاز بارگیری کنید.
-
برای انجام کوئریها از سمت iOS یا اندروید، شما می توانید قابلیتهای caching را در سمت برنامه پیاده سازی کنید. کوئریهای cache شده باعث بهبود کارایی نرم افزار شما میشود؛ به ویژه در مواردی که شما داده های cache شده را هنگام بازخوانی آخرین دادهها از دیتابیس بکتوری نمایش میدهید.
-
کد رایانش به شما این اجازه را می دهد تا منطق جاوا اسکریپت دلخواه خود را در سرور بکتوری به جای کلاینت اجرا کنید. شما می توانید از این رایانش ،برای محول کردن امور پردازش دیتابیس به سرورهای بکتوری استفاده کنید تا عملکرد نهایی برنامهی شما بهبود پیدا کند. این قضیه در هنگامی که شما بخواهید داده های خود را تأیید یا پاکسازی کنید، بسیار مفید خواهد بود.
-
هنگامی که قصد شمارش اشیاء به صورت مداوم را دارید، به جای ذخیره کردن یک متغیر شمارشی مجزا در پایگاه داده به ازای هر بار افزایش داده، میتوانید هر بار که یک شیء اضافه می شود، در همان کوئری تعداد را نیز افزایش دهید. در این صورت، میتوانید به سادگی با بازیابی متغیر ذخیره شده، شمارش را به سرعت انجام دهید.
-
کوئریها به صورت پیشفرض دارای محدودیت limit=100 هستند که بدین معناست که ۱۰۰ داده را در پاسخ برمیگردانند. حداکثر میزان limit هم برابر ۱۰۰۰ است. برای export گرفتن نیز حداکثر تعداد سطرها برابر 100000 است. ضمنا سعی کنید از محدودیت exists: false$ تا حد ممکن استفاده نکنید.
-
محدودیت هر شیء در سرویس دیتابیس بکتوری ۱۲۸ کیلوبایت است. همچنین به شدت توصیه میشود که برای بهبود فرآیند indexگذاری بر روی فیلدهای اشیا، حداکثر ۱۶ ستون برای هر جدول (مستقل از ستونهای پیشفرض بکتوری) لحاظ کنید.
-
یکی از موارد مهم در بهبود کارایی دیتابیس شما، رعایت محدودیت حداکثر طول برای عناوین ستونها و نیز خود مقادیر ستونهای string است. حداکثر طول برای نام یا عنوان ستونهای تعریف شده توسط شما ۱۰۲۴ کاراکتر است. ضمنا در خصوص ستونهایی که از نوع string هستند، شما باید حداکثر تعداد کاراکتری که قرار است برای اشیای مختلف در آن ریخته شود را هنگام تعریف ستون جدید مشخص کنید. البته، این میزان تعریف شده توسط شما حداکثر ۱۰۰۰ کاراکتر است و در نتیجه، شما نمیتوانید مقادیر رشتهای بیشتر از ۱۰۰۰ کاراکتر در جدول خود داشته باشید. در صورت نیاز به حداکثر طول بیشتر در موارد خیلی ضروری، میتوانید با بخش فنی برای رفع این محدودیتها تماس بگیرید.
- سرویس دیتابیس بکتوری یک Realtime Database نیست؛ به این معنا که، وقتی عمل به روزرسانی یا increment یا هر عمل مشابهی را انجام میدهید، مقدار شیء بکتوری الزاما با مقدار درستی به روز رسانی نمیشود. مثلا فرض کنید فیلد count از یک شیء برابر ۵ است و دو درخواست increment با مقدار ۱ برای آن شیء ارسال میشود؛ به گونهای که حالت race پیش میآید. حالت race به این معناست که دو درخواست بسیار نزدیک به هم (تقریبا همزمان) به سرور رسیدهاند، به طوری که به لحاظ منطقی نمیتوانیم ترتیبی بین این دو درخواست قائل شویم. در این حالت، در صورتی که هر دو درخواست از سمت کلاینت با موفقیت روبرو شوند، هر دو کلاینت فکر خواهند کرد که مقدار جدید فیلد count برای آن شیء برابر ۶ است؛ در حالی که با دید دانای کل میدانیم مقدار درست آن در این لحظه برابر ۷ خواهد بود. پس اگر درستی مقادیر فیلدهای شیء (رکورد جدول) پایگاه داده در سمت کلاینت تا این اندازه برای شما مهم است، میبایست پس از بهروزرسانی یا increment، دوباره مقدار درست فیلدها را بازیابی کنید.