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.
UYGULANANLAR: NoSQL
Veritabanı işlemleri, verilerde yapılan eşzamanlı değişikliklerle başa çıkmak için güvenli ve öngörülebilir bir programlama modeli sağlar. SQL Server gibi geleneksel ilişkisel veritabanları, saklı yordamları ve tetikleyicileri kullanarak iş mantığını yazmanıza ve ardından doğrudan veritabanı altyapısı içinde yürütülmek üzere sunucuya göndermenize olanak sağlar.
Geleneksel ilişkisel veritabanlarında iki farklı programlama diliyle ilgilenmeniz gerekir: JavaScript, Python, C# veya Java gibi işlem dışı bir uygulama programlama dili; ve veritabanı tarafından yerel olarak yürütülen T-SQL gibi işlemsel bir programlama dili.
Azure Cosmos DB'deki veritabanı motoru, anlık görüntü yalıtımı ile tam ACID (atomiklik, tutarlılık, izolasyon, dayanıklılık) uyumlu işlemleri destekler. Kapsayıcının mantıksal bölümü kapsamındaki tüm veritabanı işlemleri, bölümün çoğaltması tarafından barındırılan veritabanı motorunda işlemsel olarak yürütülür. Bu işlemler hem yazma (mantıksal bölüm içindeki bir veya daha fazla öğeyi güncelleştirme) hem de okuma işlemlerini içerir.
Aşağıdaki tabloda farklı işlemler ve işlem türleri listelenmiştir:
| İşlem | İşlem türü | Tek veya çok öğeli işlem |
|---|---|---|
| Ekle (ön/son tetikleyici olmadan) | Yaz | Tek öğeli işlem |
| Ekle (ön/son tetikleyici ile) | Yazma ve okuma | Çok maddeli işlem |
| Değiştir (ön/son tetikleyici olmadan) | Yaz | Tek öğeli işlem |
| Değiştir (ön/son tetikleyici ile) | Yazma ve okuma | Çok maddeli işlem |
| Upsert (ön/son tetikleyici olmadan) | Yaz | Tek öğeli işlem |
| Upsert (ön/son tetikleyici ile) | Yazma ve okuma | Çok maddeli işlem |
| Sil (ön/son tetikleyici olmadan) | Yaz | Tek öğeli işlem |
| Sil (ön/son tetikleyici ile) | Yazma ve okuma | Çok maddeli işlem |
| Saklı prosedürü çalıştır | Yazma ve okuma | Çok maddeli işlem |
| Sistem tarafından birleştirme yordamının yürütülmesi başlatıldı. | Yaz | Çok maddeli işlem |
| Öğelerin süresi dolduğu zaman (TTL) bir öğeye göre silinme işlemi, sistem tarafından başlatıldı. | Yaz | Çok maddeli işlem |
| Okundu | Okundu | Tek öğeli işlem |
| Akışı değiştirme | Okundu | Çok maddeli işlem |
| Sayfalandırılmış okuma | Okundu | Çok maddeli işlem |
| Sayfalandırılmış sorgu | Okundu | Çok maddeli işlem |
| Sayfalandırılmış sorgunun parçası olarak UDF'yi çalıştırma. | Okundu | Çok maddeli işlem |
Çok öğeli işlemler
Azure Cosmos DB, JavaScript'te saklı yordamlar, tetikleyiciler, kullanıcı tanımlı işlevler ve birleştirme yordamları yazmanızı sağlar. Azure Cosmos DB, veritabanı altyapısı içinde JavaScript yürütmesini yerel olarak destekler. Saklı yordamları, ön/son tetikleyicileri, kullanıcı tanımlı işlevler (UDF' ler) ve birleştirme yordamlarını bir kapsayıcıya kaydedebilir ve daha sonra bunları Azure Cosmos DB veritabanı altyapısında işlemsel olarak yürütebilirsiniz. JavaScript'te uygulama mantığı yazmak, doğrudan JavaScript dilinde veritabanı işlemleri içinde özel durum işleme temel öğelerinin denetim akışının, değişken kapsamının, atamanın ve tümleştirmenin doğal ifade edilmesini sağlar.
JavaScript tabanlı saklı yordamlar, tetikleyiciler, UDF'ler ve birleştirme yordamları, mantıksal bölümdeki tüm öğeler arasında anlık görüntü yalıtımıyla bir ortam ACID işlemi içinde sarmalanmıştır. Yürütme sırasında JavaScript programı bir özel durum oluşturursa tüm işlem durdurulup geri alınır. Sonuçta elde edilen programlama modeli basit ancak güçlüdür. JavaScript geliştiricileri, tanıdık dil yapılarını ve kitaplık temel öğelerini kullanmaya devam ederken dayanıklı bir programlama modeline sahip olur.
JavaScript'i doğrudan veritabanı altyapısı içinde yürütebilme özelliği, bir kapsayıcının öğelerine karşı veritabanı işlemlerinin performans ve işlem yürütmesini sağlar. Ayrıca, Azure Cosmos DB veritabanı altyapısı JSON ve JavaScript'i yerel olarak desteklediğinden, bir uygulamanın tür sistemleri ile veritabanı arasında bir empedans uyuşmazlığı yoktur.
İyimser eşzamanlılık denetimi
İyimser eşzamanlılık denetimi (OCC), kayıp güncelleştirmeleri ve silmeleri önlemenizi sağlar. Eşzamanlı ve çakışan işlemler, öğenin sahibi olan mantıksal bölüm tarafından barındırılan veritabanı motorunun normal kötümser kilitlenmesine tabidir. İki eşzamanlı işlem mantıksal bölüm içindeki bir öğenin en son sürümünü güncelleştirmeye çalıştığında, bunlardan biri kazanır ve diğeri başarısız olur. Ancak, aynı öğeyi eşzamanlı olarak güncelleştirmeye çalışan bir veya iki işlem daha önce öğenin eski bir değerini okuduysa, çakışan işlemlerden biri veya her ikisi tarafından daha önce okunan değerin gerçekten öğenin en son değeri olup olmadığını veritabanı bilmez.
Neyse ki bu durum, iki işlemin veritabanı altyapısı içindeki işlem sınırına girmesine izin vermeden önce OCC ile algılanabilir. OCC, verilerinizi başkaları tarafından yapılan değişikliklerin üzerine yanlışlıkla yazılmasını engeller. Ayrıca başkalarının kendi değişikliklerinizin üzerine yanlışlıkla yazmasını da engeller.
ETag ve HTTP üst bilgilerini kullanarak iyimser eşzamanlılık denetimi uygulama
Azure Cosmos DB kapsayıcısında depolanan her öğenin sistem tanımlı _etag özelliği vardır. öğesinin _etag değeri, öğe her güncelleştirildiğinde sunucu tarafından otomatik olarak oluşturulur ve güncelleştirilir.
_etag sunucunun bir öğenin koşullu olarak güncelleştirilip güncelleştirilmeyeceğine karar vermesine izin vermek için istemci tarafından sağlanan if-match istek üst bilgisi ile birlikte kullanılabilir. Üst bilginin değeri if-match sunucudaki değerinin _etag değeriyle eşleşiyorsa, öğe daha sonra güncelleştirilir. İstek üst bilgisinin if-match değeri artık geçerli değilse, sunucu işlemi "HTTP 412 Önkoşul hatası" yanıt iletisiyle reddeder. İstemci daha sonra öğeyi yeniden seçip sunucudaki öğenin geçerli sürümünü alabilir veya öğe için kendi _etag değeriyle sunucudaki öğenin sürümünü geçersiz kılabilir. Ayrıca, _etag bir kaynağın tekrar getirilmesinin gerekip gerekmediğini belirlemek için if-none-match başlıkla birlikte kullanılabilir.
Öğe _etag her güncelleştirildiğinde öğenin değeri değişir. Öğe değiştirme işlemleri için, if-match istek seçeneklerinin bir parçası olarak açıkça ifade edilmelidir. Bir örnek için GitHub'daki örnek koda bakın. Saklı yordamın etkileşimde bulunduğu tüm yazılı öğelerin değerleri örtük olarak kontrol edilir. Herhangi bir çakışma algılanırsa saklı yordam işlemi geri alır ve bir özel durum oluşturur. Bu yöntemle saklı yordamdaki yazma işlemlerinin tümü veya hiçbiri atomik olarak uygulanır. Bu, uygulamanın güncelleştirmeleri yeniden uygulamasına ve özgün istemci isteğini yeniden denemesine ilişkin bir sinyaldir.
İyimser eşzamanlılık denetimi ve genel dağıtım
Bir öğenin eşzamanlı güncelleştirmeleri, Azure Cosmos DB'nin iletişim protokolü katmanı tarafından OCC'ye tabi tutulur. Tek bölgeli yazma işlemleri için yapılandırılmış Azure Cosmos DB hesapları için Azure Cosmos DB, güncelleştirdiğiniz (veya sildiğiniz) öğenin istemci tarafı sürümünün Azure Cosmos DB kapsayıcısında öğenin sürümüyle aynı olmasını sağlar. Bu, yazma işlemlerinizin başka kişilerin yazma işlemleriyle yanlışlıkla üzerine yazılmasının ve onların da sizinkilere yazılmasının önlenmesini sağlar. Çok kullanıcılı bir ortamda iyimser eşzamanlılık denetimi, bir öğenin yanlış sürümünü yanlışlıkla silmenizi veya güncelleştirmenizi engeller. Bu nedenle, öğeler kötü amaçlı "kayıp güncelleştirme" veya "silme kaybı" sorunlarına karşı korunur.
Çok bölgeli yazma işlemleriyle yapılandırılmış bir Azure Cosmos DB hesabında, veriler yerel bölgedeki verilerle eşleşiyorsa _etag ikincil bölgelere bağımsız olarak işlenebilir. Yeni veriler ikincil bölgede yerel olarak işlendikten sonra merkez veya birincil bölgede birleştirilir. Çakışma çözümleme ilkesi yeni verileri merkez bölgeye entegre ederse, bu veriler yeni _etag ile küresel olarak çoğaltılır. Çakışma çözümleme ilkesi yeni verileri reddederse, ikincil bölge ve özgün verilerine _etaggeri alınır.
Sonraki adımlar
Veritabanı işlemleri ve iyimser eşzamanlılık denetimi hakkında daha fazla bilgi edinin: