Azure Cosmos DB'de dizin oluşturma ilkeleri

UYGULANANLAR: NoSQL

Azure Cosmos DB'de her kapsayıcının bir dizin oluşturma ilkesi vardır ve bu ilke kapsayıcıdaki öğelerin nasıl dizine alınacağını belirler. Yeni oluşturulan kapsayıcıların varsayılan dizin oluşturma ilkesi tüm öğelerin tüm özelliklerini dizine alır ve tüm dizeler veya sayılar için aralık dizinlerini zorunlu tutar. Bu sayede önceden dizin oluşturmayı ve dizin yönetimini düşünmek zorunda kalmadan iyi bir sorgu performansı elde edebilirsiniz.

Bazı durumlarda bu otomatik davranışı kendi gereksinimlerinize daha iyi uyacak şekilde geçersiz kılmak isteyebilirsiniz. Dizin oluşturma modunu ayarlayarak ve özellik yollarını dahil ederek veya hariç tutarak kapsayıcının dizin oluşturma ilkesini özelleştirebilirsiniz.

Dekont

Bu makalede açıklanan dizin oluşturma ilkelerini güncelleştirme yöntemi yalnızca NoSQL için Azure Cosmos DB API'sinde geçerlidir. MongoDB için Azure Cosmos DB API'sinde dizin oluşturma hakkında bilgi edinin

Dizin oluşturma modu

Azure Cosmos DB iki dizin oluşturma modunu destekler:

  • Tutarlı: Siz öğeleri oluştururken, güncelleştirirken veya silerken dizin zaman uyumlu olarak güncelleştirilir. Bu, okuma sorgularınızın tutarlılığının hesap için yapılandırılan tutarlılık olacağı anlamına gelir.
  • Hiçbiri: Kapsayıcıda dizin oluşturma devre dışı bırakıldı. Bu mod genellikle bir kapsayıcı ikincil dizinlere gerek kalmadan saf anahtar-değer deposu olarak kullanıldığında kullanılır. Toplu işlemlerin performansını geliştirmek için de kullanılabilir. Toplu işlemler tamamlandıktan sonra dizin modu Tutarlı olarak ayarlanabilir ve tamamlanana kadar IndexTransformationProgress kullanılarak izlenebilir.

Dekont

Azure Cosmos DB, Gecikmeli dizin oluşturma modunu da destekler. Gecikmeli dizinde, dizin güncelleştirmeleri altyapıda hiçbir çalışma yapılmadığı sırada çok daha düşük öncelik düzeyinde gerçekleştirilir. Bu tutarsız veya eksik sorgu sonuçlarına yol açabilir. Azure Cosmos DB kapsayıcısını sorgulamayı planlıyorsanız gecikmeli dizin oluşturmayı seçmemelisiniz. Yeni kapsayıcılar gecikmeli dizin oluşturmayı seçemez. İletişim kurarak cosmosdbindexing@microsoft.com muafiyet isteyebilirsiniz (gecikmeli dizin oluşturmayı desteklemeyen sunucusuz modda bir Azure Cosmos DB hesabı kullanıyorsanız hariç).

Dizin oluşturma ilkesi varsayılan olarak olarak automaticayarlanır. Dizin oluşturma ilkesindeki automatic özelliği olarak trueayarlanarak elde edilir. Bu özelliğin olarak true ayarlanması, Azure Cosmos DB'nin yazıldıklarında öğeleri otomatik olarak dizine eklemesine olanak tanır.

Dizin boyutu

Azure Cosmos DB'de toplam tüketilen depolama alanı hem Veri boyutu hem de Dizin boyutunun birleşimidir. Dizin boyutunun bazı özellikleri şunlardır:

  • Dizin boyutu dizin oluşturma ilkesine bağlıdır. Tüm özellikler dizine eklendiyse, dizin boyutu veri boyutundan daha büyük olabilir.
  • Veriler silindiğinde dizinler neredeyse sürekli olarak sıkıştırılır. Ancak, küçük veri silme işlemleri için dizin boyutunun hemen azalmasını gözlemlemeyebilirsiniz.
  • Fiziksel bölümler bölündüğünde Dizin boyutu geçici olarak büyüyebilir. Bölüm bölme tamamlandıktan sonra dizin alanı serbest bırakılır.

