Ben nispeten üniversite dışında tazeyim, bu yüzden ilişkisel veritabanları ile aşinalık çoğu BCNF veya 3NF olmayan bir şey bir travesti olan benim veritabanları ders. Kesinlikle bu uç noktaların bir ucu, ama işteki ekibim gerçekten tam tersi görünüyor.
Mikro hizmet db şemalarımızda, varlıklar nadiren tek bir tablodan daha fazlasına sahiptir. Yaygın olarak başka bir tabloya normalleştireceğiniz her şey json sütununda saklanır. Daha sonra bu json'daki özelliklerden birinin sorgulanması gerektiği keşfedilirse, yeni bir sütun eklenir ve veriler her iki yerde de saklanır (evet, aynı tabloda iki farklı sütunda).
Birçok durumda bu json sütunlarının kesinlikle bir avantajı vardır. Bu verileri asla sorgulamanız gerekmiyorsa ve bu verilerde tek taraflı bir değişiklik yapmanız gerekmiyorsa (ki bu kesinlikle tahmin edemeyeceğiniz bir şeydir), bu kötü bir fikir değildir. Ayrıca, hizmetlerimizin çoğu ya sunucuyu görmez ya da ihtiyaç duydukları şey için müstehcen bir miktarda disk alanına sahip makinelerde barındırılır, bu nedenle veri çoğaltma büyük bir sorun değildir. (Genel olarak felsefeden kaçınmak istediğim bir şey olsa da)
Şu anda, kurallara sahip oldukları koşullara göre eşleşen bir hizmet oluşturuyoruz ve daha sonra kurallar doğru olduğunda bu kurallarla ilişkili bir dizi işlem gerçekleştiriyoruz (örneğin, tüm koşullar doğrudur). Bu hizmeti en kısa sürede oluşturan alt ekibim, şemadaki kurallardan uzak eylemleri ve koşulları normalleştirmenin önemli bir yararı olduğuna inanıyor. Açıkçası bu tablo, kural kimliği ile yabancı anahtar ilişkilerini korur. Bizim bakış açımızdan, sadece bir kez değerlendirilmemizi sağlayan koşullara ilişkin veri çoğaltmasını önleyebiliriz ve her bir kuralı çıkarmaya ve bellekte arama yapmaya gerek kalmadan ihtiyaç duyduğumuz koşul ve kuralları bulmamız kolaydır.
Bugün ana mühendislerimizden biriyle konuşurken beni bu şemadan uzaklaştırmaya çalıştı. Aslında ihtiyacımız olmadığını her şekilde tartışmaya çalışmak, gelecekte performans sorunlarına neden olacak ve sahip olduğumuz eski bir monolite tasarım travestisi atıfta bulunacaktır. Yaptığımız şeyi "eski yol" ve düz tabloları json ile "yeni yol" olarak adlandırdı. Atomisite istediğim yerlerde buna ihtiyacımız olmadığını ve sorgular yerine hafızada daha fazla şey yapmamız gerektiğini savundu. Bu, birçok hizmetimizin şimdi takip ettiği bir tasarım ilkesidir. Verilerimizin hacminin, sorgularımızı hızlı tutması gereken önemli ölçüde artacağını tahmin etmiyoruz. Tahmin ettiğimiz şey, kural değerlendirme ve eylemleri gerçekleştirmek için harcanan çok zaman.
İlişkisel olmayan veritabanlarının son yıllarda daha popüler hale geldiğini anlıyorum, ancak yabancı anahtar ilişkilerinin performans sonuçları hakkında aktif olarak bilgi ararken bile, davasını yapan çok fazla bilgi görmüyorum. Sanırım sorunlara neden olabilecek büyük işlemler yapmaya eğilimli olabilirler, ancak bu yabancı anahtarın kendisinden bağımsız bir sorun gibi görünüyor.
Bu benim saflığım mı? Yoksa bu benim ve alt ekibimin eksik olduğu bir şey mi var? Sorunumuzla ilgili ayrıntılı bilgi vermedim çünkü buna bir çözüm aramıyorum. Bunun daha büyük ekibimizde yaygın bir eğilim olduğu göz önüne alındığında, bununla bir şey olup olmadığını gerçekten merak ediyorum.