Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
15 yazı bulundu
MongoDB Nedir? Document Model, BSON, Collection ve İlişkisel Dünyadan Farkları
Veritabanı SERİ 01

MongoDB Nedir? Document Model, BSON, Collection ve İlişkisel Dünyadan Farkları

MongoDB, veriyi tablo satırları yerine tipli alanlar taşıyan BSON document'leri olarak saklayan bir document veritabanıdır; birlikte okunan veri tek document'te durduğu için çoğu ekran tek okumayla gelir, ama model tablolardan değil sorgulardan türetilmelidir. Gerçek çıktılarla string tarih tuzağı, BSON byte'ları, Decimal128, ObjectId'nin yapısı, kavram eşlemesi, WiredTiger, lisans ve ne zaman seçilmemesi gerektiği.

14 Kas 2026 16 dk 9
MongoDB Lab'ı: Docker'da Tek Node'lu Replica Set, mongosh, Compass ve Bookstore Verisi
Veritabanı SERİ 02

MongoDB Lab'ı: Docker'da Tek Node'lu Replica Set, mongosh, Compass ve Bookstore Verisi

Geliştirme için en doğru MongoDB kurulumu, parola korumalı ve 127.0.0.1'e açık tek node'lu bir replica set'tir; transaction ve change stream ancak replica set'te çalışır, member adı da host'tan çözülebilir olmalıdır. Gerçek çıktılarla compose dosyası ve keyfile, rs.initiate, kullanıcı ve yetkiler, mongosh, Bookstore verisinin mongoimport ile yüklenmesi, .NET'ten bağlantı ve standalone sunucuda transaction hatası.

14 Kas 2026 14 dk 6
MongoDB'de CRUD: find, Projection, Update Operator'leri, Upsert ve Array Sorguları
Veritabanı SERİ 03

MongoDB'de CRUD: find, Projection, Update Operator'leri, Upsert ve Array Sorguları

MongoDB'de güvenli CRUD'un özü, okuma, kontrol ve yazmayı tek bir atomik update'te birleştirmektir: koşullu $inc stoğu negatife düşürmez, oku-sonra-yaz yaklaşımı ise aynı stoğu birden çok kez satar. Gerçek çıktılarla $elemMatch olmadan yanlış eşleşen siparişler, ordered/unordered insertMany, projection, skip'in maliyeti, update operator'leri, positional ve filtered positional update, upsert, findOneAndUpdate, 50 eşzamanlı alıcıyla stok yarışı ve replaceOne tuzağı.

14 Kas 2026 18 dk 7
Document Modeling 1: Embed mi Reference mı? Access Pattern'den Şemaya
Veritabanı SERİ 04

Document Modeling 1: Embed mi Reference mı? Access Pattern'den Şemaya

Embed mi reference mı sorusunun cevabı ilişkinin adından değil, birlikte okunma sıklığından, array'in üst sınırından ve tek document atomikliğine ihtiyaçtan çıkar: sınırlı ve birlikte okunan veri gömülür, sınırsız büyüyen ya da bağımsız yaşayan veri referansla ayrılır. Gerçek ölçümlerle Bookstore'un workload'u, 110.000 yorumda 16 MB sınırı, kopyalanan alanların güncelleme maliyeti, aggregate sınırı ve her okumada $lookup yapan ilişkisel kopya.

14 Kas 2026 13 dk 7
Document Modeling 2: Schema Pattern'leri, Schema Validation ve Şema Evrimi
Veritabanı SERİ 05

Document Modeling 2: Schema Pattern'leri, Schema Validation ve Şema Evrimi

MongoDB şemasız değil, esnek şemalıdır: computed, subset, bucket, polymorphic ve archive gibi pattern'ler modeli okuma ihtiyacına göre şekillendirir, $jsonSchema validation da veri kalitesini veritabanında korur; 9.0'ın constraint seviyesi her document'in kurala uyduğunu garanti eder. Gerçek çıktılarla kitapta yorum özeti, son 3 yorum, saatlik bucket, tek collection'da üç baskı türü, schemaVersion ile migration, moderate ve strict farkı ve constraint'e geçiş.

14 Kas 2026 19 dk 10
MongoDB Index'leri: Compound Index ve ESR Kuralı, Multikey, Partial, TTL, Collation ve explain
Veritabanı SERİ 06

MongoDB Index'leri: Compound Index ve ESR Kuralı, Multikey, Partial, TTL, Collation ve explain

MongoDB'de compound index'in alan sırası sorgudan türetilir: önce eşitlik, sonra sıralama, en son aralık (ESR); range çok seçiciyse aralığı sıralamadan önce koymak (ERS) daha az key okur. Gerçek explain çıktılarıyla COLLSCAN ve IXSCAN, covered query, $in ve SORT_MERGE, multikey, unique, partial, sparse ve TTL index'ler, Türkçe collation tuzağı, $indexStats ile kullanılmayan index'i bulmak ve hidden index.

