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. Mantığınızı veritabanı altyapısı içinde yürütülen JavaScript'te yazabilirsiniz. Azure portalını, Azure Cosmos DB'deki JavaScript dili tümleşik sorgu API'sini veya NoSQL istemci SDK'ları için Azure Cosmos DB'yi 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ığı: JavaScript, iş mantığını ifade etmek için zengin ve tanıdık bir arabirim sağlayan üst düzey bir programlama dilidir. 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 içsel olarak eşlenir. Bu eşleme, arabellek havuzundaki JSON belgelerinin yavaş gerçekleştirilmesi ve yürütülen kod için isteğe bağlı olarak kullanılabilir hale getirilmesi gibi bir dizi iyileştirmeye olanak tanır. İş mantığının veritabanına kaydırılmasıyla ilişkili diğer performans avantajları şunlardır:
Toplu işlem: Eklemeler gibi işlemleri gruplandırabilir ve toplu olarak gönderebilirsiniz. Ağ trafiği gecikme süresi maliyetleri ve ayrı işlemler oluşturmaya yönelik mağaza ek yükü önemli ölçüde azalır.
Derleme öncesi: Saklı yordamlar, tetikleyiciler ve UDF'ler, her betik çağrısı sırasında derleme maliyetlerini ö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 düşük ayak izine sahiptir.
Sıralama: Bazen işlemler, verilerde bir veya daha fazla güncelleştirme gerçekleştirebilecek bir tetikleyici 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, uygulamalarınızı verilerden bağımsız olarak geliştirmenizi sağlayan bir soyutlama katmanı ekler. Bu soyutlama katmanı, veriler şemasız olduğunda ve uygulamanıza doğrudan ek mantık eklemeyi yönetmeniz gerekmediğinde yararlıdır. Soyutlama, betiklerden erişimi akışla düzenleyerek verilerin güvenliğini sağlamanızı sağlar.
İpucu
Saklı yordamlar, yazma açısından yoğun olan ve bölüm anahtarı değeri genelinde işlem gerektiren işlemler için en uygun yöntemdir. Saklı yordamları kullanıp kullanmamaya karar verirken, mümkün olan en fazla yazma miktarını kapsülleyerek 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 geri dönmek için çok sayıda okuma işlemi yapmak için saklı yordamları kullanmak istenen avantajı sağlamaz. En iyi performans için bu yoğun okuma işlemleri, Azure Cosmos DB SDK'sı kullanılarak istemci tarafında 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.
Hareketler
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, and Durability.
Bölünmezlik , bir işlem içinde yapılan tüm işlemlerin tek bir birim olarak ele alınıp 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, uygulamanın ihtiyaçlarına 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 etmesine olanak tanır. Örnekler için işlemleri 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 bölüm anahtarıyla belirlenir. Saklı yordamlar, yürütme sırasında işlemin 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 özel durumlar 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 yazma işlemlerini desteklemeye yöneliktir. Bu arada, salt okunur mantık en iyi uygulama tarafı mantığı ve noSQL SDK'ları için Azure Cosmos DB kullanılarak sorgular olarak uygulanır ve bu da veritabanı aktarım hızını doymanı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 bitmelidir. 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ürmek için 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 (öğeleri oluşturma, okuma, güncelleştirme ve silme gibi) 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ı tükettiğinden yordamın yürütmeyi tamamlaması gerektiğinin bir 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ı sürekli 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ırlı olabilir. Bu veritabanı işlemleri istemciden yürütülen işlemlerden biraz daha ucuz olsa da, betiklerin veritabanı işlemlerini yürütürken harcanan aktarım 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 öğesi üzerinde 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, istek nesnesi özgün istekten belge gövdesini güncelleştirmek için 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ışırlar 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 işlem amaçlı JavaScript 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 sorgu 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 bir dizi işlev çağrısına 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:
Saklı yordamlar, tetikleyiciler ve kullanıcı tanımlı işlevler yazma
Saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri kullanma
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.
- Tek bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdekleri veya vCPU'ları kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
- Geçerli veritabanı iş yükünüz için tipik istek oranlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkında bilgi edinin