iKonekt
Konsolu açın

Ayrılıq

Kodun yox, bazanın saxladığı sərhəd

Hər CRM çoxistifadəçili olduğunu iddia edir. Bu iddia ucuzdur; vacib olan hansı qatın xətti saxlamasıdır. Əgər cavab "bizim tətbiqimiz həmişə düzgün filtri əlavə edir"dirsə, zəmanət yalnız bir dəfə sorğu yazmış ən yorğun proqramçı qədər etibarlıdır.

iKonekt ilk miqrasiyasından etibarən çoxistifadəçili idi, sonradan əlavə edilmədi — bu, öyünc kimi səslənsə də, əslində etirafdır: sonradan əlavə etməyi inandırıcı şəkildə görmək demək olar ki, mümkün deyil və bunu cəhd edən hər kəsin bir hekayəsi var.

Ayrılıq bazada yaşayır. İyirmi altı cədvəlin hər biri aid olduğu tenantı daşıyır və onu yoxlayan siyasət hər oxuma və hər yazmada, tətbiqdən tamamilə aşağıda işləyir. Sərhədi unudan sorğu başqasının müştərilərini qaytarmır. Heç nə qaytarır.

Səviyyə təhlükəsizliyi, məcburi

Adət deyil, kod baxışı qaydası deyil. Baza rədd edir. Yetmiş iki siyasət, generasiya edilmədən, bir-bir yazılıb — çünki generasiya edilmiş siyasəti heç kim oxumayıb.

Kompozit açarlar

Uşaq qeydi tenantını ve valideynini birlikdə, cüt şəklində göstərir. Yanlış şirkətdən gələn sərsəri identifikator həll olunmur — o, sadəcə etibarlı istinad deyil.

Heç vaxt standart tenant yoxdur

Sorğusuz gələn sorğu səssizcə tenant sıfır sorğusuna çevrilmir. Bazaya çatmazdan əvvəl xəta atır. Unutmaq üçün "unscoped" rejimi yoxdur.

Özünü bəyan edə bilməyən xəta

Tenant işləri aparılarkən səhvlərin əksəriyyəti səsli idi. İki şirkətə eyni müştəri domeni versəniz, baza dərhal etiraz edir — xəta kodu və stack trace ilə; nahardan əvvəl düzəldirsiniz.

Biri etiraz etmədi. Redaktə oluna bilən prompt üstünlükləri cədvəli yalnız promptun növünə görə açarlanmışdı — növ ve tenanta görə deyil. İkinci şirkət öz nüsxəsini redaktə edəndə birinci şirkətinkini səssizcə üstələyə bilərdi — tamamilə etibarlı SQL ilə, xətasız, xəbərdarlıqsız və uğursuz testsiz. Bu, açarı dəyişdikdən sonra qalan hər unikal indeksi bir-bir oxumaqla, səsli olanların yoldaşı olduğu şübhəsi ilə tapıldı.

Bunu ona görə qeyd edirik ki, bu işin dürüst forması budur. Ayrılıq yandırılan funksiya deyil; bu, sxemanın darıxıcı hissələrini, orada sizinlə razılaşmayan bir şey olduğunu güman edərək oxumaq vərdişidir.

Testlər, qeyd üçün: 942 test, hər dəyişiklikdə sıfırdan yenidən qurulmuş bazaya qarşı işləyir. Onlar dizaynın ağıllı olduğunu sübut etmək üçün deyil. Bu dizaynın xəta rejimi səssizdir və səssiz xətalar üçün kimsə onların yerinə qışqırması lazımdır.

Ayrılıq normal insana nə verir

  • Qrup bir quraşdırmadan bir neçə şirkət idarə edə bilər və birindəki satıcı digərinin müştərisini heç vaxt görməz — siyasətlə deyil, quruluşla.
  • Partnyor proqramı, prompt dəsti, müştəri iddiası: hamısı şirkət üzrə məhdudlaşdırılıb, beləliklə bir tenantın konfiqurasiyası hamınınkı ola bilməz.
  • Silinmə sorğusu ümumi yığın boyu deyil, sərhəd daxilində yerinə yetirilir — bu, ona dürüst cavab verməyi mümkün edən şeydir.
  • Və heç kimin bunların heç birini yadda saxlamasına ehtiyac yoxdur. Məqsəd budur — yadda saxlanılmasından asılı olan zəmanət zəmanət deyil.

Bazalar haqqında olmayan daha bir sətir

Ailədəki hər qardaş xidmət öz adlı kredensialını saxlayır. Heç bir şey ümumi olanla danışmır, beləliklə heç bir xidmət təsadüfən digəri kimi hərəkət edə bilməz — bir dəfə ümumi token sahib olub bundan zövq almamışdan birbaşa gələn kiçik bir intizam.

Bu, baza qaydası ilə eyni instinktdir. Yanlış şeyi məsləhət görülməz deyil, mümkünsüz edin və diqqətinizi müşahidəyə yox, müştərilərə sərf edin.

SərhədTətbiqdən aşağıda
  • 126 cədvəlHər biri öz tenantını daşıyır, yoxlama məcburi aktivdir.
  • 272 siyasətBir-bir yazılıb, beləliklə hər birini bir insan oxuyub.
  • 3942 testHər dəyişiklikdə sıfırdan yenidən qurulmuş bazaya qarşı.
  • 40 standart tenantSorğusuz sorğu heç vaxt məlumatlara çatmır.

Canlı quruluşda ölçülüb

"Bizim tətbiqimiz həmişə şirkətə görə filtrləyir."

Bu cümlədə "həmişə" sözü çox ağır iş görür.

Sərhədi bazaya endirin və unudulmuş WHERE bəndi başqasının müştəriləri əvəzinə heç nə qaytarır. Boş ekran, narahat tanışlıqdan daha yaxşı xətadır.

Bir neçə brend idarə edən qruplar üçün →