Azure Cosmos DB Cassandra API

Uygulama hedefı: Cassandra API

Bu makalede Bölümlemenin Azure veritabanı veritabanı Cosmos nasıl Cassandra API.

Cassandra API, uygulamanın performans ihtiyaçlarını karşılamak için bir anahtar alanı içinde tek tek tabloları ölçeklendirmek için bölümleme kullanır. Bölümler, tablodaki her kayıtla ilişkili bölüm anahtarının değerine göre oluşturulur. Bir bölümdeki tüm kayıtlar aynı bölüm anahtarı değerine sahip olur. Azure Cosmos DB, tablonun ölçeklenebilirlik ve performans ihtiyaçlarını verimli bir şekilde karşılamak için bölümlerin fiziksel kaynaklar arasında yerleştirilmesini şeffaf ve otomatik olarak yönetir. Bir uygulamanın aktarım hızı ve depolama gereksinimleri artarak Azure Cosmos DB verileri daha fazla sayıda fiziksel makineye taşır ve dengeler.

Geliştirici perspektifinden bakıldığında, bölümleme Azure Cosmos DB Cassandra API yerel Apache Cassandra'daolduğu gibi davranır. Ancak, arkalarında bazı farklılıklar vardır.

Apache Cassandra ile Azure Cosmos DB arasındaki farklar

Azure Cosmos DB'de, bölümlerin depolandığı her makine fiziksel bölüm olarak adlandırılır. Fiziksel bölüm bir Sanal Makineye benzlidir; ayrılmış bir işlem birimi veya fiziksel kaynak kümesi. Bu işlem biriminde depolanan her bölüm, Azure Cosmos DB'de mantıksal bölüm olarak adlandırılır. Apache Cassandra'yı zaten biliyorsanız, mantıksal bölümleri Cassandra'daki normal bölümler gibi düşünebilirsiniz.

Apache Cassandra, bir bölümde depolanmış olan verilerin boyutu için 100 MB'lık bir sınır önerer. Azure Cassandra API DB için Cosmos veritabanı, mantıksal bölüm başına en fazla 20 GB ve fiziksel bölüm başına en fazla 30 GB veri sağlar. Azure Cosmos DB'de Apache Cassandra'dan farklı olarak fiziksel bölümdeki işlem kapasitesi istek birimleri adlı tek bir ölçüm kullanılarak ifade edilir. Bu ölçüm, iş yüklerinizi çekirdek, bellek veya IOPS yerine saniyedeki istekler (okuma veya yazma) açısından düşünmenizi sağlar. Bu, her isteğin maliyetini anladığınız zaman kapasite planlamasının daha ileriye doğru ilerlemesi için bir yol sağlar. Her fiziksel bölümde 10000 RU'ya kadar işlem kullanılabilir. Ölçeklenebilirlik seçenekleri hakkında daha fazla bilgi edinmek için esnek ölçek ile ilgili makalemizi Cassandra API.

Azure Cosmos DB'de her fiziksel bölüm, çoğaltma kümeleri olarak da bilinen ve bölüm başına en az 4 çoğaltma olan bir çoğaltma kümesine sahip olur. Bu, 1 çoğaltma faktörü ayarlamanın mümkün olduğu Apache Cassandra'nın aksinedir. Ancak bu, verilerle tek düğüm kullanımdan giderse düşük kullanılabilirlik durumuna yol açabilmektedir. Bu Cassandra API her zaman 4 çoğaltma faktörü (çekirdek 3) vardır. Azure Cosmos DB çoğaltma kümelerini otomatik olarak yönetir, ancak bunların Apache Cassandra'daki çeşitli araçlar kullanılarak korunması gerekir.

Apache Cassandra, bölüm anahtarlarının karmaları olan belirteç kavramına sahip. Belirteçler, -2^63 ile -2^63 - 1 arasında değişen değerlere sahip olan bir tırtıl 3 64 byte karmasını temel alır. Bu aralık genellikle Apache Cassandra'da "belirteç halkası" olarak adlandırılır. Belirteç halkası belirteç aralıklarına dağıtılır ve bu aralıklar yerel bir Apache Cassandra kümesinde mevcut olan düğümler arasında bölündü. Azure Cosmos DB için bölümleme, farklı bir karma algoritması kullanma ve daha büyük bir iç belirteç halkası olması dışında benzer bir şekilde uygulanır. Ancak, harici olarak Apache Cassandra ile aynı belirteç aralığını açığa çıkarır, yani -2^63 ile -2^63 - 1.

Birincil anahtar

