Tamam, dağılmış bir veritabanınız olduğunu düşünelim. Diyelim ki Oregon'da ve Kaliforniya'da bir düğümünüz var. CAP teorisi, bu tip veritabanını kurarken sorun yaşayacağınızı söylüyor.
Örneğin, bir veritabanından veri sorgularsanız, diğer veritabanındaki verilerle aynı olması gerekir. Bu, bir veritabanında sahip olduğunuz değerin diğerinde olacağının garantilenmesini sağlar ( CAP teorisinin tutarlılığı ). Bunu yapmak, verileri bir veritabanında güncellemenizi ve diğerlerinden sorgulamanızı ve aynı sonuçları almanızı sağlar.
Oregon düğümündeki verileri güncellediğimizde, veriler veritabanlarının tutarlı olması için California düğümüne gönderilir. Tutarlılığı gerçekten korumak için her iki veritabanının da veriyi gerçekten kaydetmesine izin verilmeden önce güncellemeleri aldığından emin olmak zorundayız (dağıtılmış işlemleri kullanarak iki aşamalı işlem). Başka bir deyişle, eğer California veritabanı bir nedenden ötürü verileri kaydedemiyorsa (örneğin, sabit disk arızası), Oregon'daki veritabanı verileri kaydetmeyecek ve işlemi gerçekleştirmeyecektir.
Yukarıdaki gibi dağıtılmış işlemlerle ilgili sorun, yüksek kullanılabilirliğe sahip olmak istediğimizde ortaya çıkar. Yukarıdaki bu senaryoda, her iki veritabanını senkronize olarak almaya çalışma süreci çok, çok yavaş bir işlemdir. (Hayal et, verileri Oregon’dan Kaliforniya’ya göndermeliyiz, oraya vardıklarından emin ol, her iki veritabanının da verileri kilitlediğinden emin ol, vb.) yüksek talep zamanları. (Bu Durumu CAP teoremin.)
Genellikle, yüksek kullanılabilirliği sağlamak için yaptığımız şey, dağıtılmış işlemler yerine çoğaltma kullanmaktır. Bu yüzden, California'nın verileri kabul edebileceğini garanti etmek yerine, devam edip Oregon düğümünde saklıyoruz ve daha sonra verileri dolaştığımızda Kaliforniya'ya gönderiyoruz. Bu, California'nın verileri depolamaya hazır olup olmamasına bakılmaksızın her zaman verileri depolayabileceğimizi garanti eder.
Bu, Kullanılabilirliği artırır, ancak Tutarlılık pahasına. Bakın, birisi Oregon'daki verileri güncellerse ve ardından birisi (aynı anda) Kaliforniya'daki verileri okursa, yeni verileri almazlar - veritabanları artık tutarlı değildir. Aslında, Oregon verileri California'ya gönderene kadar tutarlı olmayacaklar!
Yani, Kullanılabilirlik -vs- Tutarlılık değiş tokuşudur.
Ayrılma Toleransı , CAP teorisinin üçüncü yönüdür. Bölümleme, bu bağlamda, bir veritabanının (veya başka bir dağıtılmış sistemin) ayrı bölümlere ayrılabileceği ve yine de doğru şekilde çalışabileceği düşüncesidir.
Soru, her iki veritabanı da doğru çalışıyorsa ne olur, ancak Oregon'dan Kaliforniya'ya olan bağlantı koparsa ne olur?
Oregon’daki veritabanını güncellersek, verileri Kaliforniya’ya bir şekilde veya başka bir yolla almamız gerekir (dağıtılmış işlem veya çoğaltma). Bununla birlikte, ikisi arasındaki bağlantı koparsa, sistem bölümlenir ve veritabanları artık birbirine bağlanmaz.
Bu olduğunda, seçimleriniz, Uygunluk pahasına güncelleştirmelere izin vermek (Tutarlılığı korumak için) veya tutarlılık pahasına güncellemelere izin vermek (Uygunluğu korumak için) yapmaktır.
Gördüğünüz gibi, bölüm toleransı Tutarlılık ve Kullanılabilirlik arasında doğrudan kazanç sağlar.
Açıkçası bundan daha fazlası var, ancak bunlar, dağıtılmış sistemlerin bu üç ana yönünün birbiriyle ve birbirlerine karşı nasıl çalıştığına dair birkaç örnek. Julian Browne'ın CAP teorisi açıklaması, daha fazla bilgi edinmek için mükemmel bir yerdir.