Hızlı Başlangıç: Apache Cassandra için Azure Cosmos DB verilerini yönetmek için istemciyle gocql
go uygulaması oluşturma
ŞUNLAR IÇIN GEÇERLIDIR: Cassandra
Azure Cosmos DB, genel dağıtım ve yatay ölçek özellikleriyle belge, tablo, anahtar-değer ve grafik veritabanlarını hızlı bir şekilde oluşturup sorgulamanıza olanak tanıyan çok modelli bir veritabanı hizmetidir. Bu hızlı başlangıçta, Apache Cassandra için Azure Cosmos DB hesabı oluşturarak başlayacaksınız. Ardından bir Go uygulaması çalıştırarak cassandra anahtar alanı, tablosu oluşturacak ve birkaç işlem yürüteceksiniz. Bu Go uygulaması Go dili için cassandra istemcisi olan gocql kullanır.
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Ücretsiz bir tane oluşturun. İsterseniz Azure aboneliği olmadan Azure Cosmos DB'yi ücretsiz olarak da deneyebilirsiniz.
- Go bilgisayarınızda yüklü ve Go hakkında çalışan bir bilgi.
- Git.
Veritabanı hesabı oluşturma
Veritabanı oluşturabilmeniz için önce Azure Cosmos DB ile bir Cassandra hesabı oluşturmanız gerekir.
Azure portalı menüsünde veya Giriş sayfasında Kaynak oluştur'u seçin.
Yeni sayfasında Azure Cosmos DB'yi arayın ve seçin.
Azure Cosmos DB sayfasında Oluştur'u seçin.
API sayfasında Cassandra bölümünün altında Oluştur'u seçin.
API, oluşturulacak hesap türünü belirler. Azure Cosmos DB beş API sağlar: Belge veritabanları için NoSQL, graf veritabanları için Gremlin, belge veritabanları için MongoDB, Azure Tablosu ve Cassandra. Her API için ayrı bir hesap oluşturmanız gerekir.
Cassandra'yı seçin, çünkü bu hızlı başlangıçta Cassandra için API ile çalışan bir tablo oluşturuyorsunuz.
Cassandra IÇIN API hakkında daha fazla bilgi edinin.
Azure Cosmos DB Hesabı Oluştur sayfasında yeni Azure Cosmos DB hesabının temel ayarlarını girin.
Ayar Value Açıklama Abonelik Aboneliğiniz Bu Azure Cosmos DB hesabı için kullanmak istediğiniz Azure aboneliğini seçin. Kaynak Grubu Özel programlamayı kullanmadan, yeni
Ardından Hesap Adı ile aynı adı girinYeni oluştur’u seçin. Ardından hesabınız için yeni bir kaynak grubu adı girin. Kolaylık olması için Azure Cosmos DB hesap adınızla aynı adı kullanın. Hesap Adı Benzersiz bir ad girin Azure Cosmos DB hesabınızı tanımlayan benzersiz bir ad girin. Hesap URI'niz benzersiz hesap adınızın sonuna cassandra.cosmos.azure.com eklenir.
Hesap adı yalnızca küçük harf, sayı ve kısa çizgi (-) kullanabilir ve 3 ile 31 karakter uzunluğunda olmalıdır.Konum Kullanıcılarınıza en yakın bölge Azure Cosmos DB hesabınızın barındırılacağı coğrafi konumu seçin. Verilere en hızlı erişimi sağlamak için kullanıcılarınıza en yakın olan konumu kullanın. Kapasite modu Sağlanan aktarım hızı veya Sunucusuz Sağlanan aktarım hızı modunda hesap oluşturmak için Sağlanan aktarım hızı'na tıklayın. Sunucusuz modda hesap oluşturmak için Sunucusuz'u seçin. Azure Cosmos DB ücretsiz katman indirimi uygulama Uygula veya Uygulama Azure Cosmos DB ücretsiz katmanı ile bir hesapta ilk 1000 RU/sn ve 25 GB depolama alanını ücretsiz olarak alırsınız. Ücretsiz katman hakkında daha fazla bilgi edinin. Toplam hesap aktarım hızını sınırla Hesabın aktarım hızını sınırlamak için seçin Hesabın toplam aktarım hızını belirli bir değerle sınırlamak istiyorsanız bu yararlı olur. Not
Azure aboneliği başına bir ücretsiz katman Azure Cosmos DB hesabına sahip olabilirsiniz. Bunu hesabı oluştururken kabul etmeniz gerekir. Ücretsiz katman indirimini uygulama seçeneğinin gözükmemesi abonelikteki farklı bir hesabın ücretsiz katman ile etkinleştirildiğini belirtir.
Genel Dağıtım sekmesinde aşağıdaki ayrıntıları yapılandırın. Bu hızlı başlangıcın amacı için varsayılan değerleri bırakabilirsiniz:
Ayar Value Açıklama Coğrafi Yedeklilik Devre Dışı Bırak Bölgenizi bir çift bölgeyle eşleştirerek hesabınızda genel dağıtımı etkinleştirin veya devre dışı bırakın. Daha sonra hesabınıza daha fazla bölge ekleyebilirsiniz. Birden Çok Bölgeli Yazmalar Devre Dışı Bırak Çok bölgeli yazma özelliği, dünya genelindeki veritabanlarınız ve kapsayıcılarınız için sağlanan aktarım hızını kullanmanıza olanak tanır. Kullanılabilirlik Alanları Devre Dışı Bırak Kullanılabilirlik Alanları, Bir Azure bölgesi içindeki yalıtılmış konumlardır. Her alan bağımsız güç, soğutma ve ağ bağlantısı ile donatılmış bir veya daha fazla veri merkezinden oluşur. Not
Kapasite modu olarak Sunucusuz seçeneğini belirlediğinizde aşağıdaki seçenekler kullanılamaz:
- Ücretsiz Katman İndirimi Uygula
- Coğrafi yedeklilik
- Birden Çok Bölgeli Yazmalar
İsteğe bağlı olarak, aşağıdaki sekmelerde ek ayrıntıları yapılandırabilirsiniz:
- Ağ - Sanal ağdan erişimi yapılandırın.
- Yedekleme İlkesi - Düzenli veya sürekli yedekleme ilkesini yapılandırın.
- Şifreleme - Hizmet tarafından yönetilen anahtar veya müşteri tarafından yönetilen anahtar kullanın.
- Etiketler - Etiketler, birden çok kaynağa ve kaynak grubuna aynı etiketi uygulayarak kaynakları kategorilere ayırmanızı ve birleştirilmiş faturalamayı görüntülemenizi sağlayan ad/değer çiftleridir.
Gözden geçir ve oluştur’u seçin.
Hesap ayarlarını gözden geçirip Oluştur seçeneğini belirleyin. Hesabın oluşturulması birkaç dakika sürer. Portal sayfasında Dağıtımınız tamamlandı iletisinin görüntülenmesini bekleyin.
Azure Cosmos DB hesabı sayfasına gitmek için Kaynağa git seçeneğini belirleyin.
Örnek uygulamayı kopyalama
Uygulamayı GitHub'dan kopyalayarak başlayın.
Bir komut istemi açın ve adlı
git-samples
yeni bir klasör oluşturun.md "C:\git-samples"
Git bash gibi bir git terminal penceresi açın.
cd
Komutunu kullanarak yeni klasöre geçin ve örnek uygulamayı yükleyin.cd "C:\git-samples"
Örnek depoyu kopyalamak için aşağıdaki komutu çalıştırın. Bu komut bilgisayarınızda örnek uygulamanın bir kopyasını oluşturur.
git clone https://github.com/Azure-Samples/azure-cosmos-db-cassandra-go-getting-started.git
Kodu gözden geçirin
Bu adım isteğe bağlıdır. Kodun veritabanı kaynaklarını nasıl oluşturduğunu öğrenmek istiyorsanız aşağıdaki kod parçacıklarını gözden geçirebilirsiniz. Aksi takdirde, uygulamayı çalıştırma bölümüne atlayabilirsiniz
GetSession
işlevi (parçasıutils\utils.go
) ekleme, bulma gibi küme işlemlerini yürütmek için kullanılan bir *gocql.Session
döndürür.
func GetSession(cosmosCassandraContactPoint, cosmosCassandraPort, cosmosCassandraUser, cosmosCassandraPassword string) *gocql.Session {
clusterConfig := gocql.NewCluster(cosmosCassandraContactPoint)
port, err := strconv.Atoi(cosmosCassandraPort)
clusterConfig.Authenticator = gocql.PasswordAuthenticator{Username: cosmosCassandraUser, Password: cosmosCassandraPassword}
clusterConfig.Port = port
clusterConfig.SslOpts = &gocql.SslOptions{Config: &tls.Config{MinVersion: tls.VersionTLS12}}
clusterConfig.ProtoVersion = 4
session, err := clusterConfig.CreateSession()
...
return session
}
Azure Cosmos DB Cassandra konağı işleve gocql.NewCluster
geçirilir ve ardından kullanıcı adı, parola, bağlantı noktası ve uygun TLS sürümünü kullanacak şekilde yapılandırılmış bir *gocql.ClusterConfig
yapı alır (HTTPS/SSL/TLS şifreleme Güvenlik gereksinimi)
İşlev GetSession
daha sonra işlevinden (main.go
) çağrılırmain
.
func main() {
session := utils.GetSession(cosmosCassandraContactPoint, cosmosCassandraPort, cosmosCassandraUser, cosmosCassandraPassword)
defer session.Close()
...
}
Bağlantı bilgileri ve kimlik bilgileri ortam değişkenleri biçiminde kabul edilir (yönteminde init
çözümlenir)
func init() {
cosmosCassandraContactPoint = os.Getenv("COSMOSDB_CASSANDRA_CONTACT_POINT")
cosmosCassandraPort = os.Getenv("COSMOSDB_CASSANDRA_PORT")
cosmosCassandraUser = os.Getenv("COSMOSDB_CASSANDRA_USER")
cosmosCassandraPassword = os.Getenv("COSMOSDB_CASSANDRA_PASSWORD")
if cosmosCassandraContactPoint == "" || cosmosCassandraUser == "" || cosmosCassandraPassword == "" {
log.Fatal("missing mandatory environment variables")
}
}
Daha sonra azure cosmos DB'de ve oluşturma işleminden başlayarak keyspace
table
çeşitli işlemleri (parçasıoperations\setup.go
) yürütmek için kullanılır.
Adından da anlaşılacağı gibi, DropKeySpaceIfExists
işlev yalnızca varsa bırakır keyspace
.
const dropKeyspace = "DROP KEYSPACE IF EXISTS %s"
func DropKeySpaceIfExists(keyspace string, session *gocql.Session) {
err := utils.ExecuteQuery(fmt.Sprintf(dropKeyspace, keyspace), session)
if err != nil {
log.Fatal("Failed to drop keyspace", err)
}
log.Println("Keyspace dropped")
}
CreateKeySpace
işlevi (user_profile
) oluşturmak keyspace
için kullanılır
const createKeyspace = "CREATE KEYSPACE %s WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 }"
func CreateKeySpace(keyspace string, session *gocql.Session) {
err := utils.ExecuteQuery(fmt.Sprintf(createKeyspace, keyspace), session)
if err != nil {
log.Fatal("Failed to create keyspace", err)
}
log.Println("Keyspace created")
}
Bunu, işleviyle CreateUserTable
ilgilenen tablo oluşturma (user
) izler
const createTable = "CREATE TABLE %s.%s (user_id int PRIMARY KEY, user_name text, user_bcity text)"
func CreateUserTable(keyspace, table string, session *gocql.Session) {
err := session.Query(fmt.Sprintf(createTable, keyspace, table)).Exec()
if err != nil {
log.Fatal("failed to create table ", err)
}
log.Println("Table created")
}
Anahtar alanı ve tablo oluşturulduktan sonra CRUD işlemlerini (öğesinin bir parçası) operations\crud.go
çağırırız.
InsertUser
, oluşturmak User
için kullanılır. Kullanıcı bilgilerini (kimlik, ad ve şehir) kullanarak sorgu bağımsız değişkenleri olarak ayarlar Bind
const createQuery = "INSERT INTO %s.%s (user_id, user_name , user_bcity) VALUES (?,?,?)"
func InsertUser(keyspace, table string, session *gocql.Session, user model.User) {
err := session.Query(fmt.Sprintf(createQuery, keyspace, table)).Bind(user.ID, user.Name, user.City).Exec()
if err != nil {
log.Fatal("Failed to create user", err)
}
log.Println("User created")
}
FindUser
kullanıcı özniteliklerini (model\user.go
Cassandra tarafından döndürülen) bağımsız değişkenlere (userid
, , city
) bağlarken Scan
belirli bir kullanıcı kimliğini kullanarak bir kullanıcıyı () aramak için kullanılır. Bu, name
arama sorgusu sonucu olarak elde edilen sonucu kullanmanın yollarından yalnızca biridir
const selectQuery = "SELECT * FROM %s.%s where user_id = ?"
func FindUser(keyspace, table string, id int, session *gocql.Session) model.User {
var userid int
var name, city string
err := session.Query(fmt.Sprintf(selectQuery, keyspace, table)).Bind(id).Scan(&userid, &name, &city)
if err != nil {
if err == gocql.ErrNotFound {
log.Printf("User with id %v does not exist\n", id)
} else {
log.Printf("Failed to find user with id %v - %v\n", id, err)
}
}
return model.User{ID: userid, Name: name, City: city}
}
FindAllUsers
tüm kullanıcıları getirmek için kullanılır. SliceMap
, kullanıcının tüm bilgilerini bir dilim map
s biçiminde almak için kısaltma olarak kullanılır. Her birini map
, sütun adının (örneğin, user_id
) ilgili değeriyle birlikte anahtar olduğu anahtar-değer çiftleri olarak düşünün.
const findAllUsersQuery = "SELECT * FROM %s.%s"
func FindAllUsers(keyspace, table string, session *gocql.Session) []model.User {
var users []model.User
results, _ := session.Query(fmt.Sprintf(findAllUsersQuery, keyspace, table)).Iter().SliceMap()
for _, u := range results {
users = append(users, mapToUser(u))
}
return users
}
Kullanıcı bilgilerinin her map
biri, yalnızca ilgili sütunundan değeri ayıklayan ve yapının bir örneğini oluşturmak için kullanan bir using mapToUser
işlevine User
dönüştürülür User
func mapToUser(m map[string]interface{}) model.User {
id, _ := m["user_id"].(int)
name, _ := m["user_name"].(string)
city, _ := m["user_bcity"].(string)
return model.User{ID: id, Name: name, City: city}
}
Uygulamayı çalıştırma
Daha önce belirtildiği gibi uygulama, ortam değişkenleri biçiminde bağlantı ve kimlik bilgilerini kabul eder.
Azure portalındaki Azure Cosmos DB hesabınızda Bağlantı Dizesi'ni seçin.
Aşağıdaki özniteliklerin (CONTACT POINT
, PORT
USERNAME
ve ) değerlerini kopyalayın ve PRIMARY PASSWORD
bunları ilgili ortam değişkenlerine ayarlayın
set COSMOSDB_CASSANDRA_CONTACT_POINT=<value for "CONTACT POINT">
set COSMOSDB_CASSANDRA_PORT=<value for "PORT">
set COSMOSDB_CASSANDRA_USER=<value for "USERNAME">
set COSMOSDB_CASSANDRA_PASSWORD=<value for "PRIMARY PASSWORD">
Terminal penceresinde doğru klasöre geçin. Örneğin:
cd "C:\git-samples\azure-cosmosdb-cassandra-go-getting-started"
- Uygulamayı başlatmak için terminalde aşağıdaki komutu çalıştırın.
go run main.go
Terminal penceresinde anahtar alanı ve tablo kurulumu, kullanıcı oluşturma vb. gibi çeşitli işlemler için bildirimler görüntülenir.
Azure portalında bu yeni verileri sorgulamak, değiştirmek ve birlikte çalışmak için Veri Gezgini'ni açın.
Azure portalında SLA'ları gözden geçirme
Azure portalı Azure Cosmos DB hesabınızın aktarım hızını, depolama alanını, kullanılabilirliğini, gecikme süresini ve tutarlılığını izler. Azure Cosmos DB Hizmet Düzeyi Sözleşmesi (SLA) ile ilişkili ölçümler için grafikler, gerçek performansla karşılaştırıldığında SLA değerini gösterir. Bu ölçüm paketi, SLA'larınızın izlenmesini saydam hale getirir.
Ölçümleri ve SLA'ları gözden geçirmek için:
Azure Cosmos DB hesabınızın gezinti menüsünde Ölçümler'i seçin.
Gecikme süresi gibi bir sekme seçin ve sağ tarafta bir zaman çerçevesi seçin. Grafiklerdeki Gerçek ve SLA çizgilerini karşılaştırın.
Diğer sekmelerdeki ölçümleri gözden geçirin.
Kaynakları temizleme
Uygulamanız ve Azure Cosmos DB hesabınızla işiniz bittiğinde, daha fazla ücret ödemeden oluşturduğunuz Azure kaynaklarını silebilirsiniz. Kaynakları silmek için:
Azure portalı Arama çubuğunda Kaynak grupları'nı arayın ve seçin.
Listeden bu hızlı başlangıç için oluşturduğunuz kaynak grubunu seçin.
Kaynak grubuna Genel Bakış sayfasında Kaynak grubunu sil'i seçin.
Sonraki pencerede, silinecek kaynak grubunun adını girin ve sil'i seçin.
Sonraki adımlar
Bu hızlı başlangıçta Cassandra için API ile Azure Cosmos DB hesabı oluşturmayı ve Cassandra veritabanı ve kapsayıcısı oluşturan bir Go uygulamasını çalıştırmayı öğrendiniz. Artık Ek verileri Azure Cosmos DB hesabınıza aktarabilirsiniz.