NoSQL Veritabanları: Uygun Bir Dizin Oluşturma Politikasının Yararları
Yayınlanan: 2023-01-25Büyük Veri dünyasında, ölçeklenebilirlikleri ve esneklikleri nedeniyle NoSQL veritabanları giderek daha popüler hale geldi. Ancak, uygun bir indeksleme politikası olmadan bu veritabanlarını yönetmek ve optimize etmek zor olabilir. Verilerin uygun şekilde organize edilmesini ve sorgulanmasının kolay olmasını sağlamak için bir indeksleme politikasına ihtiyaç vardır. Dizin oluşturma ilkesi olmadan, bir NoSQL veritabanı yavaş ve kullanışsız hale gelebilir. Ek olarak, iyi tasarlanmış bir dizin oluşturma ilkesi, bir NoSQL veritabanının performansını iyileştirmeye yardımcı olabilir. Bir NoSQL veritabanı için dizin oluşturma ilkesi tasarlarken göz önünde bulundurulması gereken birkaç faktör vardır. Veri yapısı, erişim kalıpları ve iş yükleri dikkate alınmalıdır. Ek olarak, dizin oluşturma ilkesi, veritabanı büyüdükçe ölçeklenecek şekilde tasarlanmalıdır. İyi tasarlanmış bir indeksleme politikasının faydaları çoktur. Uygun bir indeksleme politikasına sahip bir NoSQL veritabanı daha organize, verimli ve ölçeklenebilir olacaktır.
Nosql Veritabanında İndeksleme Nedir?
NoSQL veritabanları yapıları indeksleyebilmelidir. Genel olarak indeksleme, bir veri kaydının konumuna bir anahtar yerleştirme eylemini ifade eder. NoSQL veritabanlarında yaygın olarak kullanılan birkaç indeksleme veri yapısı vardır. Bu bölüm boyunca, B-Tree indeksleme, T-Tree indeksleme ve O2-Tree indeksleme dahil olmak üzere daha yaygın olan birkaç yöntemin üzerinden geçeceğiz.
Veritabanı dizini , bir dizi veya karma gibi görünen bir tür veri yapısıdır. Verileri çeşitli şekillerde organize edebiliriz. Adreslere işaret eden bir isimler dizini oluşturmak için bu yöntemi kullanırdık. Dizin olmadığı için San Francisco'da sıkışmış bir veritabanı var. Veritabanlarımızın kaynaklarını ve zamanı nasıl kullandığını anlamak, işlerinin nasıl yürütüldüğünü anlamak için çok önemlidir. Veritabanı dizinleri, eşleşmeleri daha hızlı ve verimli bir şekilde aramasına izin verir, ancak veritabanını aşırı yavaş sorgulara da maruz bırakır. Çok sayıda veritabanı sorgusunun performansını iyileştirerek dizine yazma maliyetini dengeleyebiliriz.
Endekslerin kullanımı yoluyla önemli ekonomik göstergeleri takip etmek çok önemlidir. Veri dizini , verileri kategoriler halinde düzenlemek ve tanımını basitleştirmek için kullanılan bir yöntemdir. Bilgileri düzenlemenin bir yolu, bulunmasını kolaylaştırmak için dizine eklemektir. Endekslerin kullanımı, ekonomik göstergelerin performansını izlemek için önemli bir araçtır.
Mongob'da Dizin Oluşturma
Aşağıdaki örnek, users koleksiyonundaki alan adı için bir dizin oluşturmak üzere kullanılabilir.
Bir db kullanıcısı (isim, dizin) oluşturulması, bir dizin oluşturmanıza olanak tanır.
Aşağıdaki örnekte, e-posta alanını kullanarak kullanıcıların e-postalarının bir listesini oluşturacağım.
Bir db.users.Index (email:index) oluşturun; ve
Neden Mongodb'de İndekslemeye İhtiyacımız Var?
Sorgularımızın verimli olmasını sağlamak için mongodb'de indekslemeye ihtiyacımız var. İndeksleme, tüm veritabanını taramak zorunda kalmadan ihtiyaç duyduğumuz verileri hızlı bir şekilde bulmamızı sağlar. Bu, sorgularımızı daha hızlı ve daha verimli hale getirir.
Dizin, koleksiyon düzeyinde uygulanan bir alan kümesi veya alan koleksiyonu örneğidir. Sonuç olarak, sorgunuzla bir eşleşme bulmak için tüm koleksiyonlarınızı taramayı gerektiren bir koleksiyon taraması yapmanız gerekmez. Doküman sayısı baştan sınırlı olduğu için doğru indeksleri kullanırken daha verimli sorgulama yapabilirsiniz. İndeksleme, bir veri işleminin performansını iyileştirebilir. Dizinleri aşırı yüklediğinizde, bellek sayfalarında baskın hale gelecek ve aşırı miktarda depolama alanı ile sonuçlanacaktır. Az sayıda yüksek etkili indeks kullanılmalıdır. Bir koleksiyon oluşturmaya başlamadan önce harmanlamayı, yani arama ve sıralamada kullanıldığı şekli göz önünde bulundurmalısınız.
Harmanlamaları, Studio 3T'nin kullanıcı arabirimini ve yerleşik IntelliShell'i kullanarak tanımlayabilirsiniz. Sonuç olarak, birincil anahtar "kümelenir", çünkü dizin her dizin anahtarı araması için ziyaret edilecek daha az sayfa bloğuna sahip olabilir ve bu da sistem için çok daha yüksek isabet oranı sağlar. Koleksiyon düzeyinde yaparsanız, daha temiz, daha güvenli ve değiştirilmesi daha kolay olacaktır. Seçim ölçütlerinde kullanılan dizin ve harmanlama aynıysa, basit sorguların gerçekleştirilmesi daha kolaydır. İndeks sırasını değiştirdiğimizde iki alanı da aşağıdaki gibi sıralamamız gerekiyor. İngilizce'de, ilk ad ikinci addan önce gelir. 140 Bayan soyadı, ek 40 dakikalık yürütme süresiyle sonuçlanabilir.
Bu garip görünüyor, çünkü dizin yürütme sürecini varsayılan dizine göre iki kat daha uzun sürecek şekilde yavaşlattı. Çoğu durumda, önce bir dizinin ilk alanına girmeden bir sorgunun yürütülmesi önerilmez. Başka bir deyişle, dizin alanı Aranabilir ARGUMENT olmalıdır. Karmaşık bir aramanın parçası olarak, aday sayısını dizin listesindeki ilk öğeye indirmek tercih edilir. Bir e-posta adresi alanınız varsa, onu kimin kullandığını bir dizin girerek öğrenebilirsiniz. MongoDB'yi veri tabanında olası 'Wiggins'leri bulmak için en iyi stratejiyi kullanmaya ve ardından belgenin kendisi yerine tam adresi dizine kopyalamaya ikna ettiğimiz için onu verimli bir şekilde kullanabildik. Bu yirmi adresi bulmak için belgeye güvenmeye gerek yok çünkü çok daha hızlı yapabilir.
MongoDB veritabanı, dizideki her öğe için bir dizin anahtarı oluşturmak üzere bir dizin kullanır. Dizini, dizinden alırken 'Tam Ad' alanını 'kapatmak' için de kullanabiliriz. Kaydedilen zaman miktarı küçük olacaktır. Dizin verileri alınırken, önbellek alma işlemleri, tam koleksiyon taramalarından daha iyi bir isabet oranına sahiptir.
Mongodb'da Dizin Kullanmanın Faydası Nedir?
Bir koleksiyondaki tüm belgelerin sorgunuzla eşleşmesi için taranmasını gerektiren bir koleksiyon taraması yapmaktan kaçınmak için bunun yerine MongoDB'deki dizinler kullanılabilir. Daha verimli sorgulamak için uygun dizinlere sahip olmanız gerekir; En başından seçebileceğiniz çok fazla belge olduğundan, birden çok dizin kullanmanız gerekebilir.
Sql'de İndekslemenin Faydası Nedir?
SQL'de indeksleme, sorguların performansını artırmak için kullanılabilir. Bir sütun üzerinde indeks oluşturarak veritabanının aradığınız veriyi bulmasını daha kolay ve hızlı hale getirebilirsiniz. Dizinler, bir sütun üzerinde benzersizlik kısıtlamaları uygulamak için de kullanılabilir; bu, bir tablodaki hiçbir satırın belirli bir sütun için aynı değere sahip olmadığından emin olmak istediğinizde yararlı olabilir.
Sql ve Nosql'de İndeksleme
SQL ve NoSQL veritabanlarında indeksleme arasında birçok fark vardır. SQL veritabanlarında, indeksleme genellikle tablonun bir veya daha fazla sütununda bir indeks oluşturarak bir tablodan veri alımını hızlandırmak için kullanılır. NoSQL veritabanlarında, dizinleme genellikle koleksiyondaki belgelerin bir veya daha fazla alanında bir dizin oluşturarak bir koleksiyondan veri alınmasını hızlandırmak için kullanılır.
Bu yazıda, SQL ve NoSQL veritabanları arasındaki farkları gözden geçireceğim ve performanslarını değerlendireceğim. Ayrıca, birinin diğerinden üstün olduğu kullanım durumlarının bir listesini sağlayacağım. Her veritabanı için uygun bir sorgulama dili veya yaklaşımı vardır. NoSQL veritabanları, SQL veritabanlarına göre saniye başına daha yüksek yazma işlemi oranına sahiptir. Yapılandırılmamış veriler, doğrulanmadan ve yapılandırılmadan veritabanına eklenemeyeceğinden, geçersiz veya yanlış veriler eklenebilir ve kaydedilebilir. Sabit şemalar yerine NoSQL veritabanları kullanıldığında, bir şemaya veri girilemez ve geri alınamaz. Saniyede birden çok okuma işlemi gerçekleştirme söz konusu olduğunda, SQL veritabanları genellikle en iyi seçimdir.
Örneğin, günlük kaydı hizmetlerinin çok büyük miktarda veri depolaması gerekebilir. Bir NoSQL veritabanı nispeten yeni bir olgudur ve dizin motorları eskisi kadar güçlü veya verimli olmayabilir. Sektörde NoSQL ve SQL veritabanlarının sayısız avantajı ve dezavantajı vardır. Tek yapmanız gereken şirketinizin gereksinimlerine ve hedeflerine bakmak. En son teknoloji ve endüstri uzmanlığı arıyorsanız, geleneksel bir veritabanına bağlı kalmalısınız. Büyük hacimli yapılandırılmamış verileri olabildiğince çabuk depolamak istiyorsanız, kullanılacak araç NoSQL'dir.
Sql ve Nosql Veritabanlarında İndeksleme
SQL veritabanı dizinleri , veri almanın çok yaygın bir yöntemidir. Arama ve alma teknikleri, süreci hızlandırmak için dizinleri kullanır. SimpleDB, Hadoop/HBase ve Cassandra gibi NoSQL veritabanlarının tümü farklı indeksleme mekanizmaları kullanır. B-Tree ve T-Tree ağaçları için indeksleme NoSQL'de çok yaygınken, T-Tree ve O2-Tree ağaçları için indeksleme çok yaygın değildir.
Nosql'de indeksleme
NoSQL veritabanlarında indeksleme, belirli bir veritabanına bağlı olarak çeşitli şekillerde gerçekleştirilebilir. Örneğin, MongoDB'de indeksleme bir B-tree indeksi, bir hash indeksi, bir metin indeksi veya coğrafi bir indeks kullanılarak gerçekleştirilebilir.
İkincil dizin olarak adlandırılan bir veri yapısındaki bazı üst tablolardan gelen özniteliklerin bir alt kümesi. Tablonun bölümleme ve sıralama anahtarları, temel tablonun aksine değiştirilebilir. Birincil dizinin aksine, ikincil dizin, bölüm anahtarı olan bir tablo değildir. Bu durumda ana tablo ile aynı düğümde depolanır. Ek dizinler , dizin bölüm tabloları açısından bir NoSQL veritabanında tanımlanmamıştır. İkincil dizin, birincil dizinle aynı düğümde bulunan bir veri yapısıdır. Bu bölüm, bellek içi sahte bir veritabanı için ikincil dizini uygulamanın kolay bir yolunu sağladı. İki indeksleme stratejisinin (kopyala ve getir) nasıl uygulanabileceğini gösterdi.
İkincil Bir Endeksin Faydaları
İkincil dizindeki bir dizin, sorgu motorunun istenen verileri birincil dizindeki tüm tabloyla yapabileceğinden çok daha hızlı aramasına olanak tanır.
İkincil bir dizinin dizini, döndürülen verilerin kalitesini artırmak için de kullanılır. Yalnızca sorgunun gerektirdiği verileri dahil ederek sorgu tarafından döndürülen verilerin doğru olduğundan emin olmak için de kullanılabilir.
Cosmos Db Endeksleme Politikası
Politika, varsayılan olarak otomatik olarak ayarlanabilir. Bunu başarmak için, dizin oluşturma ilkesindeki otomatik özelliğin doğru olarak ayarlanması gerekir. Bu özellik doğru olduğunda Azure Cosmos DB, belgeleri yazıldığı gibi otomatik olarak dizine ekler.
Azure CosmosDB'de, her kapsayıcının, kendisi tarafından ayarlanan dizinlere göre öğelerini dizine eklemek için bir ilkesi vardır. Her öğenin her özelliğini indeksler ve her diziyi veya sayıyı bir aralık indeksine sahip olarak işaretler. Motor çalışmıyorken, tembel indeksleme , indeks güncellemelerini çok daha düşük bir öncelik seviyesinde gerçekleştirmeye çalışır. Kök yolu /* dizine ekleyen bir ilke, yolu içermeli veya dışlamalıdır. Azure CosmosDB'ye dahil etme/hariç tutma stratejileri, modele eklenen tüm yeni özellikleri proaktif olarak dizine eklemesini sağlar. Dahil edilen ve hariç tutulan yollarınız arasında bir çakışma varsa, daha kesin olan yol önceliklidir. Daha derin yollar, daha dar yollardan daha yüksek bir kesinlik derecesine sahiptir.
Azure Cosmos DB kullandığınızda herhangi bir uzamsal dizin oluşturamazsınız. Uzamsal SQL yerleşik işlevlerini kullanmak istiyorsanız, kullanmak istediğiniz özellikler üzerinde bir uzamsal dizin oluşturmalısınız. Ayrıca, eşitlik ve aralık sorguları gerçekleştirirken performansı artırmak için bir bileşik dizin kullanılabilir. Birden çok aralık filtresinin gerekli olduğu durumlarda birden çok aralık filtresini optimize etmek için bir bileşik indeks de kullanılabilir. Aralık içindeki filtreler şunları içerir! İki bileşik indeksteki indeksler (ASC adı, ASC yaşı ve ***** ASC) çok farklı olmalıdır. Bir sorgu optimizasyonu, filtreleri olan sorguya göre herhangi bir sıra için genelleştirilebilir.
Bu yöntemi kullanarak sorguları sistem işlevlerine göre optimize etmek ve sıralamak için bileşik dizinleri de kullanabilirsiniz. İndeksleme politikasında değişiklik yapılması durumunda eski ve yeni indeksler arasında dönüşüm gerçekleşir. Herhangi bir dizin dönüşümü sırasında, veri kullanılabilirliği durumu üzerinde hiçbir etkisi yoktur. Öğelerin sayısına ve boyutuna bağlı olarak, tamamlanması bir saat kadar sürebilir. Dönüşüm tarafından sağlanan RU'larınızı yaratırsınız, ancak bunlar, CRUD işlemlerini veya sorgularını çalıştıranlardan daha düşük bir önceliğe yerleştirilir. Gelecekte, bir dizin dönüşümü tamamlandığında sorgular için yalnızca yeni dizine alınmış yollar kullanılacaktır. Hiçbir özellik yolunun dizine eklenmesi gerekmiyorsa ancak TTL gerekliyse, bir dizin ilkesi kullanabilirsiniz.