Saklı yordamlar, tetikleyiciler ve kullanıcı tanımlı işlevler

UYGULANANLAR: NOSQL

Azure Cosmos DB JavaScript'in dil ile tümleşik, işlem tabanlı yürütmesini sağlar. Azure Cosmos DB'de NoSQL API'sini kullanırken JavaScript dilinde saklı yordamlar, tetikleyiciler ve kullanıcı tanımlı işlevler (UDF) yazabilirsiniz. Veritabanı altyapısı içinde yürütülen mantığınızı JavaScript'te yazabilirsiniz. Azure portal,Azure Cosmos DB'de JavaScript diliyle tümleşik sorgu API'sini veya NoSQL için Azure Cosmos DB istemci SDK'larını kullanarak tetikleyiciler, saklı yordamlar ve UDF'ler oluşturabilir ve yürütebilirsiniz.

Sunucu tarafı programlama kullanmanın avantajları

JavaScript'te saklı yordamlar, tetikleyiciler ve kullanıcı tanımlı işlevler (UDF) yazmak zengin uygulamalar oluşturmanıza olanak tanır ve aşağıdaki avantajlara sahiptir:

  • Yordam mantığı: İş mantığını ifade etmek için zengin ve tanıdık arabirim sağlayan üst düzey bir programlama dili olarak JavaScript. Veriler üzerinde bir dizi karmaşık işlem gerçekleştirebilirsiniz.

  • Atomik işlemler: Tek bir saklı yordam veya tetikleyici içinde gerçekleştirilen Azure Cosmos DB veritabanı işlemleri atomiktir. Bu atomik işlevsellik, bir uygulamanın tüm işlemlerin başarılı olması veya hiçbirinin başarılı olmaması için ilgili işlemleri tek bir toplu işte birleştirmesine olanak tanır.

  • Performans: JSON verileri, JavaScript dil türü sistemiyle eşlenir. Bu eşleme, arabellek havuzundaki JSON belgelerinin yavaş gerçekleştirilmesi ve yürütülen kodda isteğe bağlı olarak kullanılabilir hale getirilmesi gibi bir dizi iyileştirmeye olanak tanır. İş mantığını veritabanına kaydırmanın diğer performans avantajları şunlardır:

    • Toplu İşlem: Eklemeler gibi işlemleri gruplandırabilir ve toplu olarak gönderebilirsiniz. Ayrı işlemler oluşturmak için ağ trafiği gecikme maliyetleri ve mağaza ek yükü önemli ölçüde azalır.

    • Derleme öncesi: Saklı yordamlar, tetikleyiciler ve UDF'ler, her betik çağırma sırasında derleme maliyetini önlemek için bayt kod biçiminde örtük olarak önceden derlenir. Ön derleme nedeniyle saklı yordamların çağrılması hızlıdır ve ayak izi düşüktür.

    • Sıralama: Bazen işlemler, verilerde bir veya daha fazla güncelleştirme gerçekleştirebilecek bir tetikleme mekanizmasına ihtiyaç duyar. Bölünmezliğe ek olarak, sunucu tarafında yürütürken performans avantajları da vardır.

  • Kapsülleme: Saklı yordamlar mantığı tek bir yerde gruplandırmak için kullanılabilir. Kapsülleme, verilerin üzerine bir soyutlama katmanı ekler ve bu da uygulamalarınızı verilerden bağımsız olarak geliştirmenizi sağlar. Bu soyutlama katmanı, veriler şemasız olduğunda ve doğrudan uygulamanıza ek mantık eklemeyi yönetmeniz gerekmediğinde yararlıdır. Soyutlama, betiklerden erişimin akışını yaparak verilerinizin güvenliğini sağlamanızı sağlar.

İpucu

Saklı yordamlar, yazma açısından yoğun olan ve bir bölüm anahtarı değeri arasında işlem gerektiren işlemler için idealdir. Saklı yordamları kullanıp kullanmayacağınız konusunda karar verirken mümkün olan en fazla yazma miktarını kapsüllemek için en iyi duruma getirme. Genel olarak, saklı yordamlar çok sayıda okuma veya sorgu işlemi yapmak için en verimli yöntem değildir, bu nedenle istemciye dönmek üzere çok sayıda okuma işlemini toplu olarak gerçekleştirmek için saklı yordamlar kullanmak istenen avantajı sağlamaz. En iyi performans için bu yoğun okuma işlemleri istemci tarafında, Azure Cosmos DB SDK'sı kullanılarak yapılmalıdır.

Not

Saklı yordamlar, tetikleyiciler ve kullanıcı tanımlı işlevler de dahil olmak üzere sunucu tarafı JavaScript özellikleri modülleri içeri aktarmayı desteklemez.

İşlemler