Özellik yollarını dahil etme ve hariç tutma

Özel dizin oluşturma ilkesi, dizin oluşturmanın açıkça dahil edilen veya dışında tutulan özellik yollarını belirtebilir. Dizine alınan yol sayısını iyileştirerek yazma işlemlerinin gecikme süresini ve RU ücretini önemli ölçüde azaltabilirsiniz. Bu yollar, dizin oluşturma genel bakış bölümünde açıklanan yöntemin ardından aşağıdaki eklemelerle tanımlanır:

  • skaler değere (dize veya sayı) giden bir yol ile biter /?
  • dizideki öğeler, gösterimi aracılığıyla /[] (vb. yerine/0/1) birlikte ele alınır.
  • joker karakter, düğümün /* altındaki öğelerle eşleştirmek için kullanılabilir

Aynı örneği tekrar ele alıyoruz:

    {
        "locations": [
            { "country": "Germany", "city": "Berlin" },
            { "country": "France", "city": "Paris" }
        ],
        "headquarters": { "country": "Belgium", "employees": 250 },
        "exports": [
            { "city": "Moscow" },
            { "city": "Athens" }
        ]
    }
  • ' headquartersnin employees yolu şudur: /headquarters/employees/?

  • locations' country yolu/locations/[]/country/?

  • altındaki headquarters herhangi bir şeyin yolu /headquarters/*

Örneğin, yolu dahil /headquarters/employees/? edebiliriz. Bu yol employees özelliğini dizine almamızı sağlar ancak bu özellik içinde iç içe yerleştirilmiş ek JSON dizinini oluşturmaz.

Ekleme/hariç tutma stratejisi

Dizin oluşturma ilkelerinin kök yolu /* eklenen veya dışlanan bir yol olarak içermesi gerekir.

  • Dizine alınması gerekmeyen yolları seçmeli olarak dışlamak için kök yolu ekleyin. Azure Cosmos DB'nin modelinize eklenebilen tüm yeni özellikleri proaktif olarak dizine eklemesine olanak tanıyan bu yaklaşım önerilir.

  • Dizine alınması gereken yolları seçmeli olarak eklemek için kök yolu hariç tutun. Bölüm anahtarı özellik yolu varsayılan olarak dışlama stratejisiyle dizine alınmaz ve gerekirse açıkça dahil edilmelidir.

  • Alfasayısal karakterler ve _ (alt çizgi) gibi normal karakterler içeren yollar için, yol dizesini çift tırnak (örneğin, "/path/?"). Diğer özel karakterlere sahip yollar için, yol dizesini çift tırnak içine almanız gerekir (örneğin, "/"path-abc"/?"). Yolunuzda özel karakterler bekliyorsanız, güvenlik için her yoldan kaçabilirsiniz. İşlevsel olarak, her yoldan veya yalnızca özel karakterlere sahip olanlardan kaçış yapmanız fark etmez.

  • Etag dizin oluşturma için eklenen yola eklenmediği sürece sistem özelliği _etag varsayılan olarak dizin oluşturmanın dışında tutulur.

  • Dizin oluşturma modu tutarlı olarak ayarlanırsa, sistem özellikleri id ve _ts otomatik olarak dizine eklenir.

  • Açıkça dizine alınmış bir yol bir öğede yoksa, yolun tanımsız olduğunu belirtmek için dizine bir değer eklenir.

Açıkça eklenen tüm yollar, belirli bir öğe için tanımlanmamış olsa bile kapsayıcıdaki her öğe için dizine değerler eklenir.

Yolları dahil etme ve dışlama için dizin oluşturma ilkesi örnekleri için bu bölüme bakın.

Önceliği dahil et/hariç tut

Dahil edilen yollarınızla dışlanan yollarınızın çakışması varsa, daha kesin yol önceliklidir.

Bir örnek aşağıda verilmiştir:

Eklenen Yol: /food/ingredients/nutrition/*

Dışlanan Yol: /food/ingredients/*

Bu durumda, dahil edilen yol, daha kesin olduğundan dışlanan yoldan önceliklidir. Bu yollara bağlı olarak, yolundaki food/ingredients veya içinde iç içe yerleştirilmiş tüm veriler dizinden dışlanır. Özel durum, dahil edilen yol içindeki veriler olabilir: /food/ingredients/nutrition/*, dizine alınır.

Azure Cosmos DB'de dahil edilen ve dışlanan yol önceliği için bazı kurallar aşağıda verilmiştir:

  • Daha derin yollar, dar yollara göre daha kesindir. örneğin: /a/b/? değerinden daha /a/?kesindir.

  • , /? değerinden daha /*kesindir. Örneğin /a/? , öncelik aldığından daha /a/*/a/? kesindir.

  • Yol /* , eklenen veya dışlanan bir yol olmalıdır.

Uzamsal dizinler

Dizin oluşturma ilkesinde uzamsal bir yol tanımladığınızda, bu yola hangi dizinin type uygulanacağını tanımlamanız gerekir. Uzamsal dizinler için olası türler şunlardır:

  • Nokta

  • Poligon

  • Multipolygon

  • Linestring

Azure Cosmos DB varsayılan olarak herhangi bir uzamsal dizin oluşturmaz. Uzamsal SQL yerleşik işlevlerini kullanmak istiyorsanız, gerekli özelliklerde uzamsal dizin oluşturmanız gerekir. Uzamsal dizinler eklemeye yönelik dizin oluşturma ilkesi örnekleri için bu bölüme bakın.

Bileşik dizinler

İki veya daha fazla özelliğe sahip yan ORDER BY tümcesine sahip sorgular bileşik dizin gerektirir. Ayrıca, birçok eşitlik ve aralık sorgusunun performansını artırmak için bileşik dizin de tanımlayabilirsiniz. Varsayılan olarak bileşik dizin tanımlanmadığından, gerektiğinde bileşik dizinler eklemeniz gerekir.

Eklenen veya dışlanan yollardan farklı olarak, joker karakterle /* yol oluşturamazsınız. Her bileşik yolun sonunda, belirtmeniz gerekmeyen örtük /? bir yol vardır. Bileşik yollar, bileşik dizinde yer alan tek değer olan bir skaler değere yol açar. Bileşik dizindeki bir yol bir öğede yoksa veya skaler olmayan bir değere yol açıyorsa, yolun tanımsız olduğunu belirtmek için dizine bir değer eklenir.

Bileşik dizin tanımlarken şunları belirtirsiniz:

  • İki veya daha fazla özellik yolu. Özellik yollarının tanımlandığı sıra önemlidir.

  • Sıra (artan veya azalan).

Dekont

Bileşik dizin eklediğinizde, yeni bileşik dizin ekleme işlemi tamamlanana kadar sorgu mevcut aralık dizinlerini kullanır. Bu nedenle, bileşik dizin eklediğinizde performans iyileştirmelerini hemen gözlemlemeyebilirsiniz. SDK'lardan birini kullanarak dizin dönüştürme işleminin ilerleme durumunu izlemek mümkündür.

Birden çok özellik üzerinde ORDER BY sorguları:

İki veya daha fazla özelliğe sahip yan ORDER BY tümcesi olan sorgular için bileşik dizinler kullanılırken aşağıdaki noktalar kullanılır:

  • Bileşik dizin yolları yan tümcesindeki ORDER BY özelliklerin dizisiyle eşleşmiyorsa bileşik dizin sorguyu destekleyemez.

  • Bileşik dizin yollarının sırası (artan veya azalan) yan tümcesindekiyle orderORDER BY de eşleşmelidir.

  • Bileşik dizin, tüm yollarda karşıt sırada olan bir ORDER BY yan tümceyi de destekler.

Bileşik dizinin özellik adı, yaşı ve _ts üzerinde tanımlandığı aşağıdaki örneği göz önünde bulundurun:

Bileşik dizin Örnek ORDER BY Sorgu Bileşik dizin desteği
(name ASC, age ASC) SELECT * FROM c ORDER BY c.name ASC, c.age asc Yes
(name ASC, age ASC) SELECT * FROM c ORDER BY c.age ASC, c.name asc No
(name ASC, age ASC) SELECT * FROM c ORDER BY c.name DESC, c.age DESC Yes
(name ASC, age ASC) SELECT * FROM c ORDER BY c.name ASC, c.age DESC No
(name ASC, age ASC, timestamp ASC) SELECT * FROM c ORDER BY c.name ASC, c.age ASC, timestamp ASC Yes
(name ASC, age ASC, timestamp ASC) SELECT * FROM c ORDER BY c.name ASC, c.age ASC No

Tüm gerekli ORDER BY sorgulara hizmet verebilmeniz için dizin oluşturma ilkenizi özelleştirmeniz gerekir.

Birden fazla özelliğinde filtreler olan sorgular

Bir sorguda iki veya daha fazla özellik üzerinde filtreler varsa, bu özellikler için bileşik dizin oluşturmak yararlı olabilir.

Örneğin, hem eşitlik hem de aralık filtresi olan aşağıdaki sorguyu göz önünde bulundurun:

SELECT *
FROM c
WHERE c.name = "John" AND c.age > 18

Üzerinde bileşik dizinden (name ASC, age ASC)yararlanabiliyorsa, bu sorgu daha verimli olur, daha az zaman alır ve daha az RU kullanır.

Birden çok aralık filtresi olan sorgular bileşik dizinle de iyileştirilebilir. Ancak, tek tek her bileşik dizin yalnızca tek bir aralık filtresini iyileştirebilir. Aralık filtreleri , , <<=, >=ve !=filtrelerini içerir>. Aralık filtresi bileşik dizinde en son tanımlanmalıdır.

Bir eşitlik filtresi ve iki aralık filtresi ile aşağıdaki sorguyu göz önünde bulundurun:

SELECT *
FROM c
WHERE c.name = "John" AND c.age > 18 AND c._ts > 1612212188

Bu sorgu, ve (name ASC, _ts ASC)üzerindeki (name ASC, age ASC) bileşik dizinle daha verimli olacaktır. Ancak, eşitlik filtrelerine sahip özelliklerin önce bileşik dizinde (age ASC, name ASC) tanımlanması gerektiğinden, sorgu üzerinde bileşik dizin kullanmaz. Her bileşik dizin yalnızca tek bir aralık filtresini iyileştirebildiğinden, üzerinde (name ASC, age ASC, _ts ASC) tek bir bileşik dizin yerine iki ayrı bileşik dizin gereklidir.

Birden çok özellik üzerinde filtre içeren sorgular için bileşik dizinler oluşturulurken aşağıdaki noktalar kullanılır

  • Filtre ifadeleri birden çok bileşik dizin kullanabilir.
  • Sorgunun filtresindeki özellikler bileşik dizindeki özelliklerle eşleşmelidir. Bir özellik bileşik dizindeyse ancak sorguya filtre olarak dahil değilse, sorgu bileşik dizini kullanmaz.
  • Bir sorgu, filtrede bileşik dizinde tanımlanmayan başka özelliklere sahipse, sorguyu değerlendirmek için bileşik ve aralık dizinlerinin birleşimi kullanılır. Bunun için yalnızca aralık dizinlerini kullanmaktan daha az RU gerekir.
  • Bir özelliğin aralık filtresi (>, <, <=, >=veya !=) varsa, bu özellik bileşik dizinde en son tanımlanmalıdır. Bir sorguda birden fazla aralık filtresi varsa, birden çok bileşik dizinden yararlanabilir.
  • Birden çok filtre içeren sorguları iyileştirmek için bileşik dizin oluştururken bileşik ORDER dizinin sonuçları etkilemez. Bu özellik isteğe bağlıdır.

Bileşik dizinin özellik adı, yaşı ve zaman damgası üzerinde tanımlandığı aşağıdaki örnekleri göz önünde bulundurun:

Bileşik dizin Örnek Sorgu Bileşik dizin desteği
(name ASC, age ASC) SELECT * FROM c WHERE c.name = "John" AND c.age = 18 Yes
(name ASC, age ASC) SELECT * FROM c WHERE c.name = "John" AND c.age > 18 Yes
(name ASC, age ASC) SELECT COUNT(1) FROM c WHERE c.name = "John" AND c.age > 18 Yes
(name DESC, age ASC) SELECT * FROM c WHERE c.name = "John" AND c.age > 18 Yes
(name ASC, age ASC) SELECT * FROM c WHERE c.name != "John" AND c.age > 18 No
(name ASC, age ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.age = 18 AND c.timestamp > 123049923 Yes
(name ASC, age ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.age < 18 AND c.timestamp = 123049923 No
(name ASC, age ASC) and (name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.age < 18 AND c.timestamp > 123049923 Yes

Filtre ve ORDER BY içeren sorgular

Sorgu bir veya daha fazla özelliğe filtre uygulamışsa ve ORDER BY yan tümcesinde farklı özelliklere sahipse, filtredeki özellikleri yan tümcesine ORDER BY eklemek yararlı olabilir.

Örneğin, filtredeki özellikleri yan tümcesine ORDER BY ekleyerek bileşik dizinden yararlanmak için aşağıdaki sorgu yeniden yazılabilir:

Aralık dizinini kullanarak sorgula:

SELECT *
FROM c 
WHERE c.name = "John" 
ORDER BY c.timestamp

Bileşik dizin kullanarak sorgu:

SELECT * 
FROM c 
WHERE c.name = "John"
ORDER BY c.name, c.timestamp

Aynı sorgu iyileştirmeleri, filtrelere sahip tüm ORDER BY sorgular için genelleştirilebilir ve tek tek bileşik dizinlerin en fazla bir aralık filtresini destekleyebileceğinizi unutmayın.

Aralık dizinini kullanarak sorgula:

SELECT * 
FROM c 
WHERE c.name = "John" AND c.age = 18 AND c.timestamp > 1611947901 
ORDER BY c.timestamp

Bileşik dizin kullanarak sorgu:

SELECT * 
FROM c 
WHERE c.name = "John" AND c.age = 18 AND c.timestamp > 1611947901 
ORDER BY c.name, c.age, c.timestamp

Ayrıca, sistem işlevleri ve ORDER BY ile sorguları iyileştirmek için bileşik dizinleri kullanabilirsiniz:

Aralık dizinini kullanarak sorgula:

SELECT * 
FROM c 
WHERE c.firstName = "John" AND Contains(c.lastName, "Smith", true) 
ORDER BY c.lastName

Bileşik dizin kullanarak sorgu:

SELECT * 
FROM c 
WHERE c.firstName = "John" AND Contains(c.lastName, "Smith", true) 
ORDER BY c.firstName, c.lastName

Filtre ve ORDER BY yan tümcesi olan bir sorguyu iyileştirmek için bileşik dizinler oluştururken aşağıdaki noktalar geçerlidir:

  • Bir özellikte filtre ve farklı bir özellik kullanan ayrı ORDER BY bir yan tümcesi olan bir sorguda bileşik dizin tanımlamazsanız, sorgu yine başarılı olur. Ancak, özellikle yan tümcesindeki özelliğin yüksek kardinalitesi varsa, sorgunun ORDER BY RU maliyeti bileşik dizinle azaltılabilir.
  • Sorgu özelliklere göre filtrelenirse, bu özellikler ilk olarak yan tümcesine ORDER BY dahil edilmelidir.
  • Sorgu birden çok özelliğe filtre eklerse, eşitlik filtreleri yan tümcesindeki ilk özellikler ORDER BY olmalıdır.
  • Sorgu birden çok özelliğe göre filtrelenirse bileşik dizin başına en fazla bir aralık filtresi veya sistem işlevi kullanılabilir. Aralık filtresinde veya sistem işlevinde kullanılan özellik en son bileşik dizinde tanımlanmalıdır.
  • Birden çok özelliğe sahip sorgular ve birden çok özellik üzerinde filtre içeren sorgular için ORDER BY bileşik dizinler oluşturmaya yönelik tüm önemli noktalar yine de geçerlidir.
Bileşik dizin Örnek ORDER BY Sorgu Bileşik dizin desteği
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" ORDER BY c.name ASC, c.timestamp ASC Yes
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.timestamp > 1589840355 ORDER BY c.name ASC, c.timestamp ASC Yes
(timestamp ASC, name ASC) SELECT * FROM c WHERE c.timestamp > 1589840355 AND c.name = "John" ORDER BY c.timestamp ASC, c.name ASC No
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" ORDER BY c.timestamp ASC, c.name ASC No
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" ORDER BY c.timestamp ASC No
(age ASC, name ASC, timestamp ASC) SELECT * FROM c WHERE c.age = 18 and c.name = "John" ORDER BY c.age ASC, c.name ASC,c.timestamp ASC Yes
(age ASC, name ASC, timestamp ASC) SELECT * FROM c WHERE c.age = 18 and c.name = "John" ORDER BY c.timestamp ASC No

Filtre ve toplama içeren sorgular

Bir sorgu bir veya daha fazla özelliğe filtre uygulamışsa ve bir toplama sistemi işlevine sahipse, filtre ve toplama sistemi işlevindeki özellikler için bileşik dizin oluşturmak yararlı olabilir. Bu iyileştirme SUM ve AVG sistem işlevleri için geçerlidir.

Filtre ve toplama sistem işleviyle bir sorguyu iyileştirmek için bileşik dizinler oluştururken aşağıdaki noktalar geçerlidir.

  • Bileşik dizinler, toplamalı sorgular çalıştırılırken isteğe bağlıdır. Ancak, bileşik dizinle sorgunun RU maliyeti genellikle önemli ölçüde azaltılabilir.
  • Sorgu birden çok özelliğe göre filtrelenirse, eşitlik filtreleri bileşik dizindeki ilk özellikler olmalıdır.
  • Bileşik dizin başına en fazla bir aralık filtresine sahip olabilirsiniz ve bu filtrenin toplama sistemi işlevindeki özelliğinde olması gerekir.
  • Toplama sistemi işlevindeki özelliği bileşik dizinde en son tanımlanmalıdır.
  • order (ASC veya DESC) önemli değildir.
Bileşik dizin Örnek Sorgu Bileşik dizin desteği
(name ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" Yes
(timestamp ASC, name ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" No
(name ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name > "John" No
(name ASC, age ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" AND c.age = 25 Yes
(age ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" AND c.age > 25 No

Dizin oluşturma ilkesini değiştirme

Kapsayıcının dizin oluşturma ilkesi, Azure portalı veya desteklenen SDK'lardan biri kullanılarak istediğiniz zaman güncelleştirilebilir. Dizin oluşturma ilkesine yönelik bir güncelleştirme, eski dizinden yenisine çevrimiçi ve yerinde gerçekleştirilen bir dönüştürmeyi tetikler (bu nedenle işlem sırasında ek depolama alanı tüketilmez). Eski dizin oluşturma ilkesi yazma kullanılabilirliğini, okuma kullanılabilirliğini veya kapsayıcıda sağlanan aktarım hızını etkilemeden yeni ilkeye verimli bir şekilde dönüştürülür. Dizin dönüştürme zaman uyumsuz bir işlemdir ve tamamlanma süresi sağlanan aktarım hızına, öğe sayısına ve boyutlarına bağlıdır. Birden çok dizin oluşturma ilkesi güncelleştirmesi yapılması gerekiyorsa, dizin dönüştürmenin mümkün olan en kısa sürede tamamlanması için tüm değişiklikleri tek bir işlem olarak yapmanız önerilir.

Önemli

Dizin dönüştürme, İstek Birimlerini kullanan bir işlemdir. Sunucusuz kapsayıcılar kullanıyorsanız dizin dönüşümü tarafından kullanılan İstek Birimleri şu anda faturalandırılamaz. Sunucusuz genel kullanıma sunulduğunda bu İstek Birimleri faturalandırılır.

Dekont

Dizin dönüştürme işleminin ilerleme durumunu Azure portalında veya SDK'lardan birini kullanarak izleyebilirsiniz.

Dizin dönüştürmeleri sırasında yazma kullanılabilirliğini etkilemez. Dizin dönüştürme, sağlanan RU'larınızı kullanır ancak CRUD işlemlerinizden veya sorgularınızdan daha düşük önceliklidir.

Yeni dizine alınan yollar eklenirken okuma kullanılabilirliğini etkilemez. Sorgular yalnızca bir dizin dönüştürme işlemi tamamlandıktan sonra yeni dizine alınan yolları kullanır. Başka bir deyişle, yeni bir dizinli yol eklerken, bu dizinli yoldan yararlanan sorgular, dizin dönüştürme işleminden önce ve sırasında aynı performansa sahip olur. Dizin dönüştürme tamamlandıktan sonra sorgu altyapısı yeni dizine alınan yolları kullanmaya başlar.

Dizine alınan yolları kaldırırken, tüm değişikliklerinizi tek bir dizin ilkesi dönüşümünde gruplandırmalısınız. Birden çok dizini kaldırır ve bunu tek bir dizin ilkesi değişikliğinde yaparsanız, sorgu altyapısı dizin dönüşümü boyunca tutarlı ve eksiksiz sonuçlar sağlar. Ancak, dizinleri birden çok dizin oluşturma ilkesi değişikliğiyle kaldırırsanız, sorgu altyapısı tüm dizin dönüştürmeleri tamamlanana kadar tutarlı veya eksiksiz sonuçlar sağlamaz. Geliştiricilerin çoğu dizinleri bırakmaz ve bu dizinleri kullanan sorguları hemen çalıştırmaya çalışır, bu nedenle pratikte bu durum pek olası değildir.

Dizine alınan bir yolu bıraktığınızda sorgu altyapısı bunu kullanmayı hemen durdurur ve bunun yerine tam tarama yapar.

Dekont

Mümkün olduğunda, her zaman birden çok dizin kaldırma işlemini tek bir dizin ilkesi değişikliğinde gruplandırmayı denemelisiniz.

Önemli

Bir dizinin kaldırılması hemen etkilenir, ancak dizin oluşturma dönüşümü gerektirdiği için yeni bir dizin eklemek biraz zaman alır. Bir dizini başka bir dizinle değiştirirken (örneğin, tek bir özellik dizinini bileşik dizinle değiştirirken) önce yeni dizini eklediğinizden emin olun ve dizin oluşturma ilkesinden önceki dizini kaldırmadan önce dizin dönüştürme işleminin tamamlanmasını bekleyin. Aksi takdirde bu, önceki dizini sorgulama becerinizi olumsuz etkiler ve önceki dizine başvuran tüm etkin iş yüklerini bozabilir.

Dizin oluşturma ilkeleri ve TTL

Yaşam Süresi (TTL) özelliğinin kullanılması için dizin oluşturma gerekir. Bu şu anlama gelir:

  • dizin oluşturma modunun olarak ayarlandığı nonebir kapsayıcıda TTL'yi etkinleştirmek mümkün değildir.
  • TTL'nin etkinleştirildiği bir kapsayıcıda dizin oluşturma modunu Yok olarak ayarlamak mümkün değildir.

Hiçbir özellik yolunun dizine alınması gerekmeyen ancak TTL'nin gerekli olduğu senaryolarda, dizin oluşturma modu olarak ayarlanmış consistentbir dizin oluşturma ilkesi kullanabilir, ekli yol yok ve /* tek dışlanan yol olarak.

Sonraki adımlar

Dizin oluşturma hakkında daha fazla bilgiyi aşağıdaki makalelerde bulabilirsiniz: