نحوه اتصال به کاساندرا با جاوا (قسمت دوم برنامه نمونه)

در قسمت اول با درایور یا راه اندازهای کاساندرا نسخه 3 برای اتصال به جاوا آشنا شدیم. در این بخش، نحوه اتصال به cassandra با java با استفاده از راه انداز DataStax بررسی خواهد شد و در ادامه یک مثال کاربردی از اتصال کاساندرا به زبان برنامه نویسی جاوا ارائه می شود. در انتهای مطلب هم فایل مثال ارائه شده که با IntelliJ IDEA  (یک IDE معروف برای جاوا) توسعه داده شده است برای استفاده خوانندگان محترم ضمیمه می شود.

توسط کتابخانه نوین و انعطاف­ پذیر راه ­انداز جاوا که توسط Datastax توسعه و پشتیبانی می­شود، می‌توان در برنامه جاوا، با زبان پرس­وجوی کاساندرا (CQL3) و پروتکل دودویی بومی کاساندرا، با خوشه پردازشی کاساندرا ارتباط برقرار کرد. معماری راه ­انداز لایه­ بندی می­باشد.

اتصال به cassandra با جاوا
اتصال به cassandra با جاوا

در لایه زیرین، هسته راه­ انداز قرار دارد که تمام مسایل مرتبط با اتصال با خوشه پردازشی کاساندرا (برای مثال، استخر اتصال، شناسایی گره جدید و غیره) را برعهده دارد.

 اتصال به سرورهای خوشه پردازشی کاساندرا

برای اتصال ابتدا باید شیءای از کلاس Cluster ایجاد و توسط زنجیره ­ی متدها، مشخصه ­های آن­ را مقدار دهی کرد:

با فرض شِمای زیر:

CREATE KEYSPACE example_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;

USE example_keyspace;

CREATE TABLE example_keyspace.Employe_table (
emp_id int,
emp_city text,
emp_name text,
emp_phone text,
emp_sal int,
PRIMARY KEY ((emp_id, emp_city), emp_name)
) WITH CLUSTERING ORDER BY (emp_name ASC)

 

کد اتصال به خوشه کاساندرا و ایجاد جلسه ­ای بر فضای کلید contacts:

// Setup a cluster to your local instance of Cassandra
Cluster cluster = Cluster.builder()
.addContactPoint("localhost")
.withPort(9042)
.build();

// Create a session to communicate with Cassandra
Session session = cluster.connect();

 

نکته 1: در برنامه کاربردی برای هر فضای کلید یا پایگاه داده، باید تنها یک نمونه از Cluster ایجاد کرد؛ این کلاس می­تواند، استخر اتصال، سیاست انتخاب گره (بطور پیش­فرض از رویکرد round robin استفاده می­کند)، فشرده ­سازی، بازگشت از خطا(failover) و سعی مجدد را کنترل کند. برای انجام کارهای اصلی (منطق کار) در فضای کلیدی در خوشه، نمونه­ای از کلاس Session باید ایجاد گردد. لازم به­ذکر است که Session، thread-safe است، بنابراین می­تواند در میان چند مشتری به اشتراک گذاشته شود.

نکته 2: اینکه برنامه راه انداز به کدام گره(ها)ی کاساندرا متصل شوند دو حالت متفاوت میتوان متصور شد که در راه انداز Datastax، با توجه به دو پیکربندی (الف) نقاط اتصال(Contact points) و (ب) سیاست­های تنظیم بار(Load balancing policies) تعیین می­شود که مشتری یا راه انداز،  به کدام گره(ها) وصل می‌شود:

اتصال به cassandra با جاوا
اتصال به cassandra با جاوا

 الحاق وابستگی ­ها برای اتصال به کاساندرا

برای افزودن وابستگی هسته راه­ انداز، به پروژه maven:

 

<dependency>

  <groupId>com.datastax.cassandra</groupId>


  <artifactId>cassandra-driver-core</artifactId>


  <version>3.4.0</version>


</dependency>

 

برای دانلود دایور Datastax میتوانیم از آدرس زیر راه انداز مطلوب خود را جستجو و دانلود کنید.

https://search.maven.org/

برای دانلود ورژن 3.4.0 میتوانید از لینک زیر استفاده کنید.

https://search.maven.org/remotecontent?filepath=com/datastax/cassandra/cassandra-driver-core/3.4.0/cassandra-driver-core-3.4.0.jar

ایجاد یک برنامه نمونه برای اتصال به cassandra با java

در مرحله، برنامه نمونه ی ما که شامل سه کلاس زیر به منظور ایجاد یک شی و ذخیره سازی آن در کاساندرا هست ارائه می شود.

کلاس EmployePOJO برای ایجاد شی employe که قرار است اطلاعات کارمندان در قالب این شی تولید و ذخیره شود.

/**
* this class contains any employee's information in database
*/
public class EmployePOJO {
private int employe_id;
private String employe_city;
private String employe_name;
private String employe_phone;
private int employe_sal;

//default constructor
public EmployePOJO() {
this.employe_id = 0;
this.employe_city = "";
this.employe_name = "";
this.employe_phone = "";
this.employe_sal = 0;
}

public EmployePOJO(int employe_id, String employe_city, String employe_name, String employe_phone, int employe_sal) {
this.employe_id = employe_id;
this.employe_city = employe_city;
this.employe_name = employe_name;
this.employe_phone = employe_phone;
this.employe_sal = employe_sal;
}

//getter and serter methods
public int getEmploye_id() {
return employe_id;
}

public String getEmploye_city() {
return employe_city;
}

public String getEmploye_name() {
return employe_name;
}

public String getEmploye_phone() {
return employe_phone;
}

public int getEmploye_sal() {
return employe_sal;
}

public void setEmploye_id(int employe_id) {
this.employe_id = employe_id;
}

public void setEmploye_city(String employe_city) {
this.employe_city = employe_city;
}

public void setEmploye_name(String employe_name) {
this.employe_name = employe_name;
}

public void setEmploye_phone(String employe_phone) {
this.employe_phone = employe_phone;
}

public void setEmploye_sal(int employe_sal) {
this.employe_sal = employe_sal;
}
}

 

