GraphQL'in temellerinin ötesine geçtiğinizde, muhtemelen insanların “N+1 sorunu” hakkında konuştuğunu duyacaksınız. Bu korkutucu görünebilir, kulağa genellikle beyaz tahta görüşmeniz patlamadan önce duyduğunuz son şey olan O(N) notasyonu gibi geliyor. Ancak, bunun bir bilgisayar bilimi-y adının arkasına saklanan basit bir kavram olduğundan emin olun.
Diyelim ki yazarlar ve kitaplarından oluşan bir veritabanım var, basit bir "çok" ilişkisi var. Şimdi, tüm yazarlarımı ve kitaplarını almak istiyorum. REST'te, aşağıdakiler doğrultusunda bir şeyler yapmak için ORM seçiminizi kullanan bir rota yaparsınız:
route: '/authors/books',
method: 'GET',
handler: async () => ORM.getAuthors().getTheirBooks();
SELECT *
FROM authors;
-- pretend this returns 3 authors
SELECT *
FROM books
WHERE author_id in (1, 2, 3); -- an array of the author's ids
Sorun şu ki, bu yalnızca işe yarar çünkü ikinci sorgunuzda zaten her author_id. GraphQL bu şekilde çalışmaz çünkü her çözümleyici işlevi gerçekten yalnızca kendi ana nesnesini bilir ( şu anda bağlam hakkında endişelenmeyin ). Bu, ORM'nizin artık bir yazar kimlikleri listesi lüksüne sahip olmayacağı anlamına gelir.
Yani aynı isteği yukarıdan alıp bir GraphQL sorgusuna koyarsak:
{
query {
authors {
name
books {
title
}
}
}
}
schema = `{
type Query {
authors: [Author]
}
type Author {
id: Int
name: String
books: [Book]
}
type Book {
id: Int
title: String
}
}`
resolvers = {
Query: {
authors: async () => {
return ORM.getAllAuthors()
}
}
Author: {
books: async (authorObj, args) => {
return ORM.getBooksBy(authorObj.id)
}
},
}
SELECT *
FROM authors;
SELECT *
FROM books
WHERE author_id in (1);
SELECT *
FROM books
WHERE author_id in (2);
SELECT *
FROM books
WHERE author_id in (3);
Bu GraphQL'in aşil topuğu mu? Tüm verimliliğimiz güzel bir arayüzün maliyeti mi? Tabii ki değil. GraphQL denilen sağ yanında çıktı gerçekten kullanışlı bir araç var dataloader . Esasen yaptığı şey, tüm çözümleyicilerinizin kendi anahtarlarına yüklenmesini beklemektir. Onlara sahip olduğunda , DB'ye anahtarlarla bir kez vurur ve bir dizi değeri çözen bir söz verir. Sorgularımızı birer birer yapmak yerine gruplandırır.
Yeni çözümler genellikle yeni sorunlar doğurur, ancak tüm araçlarınızı öğrendiğiniz sürece, çözemeyeceğiniz hiçbir şey yoktur. Bu notta, DataLoaders'a göz atın!
Herkese iyi kodlamalar,
Mike
son makale: React Hooks ile Dinamik, Kontrollü Bir Form Nasıl Oluşturulur
facebook.com'a bir talepte bulunduğunuzda, bilgisayarınız o bağlantıyı kurabilmesi için bu alan adını bir IP adresine çevirmek üzere alan adını arar.
Dilimiz, düşüncelerimizi, tutumlarımızı ve eylemlerimizi şekillendirebilen güçlü bir araçtır. Görünüşte zararsız terimler bile zararlı önyargıları ve klişeleri devam ettirebilir.
Güneşin ilk ışınları düzlüklerdeki buzlu çimleri aydınlatırken, batının engebeli tepelerinde parıldayan altın rengi bir sabah. Simsiyah ve iri, sakin bir Angus sığır sürüsü, hepsinin iyi bildiği bir yere giden ıssız bir patikadan aşağı inerken güneşin doğuşuna karşı siluet oluşturuyor; kahvaltı barı.
Kaç kez bir plastik şişeyi, cam kavanozu, alüminyum kutuyu veya yeşil enerji paketini iki kere düşünmeden çöpe attınız? Kaç kez geri dönüşüm karşılığında bir şey alabilmeyi diledin? Çoğu insan gibiyseniz, cevap muhtemelen birçok kez. Geri dönüşüm genellikle herhangi bir acil veya somut fayda sağlamayan bir güçlük, angarya veya görev olarak görülür.
Her rasyonel akıl, siyaset ve medya çevrelerinde solun, hatta aşırı solun hakim olduğunu bilir, bu durum siyasi söylemde bir dengesizlik yaratır. Din alanında, bu dengesizlik açıkça görülüyor: solcu gazeteler ve ağlar, Hıristiyan inancını savunmak için acele etmiyorlar.