Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Dizinler, bir koleksiyondaki alanlara hızlı erişim sağlayarak veri alma hızını geliştiren yapılardır. Genellikle anahtar alanlarına göre sıralı bir veri işaretçileri kümesi oluşturarak çalışırlar. Azure DocumentDB, sorguyu aşağı gönderme, benzersiz kısıtlamalar ve parçalama dahil olmak üzere birden çok bağlamda dizinleri kullanır.
Önemli
"_id" alanı, varsayılan olarak dizine alınan tek alan ve alanın en büyük boyutu olabilir 2 KB. Performansı iyileştirmek için sorgu filtrelerini ve koşullarını temel alan ek dizinler eklemeniz önerilir.
Dizin türleri
Kolaylık olması için aşağıdaki kuruluma sahip bir blog uygulaması örneğini ele alalım:
-
Veritabanı adı:
cosmicworks -
Koleksiyon adı:
products
Bu örnek uygulama, makaleleri aşağıdaki yapıya sahip belgeler olarak depolar. Alıntılanan tüm örnek bu koleksiyonun yapısını daha da kullanır.
{
"_id": ObjectId("617a34e7a867530bff1b2346"),
"title": "Azure DocumentDB - A Game Changer",
"content": "Azure DocumentDB is a globally distributed, multi-model database service.",
"author": {lastName: "Doe", firstName: "John"},
"category": "Technology",
"launchDate": ISODate("2024-06-24T10:08:20.000Z"),
"published": true
}
Tek alan dizinleri
Tek alan dizinleri, koleksiyondaki tek bir alandaki bilgileri depolar. Tek alan dizininin sıralama düzeni önemli değildir.
_id alanı varsayılan olarak dizine eklenir.
Azure DocumentDB şu anda dizin oluşturmayı destekler
- Üst düzey belge alanları.
- Eklenmiş belge.
- Eklenmiş belge içindeki alanlar.
Aşağıdaki komut alanda author tek bir alan dizini oluşturur ve aşağıdaki komut bunu eklenmiş bir alanda firstNameoluşturur.
use cosmicworks
db.products.createIndex({"author": 1})
// indexing embedded property
db.products.createIndex({"author.firstName": -1})
Bir sorgu, kullanılabilir durumda birden çok tek alan dizini kullanabilir.
Uyarı
Azure DocumentDB, bir koleksiyonda en fazla 64 dizin oluşturulmasına olanak tanır. Talep üzerine, katmana bağlı olarak 300 dizine kadar genişletme planlayabiliriz.
Bileşik dizinler
Bileşik dizinler, belgelerdeki birden çok alana göre verimli sorgulama ve sıralamaya olanak tanıyarak veritabanı performansını geliştirir. Bu iyileştirme, tüm koleksiyonları tarama gereksinimini azaltarak veri alma ve düzenlemeyi hızlandırıyor.
Aşağıdaki komut, alanlarda author ve launchDate karşıt sıralama düzeninde bir bileşik dizin oluşturur.
use cosmicworks
db.products.createIndex({"author":1, "launchDate":-1})
Order alanların özellikleri, dizinin seçiciliğini veya kullanımını etkiler. Sorgu, find oluşturulan dizini kullanmaz.
use cosmicworks
db.products.find({"launchDate": {$gt: ISODate("2024-06-01T00:00:00.000Z")}})
Sınırlamalar
- Bileşik dizin içinde en fazla 32 alan\yol.
Kısmi dizinler
Dizinde bir terimin ne zaman oluşturulacağıyla ilgili bir sorgu filtresine sahip dizinler.
use cosmicworks
db.products.createIndex (
{ "author": 1, "launchDate": 1 },
{ partialFilterExpression: { "launchDate": { $gt: ISODate("2024-06-24T10:08:20.000Z") } } }
)
Sınırlamalar
- Kısmi dizinler, filtre uygun olmadıkça
ORDER BYveyaUNIQUEdesteklemez.
Metin dizinleri
Metin dizinleri, metin tabanlı sorguları iyileştirerek daha hızlı ve verimli hale getiren özel veri yapılarıdır.
createIndex alanında metin dizini text oluşturma seçeneğiyle title yöntemini kullanın.
use cosmicworks;
db.products.createIndex({ title: "text" })
Uyarı
Koleksiyon başına yalnızca bir metin dizini tanımlayabilirsiniz ancak Azure DocumentDB, belgelerinizdeki farklı alanlarda metin aramaları yapmanıza olanak tanımak için birden çok alanın birleşiminde metin dizinleri oluşturmanıza olanak tanır.
Metin dizini seçeneklerini yapılandırma
Azure DocumentDB'deki metin dizinleri, davranışlarını özelleştirmek için çeşitli seçeneklerle birlikte gelir. Örneğin, metin analizi dilini belirtebilir, belirli alanların önceliğini belirlemek için ağırlıkları ayarlayabilir ve büyük/küçük harfe duyarlı olmayan aramaları yapılandırabilirsiniz. Aşağıda seçenekler içeren bir metin dizini oluşturma örneği verilmişti:
İngilizce dil desteğine sahip ve
titlecontentalanlarında aramayı desteklemek için bir dizin oluşturun. Ayrıca, arama sonuçlarında önceliklerini belirlemek için alana daha yüksek ağırlıklartitleatayın.use cosmicworks db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Uyarı
İstemci "DocumentDB" terimiyle bir metin arama sorgusu gerçekleştirdiğinde, koleksiyondaki her belgenin puanı hem "başlık" hem de "içerik" alanlarındaki terimin varlığı ve sıklığına göre hesaplanır ve daha yüksek ağırlığı nedeniyle "başlık" alanına daha yüksek önem verilir.
Metin dizini kullanarak metin araması yapma
Metin dizini oluşturulduktan sonra, sorgularınızdaki "text" işlecini kullanarak metin aramaları yapabilirsiniz. Metin işleci bir arama dizesi alır ve ilgili belgeleri bulmak için bu dizeyi metin diziniyle eşleştirir.
tümceciği
DocumentDBiçin metin araması yapın.use cosmicworks db.products.find( { $text: { $search: "DocumentDB" } } )İsteğe bağlı olarak, ağırlığı görmek için sorguda
$metaprojeksiyon işlecini vetextScorealanını birlikte kullanın.use cosmicworks db.products.find( { $text: { $search: "DocumentDB" } }, { score: { $meta: "textScore" } } )
Sınırlamalar
- Bir koleksiyonda yalnızca bir metin dizini tanımlanabilir.
- Sıralama işlemleri MongoDB'de metin dizininin sıralamasını kullanamaz.
- Hint(), $text ifadesi kullanan bir sorguyla birlikte desteklenmez.
- Metin dizinleri görece büyük olabilir ve diğer dizin türlerine kıyasla önemli depolama alanı tüketebilir.
Joker Karakter dizinleri
Tek bir alanda dizin oluşturur, aynı düzeydeki diğer alanları hariç tutarak altındaki field tüm yolları dizinler. Örneğin, aşağıdaki örnek belge için
{
"children":
{
"familyName": "Merriam",
"pets": { "details": {“name”: "Goofy", ”age”: 3} }
}
}
{ "pets.$**": 1 } üzerinde dizin oluşturma, ayrıntılar ve alt belge özelliklerinde dizin oluşturur ancak "familyName" üzerinde dizin oluşturmaz.
Sınırlamalar
- Joker dizinler benzersiz dizinleri destekleyemez.
- Joker karakter dizinleri, yalnızca joker karakterde bulunan yolların filtreye dahil edilmesi durumunda
ORDER BYöğesinin gönderimini destekler, çünkü tanımlanmamış öğelerin dizinini oluşturmazlar. - Bileşik joker dizini yalnızca bir
onejoker karakter terimi veoneveya daha fazla dizin terimi içerebilir.{ "pets.$**": 1, “familyName”: 1 }
Jeo-uzamsal dizinler
Jeo-uzamsal dizinler, GeoJSON nesneleri veya eski koordinat çiftleri olarak depolanan veriler üzerindeki sorguları destekler. Jeo-uzamsal verilerdeki sorguların performansını artırmak veya belirli jeo-uzamsal sorguları çalıştırmak için jeo-uzamsal dizinleri kullanabilirsiniz.
Azure DocumentDB iki tür jeo-uzamsal dizin sağlar:
- Bir küredeki geometriyi yorumlayan sorguları destekleyen 2dsphere Dizinleri.
- Düz bir yüzeydeki geometriyi yorumlayan sorguları destekleyen 2b Dizinler.
2d dizinler
2d dizinler yalnızca coğrafi verilerin eski koordinat çifti stiliyle depolanma yöntemiyle desteklenir.
2d seçeneğiyle createIndex yöntemini kullanarak location alanında jeo-uzamsal dizin oluşturun.
db.places.createIndex({ "location": "2d"});
Sınırlamalar
- Yalnızca
onekonum alanı dizinin parçası2dolabilir ve yalnızcaonediğer jeo-uzamsal olmayan alan dizinin parçasıcompound 2dolabilirdb.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1 })
2dsphere dizinleri
2dsphere dizinler, dünya benzeri bir alanda jeo-uzamsal sorguları destekler. Hem GeoJSON nesnelerini hem de eski koordinat çiftlerini destekleyebilir.
2dSphere dizinleri verileri depolamanın GeoJSON stiliyle çalışır; eski noktalarla karşılaşılırsa GeoJSON noktasına dönüştürülür.
createIndex yöntemini 2dsphere seçeneğiyle location alanında jeo-uzamsal dizin oluşturmak için kullanın.
db.places.createIndex({ "location": "2dsphere"});
2dsphere dizinler, birden çok jeo-uzamsal ve birden çok jeo-uzamsal olmayan veri alanında dizinler oluşturulmasına olanak sağlar.
db.places.createIndex({ "location": "2d", "non-geospatial-field": 1 / -1, ... "more non-geospatial-field": 1 / -1 })
Sınırlamalar
Normal dizin ve jeo-uzamsal dizin kullanan bileşik dizin desteklenmez. Jeo-uzamsal dizinlerden birinin oluşturulması hatalara yol açabilir.
// Compound Regular & 2dsphere indexes are not supported yet db.collection.createIndex({a: 1, b: "2dsphere"}) // Compound 2d indexes are not supported yet db.collection.createIndex({a: "2d", b: 1})Delikli çokgenler çalışmaz. tr-TR: İç boşluğu olan bir çokgen eklemek kısıtlanmasa da
$geoWithinsorgusu bazı senaryolarda başarısız olur.Sorgunun kendisinde delikli çokgen varsa
coll.find( { "b": { "$geoWithin": { "$geometry": { "coordinates": [ [ [ 0, 0], [0, 10], [10, 10],[10,0],[0, 0] ], [ [5, 5], [8, 5], [ 8, 8], [ 5, 8], [ 5, 5] ] ], "type": "Polygon" } } } }) // MongoServerError: $geoWithin currently doesn't support polygons with holesHerhangi bir filtrelenmemiş belge içinde delikleri olan bir çokgen varsa.
[mongos] test> coll.find() [ { _id: ObjectId("667bf7560b4f1a5a5d71effa"), b: { type: 'Polygon', coordinates: [ [ [ 0, 0 ], [ 0, 10 ], [ 10, 10 ], [ 10, 0 ], [ 0, 0 ] ], [ [ 5, 5 ], [ 8, 5 ], [ 8, 8 ], [ 5, 8 ], [ 5, 5 ] ] ] } } ] // MongoServerError: $geoWithin currently doesn't support polygons with holeskeyalanı kullanılırkengeoNearzorunludur.[mongos] test> coll.aggregate([{ $geoNear: { $near: { "type": "Point", coordinates: [0, 0] } } }]) // MongoServerError: $geoNear requires a 'key' option as a String
Sonraki Adımlar
- Dizin oluşturma En verimli sonuçlar için en iyi yöntemler hakkında bilgi edinin.
- Arka plan dizini oluşturma hakkında bilgi edinin
- Metin dizini oluşturma ile çalışmak için burada bilgi edinin.
- Joker karakter dizini oluşturma hakkında buradan bilgi edinin.