کلاس CassandraDAO برای اتصال به cassandra با java

import com.datastax.driver.core.*;
/**
* this class is use to handel all interaction between application and data base
*/
public class CassandraDAO {

private static Cluster cluster;
private static Session session;
private final static String KEYSPACE_NAME = "example_keyspace";
private final static String REPLICATION_STRATEGY = "SimpleStrategy";
private final static int REPLICATION_FACTOR = 1;
private final static String TABLE_NAME = "Employe_table";

private static void openCassandra() throws Exception {
// Setup a cluster to your local instance of Cassandra
cluster = Cluster.builder()
.addContactPoint("192.168.174.141")
.withPort(9042)
.build();

// Create a session to communicate with Cassandra
session = cluster.connect();
System.out.println("Cassandra is Connecting...");
}

private static void closeCassandra() throws Exception {
session.close();
cluster.close();
System.out.println("Cassandra is closing... \n");

}

public static void createKeyspace () throws Exception {
openCassandra();
// Create a new Keyspace (database) in Cassandra
String createkeyspace1 = String.format(
"CREATE KEYSPACE IF NOT EXISTS %s WITH replication = " +
"{'class':'%s','replication_factor':%s};",
KEYSPACE_NAME,
REPLICATION_STRATEGY,
REPLICATION_FACTOR
);
session.execute(createkeyspace1);
System.out.println("create Keyspace...");

closeCassandra();
}

public static void createTable () throws Exception {
openCassandra();
// Create a new table in our Keyspace
String createTable = String.format(
"CREATE TABLE IF NOT EXISTS %s.%s " + "" +
"(emp_id int, emp_city text, emp_name text, emp_phone text, emp_sal int, " +
"PRIMARY KEY ((emp_id , emp_city), emp_name)) " +
"WITH CLUSTERING ORDER BY (emp_name ASC);",
KEYSPACE_NAME,
TABLE_NAME
);
session.execute(createTable);
System.out.println("create column family...");

closeCassandra();
}

public static void insertEmploye(EmployePOJO employe) throws Exception {
openCassandra();

// Create an insert statement to add a new item to our table
PreparedStatement insertPrepared = session.prepare(String.format(
"INSERT INTO %s.%s (emp_id, emp_city, emp_name, emp_phone, emp_sal) values (?, ?, ?, ?, ?)",
KEYSPACE_NAME,
TABLE_NAME
));

int id =employe.getEmploye_id();
String city= employe.getEmploye_city();
String name= employe.getEmploye_name();
String phone=employe.getEmploye_phone();
int sal=employe.getEmploye_sal();

// Bind the data to the insert statement and execute it
BoundStatement insertBound = insertPrepared.bind(id,city,name,phone,sal);
session.execute(insertBound);
System.out.println("insert data...");

closeCassandra();
}

public static void getEmploye(int id, String city) throws Exception{
openCassandra();
// Create a select statement to retrieve the item we just inserted
PreparedStatement selectPrepared = session.prepare(String.format(
"SELECT emp_id, emp_city, emp_name FROM %s.%s WHERE emp_id = ? and emp_city = ?",
KEYSPACE_NAME,
TABLE_NAME));

// Bind the id to the select statement and execute it
// UUID id = UUID.fromString("1e4d26ed-922a-4bd2-85cb-6357b202eda8");

BoundStatement selectBound = selectPrepared.bind(id,city);
ResultSet resultSet = session.execute(selectBound);

// Print the retrieved data
resultSet.forEach(row -> System.out.println(
String.format("id: %s, name: %s",
row.getInt("emp_id"),
row.getString("emp_name"))));
closeCassandra();
}

public static void removeEmploye(EmployePOJO employe) throws Exception {

}
public static void updateEmploye(EmployePOJO employe) throws Exception{

}
}

 

کلاس MainClass برای اجرای برنامه

public class MainClass {

public static void main(String[] args) throws Exception {
System.out.println ("Hello Cassandra");

EmployePOJO employe1= new EmployePOJO(2,"tehran","habibi","0912",6000);

CassandraDAO.createKeyspace();
CassandraDAO.createTable();
CassandraDAO.insertEmploye(employe1);
CassandraDAO.getEmploye(2,"tehran");
}

}

 

 

فایل مثال ارائه شده که با IntelliJ IDEA  (یک IDE معروف برای جاوا) توسعه داده شده است برای دانلود و استفاده خوانندگان محترم در زیر ضمیمه شده است.

دانلود فایل برنامه اتصال به کاساندرا با جاوا cassandrajava.tar

منابع:

http://docs.datastax.com/en/developer/java-driver/3.1/

آدرس کانال تلگرام سایت بیگ دیتا:

t.me/bigdata_channel

آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel

جهت دیدن سرفصل های دوره های آموزشی بر روی اینجا کلیک کنید.

 

Visits: 2419

همچنین ببینید

مراحل متن کاوی

استخراج کلمات کلیدی از متن فارسی با روش های آماری TF-IDF

بعد از مراحل نرمال سازی، حذف کلمات ایستا، تکه کردن کلمات درون متن و ریشه …

آموزش کاربردی IntelliJ IDEA

فیلم آموزش کاربردی IntelliJ IDEA

در مطالب قبل در چندین قسمت به آموزش ابزار توسعه فدرتمند IntelliJ IDEA پرداختیم. در …

دیدگاهتان را بنویسید