Tablodaki tüm Cassandra API tanımlanmış bir tabloya sahip primary key olması gerekir. Birincil anahtarın söz dizimi aşağıda gösterilmiştir:

column_name cql_type_definition PRIMARY KEY

Farklı kullanıcılar için iletileri depolar bir kullanıcı tablosu oluşturmak istediğinizi varsayalım:

CREATE TABLE uprofile.user ( 
   id UUID PRIMARY KEY, 
   user text,  
   message text);

Bu tasarımda alanı birincil id anahtar olarak tanımladık. Birincil anahtar, tablodaki kaydın tanımlayıcısı olarak işlev gösterir ve Azure Veritabanı'nda bölüm anahtarı olarak Cosmos kullanılır. Birincil anahtar daha önce açıklanan şekilde tanımlanmışsa, her bölümde yalnızca tek bir kayıt olur. Bu, veritabanına veri yazarken mükemmel yatay ve ölçeklenebilir bir dağıtıma neden olur ve anahtar-değer arama kullanım örnekleri için idealdir. Okuma performansını en üst düzeye çıkarmak için uygulama, tablodaki verileri her okuduğunda birincil anahtarı sağlasa gerekmektedir.

bölümler

Bileşik birincil anahtar

Apache Cassandra'nın kavramı da compound keys vardır. Bileşik birden fazla sütundan oluşur; ilk sütun , primary key ek sütunlar ise partition key clustering keys olur. için söz compound primary key dizimi aşağıda gösterilmiştir:

PRIMARY KEY (partition_key_column_name, clustering_column_name [, ...])

Yukarıdaki tasarımı değiştirmek ve verilen bir kullanıcı için iletileri verimli bir şekilde alma olanaklı hale getiririz:

CREATE TABLE uprofile.user (
   user text,  
   id int, 
   message text, 
   PRIMARY KEY (user, id));

Bu tasarımda, artık bölüm user anahtarı olarak ve id kümeleme anahtarı olarak tanımlarız. Istediğiniz sayıda kümeleme anahtarı tanımlayabilirsiniz, ancak kümeleme anahtarına yönelik her değer (veya değer birleşimi) benzersiz olmalıdır; örneğin, aynı bölüme birden çok kayıt eklenir:

insert into uprofile.user (user, id, message) values ('theo', 1, 'hello');
insert into uprofile.user (user, id, message) values ('theo', 2, 'hello again');

Veriler döndürülerek Apache Cassandra'da beklendiği gibi kümeleme anahtarına göre sıralanmış olur:

Kümeleme anahtarına göre sıralanmış döndürülen verileri gösteren ekran görüntüsü.

Uyarı

Verileri sorgularken, yalnızca bileşik birincil anahtarın bölüm anahtarı değer öğesinde filtrelemek (yukarıdaki gibi) için bölüm anahtarına açıkça ikincil bir dizin ekleyin:

CREATE INDEX ON uprofile.user (user);

Azure Cosmos DB Cassandra API varsayılan olarak bölüm anahtarlarına dizin uygulamaz ve bu senaryoda dizin sorgu performansını önemli ölçüde geliştirebilir. Daha fazla bilgi için ikincil dizin oluşturma makalemizi gözden geçirme.

Bu şekilde modellenmiş verilerle, her bölüme kullanıcıya göre grup olacak şekilde birden çok kayıt atanabilir. Bu nedenle, verili bir kullanıcıya ilişkin tüm iletileri almak için tarafından verimli bir şekilde yönlendirilen bir partition key sorgu (bu durumda, user ) gönderebilirsiniz.

Kullanıcıya göre gruplara ayrılmış şekilde her bölüme birden çok kaydın nasıl atanabilir olduğunu gösteren diyagram.

Bileşik bölüm anahtarı

Bileşik bölüm anahtarları bileşik anahtarlar ile temelde aynı şekilde çalışır, ancak bileşik bölüm anahtarı olarak birden çok sütun belirtebilirsiniz. Bileşik bölüm anahtarlarının söz dizimi aşağıda gösterilmiştir:

PRIMARY KEY (
   (partition_key_column_name[, ...]), 
    clustering_column_name [, ...]);

Örneğin, benzersiz ve birleşiminin bölüm anahtarını oluştur olduğu ve kümeleme anahtarı firstname lastname olduğu id aşağıdakilere sahip olabilirsiniz:

CREATE TABLE uprofile.user ( 
   firstname text, 
   lastname text,
   id int,  
   message text, 
   PRIMARY KEY ((firstname, lastname), id) );

Sonraki adımlar