Tipik bir veritabanındaki işlem, tek bir mantıksal iş birimi olarak gerçekleştirilen bir işlem dizisi olarak tanımlanabilir. Her işlem ACID özellik garantileri sağlar. ACID, bilinen bir kısaltmadır: Atomicity, Consistency, Isolation ve Durability.

  • Bölünmezlik, bir işlem içinde yapılan tüm işlemlerin tek bir birim olarak ele alındığından ve bunların tümünün işlenmediğini veya hiçbirinin işlenmediğini garanti eder.

  • Tutarlılık, verilerin işlemler arasında her zaman geçerli bir durumda olmasını sağlar.

  • Yalıtım, iki işlemin birbirini engellemesini garanti eder. Birçok ticari sistem, uygulama gereksinimlerine göre kullanılabilecek birden çok yalıtım düzeyi sağlar.

  • Dayanıklılık, veritabanında işlenen tüm değişikliklerin her zaman mevcut olmasını sağlar.

Azure Cosmos DB'de JavaScript çalışma zamanı veritabanı altyapısında barındırılır. Bu nedenle saklı yordamlar ve tetikleyiciler içinde yapılan istekler veritabanı oturumuyla aynı kapsamda yürütülür. Bu özellik, Azure Cosmos DB'nin saklı yordamın veya tetikleyicinin parçası olan tüm işlemler için ACID özelliklerini garanti etmelerini sağlar. Örnekler için işlem uygulama makalesine bakın.

İpucu

NoSQL için Azure Cosmos DB'de işlem desteği için tercih ettiğiniz istemci SDK'sını kullanarak işlem toplu işlemini de uygulayabilirsiniz. Daha fazla bilgi için bkz. NoSQL için Azure Cosmos DB'de işlem toplu işlemleri.

İşlemin kapsamı

Saklı yordamlar bir Azure Cosmos DB kapsayıcısıyla ilişkilendirilir ve saklı yordam yürütmenin kapsamı mantıksal bir bölüm anahtarı olarak belirlenir. Saklı yordamlar, yürütme sırasında işlem kapsamı için mantıksal bölümü tanımlayan bir mantıksal bölüm anahtarı değeri içermelidir. Daha fazla bilgi için Bkz. Azure Cosmos DB bölümleme makalesi.

İşleme ve geri alma

İşlemler Azure Cosmos DB JavaScript programlama modeliyle yerel olarak tümleştirilir. JavaScript işlevinde tüm işlemler otomatik olarak tek bir işlem altında sarmalanmıştır. Saklı yordamdaki JavaScript mantığı herhangi bir özel durum olmadan tamamlanırsa, işlem içindeki tüm işlemler veritabanına işlenir. ve COMMIT TRANSACTION gibi BEGIN TRANSACTION deyimler (ilişkisel veritabanlarına aşina) Azure Cosmos DB'de örtük olarak bulunur. Betikten herhangi bir özel durum varsa Azure Cosmos DB JavaScript çalışma zamanı tüm işlemi geri alır. Bu nedenle, bir özel durum oluşturmak, Azure Cosmos DB'deki ile etkili bir ROLLBACK TRANSACTION şekilde eşdeğerdir.

Veri tutarlılığı

Saklı yordamlar ve tetikleyiciler her zaman bir Azure Cosmos DB kapsayıcısının birincil çoğaltması üzerinde yürütülür. Bu özellik saklı yordamlardan okumaların güçlü tutarlılık sunmasını sağlar. Kullanıcı tanımlı işlevleri kullanan sorgular birincil çoğaltmada veya herhangi bir ikincil çoğaltmada yürütülebilir. Saklı yordamlar ve tetikleyiciler işlemsel yazmaları desteklemeye yöneliktir; bu arada salt okunur mantık en iyi uygulama tarafı mantığı olarak uygulanır ve NoSQL SDK'ları için Azure Cosmos DB kullanan sorgular veritabanı aktarım hızını doygunluğa taşımanıza yardımcı olur.

İpucu

Saklı yordam veya tetikleyici içinde yürütülen sorgular, aynı betik işlemi tarafından yapılan öğelerde değişiklik görmeyebilir. Bu deyim hem gibi getContent().getCollection.queryDocuments()SQL sorguları hem de gibi getContext().getCollection().filter()tümleşik dil sorguları için geçerlidir.

Sınırlanmış yürütme

Tüm Azure Cosmos DB işlemleri belirtilen zaman aşımı süresi içinde tamamlanmalıdır. Saklı yordamların zaman aşımı sınırı 5 saniyedir. Bu kısıtlama JavaScript işlevleri (saklı yordamlar, tetikleyiciler ve kullanıcı tanımlı işlevler) için geçerlidir. Bir işlem bu süre sınırı içinde tamamlanmazsa işlem geri alınır.

