- Yaklaşık 1 yıldır kullanıyorum ve mümkün olan tüm projeleri EdgeDB'ye taşıdım
- EdgeDB, Postgres üzerine inşa edilmiş bir Graph/Relational DB
→ Mevcut motoru aynen kullanıyor ama kullanıcı açısından her şey değişmiş. En büyük değişim sorgu dili ve araçlarda
Sorgu dili
- EdgeDB'de SQL yok; onun yerine kendi dili olan EdgeQL kullanılıyor ve bu tam bir oyun değiştirici
- Bir kez kullandıktan sonra bir daha SQL'e dönmek istemedim
→ Güçlü tip sistemi, nesne yönelimli yapısı ve derin sorguları inanılmaz kolaylaştırması sayesinde, insanların veriyi sorgularken düşündüğü biçime çok iyi uyuyor (çünkü insanlar JOIN yapar gibi düşünmüyor)
- Eskiden de SQL hayranı değildim ama pratikte gerçek bir alternatif yoktu
- Muhteşem, kitap tarzında bir eğitimle birkaç gün öğrenip pratik yaptıktan sonra, DB şema modellemenin eğlenceli ve hafif bir iş olduğunu fark ettim
→ SQL'in karmaşıklığı ortadan kalktı ve SQL'in sorgu dili olarak ne kadar verimsiz ve tuhaf olduğunu gördüm
- EdgeQL öğrenmesi kolay; sadece hızlı başlangıç ve genel bakışla bile yaklaşık %80'i kavranabiliyor
- EdgeQL'i o kadar çok seviyorum ki bağımsız bir standart olmasını isterdim. Örneğin dosya tabanlı DB'lerde EdgeQL kullanılabilen EdgeDBLite gibi bir şey çıksa harika olurdu
Araçlar
- Tek bir binary ile her şeyi çalıştırabilen modern deseni izliyor (Go ya da Flutter gibi)
→ Sunucu kurulumu ve güncellemesi, DB oluşturma/silme, REPL, migration, yedekleme ve proje yönetimi vb.
→ Ve çoğu durumda gerçekten "It Just Works"
- EdgeDB, DB ile etkileşim kurma biçimini yeniden icat etmiş
→ "Project" kavramıyla DB'ye otomatik bağlanıyor; DSN ya da ayarlardan bağımsız olarak doğrudan çalışıyor
→ 10 yılı aşkın süredir localhost'ta root access yetkisi vermek için doğru SQL komutunu aramakla kıyaslayınca aşırı ferahlatıcı
Özellikler
- Çok kolay many-to-many ilişki modelleme
- Gömülü GraphQL (frontend'den doğrudan bağlanmak mümkün)
- Computed özellikler
rating := math::mean(.ratings.score)
- backlinks : linkleri ters yönde takip etme
→ select User.<author; User'ı, author adlı alanla bağlanan tablolardan sorgular
- uuid, collection, scalar, abstract ve çeşitli tipler (benim favorim
cal::local_datetime)
- inheritance, constraints ve Introspection gibi korkutucu şeyler
Şimdiye kadarki deneyim
- Yaklaşık 1 yıl önce kullanmaya başladım. Önce küçük kişisel bir projeyi, sonra da şirketteki projelerden birini taşıdım
- Yaptığım işlerin çoğu küçük ölçekli, pratik ve kullanıcıya dönük servisler olduğu için; çoğu zaman tek başıma çalışıp en uygun aracı seçme lüksüm oldu
- EdgeDB ile geçirdiğim sürenin büyük kısmı "It Just Works" deneyimiydi
- Çoğu şeyi bulmak kolay ve belgeleri mükemmel olduğu için erişmesi de kolay (gerçekten gördüğüm en iyi dokümantasyon sitelerinden biri)
Production için uygun mu?
- Geçen sonbahardan beri "production'da kullanılıyor"
- Bazı insanlar "production'da kullanılıyor" ifadesine, "gerçekten kullanılıyor" demekten daha fazla anlam yüklüyor ama...
- Komut satırı aracı refactor edildiğinde otomasyon script'lerini biraz değiştirmem gerekti ama büyük bir mesele değildi
- İçten içe bir early adopter olarak riskin bedelini ödemeye hazırdım ama şu ana kadar sorun çıkmadı
EdgeQL'in ifade gücü
- Sürekli SQL aramak, ORM kısıtlarını ve bunları aşma yollarını Google'lamak zorunda kalmaktan kurtuldum
- EdgeQL, DB'de bulmak istediklerimi tam olarak ifade edebiliyor ve gerçekten okunup anlaşılabiliyor (başka geliştiriciler için de)
- Bazen EdgeQL sayesinde transaction kullanmaktan bile kaçınabiliyorsunuz. Tek bir sorgu içinde çoklu iç içe güncelleme yapılabiliyor.
→ "Simplicity is complicated"
Migrations
- En havalı şeylerden biri migration özelliğinin yerleşik gelmesi
- Şemayı değiştirip
edgedb migration create çağırdığınızda migration dosyası oluşuyor,
sunucuda da edgedb migration apply komutuyla anında uygulanıyor
- Migration'lar hash ile birbirine bağlı olduğu için rastgele bir tanesini uygulayıp her şeyi bozma riski yok
- Yeni migration oluştururken varsayılan mod interactive, yani komut satırında tüm değişiklikler tek tek onaylanıyor
Performans
- Ben çok büyük veri hacimleriyle çalışmadığım için aşırı yüksek performanslı bir DB'ye ihtiyaç duymuyorum
- Ama altta Postgres kullandığı için diğer DB'lere göre performans açısından dezavantaj yaratmıyor
- EdgeDB'nin kendisi Python ile yazılmış (Go olsa hoşuma giderdi ama geliştiriciler Python'a daha aşina gibi görünüyor)
Go istemci kütüphanesi
- Go kullandığım için EdgeQL için native bir Go kütüphanesi olması hoşuma gitti
- Typescript/Javascript, Python ve Go için resmi kütüphaneler var; .Net ve Elixir tarafı ise topluluk tarafından destekleniyor
Yükseltmeler
- EdgeDB, sunucu sürümü ve güncellemelerle ilgili karmaşıklıkları soyutluyor
- EdgeDB CLI çoğu şeyi varsayılan olarak kendisi hallediyor. Yeni güncelleme varsa gösteriyor ve yükseltiyor.
→ Şüpheli derecede pürüzsüz
- Şu anda 2.0 RC çıkmış durumda ama hiç endişe duymuyorum. Şimdiye kadarki deneyimim bunun güvenli ve kolay olacağına inandırdı
İletişim ve destek
- Bir early adopter olarak resmi EdgeDB kanallarında çok hızlı yanıt ve yardım alıyor olmaktan memnunum
EdgeDB 2.0
- Yarın yayımlanacak 2.0 ile iyi özellikler geliyor
- EdgeDB UI : görsel şema düzenleyici, REPL vb. içeren bir web uygulaması
- Grup sorguları, global şema değişkenleri, nesne düzeyinde güvenlik, HTTP üzerinden doğrudan EdgeQL vb.
Sevmediğim ya da endişelendiğim şeyler
- Uyumluluk taahhüdü
- Şimdiye kadar her şey iyiydi. Uyumluluğu bozmayan minor güncellemeler geldi
- Uyumluluk konusunda açık bir taahhüt verilmesi iyi olurdu
- Büyüyen özellik seti
- Zaten istediğimden fazla özelliği var ama set giderek büyüyor
- EdgeQL güçlendikçe DB ile sunucu arasındaki sınırı bulanıklaştırıyor ve insanı "bu backend'de mi olmalı, yoksa akıllı DB şemasına mı koymalıyım" diye düşündürüyor
- Gömülü HTTP sunucusunu kullanıp çoğu projede backend sunucusunu tamamen ikame etmeye doğru itmesi mantıklı görünüyor ama... benim istediğim, bu harika sorgu dili ve motorla birlikte kararlı bir DB'ye sahip olmak
- Her hâlükârda, EdgeDB'nin kararlı ve tutarlı kalmasını, özelliklerinin de fazla şişmemesini umuyorum. Mevcut özellik seti bile harika
Sonuç
- Bundan sonraki projelerimde klasik RDB'leri artık düşünmüyorum
- SQL'e geri dönmek, Flutter'dan Ncurses'a ya da Go'dan assembly diline geri dönmek gibi hissettiriyor
- Benim için EdgeDB, son 20 yılda DB alanındaki en büyük ilerleme
- İleride daha fazla deneyimle fikrim değişebilir ama 1 yıldan fazla kullanmama rağmen bu keyfi bozan hiçbir şey yaşamadım
- Kullandıkça EdgeDB'ye daha çok güveniyorum
- EdgeDB ekibinin EdgeDB'nin kendisi, dili, web sitesi, araçları ve topluluğu için yaptığı her şey son derece etkileyici
→ "Ekibe büyük saygı"
- Ve sanki daha yeni ısınmaya başlamışlar gibi
10 yorum
Sayenizde EdgeDB'yi öğrenip gayet iyi kullanıyorum! Teşekkürler~
Prisma’ya benzer bir yolda gidiyor gibi görünüyor. Prisma’yı severek kullanıyorum ama performans tarafında eksik bulduğum çok nokta var; benchmark sonuçları biraz ilgimi çekiyor doğrusu.
Söz dizimi pek benim tarzım değil gerçi.. (protobuf da kullanıyorum, conversion örnek kodu da biraz öyle...)
Diğerleri de GraphQL benzeri bir söz dizimini böyle mi tercih ediyor? Sonuçta arka tarafta yine RDS var, yani ortada bir conversion yapılacak; bunun açıkça görünmemesi beni biraz uzaklaştırıyor doğrusu..
Bu gönderiyi görüp ilgimi çektiği için öğrenmeye devam ediyorum.
Ama sanırım hâlâ erken aşamada olduğundan, takıldığım noktalar olduğunda arama sonuçları çok fazla çıkmıyor.
Bir Discord kanalı var ama yerli geliştiricilerin rahatça soru sorup cevap verebilmesi iyi olur diye bir açık sohbet odası oluşturdum.
https://open.kakao.com/o/gtGY0Gve
Ben de kullanmak istediğim için not almıştım.
Bu yazıyı okuyup eğitim serisini baştan sona tamamlayınca daha da ikna oldum.
İlginç. SQL'siz bir dünyaya geri dönülemeyeceğini söylüyor..
İlginç görünüyor.
Etkileyici!
GraphDB türlerinde ArangoDB'ye ilgiyle bakıyordum, sanırım EdgeDB'ye de bir göz atmam gerekecek.
Müthiş bir övgü. 2.0'ı 28/7 sabah 10:00'da (PT) duyuracaklarını söylüyorlar.
EdgeDB 1.0 sürümü
EdgeDB - geliştiriciler için yeni nesil açık kaynak ORDB