14 Kas 2026 16 dk 8
Aggregation Pipeline 1: $match, $group, $project, $unwind, $lookup ve $facet
Veritabanı SERİ 07

Aggregation Pipeline 1: $match, $group, $project, $unwind, $lookup ve $facet

MongoDB'de aggregation pipeline, document'leri sırayla stage'lerden geçirip yeni sonuçlar üretir; $match başta olursa index kullanılır, $unwind ise document sayısını array boyunca çoğaltır. Gerçek çıktılarla aylık ciroyu iki katına çıkaran $unwind hatası, SQL Temelleri'ndeki GROUP BY ve HAVING sonuçlarıyla birebir aynı $group çıktıları, optimizer'ın stage sırasını değiştirmesi, $lookup'ın join stratejisi ve arama sayfası için $facet.

14 Kas 2026 13 dk 9
Aggregation Pipeline 2: $setWindowFields, $graphLookup, $bucket, $merge ile Materialized View ve Bellek Limitleri
Veritabanı SERİ 08

Aggregation Pipeline 2: $setWindowFields, $graphLookup, $bucket, $merge ile Materialized View ve Bellek Limitleri

MongoDB'de window function'ların karşılığı $setWindowFields; ama eksik günleri $densify ile eklemeden yapılan hareketli ortalama, takvim günlerine değil var olan document'lere göre hesaplanır. Gerçek çıktılarla SQL Temelleri'ndeki running total, top-N ve 7 günlük ortalamayla birebir aynı sonuçlar, $graphLookup ile kategori ağacı, $bucketAuto, $merge ile artımlı yenilenen materialized view, 9.0'ın sorgu başına bellek sınırı ve $function.

14 Kas 2026 14 dk 7
.NET'te MongoDB Driver: MongoClient, POCO Mapping, Convention'lar, Guid/Decimal/DateTime ve LINQ
Veritabanı SERİ 09

.NET'te MongoDB Driver: MongoClient, POCO Mapping, Convention'lar, Guid/Decimal/DateTime ve LINQ

.NET'te MongoDB driver'ı doğru kullanmanın temeli, MongoClient'ı uygulama boyunca tek instance olarak tutmak ve serialization kurallarını (convention, Guid temsili) ilk kullanımdan önce bir kez kaydetmektir. Gerçek çıktılarla 3.x'te ayarsız Guid'in hata vermesi, decimal'in Decimal128, DateTimeOffset'in document olarak saklanması, LINQ'in ürettiği pipeline, collation'lı sorgu, client-side projection hatası, _t ile polymorphic serialization ve eski Guid verisi tuzağı.

14 Kas 2026 13 dk 10
.NET'te MongoDB İleri: Aggregation, Bulk Write, Transaction, Change Stream ve Testcontainers
Veritabanı SERİ 10

.NET'te MongoDB İleri: Aggregation, Bulk Write, Transaction, Change Stream ve Testcontainers

.NET'te WithTransactionAsync, geçici hatalarda (örneğin write conflict) transaction'ın gövdesini baştan çalıştırır; bu yüzden gövde yan etkisiz ve kısa olmalı. Gerçek çıktılarla 20 eşzamanlı siparişte gövdenin onlarca kez çalışması, fluent Aggregate ve BsonDocument stage'leri, ordered ve unordered BulkWriteAsync, 8.0'ın client-level bulk write'ı, BackgroundService'te resume token saklayan bir change stream ve Testcontainers ile replica set'li integration testi.

14 Kas 2026 13 dk 9
MongoDB EF Core Provider: Ne Zaman Kullanılır, Neyi Desteklemez?
Veritabanı SERİ 11

MongoDB EF Core Provider: Ne Zaman Kullanılır, Neyi Desteklemez?

MongoDB EF Core provider, CRUD ağırlıklı ve ekibin EF Core'a alıştığı yerde iyi bir seçim; aggregation, change stream, bulk write ve alan düzeyinde atomik update gereken yerde native driver gerekiyor. Gerçek komut çıktılarıyla: SaveChanges'in owned alanları her seferinde yeniden yazması ve bunun driver'ın $inc'ini ezmesi, row version, implicit transaction, Select ve Include'un 10.0.5'te çalışması, GroupBy'ın çalışmaması.

14 Kas 2026 14 dk 10
Read Concern, Write Concern ve Read Preference: MongoDB'de Tutarlılığı Ayarlamak
Veritabanı SERİ 12

Read Concern, Write Concern ve Read Preference: MongoDB'de Tutarlılığı Ayarlamak

MongoDB'de bir yazmanın ne kadar kalıcı, bir okumanın ne kadar güncel olduğunu write concern, read concern ve read preference birlikte belirler; secondary'den okumak bayat veri demektir ve read-your-writes için majority ile causal session gerekir. Üç üyeli bir lab'da gerçek çıktılarla: secondary'de görünmeyen yeni sipariş, zaman aşımına uğrayıp yine de yazılmış bir w:majority, .NET'te 200 denemede 51-59 bayat okuma ve causal session ile sıfır.

14 Kas 2026 10 dk 9
Blog Haritası