Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

17.01.2023

Краща оптимізація запиту до бази — це його не робити

Наступна оптимізація — уникнення запитів для нових акаунтів. Справа така. Для акаунта треба знати дату початку роботи, спираючись на журнал. Копатися в журналі — довго — декілька секунд. Тому я зробив кешування: оскільки дата початку роботи — історично сталий факт, то обчислювати її потрібно тільки раз. До речі, у Rails є приємний режим Rails.cache.fetch(key, skip_nil: true), при якому в кеш не потрапляють порожні значення. Тобто, як тільки в журналі є запис, в кеш потрапляє його дата. Чудово.

Але ж нюанс — дата початку роботи використовується, щоб визначити, чи показати клієнтові “порожній аркуш”. А для нових акаунтів — які мають бачити “порожній аркуш” - наш кеш не працює. Тож перші враження кожного нового клієнта проходять через повільне завантаження сторінки — аж допоки вони не почнуть активно користуватись сервісом. Це буквально протилежне від того досвіду, який ми хочемо надати.

Щоб це виправити, просто перевіряємо за іншими прикметами, чи пройшов акаунт початкове налаштування. Якщо ні — то ніяких записів в журналі не може бути — можна навіть не робити запит. Залишається набагато менший проміжок, коли налаштування зроблено, а журнал ще порожній — з ним поки нічого не зробили. Але онбордінг включає й випробування запису в журнал, тож у нормальному випадку клієнт взагалі уникне того гіршого випадку, коли кешу немає, а запит довго копається в базі перед тим, як сказати, що там теж пусто.

Тепер здається, що це все очевидні речі, але ж найбільш прямолінійним рішенням було просто робити необхідний запит, без додаткових ускладнень як-то вище зазначена перевірка прикмет. Зате прибрати зайвий запит до бази — завжди потім приємно.