{"id":44877,"date":"2026-09-24T21:02:31","date_gmt":"2026-09-24T18:02:31","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/"},"modified":"2026-09-24T21:03:02","modified_gmt":"2026-09-24T18:03:02","slug":"documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/","title":{"rendered":"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)"},"content":{"rendered":"<h2>DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)<\/h2>\n<p>Veritaban\u0131 sorgular\u0131nda performans kritik \u00f6neme sahiptir. \u00d6zellikle b\u00fcy\u00fck veri setlerinde, tekrarlayan veya benzersiz de\u011ferleri sayma\/listeleme i\u015flemleri ciddi performans darbo\u011fazlar\u0131na yol a\u00e7abilir. AWS DocumentDB&#8217;nin 0.116 s\u00fcr\u00fcm\u00fcnde tan\u0131t\u0131lan <code>$group<\/code> a\u015famas\u0131ndaki benzersiz tarama (distinct scan) \u00f6zelli\u011fi, bu t\u00fcr senaryolarda \u00f6nemli bir optimizasyon sunuyor. Peki, bu yeni \u00f6zellik tam olarak ne i\u015fe yar\u0131yor ve geli\u015ftiriciler i\u00e7in ne gibi avantajlar sa\u011fl\u0131yor? Gelin, bu konuyu derinlemesine inceleyelim.<\/p>\n<h2>Neden Benzersiz Veri Taramas\u0131 \u00d6nemli?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz uygulamalar\u0131, kullan\u0131c\u0131lar\u0131n eylemlerini, \u00fcr\u00fcn tercihlerini, co\u011frafi konumlar\u0131n\u0131 ve daha pek \u00e7ok dinami\u011fi s\u00fcrekli olarak kaydediyor. Bu veriler, i\u015f zekas\u0131 analizleri, raporlamalar, ki\u015fiselle\u015ftirilmi\u015f \u00f6neriler ve hatta temel i\u015flevler i\u00e7in hayati \u00f6nem ta\u015f\u0131yor. Ancak, bu kay\u0131tlar genellikle ham ve tekrarlayan bilgiler i\u00e7erir. \u00d6rne\u011fin, bir e-ticaret platformunda, ayn\u0131 kullan\u0131c\u0131n\u0131n ayn\u0131 \u00fcr\u00fcne defalarca bakmas\u0131 olduk\u00e7a yayg\u0131n bir durumdur. Bir analiz yaparken, &#8220;Bug\u00fcn ka\u00e7 farkl\u0131 kullan\u0131c\u0131 \u00fcr\u00fcnlerimize g\u00f6z att\u0131?&#8221; sorusunu yan\u0131tlamak istedi\u011fimizde, her bir g\u00f6r\u00fcnt\u00fclemeyi de\u011fil, yaln\u0131zca benzersiz kullan\u0131c\u0131 kimliklerini saymam\u0131z gerekir. \u0130\u015fte bu noktada, <code>$group<\/code> a\u015famas\u0131nda benzersiz veri taramas\u0131 devreye giriyor.<\/p>\n<p>Geleneksel y\u00f6ntemlerde, bir veritaban\u0131nda belirli bir alana g\u00f6re benzersiz de\u011ferleri elde etmek i\u00e7in genellikle iki ana yakla\u015f\u0131m izlenirdi: ya t\u00fcm veriyi belle\u011fe y\u00fckleyip uygulama katman\u0131nda benzersizle\u015ftirme yapmak ya da veritaban\u0131n\u0131n daha karma\u015f\u0131k ve bazen daha az performansl\u0131 operasyonlar\u0131n\u0131 kullanmak. \u0130lk y\u00f6ntem, b\u00fcy\u00fck veri setlerinde bellek yetersizli\u011fine yol a\u00e7abilirken, ikinci y\u00f6ntem de sorgu karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131rabilir ve yine de istenen performans\u0131 vermeyebilir. Bu t\u00fcr zorluklar, geli\u015ftiricilerin veritaban\u0131 operasyonlar\u0131n\u0131 optimize etmek i\u00e7in s\u00fcrekli yeni yollar aramas\u0131na neden oluyordu. \u00d6zellikle MongoDB ile uyumlu \u00e7al\u0131\u015fan DocumentDB gibi NoSQL veritabanlar\u0131nda, bu t\u00fcr toplama (aggregation) i\u015flemleri s\u0131k\u00e7a kullan\u0131l\u0131r ve performanslar\u0131 do\u011frudan kullan\u0131c\u0131 deneyimini etkiler.<\/p>\n<p>DocumentDB&#8217;nin 0.116 s\u00fcr\u00fcm\u00fcyle gelen <code>$group<\/code> a\u015famas\u0131ndaki <code>$addToSet<\/code> veya <code>$first<\/code>, <code>$last<\/code> gibi operat\u00f6rlerle birlikte kullan\u0131lan benzersiz tarama optimizasyonlar\u0131, bu s\u00fcreci daha verimli hale getiriyor. Bu, veritaban\u0131n\u0131n, ayn\u0131 alan i\u00e7in birden fazla tekrar eden de\u011feri i\u015flerken gereksiz hesaplamalardan ka\u00e7\u0131nmas\u0131n\u0131 sa\u011fl\u0131yor. Temelde, veritaban\u0131 motoru, belirli bir anahtara (field) sahip benzersiz de\u011ferleri daha ak\u0131ll\u0131ca takip edebiliyor ve bu sayede hem i\u015flem g\u00fcc\u00fcnden tasarruf ediyor hem de sorgu s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131yor.<\/p>\n<h2>DocumentDB 0.116&#8217;da $group ve Benzersiz Taramaya Giri\u015f<\/h2>\n<p>AWS DocumentDB, MongoDB 3.6 API ile uyumlu bir NoSQL veritaban\u0131 hizmetidir. MongoDB&#8217;nin g\u00fc\u00e7l\u00fc toplama (aggregation) \u00e7er\u00e7evesini destekler. Bu \u00e7er\u00e7eve, verileri i\u015flemek, d\u00f6n\u00fc\u015ft\u00fcrmek ve \u00f6zetlemek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7 setidir. <code>$group<\/code> a\u015famas\u0131, bu \u00e7er\u00e7evenin en temel ve en s\u0131k kullan\u0131lan a\u015famalar\u0131ndan biridir. Belirli bir anahtara (field) g\u00f6re belgeleri grupland\u0131rmam\u0131z\u0131 ve bu gruplar \u00fczerinde toplama i\u015flemleri yapmam\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, t\u00fcm sipari\u015fleri m\u00fc\u015fteri kimli\u011fine g\u00f6re grupland\u0131r\u0131p her m\u00fc\u015fterinin toplam harcamas\u0131n\u0131 hesaplayabiliriz.<\/p>\n<p>\u015eimdi, benzersiz tarama (distinct scan) kavram\u0131na odaklanal\u0131m. DocumentDB 0.116 \u00f6ncesinde, bir <code>$group<\/code> a\u015famas\u0131nda belirli bir alana g\u00f6re benzersiz de\u011ferleri toplamak istedi\u011fimizde, veritaban\u0131 motoru bu de\u011feri her g\u00f6rd\u00fc\u011f\u00fcnde bir i\u015flem yapmaya meyilliydi. E\u011fer ayn\u0131 de\u011fere sahip y\u00fczlerce, binlerce belge varsa, bu de\u011fer defalarca i\u015flenirdi. Bu durum, \u00f6zellikle b\u00fcy\u00fck veri k\u00fcmelerinde ve yo\u011fun tekrarlayan de\u011ferlerde ciddi bir performans y\u00fck\u00fc olu\u015ftururdu. D\u00fc\u015f\u00fcn\u00fcn ki, milyonlarca i\u015flem kayd\u0131 var ve siz bu kay\u0131tlardaki benzersiz \u00fcr\u00fcn ID&#8217;lerini listelemek istiyorsunuz. E\u011fer her bir i\u015flem kayd\u0131 i\u00e7in \u00fcr\u00fcn ID&#8217;si i\u015fleniyorsa, bu \u00e7ok zaman al\u0131c\u0131 ve kaynak t\u00fcketen bir i\u015flem olurdu.<\/p>\n<p>DocumentDB 0.116 s\u00fcr\u00fcm\u00fcyle birlikte, <code>$group<\/code> a\u015famas\u0131ndaki baz\u0131 toplama operat\u00f6rleri, benzersiz de\u011ferleri daha verimli bir \u015fekilde i\u015flemek \u00fczere optimize edildi. Bu optimizasyon, veritaban\u0131 motorunun, belirli bir grupland\u0131rma anahtar\u0131 i\u00e7in zaten kar\u015f\u0131la\u015ft\u0131\u011f\u0131 bir de\u011feri tekrar tekrar i\u015flemek yerine, o de\u011feri yaln\u0131zca bir kez i\u015flemesini veya benzersizli\u011fini daha h\u0131zl\u0131 bir \u015fekilde kontrol etmesini sa\u011flar. Bu, \u00f6zellikle <code>$addToSet<\/code> gibi operat\u00f6rler kullan\u0131ld\u0131\u011f\u0131nda belirginle\u015fir. <code>$addToSet<\/code>, bir diziye yaln\u0131zca o \u00f6\u011fe zaten mevcut de\u011filse ekleme yapar. Eski s\u00fcr\u00fcmlerde, bir \u00f6\u011fenin zaten mevcut olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in daha fazla \u00e7aba gerekebilirken, yeni optimizasyonlar bu kontrol\u00fc daha h\u0131zl\u0131 hale getirir.<\/p>\n<p>Bu iyile\u015ftirmenin temelinde, veritaban\u0131 motorunun dahili veri yap\u0131lar\u0131 ve algoritmalar\u0131ndaki g\u00fcncellemeler yat\u0131yor. Motor, grupland\u0131rma anahtarlar\u0131n\u0131 ve ilgili de\u011ferleri daha ak\u0131ll\u0131ca \u00f6nbelle\u011fe alabilir veya daha h\u0131zl\u0131 eri\u015fim sa\u011flayan veri yap\u0131lar\u0131 kullanabilir. Bu sayede, ayn\u0131 de\u011feri i\u015flemek i\u00e7in harcanan CPU ve bellek kaynaklar\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azal\u0131r. Sonu\u00e7 olarak, geli\u015ftiriciler, daha karma\u015f\u0131k sorgular yazmak zorunda kalmadan, daha h\u0131zl\u0131 ve daha verimli toplama i\u015flemleri ger\u00e7ekle\u015ftirebilirler. Bu, \u00f6zellikle ger\u00e7ek zamanl\u0131 analizler, raporlama sistemleri ve kullan\u0131c\u0131 davran\u0131\u015flar\u0131n\u0131 izleyen uygulamalar i\u00e7in b\u00fcy\u00fck bir kazan\u0131md\u0131r.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryosu: E-Ticaret Platformunda Benzersiz Ziyaret\u00e7i Takibi<\/h2>\n<p>Bir e-ticaret platformu d\u00fc\u015f\u00fcnelim. Her kullan\u0131c\u0131 etkile\u015fimi (\u00fcr\u00fcn g\u00f6r\u00fcnt\u00fcleme, sepete ekleme, sat\u0131n alma) bir belge olarak veritaban\u0131na kaydediliyor. Bu belgeler, kullan\u0131c\u0131n\u0131n kimli\u011fi (userID), \u00fcr\u00fcn kimli\u011fi (productID), zaman damgas\u0131 (timestamp) ve di\u011fer detaylar\u0131 i\u00e7eriyor. Platform y\u00f6neticileri, g\u00fcnl\u00fck olarak ka\u00e7 <strong>farkl\u0131<\/strong> kullan\u0131c\u0131n\u0131n siteyi ziyaret etti\u011fini bilmek istiyor. Bu, pazarlama kampanyalar\u0131n\u0131n etkinli\u011fini \u00f6l\u00e7mek ve kullan\u0131c\u0131 trafi\u011fini anlamak i\u00e7in kritik bir metriktir.<\/p>\n<p>Eski DocumentDB s\u00fcr\u00fcmlerinde veya benzeri sistemlerde, bu sorguyu \u00e7al\u0131\u015ft\u0131rmak \u015f\u00f6yle g\u00f6r\u00fcnebilirdi:<\/p>\n<pre><code>\n    [\n      {\n        $group: {\n          _id: \"$userID\", \/\/ Kullan\u0131c\u0131 kimli\u011fine g\u00f6re grupla\n          \/\/ Bu a\u015famada sadece benzersiz userID'leri topluyoruz,\n          \/\/ her bir userID'nin bir kez g\u00f6r\u00fcnmesi yeterli.\n        }\n      },\n      {\n        $count: \"distinctUsers\" \/\/ Gruplanan belgelerin say\u0131s\u0131n\u0131 al\n      }\n    ]\n    <\/code><\/pre>\n<p>Yukar\u0131daki sorguda, ilk <code>$group<\/code> a\u015famas\u0131, t\u00fcm belgeleri <code>userID<\/code> alan\u0131na g\u00f6re gruplar. E\u011fer bir kullan\u0131c\u0131n\u0131n y\u00fczlerce g\u00f6r\u00fcnt\u00fcleme kayd\u0131 varsa, bu <code>userID<\/code> defalarca i\u015flenir. \u0130kinci <code>$count<\/code> a\u015famas\u0131 ise bu gruplar\u0131n say\u0131s\u0131n\u0131 verir. Ancak, ilk <code>$group<\/code> a\u015famas\u0131n\u0131n kendisi, e\u011fer optimize edilmemi\u015fse, b\u00fcy\u00fck veri setlerinde yava\u015f \u00e7al\u0131\u015fabilir \u00e7\u00fcnk\u00fc her bir belge i\u00e7in <code>userID<\/code> alan\u0131n\u0131 kontrol etmesi ve gruplama yapmas\u0131 gerekir.<\/p>\n<p>DocumentDB 0.116&#8217;da ise bu t\u00fcr i\u015flemler, <code>$group<\/code> a\u015famas\u0131ndaki dahili optimizasyonlar sayesinde daha verimli hale gelir. Veritaban\u0131 motoru, belirli bir <code>userID<\/code> ile kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda, bu <code>userID<\/code>&#8216;nin zaten gruplar aras\u0131nda olup olmad\u0131\u011f\u0131n\u0131 daha h\u0131zl\u0131 bir \u015fekilde tespit edebilir. Bu, \u00f6zellikle <code>$addToSet<\/code> gibi operat\u00f6rlerle birlikte kullan\u0131ld\u0131\u011f\u0131nda daha da belirginle\u015fir. \u00d6rne\u011fin, her kullan\u0131c\u0131n\u0131n g\u00f6r\u00fcnt\u00fcledi\u011fi <strong>benzersiz<\/strong> \u00fcr\u00fcnleri listelemek istedi\u011fimizde:<\/p>\n<pre><code>\n    [\n      {\n        $group: {\n          _id: \"$userID\",\n          viewedProducts: { $addToSet: \"$productID\" } \/\/ Her kullan\u0131c\u0131 i\u00e7in benzersiz \u00fcr\u00fcn ID'lerini bir set'e ekle\n        }\n      },\n      {\n        $project: {\n          _id: 0,\n          userID: \"$_id\",\n          numberOfUniqueProducts: { $size: \"$viewedProducts\" } \/\/ G\u00f6r\u00fcnt\u00fclenen benzersiz \u00fcr\u00fcn say\u0131s\u0131\n        }\n      }\n    ]\n    <\/code><\/pre>\n<p>Bu sorguda, <code>$addToSet: \"$productID\"<\/code> operat\u00f6r\u00fc, her bir <code>userID<\/code> grubuna ait <code>productID<\/code>&#8216;leri bir diziye eklerken, yaln\u0131zca daha \u00f6nce eklenmemi\u015f olanlar\u0131 ekler. DocumentDB 0.116&#8217;daki optimizasyonlar, bu <code>$addToSet<\/code> i\u015fleminin daha h\u0131zl\u0131 ger\u00e7ekle\u015fmesini sa\u011flar. Veritaban\u0131, bir <code>productID<\/code>&#8216;nin zaten o kullan\u0131c\u0131n\u0131n <code>viewedProducts<\/code> setinde olup olmad\u0131\u011f\u0131n\u0131 daha etkin bir \u015fekilde kontrol eder. Bu, \u00f6zellikle bir kullan\u0131c\u0131n\u0131n \u00e7ok say\u0131da farkl\u0131 \u00fcr\u00fcn\u00fc g\u00f6r\u00fcnt\u00fcledi\u011fi durumlarda veya ayn\u0131 \u00fcr\u00fcnleri tekrar tekrar g\u00f6r\u00fcnt\u00fcledi\u011fi durumlarda performans\u0131 art\u0131r\u0131r.<\/p>\n<p>Bu iyile\u015ftirme, sadece ziyaret\u00e7i say\u0131s\u0131n\u0131 bulmakla kalmaz, ayn\u0131 zamanda daha karma\u015f\u0131k analizler i\u00e7in de kap\u0131 aralar. \u00d6rne\u011fin, &#8220;En \u00e7ok hangi \u00fcr\u00fcnler farkl\u0131 kullan\u0131c\u0131lar taraf\u0131ndan g\u00f6r\u00fcnt\u00fclendi?&#8221; veya &#8220;Hangi kullan\u0131c\u0131lar en \u00e7ok say\u0131da farkl\u0131 \u00fcr\u00fcn\u00fc g\u00f6r\u00fcnt\u00fcledi?&#8221; gibi sorulara daha h\u0131zl\u0131 yan\u0131tlar bulmak m\u00fcmk\u00fcn hale gelir. Bu t\u00fcr analizler, stok y\u00f6netimi, \u00fcr\u00fcn \u00f6neri sistemleri ve pazarlama stratejilerinin belirlenmesinde kritik rol oynar.<\/p>\n<h2>$group A\u015famas\u0131ndaki Optimizasyonlar Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h2>\n<p>DocumentDB 0.116&#8217;daki <code>$group<\/code> a\u015famas\u0131ndaki benzersiz tarama optimizasyonlar\u0131n\u0131n tam olarak nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak i\u00e7in, veritaban\u0131 motorlar\u0131n\u0131n toplama i\u015flemleri s\u0131ras\u0131nda kulland\u0131\u011f\u0131 genel stratejilere g\u00f6z atmak faydal\u0131 olacakt\u0131r. Genellikle, bir <code>$group<\/code> a\u015famas\u0131, verileri bellekte veya diskte ge\u00e7ici olarak depolayarak \u00e7al\u0131\u015f\u0131r. Veriler, belirtilen anahtarlara g\u00f6re gruplan\u0131r ve her grup i\u00e7in toplama i\u015flemleri (\u00f6rne\u011fin, sayma, toplama, ortalama alma) ger\u00e7ekle\u015ftirilir.<\/p>\n<p>Optimizasyon \u00f6ncesinde, bir <code>$group<\/code> a\u015famas\u0131 belirli bir alana g\u00f6re benzersiz de\u011ferleri toplamak istedi\u011finde (\u00f6rne\u011fin, <code>$addToSet<\/code> kullanarak), veritaban\u0131 motoru her bir belgeyi i\u015flerken \u015fu ad\u0131mlar\u0131 izleyebilirdi:<\/p>\n<ol>\n<li>Belgeyi al.<\/li>\n<li>Belgeye ait grupland\u0131rma anahtar\u0131n\u0131 belirle (\u00f6rne\u011fin, <code>userID<\/code>).<\/li>\n<li>E\u011fer bu anahtar daha \u00f6nce g\u00f6r\u00fclmediyse, yeni bir grup olu\u015ftur.<\/li>\n<li>Gruplanan alana (\u00f6rne\u011fin, <code>productID<\/code>) ait de\u011feri al.<\/li>\n<li>Bu de\u011feri, ilgili grubun toplama operat\u00f6r\u00fcn\u00fcn gerektirdi\u011fi \u015fekilde i\u015fle. <code>$addToSet<\/code> durumunda, bu de\u011ferin zaten grubun dizi i\u00e7inde olup olmad\u0131\u011f\u0131n\u0131 kontrol et ve de\u011filse ekle.<\/li>\n<\/ol>\n<p>Bu s\u00fcre\u00e7te, 5. ad\u0131mda yap\u0131lan &#8220;kontrol et ve ekle&#8221; i\u015flemi, \u00f6zellikle diziler b\u00fcy\u00fcd\u00fck\u00e7e veya ayn\u0131 de\u011ferler tekrar tekrar gelirse, hesaplama maliyeti y\u00fcksek olabilir. Veritaban\u0131 motorunun, her bir yeni \u00f6\u011fe i\u00e7in dizinin tamam\u0131n\u0131 veya b\u00fcy\u00fck bir k\u0131sm\u0131n\u0131 taramas\u0131 gerekebilir.<\/p>\n<p>DocumentDB 0.116&#8217;daki optimizasyonlar, bu s\u00fcreci daha verimli hale getirir. Bu optimizasyonlar genellikle \u015fu \u015fekillerde ger\u00e7ekle\u015fir:<\/p>\n<ul>\n<li><strong>Daha Ak\u0131ll\u0131 Hash Tablolar\u0131 veya Set Yap\u0131lar\u0131:<\/strong> Veritaban\u0131 motoru, gruplama anahtarlar\u0131 ve bunlara kar\u015f\u0131l\u0131k gelen benzersiz de\u011ferler i\u00e7in daha optimize edilmi\u015f bellek i\u00e7i veri yap\u0131lar\u0131 kullanabilir. \u00d6rne\u011fin, benzersiz de\u011ferleri depolamak i\u00e7in hash setleri (hash sets) veya benzeri yap\u0131lar kullanarak, bir de\u011ferin mevcut olup olmad\u0131\u011f\u0131n\u0131 kontrol etme s\u00fcresini O(n) yerine ortalama O(1)&#8217;e indirebilir.<\/li>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> Motor, s\u0131k kar\u015f\u0131la\u015f\u0131lan grupland\u0131rma anahtarlar\u0131n\u0131 ve bunlara ait benzersiz de\u011ferleri \u00f6nbelle\u011fe alabilir. Bu, ayn\u0131 anahtar ve de\u011fer kombinasyonlar\u0131 tekrar tekrar i\u015flendi\u011finde, tekrar hesaplama veya arama yapma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>Paralel \u0130\u015fleme \u0130yile\u015ftirmeleri:<\/strong> DocumentDB, da\u011f\u0131t\u0131k bir sistem oldu\u011fundan, toplama i\u015flemlerini birden fazla i\u015f\u00e7i (worker) \u00fczerinde paralel olarak y\u00fcr\u00fctebilir. 0.116 s\u00fcr\u00fcm\u00fcndeki optimizasyonlar, bu paralel i\u015fleme s\u0131ras\u0131nda benzersiz de\u011ferlerin daha tutarl\u0131 ve verimli bir \u015fekilde y\u00f6netilmesini sa\u011flayabilir. \u00d6zellikle, farkl\u0131 i\u015f\u00e7ilerin ayn\u0131 benzersiz de\u011feri i\u015fleme \u00e7ak\u0131\u015fmalar\u0131n\u0131 azaltmaya y\u00f6nelik geli\u015ftirmeler olabilir.<\/li>\n<li><strong>Ak\u0131ll\u0131 Veri Tarama Y\u00f6ntemleri:<\/strong> Veritaban\u0131 motoru, verileri tararken, belirli bir grupland\u0131rma anahtar\u0131 i\u00e7in zaten i\u015flenmi\u015f bir de\u011feri daha h\u0131zl\u0131 tan\u0131yabilir. Bu, verinin kendisinin s\u0131ral\u0131 olmas\u0131 veya belirli indekslerin kullan\u0131lmas\u0131 gibi fakt\u00f6rlere ba\u011fl\u0131 olabilir, ancak motorun dahili mant\u0131\u011f\u0131, gereksiz tekrar eden i\u015flemleri alg\u0131lay\u0131p atlayacak \u015fekilde geli\u015ftirilmi\u015ftir.<\/li>\n<\/ul>\n<p>\u00d6zetle, DocumentDB 0.116, <code>$group<\/code> a\u015famas\u0131ndaki bu t\u00fcr operat\u00f6rler i\u00e7in veritaban\u0131 motorunun &#8220;ak\u0131ll\u0131&#8221; hale gelmesini sa\u011flam\u0131\u015ft\u0131r. Motor, art\u0131k sadece gelen veriyi i\u015flemekle kalm\u0131yor, ayn\u0131 zamanda i\u015fledi\u011fi verinin benzersizli\u011fini daha proaktif ve verimli bir \u015fekilde y\u00f6netiyor. Bu, geli\u015ftiricilerin sorgular\u0131n\u0131 de\u011fi\u015ftirmeden daha iyi performans elde etmelerini sa\u011flar.<\/p>\n<h2>Performans Kazanc\u0131n\u0131 \u00d6l\u00e7mek ve \u0130zlemek<\/h2>\n<p>Yeni bir \u00f6zellik kullan\u0131ma sunuldu\u011funda, en \u00f6nemli ad\u0131mlardan biri, bu \u00f6zelli\u011fin ger\u00e7ek d\u00fcnyadaki performans etkisini \u00f6l\u00e7mektir. DocumentDB 0.116&#8217;daki <code>$group<\/code> optimizasyonlar\u0131 i\u00e7in de durum ayn\u0131d\u0131r. Performans kazanc\u0131n\u0131 anlamak ve izlemek i\u00e7in birka\u00e7 y\u00f6ntem mevcuttur:<\/p>\n<h3>1. Sorgu Plan\u0131 Analizi (Query Plan Analysis)<\/h3>\n<p>Herhangi bir sorgunun performans\u0131n\u0131 anlaman\u0131n en temel yolu, sorgunun nas\u0131l y\u00fcr\u00fct\u00fcld\u00fc\u011f\u00fcn\u00fc g\u00f6steren sorgu plan\u0131n\u0131 incelemektir. DocumentDB, MongoDB&#8217;nin <code>explain()<\/code> komutunu destekler. Bu komut, sorgunun hangi a\u015famalardan ge\u00e7ti\u011fini, hangi indekslerin kullan\u0131ld\u0131\u011f\u0131n\u0131 ve her a\u015faman\u0131n ne kadar zaman ve kaynak t\u00fcketti\u011fini detayl\u0131 olarak g\u00f6sterir.<\/p>\n<p>\u00d6zellikle <code>$group<\/code> a\u015famas\u0131n\u0131n maliyetini kar\u015f\u0131la\u015ft\u0131rmak i\u00e7in, ayn\u0131 sorguyu hem DocumentDB 0.116 \u00f6ncesi bir s\u00fcr\u00fcmde (varsa) hem de 0.116 s\u00fcr\u00fcm\u00fcnde <code>explain()<\/code> ile \u00e7al\u0131\u015ft\u0131r\u0131n. <code>executionStats<\/code> se\u00e7ene\u011fi, sorgunun ger\u00e7ek \u00e7al\u0131\u015fma istatistiklerini, yani ge\u00e7en s\u00fcreyi, i\u015flenen belge say\u0131s\u0131n\u0131 ve bellek kullan\u0131m\u0131n\u0131 g\u00f6sterir. Bu kar\u015f\u0131la\u015ft\u0131rma, <code>$group<\/code> a\u015famas\u0131ndaki i\u015flem s\u00fcresinde veya bellek kullan\u0131m\u0131nda ne kadar bir azalma oldu\u011funu net bir \u015fekilde ortaya koyacakt\u0131r.<\/p>\n<p><code>explain()<\/code> \u00e7\u0131kt\u0131s\u0131nda dikkat edilmesi gereken anahtar metrikler \u015funlard\u0131r:<\/p>\n<ul>\n<li><code>executionTimeMillis<\/code>: Sorgunun tamam\u0131n\u0131n veya belirli bir a\u015famas\u0131n\u0131n milisaniye cinsinden \u00e7al\u0131\u015fma s\u00fcresi.<\/li>\n<li><code>totalDocsExamined<\/code>: Sorgu taraf\u0131ndan taranan toplam belge say\u0131s\u0131.<\/li>\n<li><code>totalKeysExamined<\/code>: Sorgu taraf\u0131ndan taranan toplam indeks anahtar\u0131 say\u0131s\u0131.<\/li>\n<li><code>memUsageBytes<\/code>: Sorgunun kulland\u0131\u011f\u0131 bellek miktar\u0131 (varsa).<\/li>\n<li><code>stage<\/code>: Sorgu plan\u0131ndaki a\u015faman\u0131n ad\u0131 (\u00f6rne\u011fin, <code>GROUP<\/code>).<\/li>\n<\/ul>\n<h3>2. Zaman Bazl\u0131 Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, belirli bir sorguyu belirli bir veri k\u00fcmesi \u00fczerinde \u00e7al\u0131\u015ft\u0131rmak ve s\u00fcreyi \u00f6l\u00e7mek en pratik y\u00f6ntemdir. Bunu yaparken:<\/p>\n<ul>\n<li><strong>Ayn\u0131 Veri K\u00fcmesi:<\/strong> Kar\u015f\u0131la\u015ft\u0131rman\u0131n adil olmas\u0131 i\u00e7in her iki s\u00fcr\u00fcmde de ayn\u0131 miktarda ve yap\u0131da veriye sahip oldu\u011funuzdan emin olun.<\/li>\n<li><strong>Tekrarlayan \u00c7al\u0131\u015ft\u0131rmalar:<\/strong> Tek bir \u00e7al\u0131\u015ft\u0131rma yan\u0131lt\u0131c\u0131 olabilir. Sorguyu birden \u00e7ok kez \u00e7al\u0131\u015ft\u0131r\u0131n ve ortalama s\u00fcreyi al\u0131n. Bu, ge\u00e7ici a\u011f dalgalanmalar\u0131 veya sistemdeki di\u011fer anl\u0131k y\u00fckler gibi fakt\u00f6rlerin etkisini azalt\u0131r.<\/li>\n<li><strong>Farkl\u0131 Veri B\u00fcy\u00fckl\u00fckleri:<\/strong> Sadece k\u00fc\u00e7\u00fck veri setlerinde de\u011fil, uygulaman\u0131z\u0131n kar\u015f\u0131la\u015fabilece\u011fi farkl\u0131 veri b\u00fcy\u00fckl\u00fckleri i\u00e7in de testler yap\u0131n. Bu, optimizasyonun \u00f6l\u00e7eklenebilirli\u011fini anlaman\u0131za yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin, bir raporlama sorgusunu DocumentDB 0.115&#8217;te 5 dakika s\u00fcrd\u00fc\u011f\u00fcn\u00fc, ancak DocumentDB 0.116&#8217;da ayn\u0131 veri seti ve ayn\u0131 sorgu ile 1 dakika s\u00fcrd\u00fc\u011f\u00fcn\u00fc g\u00f6zlemlemek, bu optimizasyonun ne kadar de\u011ferli oldu\u011funu g\u00f6sterir.<\/p>\n<h3>3. Application Performance Monitoring (APM) Ara\u00e7lar\u0131<\/h3>\n<p>E\u011fer uygulaman\u0131zda bir APM arac\u0131 (\u00f6rne\u011fin, AWS X-Ray, Datadog, New Relic) kullan\u0131yorsan\u0131z, bu ara\u00e7lar veritaban\u0131 sorgular\u0131n\u0131n performans\u0131n\u0131 otomatik olarak izleyebilir. DocumentDB 0.116&#8217;ya ge\u00e7i\u015f yapt\u0131ktan sonra, APM arac\u0131n\u0131zdaki veritaban\u0131 performans\u0131 metriklerini (\u00f6rne\u011fin, sorgu yan\u0131t s\u00fcreleri, yava\u015f sorgular) izleyin. \u00d6zellikle <code>$group<\/code> i\u00e7eren toplama sorgular\u0131n\u0131n yan\u0131t s\u00fcrelerindeki belirgin d\u00fc\u015f\u00fc\u015fleri g\u00f6zlemleyebilirsiniz.<\/p>\n<p>APM ara\u00e7lar\u0131, sadece sorgu s\u00fcresini de\u011fil, ayn\u0131 zamanda sorgular\u0131n uygulaman\u0131n genel performans\u0131na etkisini de g\u00f6rmenizi sa\u011flar. Bu, optimizasyonun kullan\u0131c\u0131 deneyimi \u00fczerindeki ger\u00e7ek etkisini anlamak i\u00e7in \u00f6nemlidir.<\/p>\n<h3>4. DocumentDB Metrikleri<\/h3>\n<p>AWS CloudWatch \u00fczerinden DocumentDB k\u00fcmenizin metriklerini de izleyebilirsiniz. \u00d6zellikle CPU kullan\u0131m\u0131, bellek kullan\u0131m\u0131 ve a\u011f trafi\u011fi gibi metrikler, sorgu performans\u0131 de\u011fi\u015fikliklerinin etkisini dolayl\u0131 olarak g\u00f6sterebilir. E\u011fer <code>$group<\/code> optimizasyonlar\u0131 ba\u015far\u0131l\u0131 olursa, benzer i\u015f y\u00fckleri i\u00e7in CPU ve bellek kullan\u0131m\u0131nda d\u00fc\u015f\u00fc\u015fler g\u00f6rmeniz muhtemeldir.<\/p>\n<p>Bu izleme ve \u00f6l\u00e7\u00fcm y\u00f6ntemlerini kullanarak, DocumentDB 0.116&#8217;daki <code>$group<\/code> optimizasyonlar\u0131n\u0131n uygulaman\u0131z i\u00e7in sa\u011flad\u0131\u011f\u0131 somut faydalar\u0131 belgeleyebilir ve bu ge\u00e7i\u015fin do\u011fru bir karar oldu\u011funu teyit edebilirsiniz.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve P\u00fcf Noktalar\u0131<\/h2>\n<p>DocumentDB 0.116&#8217;daki <code>$group<\/code> optimizasyonlar\u0131ndan en iyi \u015fekilde yararlanmak i\u00e7in, geli\u015ftiricilerin dikkate almas\u0131 gereken baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve p\u00fcf noktalar\u0131 bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>Do\u011fru Operat\u00f6rleri Kullan\u0131n:<\/strong> Optimizasyonlar \u00f6zellikle <code>$addToSet<\/code>, <code>$first<\/code>, <code>$last<\/code> gibi belirli toplama operat\u00f6rleri i\u00e7in ge\u00e7erlidir. E\u011fer amac\u0131n\u0131z sadece benzersiz bir de\u011ferin say\u0131s\u0131n\u0131 elde etmekse, bazen <code>$group<\/code> yerine <code>$group<\/code> ve ard\u0131ndan <code>$count<\/code> kullanmak daha net olabilir. Ancak, e\u011fer benzersiz de\u011ferlerin kendisini veya bunlarla ili\u015fkili di\u011fer bilgileri (\u00f6rne\u011fin, ilk g\u00f6r\u00fclen de\u011feri) elde etmek istiyorsan\u0131z, <code>$addToSet<\/code> veya <code>$first<\/code> gibi operat\u00f6rler ve optimizasyonlar devreye girer.<\/li>\n<li><strong>\u0130ndekslerin Rol\u00fc:<\/strong> Her ne kadar <code>$group<\/code> optimizasyonlar\u0131 indekslerden ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fabilse de, do\u011fru indeksler sorgu performans\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131rabilir. E\u011fer <code>$group<\/code> a\u015famas\u0131ndan \u00f6nce <code>$match<\/code> a\u015famas\u0131 varsa ve bu a\u015fama belirli alanlara g\u00f6re filtreleme yap\u0131yorsa, bu alanlar \u00fczerinde indeks olu\u015fturmak, <code>$group<\/code> a\u015famas\u0131na ula\u015facak belge say\u0131s\u0131n\u0131 azaltarak genel performans\u0131 iyile\u015ftirir. Ayr\u0131ca, grupland\u0131rma anahtar\u0131 (<code>_id<\/code> alan\u0131) \u00fczerinde bir indeksin olmas\u0131 da baz\u0131 durumlarda faydal\u0131 olabilir.<\/li>\n<li><strong>Veri Modellemesi:<\/strong> Optimizasyonlar harika olsa da, temel veri modelinizin performans\u0131 etkileyebilece\u011fini unutmay\u0131n. E\u011fer s\u0131k s\u0131k belirli alanlara g\u00f6re gruplama yap\u0131yorsan\u0131z ve bu alanlar belgenin derinliklerinde yer al\u0131yorsa, veriyi daha d\u00fcz bir yap\u0131da modellemek veya s\u0131k kullan\u0131lan alanlar\u0131 belgenin k\u00f6k\u00fcne ta\u015f\u0131mak performans \u00fczerinde olumlu etki yapabilir.<\/li>\n<li><strong>Bellek Y\u00f6netimi:<\/strong> B\u00fcy\u00fck veri k\u00fcmelerinde <code>$group<\/code> i\u015flemleri hala \u00f6nemli miktarda bellek t\u00fcketebilir. DocumentDB, belle\u011fi verimli kullanmak i\u00e7in optimize edilmi\u015ftir, ancak sorgular\u0131n\u0131z\u0131n bellek s\u0131n\u0131rlar\u0131n\u0131 zorlamad\u0131\u011f\u0131ndan emin olun. Sorgu plan\u0131n\u0131 analiz ederken bellek kullan\u0131m\u0131n\u0131 (varsa) kontrol edin. Gerekirse, sorguyu daha k\u00fc\u00e7\u00fck par\u00e7alara b\u00f6lmek veya ara sonu\u00e7lar\u0131 diskte daha verimli i\u015flemek i\u00e7in daha geli\u015fmi\u015f stratejiler d\u00fc\u015f\u00fcnebilirsiniz.<\/li>\n<li><strong><code>$facet<\/code> Kullan\u0131m\u0131:<\/strong> E\u011fer birden fazla farkl\u0131 toplama ve gruplama i\u015flemini tek bir sorguda yapmak istiyorsan\u0131z, <code>$facet<\/code> a\u015famas\u0131n\u0131 kullanabilirsiniz. <code>$facet<\/code>, her bir alt-pipeline&#8217;\u0131n kendi sonu\u00e7lar\u0131n\u0131 \u00fcretmesini sa\u011flar ve bu sonu\u00e7lar daha sonra birle\u015ftirilir. 0.116 s\u00fcr\u00fcm\u00fcndeki <code>$group<\/code> optimizasyonlar\u0131, <code>$facet<\/code> i\u00e7indeki pipeline&#8217;larda da ge\u00e7erli olacakt\u0131r, bu da karma\u015f\u0131k analizlerin daha verimli y\u00fcr\u00fct\u00fclmesini sa\u011flar.<\/li>\n<li><strong>DocumentDB S\u00fcr\u00fcm G\u00fcncellemeleri:<\/strong> AWS, DocumentDB&#8217;nin performans\u0131n\u0131 ve \u00f6zelliklerini s\u00fcrekli olarak geli\u015ftirmektedir. Her zaman en g\u00fcncel ve desteklenen DocumentDB s\u00fcr\u00fcm\u00fcn\u00fc kullanmak, en iyi performans\u0131 ve en yeni optimizasyonlar\u0131 elde etmenizi sa\u011flar. Yeni s\u00fcr\u00fcmler, genellikle \u00f6nceki s\u00fcr\u00fcmlerdeki performans darbo\u011fazlar\u0131n\u0131 gidermeye odaklan\u0131r.<\/li>\n<li><strong>Test Ortam\u0131:<\/strong> \u00dcretim ortam\u0131na ge\u00e7meden \u00f6nce, her zaman bir test ortam\u0131nda kapsaml\u0131 performans testleri yap\u0131n. Bu, olas\u0131 beklenmedik davran\u0131\u015flar\u0131 veya performans d\u00fc\u015f\u00fc\u015flerini \u00fcretim ortam\u0131n\u0131 etkilemeden tespit etmenize olanak tan\u0131r.<\/li>\n<\/ul>\n<p>Bu ipu\u00e7lar\u0131, DocumentDB 0.116&#8217;daki <code>$group<\/code> optimizasyonlar\u0131ndan en \u00fcst d\u00fczeyde faydalanman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Unutmay\u0131n ki, en iyi performans genellikle do\u011fru veri modellemesi, etkili indeksleme ve veritaban\u0131 \u00f6zelliklerinin do\u011fru anla\u015f\u0131lmas\u0131yla elde edilir.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>1. DocumentDB 0.116&#8217;daki $group optimizasyonu hangi operat\u00f6rleri etkiler?<\/h3>\n<p>Bu optimizasyonlar \u00f6ncelikli olarak <code>$group<\/code> a\u015famas\u0131nda kullan\u0131lan ve benzersiz de\u011ferleri toplama veya i\u015fleme ihtiyac\u0131 duyan operat\u00f6rleri hedefler. Bunlara <code>$addToSet<\/code>, <code>$first<\/code>, <code>$last<\/code> gibi operat\u00f6rler dahildir. Temel olarak, bir grup i\u00e7indeki belirli bir alana ait benzersiz de\u011ferleri daha verimli bir \u015fekilde y\u00f6netmeye odaklan\u0131r.<\/p>\n<h3>2. Bu optimizasyonlar i\u00e7in sorgular\u0131m\u0131 de\u011fi\u015ftirmem gerekir mi?<\/h3>\n<p>Genellikle hay\u0131r. DocumentDB 0.116&#8217;ya y\u00fckseltme yapt\u0131\u011f\u0131n\u0131zda, bu optimizasyonlar arka planda \u00e7al\u0131\u015f\u0131r ve mevcut sorgular\u0131n\u0131z\u0131n performans\u0131n\u0131 otomatik olarak iyile\u015ftirebilir. Ancak, sorgular\u0131n\u0131z\u0131 <code>explain()<\/code> ile analiz ederek performans art\u0131\u015f\u0131n\u0131 do\u011frulaman\u0131z \u00f6nerilir.<\/p>\n<h3>3. Performans kazanc\u0131 ne kadar olur?<\/h3>\n<p>Performans kazanc\u0131n\u0131n miktar\u0131, veri setinizin b\u00fcy\u00fckl\u00fc\u011f\u00fcne, verilerdeki tekrar eden de\u011ferlerin s\u0131kl\u0131\u011f\u0131na ve sorgunuzun karma\u015f\u0131kl\u0131\u011f\u0131na ba\u011fl\u0131 olarak b\u00fcy\u00fck \u00f6l\u00e7\u00fcde de\u011fi\u015fiklik g\u00f6sterebilir. Baz\u0131 senaryolarda %10-20&#8217;lik bir iyile\u015fme g\u00f6r\u00fcl\u00fcrken, tekrarlayan de\u011ferlerin \u00e7ok yo\u011fun oldu\u011fu b\u00fcy\u00fck veri setlerinde bu oran %50 veya daha fazla olabilir.<\/p>\n<h3>4. Bu \u00f6zellik hangi DocumentDB s\u00fcr\u00fcmlerinde mevcuttur?<\/h3>\n<p>Bu spesifik <code>$group<\/code> optimizasyonlar\u0131 DocumentDB&#8217;nin 0.116 s\u00fcr\u00fcm\u00fc ile tan\u0131t\u0131lm\u0131\u015ft\u0131r. Daha \u00f6nceki s\u00fcr\u00fcmlerde bu d\u00fczeyde bir optimizasyon bulunmamaktad\u0131r.<\/p>\n<h3>5. Bu optimizasyonlar $match veya $sort gibi a\u015famalar\u0131 da etkiler mi?<\/h3>\n<p>Hay\u0131r, bu optimizasyonlar do\u011frudan <code>$group<\/code> a\u015famas\u0131na odaklanm\u0131\u015ft\u0131r. <code>$match<\/code> (filtreleme) ve <code>$sort<\/code> (s\u0131ralama) gibi di\u011fer a\u015famalardaki performans iyile\u015ftirmeleri i\u00e7in farkl\u0131 indeksleme stratejileri veya DocumentDB&#8217;nin genel s\u00fcr\u00fcm g\u00fcncellemeleri dikkate al\u0131nmal\u0131d\u0131r.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>AWS DocumentDB 0.116 s\u00fcr\u00fcm\u00fc ile gelen <code>$group<\/code> a\u015famas\u0131ndaki benzersiz tarama (distinct scan) optimizasyonlar\u0131, NoSQL veritaban\u0131 toplama i\u015flemlerinde \u00f6nemli bir ilerlemeyi temsil ediyor. Bu geli\u015ftirmeler, \u00f6zellikle b\u00fcy\u00fck veri setlerinde tekrarlayan de\u011ferleri i\u015flerken kar\u015f\u0131la\u015f\u0131lan performans darbo\u011fazlar\u0131n\u0131 hafifletmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Geli\u015ftiriciler, sorgular\u0131n\u0131 de\u011fi\u015ftirmeden daha h\u0131zl\u0131 ve daha verimli analizler yapabilirler. E-ticaret platformlar\u0131ndaki kullan\u0131c\u0131 takibi, finansal i\u015flemlerdeki benzersiz hareketlerin analizi veya IoT cihazlar\u0131ndan gelen verilerdeki tekrarlayan olaylar\u0131n tespiti gibi bir\u00e7ok ger\u00e7ek d\u00fcnya senaryosunda bu optimizasyonlar somut faydalar sa\u011flayacakt\u0131r. Sorgu planlar\u0131n\u0131 analiz ederek, zaman bazl\u0131 testler yaparak ve APM ara\u00e7lar\u0131n\u0131 kullanarak bu performans kazanc\u0131n\u0131 \u00f6l\u00e7mek ve do\u011frulamak m\u00fcmk\u00fcnd\u00fcr. DocumentDB&#8217;nin s\u00fcrekli geli\u015fen yap\u0131s\u0131, bulut tabanl\u0131 veritaban\u0131 \u00e7\u00f6z\u00fcmlerinde performans\u0131 ve verimlili\u011fi art\u0131rmaya devam edece\u011finin bir g\u00f6stergesidir.<\/p>\n<p>#DocumentDB #AWS #NoSQL #Veritaban\u0131 #PerformansOptimizasyonu #Aggregation #MongoDBAPI<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/documentdb-group-distinct-scan-example\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/documentdb-group-distinct-scan-example<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Veritaban\u0131 sorgular\u0131nda performans kritik \u00f6neme sahiptir. \u00d6zellikle b\u00fcy\u00fck veri setlerinde, tekrarlayan veya benzersiz de\u011ferleri sayma\/listeleme i\u015flemleri ciddi performans darbo\u011fazlar\u0131na yol a\u00e7abilir.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-44877","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)\" \/>\n<meta property=\"og:description\" content=\"Veritaban\u0131 sorgular\u0131nda performans kritik \u00f6neme sahiptir. \u00d6zellikle b\u00fcy\u00fck veri setlerinde, tekrarlayan veya benzersiz de\u011ferleri sayma\/listeleme i\u015flemleri ciddi performans darbo\u011fazlar\u0131na yol a\u00e7abilir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-24T18:02:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-24T18:03:02+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)\",\"datePublished\":\"2026-09-24T18:02:31+00:00\",\"dateModified\":\"2026-09-24T18:03:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/\"},\"wordCount\":3569,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/\",\"name\":\"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-09-24T18:02:31+00:00\",\"dateModified\":\"2026-09-24T18:03:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/","og_locale":"tr_TR","og_type":"article","og_title":"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)","og_description":"Veritaban\u0131 sorgular\u0131nda performans kritik \u00f6neme sahiptir. \u00d6zellikle b\u00fcy\u00fck veri setlerinde, tekrarlayan veya benzersiz de\u011ferleri sayma\/listeleme i\u015flemleri ciddi performans darbo\u011fazlar\u0131na yol a\u00e7abilir.","og_url":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-09-24T18:02:31+00:00","article_modified_time":"2026-09-24T18:03:02+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)","datePublished":"2026-09-24T18:02:31+00:00","dateModified":"2026-09-24T18:03:02+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/"},"wordCount":3569,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/","url":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/","name":"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-09-24T18:02:31+00:00","dateModified":"2026-09-24T18:03:02+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/documentdb-0-116-group-ile-benzersiz-veri-taramasi-distinct-scan\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DocumentDB 0.116: $group ile Benzersiz Veri Taramas\u0131 (Distinct Scan)"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=44877"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44877\/revisions"}],"predecessor-version":[{"id":44878,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44877\/revisions\/44878"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44877"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44877"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}