Apache Cassandra JDBC Bağlantısı
Apache Cassandra projesi en çok ismini duyuran NoSQL projelerinden birisi. Lakin özgün yapısından dolayı çoğu kişi tarafından (ben dahil) güçlükle anlaşılıyor. MongoDB‘nin kurulum, kullanım kolaylığı ile kıyaslama yapacak olursak böyle düşünmek çok olası. Bundan olsa gerek, Cassandra projesini geliştirenler son birkaç sürüm önce SQL benzeri CQL dilini projeye dahil ettiler. Bu sayede kullanıcılar aşina oldukları komutlarla Cassandra’yı kullanabilecekler.
Bunun akabinde JDBC sürücüsü karşımıza çıkıyor. Cassandra JDBC sürücüsü ile Cassandra’ya bağlanarak basit CRUD işlemlerini yapabiliyoruz. Ancak şimdiden uyarmam lazım, client tam olarak JDBC uyumlu değil. Örneğin herhangi bir şekilde metadata erişimi sözkonusu değil. Yine de Cassandra’ya giriş yapmak amacıyla kullanılabilecek durumda denilebilir.
JDBC sürücüsüne GitHub üzerinden erişebilirsiniz. Projede uzun zamandır bir geliştirme yapılmamış. Bu yüzden kodları indirdikten sonra Maven ile derlemeye çalıştığınızda hata alıyorsunuz. Projeyi derleyebilmek için pom.xml de cassandra-thrift ve cassandra-clientutil kütüphanelerinin sürümlerini güncel sürüm ile değiştirmeniz gerekiyor, şu anda güncel sürüm 1.1.0 olduğu için şu değişikliği yapıyorum:
<groupId>org.apache.cassandra</groupId> <artifactId>cassandra-thrift</artifactId> <version>1.1.0</version> <groupId>org.apache.cassandra</groupId> <artifactId>cassandra-clientutil</artifactId> <version>1.1.0</version>
Bundan sonrası tanıdık, şu şekilde bağlantı kurabiliyorsunuz:
Class.forName("org.apache.cassandra.cql.jdbc.CassandraDriver"); String connectionString = String.format("jdbc:cassandra://%s/%s", host, keyspace); Connection connection = DriverManager.getConnection(connectionString);
CRUD işlemleri için standart SQL komutlarını kullanabiliyorsunuz. Aslında Cassandra NoSQL olduğu için insert komutu kullanmanıza gerek yok. Update komutları ile işlemlerinizi gerçekleştirebilirsiniz. Bunun haricinde kompleks SQL komutları çalıştırma şansınız yok. JDBC’nin tüm özelliklerini de kullanamıyorsunuz.
Batch işlem yapabilmek için JDBC’nin özelliklerini kullanamadığınız için CQL’de özel komutlar belirlemişler. Sorguya BEGIN BATCH komutu ile başlayıp, CQL kodları arasına herhangi bir ayıraç (noktalı virgül vs) koymadan devam edip APPLY BATCH ile tamamladığınız zaman toplu işlem yapabiliyorsunuz.
BEGIN BATCH update test set a=1, b=2 where key='x' update test set a=4, b=5 where key='y' APPLY BATCH;
Tavsiyem çok fazla işlemi aynı anda göndermemeniz, bölerek göndermeniz. Aksi durumda problem çıkabiliyor.
Cassandra’da veritabanı ya da şemaya karşılık Keyspace kavramı, tabloya karşılık da Column Family kavramı geliyor diyebiliriz. JDBC üzerinden keyspace oluşturmak için:
CREATE KEYSPACE Test with strategy_class = 'SimpleStrategy' and strategy_options:replication_factor=1;
Column Family oluşturmak için:
CREATE COLUMNFAMILY PRODUCTS ( KEY varchar PRIMARY KEY, DESCRIPTION varchar, QUANTITY int, PRICE double );
Cassandra’da ikincil indeks (secondary index) desteği bulunuyor. Bunun için:
CREATE INDEX ON PRODUCTS (QUANTITY);
Son olarak, NoSQL veritabanlarında pek bulunmayan join ya da transaction da desteklenmiyor. Cassandra’yı test etmek için JDBC kütüphanesi işinizi görebilir ancak canlı sistemlerde kullanmak için iyice emin olmak şart.
Doğal Dil İşleme Temelleri MongoDB’de Sharding