Azure AI Search'te büyük veri kümelerini dizine ekleme
Arama çözümünüzde büyük veya karmaşık veri kümelerini dizine almanız gerekiyorsa, bu makalede Azure AI Search'te uzun süre çalışan işlemlere uyum sağlamak için stratejiler inceleniyor.
Bu stratejiler, verileri içeri aktarmaya yönelik iki temel yaklaşım hakkında bilgi sahibi olduğunuzu varsayar: verileri dizine gönderme veya arama dizin oluşturucu kullanarak desteklenen bir veri kaynağından veri çekme. Senaryonuz hesaplama açısından yoğun yapay zeka zenginleştirmesi içeriyorsa, dizin oluşturuculara beceri kümesi bağımlılığı göz önüne alındığında dizin oluşturucular gereklidir.
Bu makale, dizin ve sorgu tasarımıyla ilgili en iyi yöntemleri sunan daha iyi performansa yönelik İpuçlarını tamamlar. Yalnızca ihtiyacınız olan alanları ve öznitelikleri içeren iyi tasarlanmış bir dizin, büyük ölçekli dizin oluşturma için önemli bir önkoşuldur.
Bölüm başına daha yüksek depolama alanı için 3 Nisan 2024'e kadar oluşturulan daha yeni bir arama hizmeti kullanmanızı öneririz.
Not
Bu makalede açıklanan stratejilerde tek bir büyük veri kaynağı olduğu varsayılır. Çözümünüz birden çok veri kaynağından dizin oluşturmayı gerektiriyorsa önerilen bir yaklaşım için bkz . Azure AI Search'te birden çok veri kaynağını dizinleme.
Gönderme API'lerini kullanarak verileri dizine oluşturma
Belgeler Dizini REST API'leri veya IndexDocuments yöntemi (.NET için Azure SDK) gibi anında iletme API'leri, Azure AI Search'teki en yaygın dizin oluşturma biçimidir. Gönderme API'sini kullanan çözümler için, uzun süre çalışan dizin oluşturma stratejisi aşağıdaki bileşenlerden birine veya her ikisine de sahiptir:
- Belgeleri toplu olarak oluşturma
- İş parçacıklarını yönetme
İstek başına birden çok belgeyi toplu iş
Büyük miktarda verinin dizinini oluşturmak için basit bir mekanizma, tek bir istekte birden çok belge veya kayıt göndermektir. Yükün tamamı 16 MB'ın altında olduğu sürece, bir istek toplu karşıya yükleme işleminde en fazla 1.000 belgeyi işleyebilir. Bu sınırlar, Belgeler Dizini REST API'sini veya .NET SDK'sında IndexDocuments yöntemini kullanmanız fark etmez. Api'lerden birini kullanarak her isteğin gövdesinde 1.000 belge paketleyebilirsiniz.
Belgelerin toplu işlenmesi, büyük bir veri hacminde çalışmak için gereken süreyi önemli ölçüde kısaltır. Verileriniz için en uygun toplu iş boyutunu belirlemek, dizin oluşturma hızlarını iyileştirmenin önemli bir bileşenidir. En uygun toplu iş boyutunu etkileyen iki birincil faktör şunlardır:
- Dizininizin şeması
- Verilerinizin boyutu
En uygun toplu iş boyutu dizininize ve verilerinize bağlı olduğundan, en iyi yaklaşım farklı toplu iş boyutlarını test ederek hangisinin senaryonuz için en yüksek dizin oluşturma hızlarına neden olduğunu belirlemektir. .NET SDK'sını kullanarak toplu iş boyutlarını test etmek için örnek kod için bkz . Öğretici: Gönderme API'siyle dizin oluşturmayı iyileştirme.
İş parçacıklarını ve yeniden deneme stratejisini yönetme
Dizin oluşturucuların yerleşik iş parçacığı yönetimi vardır, ancak gönderme API'lerini kullanırken uygulama kodunuzun iş parçacıklarını yönetmesi gerekir. Özellikle son zamanlarda bölümleri artırdıysanız veya daha yüksek bir katman arama hizmetine yükselttiyseniz kullanılabilir kapasiteden tam olarak yararlanmak için yeterli iş parçacıkları olduğundan emin olun.
İstemci kodunuzda eşzamanlı iş parçacığı sayısını artırın.
Arama hizmetine isabet eden istekleri artırdığınızda, isteğin tam olarak başarılı olmadığını belirten HTTP durum kodlarıyla karşılaşabilirsiniz. Dizin oluşturma sırasında iki yaygın HTTP durum kodu şunlardır:
503 Hizmet Kullanılamıyor: Bu hata, sistemin ağır yük altında olduğu ve isteğinizin şu anda işlenebileceği anlamına gelir.
207 Çoklu Durum: Bu hata, bazı belgelerin başarılı olduğu, ancak en az birinin başarısız olduğu anlamına gelir.
Hataları işlemek için isteklerin üstel geri alma yeniden deneme stratejisi kullanılarak yeniden denenmesi gerekir.
Azure .NET SDK'sı 503'leri ve diğer başarısız istekleri otomatik olarak yeniden dener, ancak 207'leri yeniden denemek için kendi mantığınızı uygulamanız gerekir. Polly gibi açık kaynak araçlar da bir yeniden deneme stratejisi uygulamak için kullanılabilir.
Dizin oluşturucuları ve çekme API'lerini kullanma
Dizin oluşturucular , uzun süre çalışan işlemler için yararlı olan çeşitli özelliklere sahiptir:
- Belgeleri toplu olarak oluşturma
- Bölümlenmiş veriler üzerinde paralel dizin oluşturma
- Zaman içinde yalnızca yeni ve değiştirilmiş belgelerin dizinini oluşturmak için zamanlama ve değişiklik algılama
Dizin oluşturucu zamanlamaları, bilinen son durdurma noktasında işlemeye devam edebilir. Veriler işleme penceresinde tam olarak dizine alınmazsa, değişiklik algılaması sağlayan bir veri kaynağı kullandığınız varsayılarak dizin oluşturucu bir sonraki çalıştırmada kaldığı yerden devam eder.
Verilerin daha küçük ayrı veri kaynaklarına bölümlenmesi paralel işlemeye olanak tanır. Azure Blob Depolama'da birden çok kapsayıcıya bölme, her bölüm için bir veri kaynağı oluşturma ve ardından dizin oluşturucuları arama hizmetinizin arama birimi sayısına bağlı olarak paralel olarak çalıştırma gibi kaynak verileri ayırabilirsiniz.
Dizin oluşturucu toplu iş boyutunu denetleme
Gönderme API'sinde olduğu gibi dizin oluşturucular da toplu iş başına öğe sayısını yapılandırmanıza olanak sağlar. Dizin Oluşturucu REST API'sini temel alan dizin oluşturucular için, bu ayarı verilerinizin batchSize
özellikleriyle daha iyi eşleşecek şekilde özelleştirmek için bağımsız değişkenini ayarlayabilirsiniz.
Varsayılan toplu iş boyutları veri kaynağına özeldir. Azure SQL Veritabanı ve Azure Cosmos DB'nin varsayılan toplu iş boyutu 1.000'tir. Buna karşılık, Azure Blob dizin oluşturma, daha büyük ortalama belge boyutunun tanınması için toplu iş boyutunu 10 belgede ayarlar.
Uzun süre çalışan işlemler için dizin oluşturucuları zamanlama
Dizin oluşturucu zamanlaması, büyük veri kümelerini işlemeye ve zenginleştirme işlem hattında görüntü analizi gibi yavaş çalışan işlemleri kabul etmeye yönelik önemli bir mekanizmadır.
Dizin oluşturucu işleme genellikle iki saatlik bir süre içinde çalıştırılır. Dizin oluşturma iş yükünün tamamlanması saatler yerine günler sürüyorsa, dizin oluşturucuyu iki saatte bir başlayan ardışık, yinelenen bir zamanlamaya yerleştirebilirsiniz. Veri kaynağında değişiklik izlemenin etkinleştirildiği varsayıldığında, dizin oluşturucu işlemeye en son kaldığı yerden devam eder. Bu tempoda, dizin oluşturucu tüm işlenmemiş belgeler işlenene kadar bir dizi gün boyunca belge kapsamı boyunca çalışabilir.
{
"dataSourceName" : "hotels-ds",
"targetIndexName" : "hotels-idx",
"schedule" : { "interval" : "PT2H", "startTime" : "2024-01-01T00:00:00Z" }
}
Veri kaynağında artık yeni veya güncelleştirilmiş belge kalmadığında, dizin oluşturucu yürütme geçmişi işlenen belgeleri raporlar 0/0
ve hiçbir işlem gerçekleşmez.
Zamanlamaları ayarlama hakkında daha fazla bilgi için bkz . Dizin Oluşturucu REST API'sini oluşturma veya bkz . Azure AI Search için dizin oluşturucuları zamanlama.
Not
Eski bir çalışma zamanı mimarisinde çalışan bazı dizin oluşturucuların en fazla 2 saatlik işlem penceresi yerine 24 saat vardır. İki saatlik sınır, dahili olarak yönetilen çok kiracılı bir ortamda çalışan daha yeni içerik işlemcileri içindir. Mümkün olduğunda Azure AI Search, dizin oluşturucu ve beceri kümesi işlemesini çok kiracılı ortama boşaltmaya çalışır. Dizin oluşturucu geçirilemiyorsa, özel ortamda çalışır ve 24 saat kadar çalışabilir. Bu özellikleri sergileyen bir dizin oluşturucu zamanlaması gerçekleştiriyorsanız 24 saatlik bir işlem penceresi olduğunu varsayalım.
Dizin oluşturucuları paralel olarak çalıştırma
Verilerinizi bölümlerseniz, her veri kaynağından çekip aynı arama dizinine yazan birden çok dizin oluşturucu-veri kaynağı bileşimi oluşturabilirsiniz. Her dizin oluşturucu ayrı olduğundan, bir arama dizinini sıralı olarak çalıştırdığınızdan daha hızlı doldurarak bunları aynı anda çalıştırabilirsiniz.
Yeterli kapasiteye sahip olduğunuzdan emin olun. Hizmetinizdeki bir arama birimi herhangi bir zamanda bir dizin oluşturucu çalıştırabilir. Birden çok dizin oluşturucu oluşturmak yalnızca paralel olarak çalıştırabiliyorlarsa yararlıdır.
Aynı anda çalıştırabilen dizin oluşturma işlerinin sayısı, metin tabanlı ve beceri tabanlı dizin oluşturma için farklılık gösterir. Daha fazla bilgi için bkz . Dizin oluşturucu yürütme.
Veri kaynağınız bir Azure Blob Depolama kapsayıcısı veya Azure Data Lake Storage 2. Nesil ise, bu işlem tamamlanana kadar çok sayıda blobun numaralandırması uzun sürebilir (hatta saatler). Sonuç olarak, dizin oluşturucunuzun başarılı belge sayısı bu süre boyunca artmıyor gibi görünüyor ve bu sırada herhangi bir ilerleme kaydedemiyor gibi görünüyor olabilir. Çok sayıda blob için belge işlemenin daha hızlı olmasını istiyorsanız, verilerinizi birden çok kapsayıcıya bölmeyi ve tek bir dizine işaret eden paralel dizin oluşturucular oluşturmayı göz önünde bulundurun.
Azure portalında oturum açın ve arama hizmetiniz tarafından kullanılan arama birimi sayısını denetleyin. Sayfanın üst kısmındaki sayıyı görüntülemek için Ayarlar>Ölçeği'ni seçin. Paralel olarak çalışan dizin oluşturucu sayısı, arama birimi sayısına yaklaşık olarak eşittir.
Kaynak verileri birden çok kapsayıcı veya aynı kapsayıcı içindeki birden çok sanal klasör arasında bölümleme.
Her bölüm için bir tane olmak üzere kendi dizin oluşturucuyla eşleştirilmiş birden çok veri kaynağı oluşturun.
Her dizin oluşturucuda aynı hedef arama dizinini belirtin.
Dizin oluşturucuları zamanlayın.
Onay için dizin oluşturucu durumunu ve yürütme geçmişini gözden geçirin.
Paralel dizin oluşturmayla ilgili bazı riskler vardır. İlk olarak, dizin oluşturmanın arka planda çalışmadığını ve sorguların kısıtlanma veya bırakılma olasılığını artırdığını hatırlayın.
İkincisi, Azure AI Search güncelleştirmeler için dizini kilitlemez. Eşzamanlı yazma işlemleri yönetilir ve belirli bir yazma işlemi ilk denemede başarılı olmazsa yeniden deneme çağrılır, ancak dizin oluşturma hatalarında bir artış fark edebilirsiniz.
Birden çok indexer-data-source kümesi aynı dizini hedeflese de, dizindeki mevcut değerlerin üzerine yazabilen dizin oluşturucu çalıştırmalarına dikkat edin. İkinci bir dizin oluşturucu-veri kaynağı aynı belgeleri ve alanları hedeflerse, ilk çalıştırmadaki tüm değerlerin üzerine yazılır. Alan değerleri tam olarak değiştirilir; Dizin oluşturucu birden çok çalıştırmadaki değerleri aynı alanla birleştiremez.
Spark'ta büyük veri dizini oluşturma
Büyük bir veri mimariniz varsa ve verileriniz bir Spark kümesindeyse, verileri yüklemek ve dizin oluşturmak için SynapseML'yi öneririz. Öğretici, yapay zeka zenginleştirmesi için Azure AI hizmetlerini çağırma adımlarını içerir, ancak metin dizini oluşturmak için AzureSearchWriter API'sini de kullanabilirsiniz.
İlgili içerik
- Öğretici: Gönderme API'sini kullanarak dizin oluşturmayı iyileştirme
- Öğretici: SynapseML ve Azure AI Search kullanarak Apache Spark'tan büyük verileri dizine ekleme
- Azure AI Search'te daha iyi performans için ipuçları
- Azure AI Search'te performansı analiz etme
- Azure AI Search'te dizin oluşturucular
- Azure AI Search'te dizin oluşturucu durumunu ve sonuçlarını izleme