JavaScript işlevlerinizin zaman sınırı içinde tamamlandığından emin olabilir veya yürütmeyi toplu/sürdürecek devamlılık tabanlı bir model uygulayabilirsiniz. Zaman sınırlarını işlemek için saklı yordamların ve tetikleyicilerin geliştirilmesini basitleştirmek için, Azure Cosmos DB kapsayıcısı altındaki tüm işlevler (örneğin, öğeleri oluşturma, okuma, güncelleştirme ve silme) bu işlemin tamamlanıp tamamlanmayacağını gösteren bir boole değeri döndürür. Bu değer false ise, betik yapılandırılan değerden daha fazla zaman veya sağlanan aktarım hızı harcadığından yordamın yürütmeyi sarmalaması gerektiğinin göstergesidir. Saklı yordam zamanında tamamlanırsa ve daha fazla istek kuyruğa almazsa, ilk kabul edilmeyen depolama işleminden önce kuyruğa alınan işlemlerin tamamlanması garanti edilir. Bu nedenle, betiğin denetim akışını yönetmek için JavaScript'in geri çağırma kuralı kullanılarak işlemler birer birer kuyruğa alınmalıdır. Betikler sunucu tarafı bir ortamda yürütülür, çünkü bunlar kesinlikle yönetilir. Yürütme sınırlarını tekrar tekrar ihlal eden betikler etkin değil olarak işaretlenebilir ve yürütülemez ve yürütme sınırlarına uyması için yeniden oluşturulmalıdır.

JavaScript işlevleri de sağlanan aktarım hızı kapasitesine tabidir. JavaScript işlevleri kısa bir süre içinde büyük olasılıkla çok sayıda istek birimi kullanabilir ve sağlanan aktarım hızı kapasitesi sınırına ulaşılırsa hız sınırlaması olabilir. Bu veritabanı işlemleri istemciden aynı işlemleri yürütmekten biraz daha ucuz olsa da, betiklerin veritabanı işlemlerini yürütürken harcanan işleme hızına ek olarak ek aktarım hızı tükettiğine dikkat etmek önemlidir.

Tetikleyiciler

Azure Cosmos DB iki tür tetikleyiciyi destekler:

Ön tetikleyiciler

Azure Cosmos DB, bir Azure Cosmos DB öğesinde işlem gerçekleştirerek çağrılabilen tetikleyiciler sağlar. Örneğin, öğe oluştururken bir ön tetikleyici belirtebilirsiniz. Bu durumda öğe oluşturulmadan önce ön tetikleyici çalıştırılır. Ön tetikleyicilerin hiçbir giriş parametresi olamaz. Gerekirse özgün istekten belge gövdesini güncelleştirmek için istek nesnesi kullanılabilir. Tetikleyiciler kaydedilirken kullanıcılar birlikte çalıştırılabileceği işlemleri belirtebilir. Tetikleyici TriggerOperation.Create ile oluşturulduysa, bu tetikleyicinin bir değiştirme işleminde kullanılmasına izin verilmez. Örnekler için tetikleyicileri yazma makalesine bakın.

Son tetikleyiciler

Ön tetikleyicilere benzer şekilde, son tetikleyiciler de Azure Cosmos DB öğesindeki bir işlemle ilişkilendirilir ve herhangi bir giriş parametresi gerektirmez. İşlem tamamlandıktan sonra çalışır ve istemciye gönderilen yanıt iletisine erişebilirler. Örnekler için tetikleyicileri yazma makalesine bakın.

Not

Kayıtlı tetikleyiciler, karşılık gelen işlemleri (oluşturma / silme / değiştirme / güncelleştirme) gerçekleştiğinde otomatik olarak çalışmaz. Bu işlemler yürütürken tetikleyicilerin açıkça çağrılması gerekir. Daha fazla bilgi edinmek için tetikleyicileri çalıştırma makalesine bakın.

Kullanıcı tanımlı işlevler

Kullanıcı tanımlı işlevler (UDF'ler), NOSQL sorgu dili söz dizimi için API'yi genişletmek ve özel iş mantığını kolayca uygulamak için kullanılır. Bunlar yalnızca sorgular içinde çağrılabilir. UDF'lerin bağlam nesnesine erişimi yoktur ve yalnızca JavaScript işlem olarak kullanılması amaçlanıyor. Bu nedenle UDF'ler ikincil çoğaltmalarda çalıştırılabilir.

JavaScript dil ile tümleşik sorgu API'si

Sunucu tarafı SDK'sı, NoSQL sorgu söz dizimi için API kullanarak sorgular vermenin yanı sıra, SQL bilgisi olmadan JavaScript arabirimi kullanarak sorgular gerçekleştirmenize de olanak tanır. JavaScript sorgu API'si, koşul işlevlerini işlev çağrıları dizisine geçirerek program aracılığıyla sorgular oluşturmanıza olanak tanır. Sorgular JavaScript çalışma zamanı tarafından ayrıştırılır ve Azure Cosmos DB içinde verimli bir şekilde yürütülür. JavaScript sorgu API'si desteği hakkında bilgi edinmek için JavaScript dili tümleşik sorgu API'siyle çalışma makalesine bakın. Örnekler için JavaScript Sorgu API'sini kullanarak saklı yordamları ve tetikleyicileri yazma makalesine bakın.

Sonraki adımlar

Aşağıdaki makalelerle Azure Cosmos DB'de saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri yazmayı ve kullanmayı öğrenin:

Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.