MongoDB'den Postgres'e

Bu Ne Hakkında?

Bir şirkette bir pozisyon için mülakat yaparken, aşağıdaki soruyu yanıtlamam istendi: Lütfen çözdüğünüz en zor problemi açıklayabilir misiniz? Özetle, çözdüğüm en zor problem, 2023 yılında eBay’de çalışırken, eBay’in büyük iç projelerinden birini MongoDB’den Postgres’e taşıdığım zamana rastladı. Ancak bu soru, bu zor problemi nasıl çözdüğüm üzerine gerçekten düşünmemi sağladı ve geliştirici yolculuğumu gözden geçirmeme izin verdi. Bu yüzden, o soruya çok detaylı ve kapsamlı bir yanıt yazdım ve yanıtımı web sitemde paylaşmak istedim.

Soru Ne İdi?

Lütfen çözdüğünüz en zor problemi açıklayabilir misiniz? Lütfen 4 paragraftan az bir yanıt verin ve bize şunları bildirin:

  1. Ne yaptınız
  2. Neyi zorlaştırdı
  3. Bu deneyimden ne öğrendiniz
  4. Sonuç olarak nasıl geliştiğiniz

Yanıtım Ne Oldu?

1 - Ne Yaptınız

Şu anda kariyerimde, çözdüğüm en zor problem, eBay’deki mevcut pozisyonumda çalışırken ortaya çıktı. Şu anda Hitachi Vantara aracılığıyla sözleşmeli olarak çalıştığım eBay’de, Storage Management System (STMS) adlı dahili bir aracı geliştiriyor ve sürdürüyorum. STMS, eBay’in Service & Storage Infrastructure (SSI) ekibi tarafından eBay veri merkezleri genelinde cihazları izlemek ve yönetmek için kullanılan bir araçtır. STMS, bir mühendisin çok sayıda dizi, anahtar, host, disk grubu, küme ve veritabanının metriklerini izleme yeteneği sağlar. Ayrıca anahtarlar ve diziler için uyarı yönetimini yapar ve bir mühendisin host tahsisleri gibi gelişmiş görevleri kolayca tamamlamasına olanak tanır. STMS, eBay veri merkezleri genelinde onlarca/yüzlerce dizi, anahtar, host, disk grubu ve küme için dakikada 1,5 milyondan fazla metriği işler. SSI ekibi için eBay’in depolama altyapısını izlemek ve yönetmek açısından kritik bir araçtır; bu altyapı eBay’in temel hizmeti ve iş modeli için hayati öneme sahiptir. Tüm bunları göz önünde bulundurarak, eBay’de çalıştığım süre boyunca çözmem gereken en zor problem, STMS’yi MongoDB veritabanı yerine Postgres veritabanını kullanacak şekilde taşımaktı.

2 - Neyi zorlaştırdı

Bu problemi zorlaştıran şey, MongoDB ve Postgres’in temelde farklı veritabanları olmasıdır. MongoDB, belge tabanlı bir veritabanıdır (NoSQL); veriler bir koleksiyonda JSON olarak saklanır (dosya dolabındaki belgeler gibi) ve Postgres ise ilişkisel bir veritabanıdır (SQL); veriler bir tabloda satır olarak saklanır (bir elektronik tablo gibi). Ayrıca, STMS’nin tüm arka ucu, verileri JSON olarak işlemek ve yönetmek üzere, yalnızca MongoDB ile uyumlu paketler kullanılarak inşa edilmişti. Bu geçişi yaparken, STMS’nin dahili bir araç olarak ne kadar hayati olduğundan dolayı, kesinti olmaması ve neredeyse tüm özelliklerin çalışmaya devam etmesi gerekiyordu. Bu geçişin tamamının birkaç ay içinde, kesinti olmadan ve uygulanması için net bir plan olmadan tamamlanması gerekiyordu. Ayrıca, önceden Postgres konusunda çok fazla deneyimim yoktu ve tüm çalışma arkadaşlarım gibi büyük bir eski kod tabanını NoSQL’den SQL veritabanına taşımak konusunda hiçbir deneyimimiz yoktu.

