Firestore üzerinde Twitter ve Instagram benzeri haber kaynağı mimarisi.

Murat Necip Arcan
2 min readSep 26, 2021

--

Hali hazırda kullanıcı dökümanınızın olduğunu ve bazı yapıları hazırlamış olduğunuzu varsayıyorum.

Her kullanıcı dökümanınıza ‘recentPosts’ adlı bir dizi ekleyin,

Firebase cloud functions üzerinde onWrite fonksiyonunu kullanarak, sistem üzerinde herhangi bir kullanıcı post eklediğinde OnWrite fonksiyonu ile yakalıyoruz ve kullanıcının recentPosts arrayi’ni güncelliyoruz.

Maliyet ve zaman açısından en ideal yol,

{

“postId”: xxxxxxxxxxx,

“createdAt”: tttttt

}

LastPosts dizisini 1.000 nesneyle sınırlayın bu sayede limiti aşarken en eski postları ve girişleri siler.

Şimdi, 1.000 kullanıcıyı takip ettiğinizi ve haber kaynağını sorgu ile getirmek istediğinizi varsayalım, 1.000 kullanıcı belgesinin tümünü sorgulayın (bunu 100 sorguda yapabilmeniz için “in-query” kullanmanızı öneririm). Bu bin okuma olarak sayılacaktır.

1000 belgeye sahip olduğunuzda, her belgede bir dizi recentPosts dizisi olacaktır. Tüm dizileri tek bir ana dizide birleştirin ve createAt’a göre sıralayın.

Artık, yalnızca 1.000 okuma için tümü kronolojik olarak sıralanmış, potansiyel olarak 1 milyona kadar gönderinin docID’sine sahipsiniz. Artık kullanıcınız haber kaynağını kaydırırken, bu belgeleri docID’lerini referans olarak sıralar.

Şimdi X kadar postu Y takipçilerinden getirebilirsiniz ve veritabanı işlem sayısı X + Y kadar olacaktır.

Yani 100 takip edilenden 2.000 gönderi 2,100 okuma yapar.

Ve 1000 takip edilenden 1000 gönderi 2000 okuma yapar.

Daha fazla tasarruf mu etmek istiyorsunuz ?

O zaman, lastPostsLastUpdatedAt gibi bir alana göre filtreleyebilir ve bunun o kullanıcı dokümanı için önbelleğe alınmış değerinizden daha büyük olup olmadığını kontrol edebilirsiniz, bu sayede recentPosts dizisini güncellememiş olan herhangi bir kullanıcı dokümanı okunmayacaktır. Bu, temel okumalarda teorik olarak 10 kat tasarruf etmenizi sağlayabilir.

--

--

Murat Necip Arcan
Murat Necip Arcan

No responses yet