Skip to main content

NoSQL üzerine düşündüklerim

Bu aralar NoSQL sistemler oldukça popüler. Ama o kadar çok seçenek var ki gerçekten hangisi hangi senaryolarda en performanslısı bilen yok! Herkes kendi ürününün daha performanslı olduğunu söylüyor ve blog yazıları ve benchmark'larla buna inandırmaya çalışıyor. İşin tuhaf yanı, bütün testlerde sonuçlar hep testi yapan firmanın ürününü açık ara önde gösteriyor. Ve diğer test sonuçlarını yalanlarken de tek bahane olarak hatalı yapılmış konfigürasyonlar gösteriliyor. O zaman neden bu sistemler ilk kurulumda en performanslı çalışacak şekilde konfigüre edilmiyor? Sonuçta biz bu sistemleri denerken hepsinin uzmanı olarak deneyip karar veremeyiz ki!

Neyse işin diğer tartışılacak tarafı ise bence şöyle: İyi hepsi hoş, bir NoSQL sistemini bir web uygulaması veya IoT uygulamasının bazı verilerini kaydetmek için kullanmaya karar verdik diyelim. Senaryomuzda saniyede 200K veriyi kaydetmemiz gerekiyor. Ve NoSQL bir sistemle (bazısında 1 bazısında 10 sunucu ile) bunu hallettik. Peki bu saniyede 200K requesti alıp NoSQL sisteme gönderecek web api'sini hangi dille geliştirip hangi sunucu üzerinden host edeceğiz? IIS olmaz, Apache olmaz, Ngnix olmaz, vs vs. Olur da tek sunucuyla ve düşük maliyetlerle olmaz.

Peki bu işi tek sunucuyla yapabilecek bir dil ve sunucu hiç mi yok? Elbette var! Mesela Whatsapp'ın ve Facebook Messenger'ın altyapısında kullanılan Erlang dili ile kendi sunucumuzu geliştirebiliriz. Veya orda da birçok open source web sunucu alternatiflerini deneyerek en stabil ve performanslı çalışanını kullanabiliriz. Ama şimdi de yeni bir dil üzerinde ekstra zaman ve kaynak harcamamız gerekecek.

Peki yazılım mühendisleri için en optimum çözüm nedir burada? Şimdi bu soruya Microsoft tarafından bir cevap Azure Event Hub veya yeni çıkan Azure IoT Hub'ı kullanmak şeklinde olabilir. Ama orada da ciddi maliyetler oluşuyor. Yani bu problemin az kaynak ve zamanla en az maliyetle bir çözümü yok! Ya zaman ve kaynak ayırıp uzun vadede az para harcayacaksın ya da zamandan ve kaynaktan tasarruf edip sürekli çok para harcayacaksın. Tabi ber problemde olduğu gibi burda da senaryolar çok önemli. Eğer bir startup'sanız ilk etapta zaten fazla para harcayacak bir işiniz olmayacak dolayısıyla Azure, AWS veya başka cloud servisler en iyi çözüm olabilir. İşler yolunda giderse zamanla daha az maliyetli çözümler için zaman ve kaynak ayırırsınız. Veya geliriniz çok iyidir fazla sunucu maliyeti aklınıza bile gelmez.

Bu arada özellikle IoT ile alakalı işlerde Azure IoT Hub gibi hazır servislerin de bazen kullanılması pek mümkün olmuyor. IoT raspberrypi'lerle veya benzeri güçlü sistemlerle olmuyor genellikle. Bu da ayrı bir problem!

Aslında bu konu çok uzar ben de bu kadar sabırlı bir adam değilim. İçimden geldi biraz yazayım dedim ama artık sıkıldım :) Maksat muhabbet olsun siz de bişeyler yazarsanız bana da okuyacak bişeyler çıkar. Şahsen yazmaktan çok okumaya daha meyilliyim.

Benden bu kadar yeter biraz da sizlerden dinleyelim.

Teşekkürler.

Comments

Mehmed said…
Eline saglik Murad hocam.

Popular posts from this blog

Oracle Forms ile Web Servislerine Erişim

Geçtiğimiz günlerde çalıştığım şirket, başka bir yazılım şirketine teknolojik destek vermek için beni görevlendirdi. Oracle Forms Developer kullanılarak geliştirilmiş bir hastane otomasyonun bazı web servislerini kullanması gerekiyordu. 3-4 günlük bir çalışmanın ardından görevimi başarıyla tamamladım çok şükür. Yalnız gerçekten bu çok kolay olmadı. Çünkü Oracle Forms direkt olarak web servislerine erişmek için bir teknoloji barındırmıyordu bünyesinde. Yaptığım araştırmalar sonucunda Oracle Forms'un Java class'larını import edip, kullanabildiğini gördüm. İşte bu durumda problemi çözmüş olduğumu hissettim. Ama yinede beni bekliyen engeller vardı. Bundan emindim çünkü hiç bilmediğim bir ortamda bilmediğim kodları yazacaktım. Ayrıca java konusunda bilgi sahibi olsamda çok tecrübeli değildim ve uzun zamandır java ile ilgilenmemiştim. Ve düşündüğüm gibi birçok problem çıktı karşıma. Ama yinede bu problemleri tek tek aşıp çözüme gitmeyi başardım. Bir Murphy kanunu: "Eğer çıkması ...

FreeMind: Özgür Yazılım Dünyasından Zihin Özgürleştirme Hareketi

Bu geleneksel bir yazı değildir. İnsan zihni, bilişsel bilim, zihin haritaları, psikoloji, beyin fırtınası, bilgi temsilleri, yazılım geliştirme, epistemoloji, metafizik, karmaşıklıkla başa çıkmak, Java ve özgür yazılımın faydaları ilginizi çekiyorsa buyrun okuyun. Üç Yıl Önce Türkiye´de Bir Yer Aralık 2002. Soğuk ve yağmurlu bir gün. Dostum Kıvılcım Hindistan ile Harbiye´de buluşuyor ve Askeri Müze´ye, inet-tr '02 etkinliğine gidiyoruz. İlk girdiğimiz salondaki masada tanıdık ve yabancı yüzler bir arada. Tanıdık yüz: Görkem Çetin. İlk kez karşılaştığımız adam ise Eran Sezgin. Görkem Çetin panel konusuna dair kısa bir konuşma yaptıktan sonra sözü Eran Sezgin´e bırakıyor ve bir sunum fırtınası başlıyor. Kim bu adam? Bir asker. Aynı zamanda bir programcı. Donanmadan. Bir deniz aşığı. Özgür yazılımdan bahsediyor. Beni şaşırtan ise bunlardan hiçbiri değil. Karşımda bir sunum fırtınası var! Hayır, PowerPoint ya da OpenOffice.org veya ona benzer bir programla yapılmış, bol efektli, sesl...

Random number generation using C++ TR1

Random number generation using C++ TR1 Overview This article explains how to use the random number generation facilities in C++ using the TR1 (C++ Standards Committee Technical Report 1 ) extensions. We will cover basic uniform random number generation as well as generating samples from common probability distributions: Bernoulli, binomial, exponential, gamma, geometric, normal, and Poisson. We will point out a few things to watch out for with specific distributions such as parameterization conventions. Finally we will indicate how to generate from probability distributions not directly supported in the TR1 such as Cauchy, chi-squared, and Student t. Support for TR1 extensions in Visual Studio 2008 is added as a feature pack . Other implementations include the Boost and Dinkumware . GCC added experimental support for C++ TR1 in version 4.3. The code samples in this article use fully qualified namespaces for clarity. You could make your code easier to read by adding a few using stat...