3 - Bu Deneyimden Ne Öğrendiniz

MongoDB’den Postgres’e STMS kod geçişi, neredeyse tüm özellik ve işlevselliği koruyarak, kesinti olmadan başarıyla tamamlandı. Bu, kapsamlı araştırma, öğrenme, test etme ve sorun giderme gerektirdi. Veri yapılarını ilişkisel veritabanlarıyla daha etkili çalışacak şekilde yeniden yapılandırdım ve Postgres ile entegre olmayan, bağımlı olduğumuz paketlerin yerine yeni paketler geliştirdim. Genel olarak, geçiş sorunsuz ve gerçek bir kusur olmadan gerçekleşti; beklentilerimin ötesindeydi. Bu süreç boyunca çok şey öğrendim. Teknik olarak, Postgres, SQL, ayrıştırma ağaçları, ORM’ler, Sequelize, Prisma, sorgu oluşturucular, eşdeğerlik kontrolü, birincil-yedek veritabanı kurulumu ve veritabanı ile ilgili birim testleri konusunda daha iyi bir anlayış kazandım. Temelde, karmaşık bir problemi daha etkili bir şekilde daha küçük parçalara ayırmayı ve bu parçalar için etkili çözümler uygulamayı öğrendim. Ayrıca, birçok sınırlama, geri dönüş ve bilinmezlikle karşılaşmamıza rağmen bu projeyi sonuna kadar yönlendirecek bir lider olmayı ve liderlik etmeyi öğrendim.

4 - Sonuç Olarak Nasıl Geliştiniz

Lisede robotik alanında kariyerime başladım ancak eBay’de işe başladığımda web geliştirmeye yöneldim ve önceden hiç deneyimim olmayan bir alana girdim. Bu geçiş, sürekli öğrenme ve uyum sağlama ile tanımlanan bir kariyerin temelini attı. STMS’yi MongoDB’den Postgres’e taşıma zorluğu, kariyerimde önemli bir sıçrama oldu ve profesyonel gelişimime büyük ölçüde katkı sağladı. Bu sadece veritabanları konusundaki anlayışımı derinleştirmek ya da problem çözme becerilerimi artırmakla ilgili değildi. Bu proje beni yeni bir alana itti, titiz planlama ve kesintisiz çalışma taahhüdü gerektirdi. Büyük ölçekli veritabanı geçişlerinde önceki deneyim olmadan geçişi yönlendirmek, net iletişimin, ekip çalışmasının ve karmaşık zorlukları yönetilebilir parçalara bölmenin değerini öğretti. Bu deneyim teknik becerilerimi genişletti ve aynı zamanda özgüvenimi artırdı, daha iddialı hedef ve projelere yönelmemi sağladı. Kariyerimdeki bu dönüm noktası, sadece bir geliştirici ve lider olarak değil, aynı zamanda bir problem çözücü olarak da büyümemi gösterdi; bilinmeyeni kucaklamanın ve başarılı olmanın kişisel ve profesyonel gelişimin anahtarı olduğunu ortaya koydu.

Sonuç Nedir?

Yanıtlarım, şirketin mülakat sürecinin ikinci aşamasına geçmemi sağladı ve ekipten bir geliştiriciyle hoş bir sohbet etmemi mümkün kıldı, bu oldukça güzeldi. Ancak esas olarak, bu görev, eBay’deki zamanımda kariyerimde çözdüğüm en zorlu teknik problemi düşünmemi sağladı. Bu, bir geliştirici/mühendis olarak büyümemi, yeni beceriler geliştirmemi ve karmaşık sorunlara uyum sağlama ve çözme konusundaki özgüvenimi artırmamı sağladı.