১. ভূমিকা
স্প্যানার হলো একটি সম্পূর্ণভাবে পরিচালিত, হরাইজন্টালি স্কেলেবল এবং বিশ্বব্যাপী বিতরণযোগ্য ডাটাবেস পরিষেবা, যা রিলেশনাল এবং নন-রিলেশনাল উভয় ধরনের ওয়ার্কলোডের জন্যই চমৎকার।
স্প্যানারের ক্যাসান্ড্রা ইন্টারফেস আপনাকে পরিচিত ক্যাসান্ড্রা টুলস এবং সিনট্যাক্স ব্যবহার করে স্প্যানারের সম্পূর্ণভাবে পরিচালিত, স্কেলেবল এবং অত্যন্ত নির্ভরযোগ্য পরিকাঠামোর সুবিধা নিতে দেয়।
আপনি যা শিখবেন
- স্প্যানার ইনস্ট্যান্স এবং ডাটাবেস কীভাবে সেট আপ করবেন।
- আপনার ক্যাসান্ড্রা স্কিমা এবং ডেটা মডেল কীভাবে রূপান্তর করবেন।
- ক্যাসান্ড্রা থেকে স্প্যানারে আপনার ঐতিহাসিক ডেটা কীভাবে একসাথে এক্সপোর্ট করবেন।
- কীভাবে আপনার অ্যাপ্লিকেশনকে ক্যাসান্ড্রার পরিবর্তে স্প্যানারের দিকে নির্দেশ করবেন।
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড প্রজেক্ট যা একটি বিলিং অ্যাকাউন্টের সাথে সংযুক্ত।
- যে মেশিনে
gcloudCLI ইনস্টল ও কনফিগার করা আছে, সেটিতে অ্যাক্সেস করুন, অথবা গুগল ক্লাউড শেল ব্যবহার করুন। - একটি ওয়েব ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স ।
২. সেটআপ এবং প্রয়োজনীয়তা
একটি GCP প্রজেক্ট তৈরি করুন
Google Cloud Console- এ সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানানো যাচ্ছে যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
বিলিং সেটআপ
এরপর, আপনাকে ম্যানেজ বিলিং ইউজার গাইড অনুসরণ করতে হবে এবং ক্লাউড কনসোলে বিলিং চালু করতে হবে। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে, আপনি কোডল্যাবের শেষে "ধাপ ৯ পরিষ্কার করা" অনুসরণ করে স্প্যানার ইনস্ট্যান্সটি বন্ধ করে দিতে পারেন।
ক্লাউড শেল শুরু করুন
যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে। আপনাকে কিছুই ইনস্টল করতে হবে না।
এরপরে
এরপরে, আপনি ক্যাসান্ড্রা ক্লাস্টার স্থাপন করবেন।
৩. ক্যাসান্ড্রা ক্লাস্টার স্থাপন করুন (অরিজিন)
এই কোডল্যাবের জন্য, আমরা Compute Engine-এ একটি সিঙ্গেল-নোড ক্যাসান্ড্রা ক্লাস্টার সেট আপ করব।
১. ক্যাসান্ড্রার জন্য একটি GCE VM তৈরি করুন
একটি ইনস্ট্যান্স তৈরি করতে, পূর্বে প্রোভিশন করা ক্লাউড শেল থেকে gcloud compute instances create কমান্ডটি ব্যবহার করুন।
gcloud compute instances create cassandra-origin \
--machine-type=e2-medium \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--tags=cassandra-migration \
--boot-disk-size=20GB \
--zone=us-central1-a
২. ক্যাসান্ড্রা ইনস্টল করুন
নিচের নির্দেশাবলী অনুসরণ করে Navigation menu পৃষ্ঠা থেকে VM Instances প্রবেশ করুন:
.
দেখানো পদ্ধতি অনুযায়ী cassandra-origin VM-টি খুঁজুন এবং SSH ব্যবহার করে VM-টিতে সংযোগ করুন:
.
আপনার তৈরি করা এবং ssh-এর মাধ্যমে প্রবেশ করা VM-টিতে Cassandra ইনস্টল করতে নিম্নলিখিত কমান্ডগুলি চালান।
জাভা ইনস্টল করুন (ক্যাসান্ড্রা নির্ভরতা)
sudo apt-get update
sudo apt-get install -y openjdk-11-jre-headless
ক্যাসান্ড্রা রিপোজিটরি যোগ করুন
echo "deb [signed-by=/etc/apt/keyrings/apache-cassandra.asc] https://debian.cassandra.apache.org 41x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
sudo curl -o /etc/apt/keyrings/apache-cassandra.asc https://downloads.apache.org/cassandra/KEYS
ক্যাসান্ড্রা ইনস্টল করুন
sudo apt-get update
sudo apt-get install -y cassandra
ক্যাসান্ড্রা সার্ভিসের জন্য লিসেন অ্যাড্রেস সেট করুন।
বাড়তি নিরাপত্তার জন্য আমরা এখানে ক্যাসান্ড্রা ভিএম-এর অভ্যন্তরীণ আইপি অ্যাড্রেস ব্যবহার করি।
আপনার হোস্ট মেশিনের আইপি অ্যাড্রেসটি নোট করুন।
আপনি ক্লাউড শেলে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন, অথবা ক্লাউড কনসোলের VM Instances পৃষ্ঠা থেকে এটি পেতে পারেন।
gcloud compute instances describe cassandra-origin --format="get(networkInterfaces[0].networkIP)" --zone=us-central1-a
অথবা
.
কনফিগারেশন ফাইলে ঠিকানাটি আপডেট করুন।
ক্যাসান্ড্রা কনফিগারেশন ফাইলটি আপডেট করার জন্য আপনি আপনার পছন্দমতো এডিটর ব্যবহার করতে পারেন।
sudo vim /etc/cassandra/cassandra.yaml
rpc_address: এর জায়গায় VM-এর IP address দিন, ফাইলটি সেভ করে বন্ধ করুন।
ভিএম-এ ক্যাসান্ড্রা সার্ভিসটি সক্রিয় করুন।
sudo systemctl enable cassandra
sudo systemctl stop cassandra
sudo systemctl start cassandra
sudo systemctl status cassandra
৩. একটি কীস্পেস এবং টেবিল তৈরি করুন {create-keyspace-and-table}
আমরা 'users' টেবিলের একটি উদাহরণ ব্যবহার করব এবং 'analytics' নামে একটি কীস্পেস তৈরি করব।
export CQLSH_HOST=<IP of the VM added as rpc_address>
/usr/bin/cqlsh
cqlsh এর ভিতরে:
-- Create keyspace (adjust replication for production)
CREATE KEYSPACE analytics WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};
-- Use the keyspace
USE analytics;
-- Create the users table
CREATE TABLE users (
id int PRIMARY KEY,
active boolean,
username text,
);
-- Insert 5 rows
INSERT INTO users (id, active, username) VALUES (1, true, 'd_knuth');
INSERT INTO users (id, active, username) VALUES (2, true, 'sanjay_ghemawat');
INSERT INTO users (id, active, username) VALUES (3, false, 'gracehopper');
INSERT INTO users (id, active, username) VALUES (4, true, 'brian_kernighan');
INSERT INTO users (id, active, username) VALUES (5, true, 'jeff_dean');
INSERT INTO users (id, active, username) VALUES (6, true, 'jaime_levy');
-- Select all users to verify the inserts.
SELECT * from users;
-- Exit cqlsh
EXIT;
SSH সেশনটি খোলা রাখুন অথবা এই VM-এর IP ঠিকানাটি নোট করুন ( hostname -I )।
এরপরে
এরপরে, আপনাকে একটি ক্লাউড স্প্যানার ইনস্ট্যান্স এবং ডেটাবেস সেট আপ করতে হবে।
৪. একটি স্প্যানার ইনস্ট্যান্স (টার্গেট) তৈরি করুন।
স্প্যানারে, একটি ইনস্ট্যান্স হলো কম্পিউটিং এবং স্টোরেজ রিসোর্সের একটি ক্লাস্টার যা এক বা একাধিক স্প্যানার ডেটাবেস হোস্ট করে। এই কোডল্যাবের জন্য একটি স্প্যানার ডেটাবেস হোস্ট করতে আপনার অন্তত ১টি ইনস্ট্যান্সের প্রয়োজন হবে।
gcloud SDK সংস্করণ পরীক্ষা করুন
একটি ইনস্ট্যান্স তৈরি করার আগে, নিশ্চিত করুন যে Google Cloud Shell-এ থাকা gcloud SDK-টি প্রয়োজনীয় সংস্করণে আপডেট করা হয়েছে – যা gcloud SDK 531.0.0- এর চেয়ে বড় যেকোনো সংস্করণ। নিচের কমান্ডটি অনুসরণ করে আপনি আপনার gcloud SDK সংস্করণটি খুঁজে নিতে পারেন।
$ gcloud version | grep Google
এখানে একটি উদাহরণ আউটপুট দেওয়া হলো:
Google Cloud SDK 489.0.0
আপনি যদি প্রয়োজনীয় 531.0.0 সংস্করণের (পূর্ববর্তী উদাহরণে 489.0.0 ) চেয়ে পুরোনো সংস্করণ ব্যবহার করেন, তাহলে আপনাকে নিম্নলিখিত কমান্ডটি চালিয়ে আপনার Google Cloud SDK আপগ্রেড করতে হবে:
sudo apt-get update \
&& sudo apt-get --only-upgrade install google-cloud-cli-anthoscli google-cloud-cli-cloud-run-proxy kubectl google-cloud-cli-skaffold google-cloud-cli-cbt google-cloud-cli-docker-credential-gcr google-cloud-cli-spanner-migration-tool google-cloud-cli-cloud-build-local google-cloud-cli-pubsub-emulator google-cloud-cli-app-engine-python google-cloud-cli-kpt google-cloud-cli-bigtable-emulator google-cloud-cli-datastore-emulator google-cloud-cli-spanner-emulator google-cloud-cli-app-engine-go google-cloud-cli-app-engine-python-extras google-cloud-cli-config-connector google-cloud-cli-package-go-module google-cloud-cli-istioctl google-cloud-cli-anthos-auth google-cloud-cli-gke-gcloud-auth-plugin google-cloud-cli-app-engine-grpc google-cloud-cli-kubectl-oidc google-cloud-cli-terraform-tools google-cloud-cli-nomos google-cloud-cli-local-extract google-cloud-cli-firestore-emulator google-cloud-cli-harbourbridge google-cloud-cli-log-streaming google-cloud-cli-minikube google-cloud-cli-app-engine-java google-cloud-cli-enterprise-certificate-proxy google-cloud-cli
স্প্যানার এপিআই সক্রিয় করুন
ক্লাউড শেলের ভিতরে, আপনার প্রজেক্ট আইডি সেট আপ করা আছে কিনা তা নিশ্চিত করুন। বর্তমানে কনফিগার করা প্রজেক্ট আইডি খুঁজে পেতে নিচের প্রথম কমান্ডটি ব্যবহার করুন। যদি ফলাফলটি প্রত্যাশিত না হয়, তাহলে নিচের দ্বিতীয় কমান্ডটি সঠিক আইডিটি সেট করে দেবে।
gcloud config get-value project
gcloud config set project [YOUR-DESIRED-PROJECT-ID]
আপনার ডিফল্ট অঞ্চল us-central1 হিসেবে কনফিগার করুন। স্প্যানার আঞ্চলিক কনফিগারেশন দ্বারা সমর্থিত অন্য কোনো অঞ্চলে আপনি নির্দ্বিধায় এটি পরিবর্তন করতে পারেন।
gcloud config set compute/region us-central1
স্প্যানার এপিআই সক্রিয় করুন:
gcloud services enable spanner.googleapis.com
স্প্যানার ইনস্ট্যান্স তৈরি করুন
এই অংশে, আপনি একটি ফ্রি ট্রায়াল ইনস্ট্যান্স অথবা একটি প্রোভিশনড ইনস্ট্যান্স তৈরি করবেন। এই কোডল্যাব জুড়ে, ব্যবহৃত স্প্যানার ক্যাসান্ড্রা অ্যাডাপ্টার ইনস্ট্যান্স আইডি হলো cassandra-adapter-demo , যা export কমান্ড লাইন ব্যবহার করে SPANNER_INSTANCE_ID ভেরিয়েবল হিসেবে সেট করা হয়েছে। ঐচ্ছিকভাবে, আপনি আপনার নিজের ইনস্ট্যান্স আইডির নামও বেছে নিতে পারেন।
একটি ফ্রি-ট্রায়াল স্প্যানার ইনস্ট্যান্স তৈরি করুন
যাদের গুগল অ্যাকাউন্ট আছে এবং প্রজেক্টে ক্লাউড বিলিং চালু করা আছে, তারা স্প্যানারের একটি ৯০-দিনের ফ্রি ট্রায়াল ইনস্ট্যান্স পাবেন। আপনি যদি আপনার ফ্রি ট্রায়াল ইনস্ট্যান্সটিকে কোনো পেইড ইনস্ট্যান্সে আপগ্রেড করার সিদ্ধান্ত না নেন, তবে আপনার থেকে কোনো চার্জ নেওয়া হবে না। ফ্রি ট্রায়াল ইনস্ট্যান্সে স্প্যানার ক্যাসান্ড্রা অ্যাডাপ্টার সমর্থিত। যোগ্য হলে, ক্লাউড শেল খুলে এই কমান্ডটি চালিয়ে একটি ফ্রি ট্রায়াল ইনস্ট্যান্স তৈরি করুন:
export SPANNER_INSTANCE_ID=cassandra-adapter-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--instance-type=free-instance \
--description="Spanner Cassandra Adapter demo"
কমান্ড আউটপুট:
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--instance-type=free-instance \
--description="Spanner Cassandra Adapter demo"
Creating instance...done.
৫. ক্যাসান্ড্রা স্কিমা এবং ডেটা মডেল স্প্যানারে স্থানান্তর করুন
ক্যাসান্ড্রা ডেটাবেস থেকে স্প্যানারে ডেটা স্থানান্তরের প্রাথমিক এবং গুরুত্বপূর্ণ পর্যায়ে, বিদ্যমান ক্যাসান্ড্রা স্কিমাটিকে স্প্যানারের কাঠামোগত এবং ডেটা টাইপের প্রয়োজনীয়তার সাথে সামঞ্জস্যপূর্ণ করার জন্য রূপান্তর করতে হয়।
এই জটিল স্কিমা মাইগ্রেশন প্রক্রিয়াটিকে সহজ করতে, স্প্যানার কর্তৃক প্রদত্ত দুটি মূল্যবান ওপেন সোর্স টুলের যেকোনো একটি ব্যবহার করুন:
- স্প্যানার মাইগ্রেশন টুল : এই টুলটি একটি বিদ্যমান ক্যাসান্ড্রা ডেটাবেসের সাথে সংযোগ স্থাপন করে এবং স্কিমাটিকে স্প্যানারে স্থানান্তরিত করার মাধ্যমে আপনাকে স্কিমা মাইগ্রেট করতে সাহায্য করে। এই টুলটি
gcloud cliএর একটি অংশ হিসেবে উপলব্ধ। - স্প্যানার ক্যাসান্ড্রা স্কিমা টুল : এই টুলটি আপনাকে ক্যাসান্ড্রা থেকে এক্সপোর্ট করা DDL স্প্যানারে রূপান্তর করতে সাহায্য করে। আপনি কোডল্যাবের জন্য এই দুটি টুলের যেকোনো একটি ব্যবহার করতে পারেন। এই কোডল্যাবে, আমরা স্কিমা মাইগ্রেট করার জন্য স্প্যানার মাইগ্রেশন টুল ব্যবহার করব।
স্প্যানার মাইগ্রেশন টুল
স্প্যানার মাইগ্রেশন টুল MySQL, Postgres, Cassandra ইত্যাদির মতো বিভিন্ন ডেটা সোর্স থেকে স্কিমা মাইগ্রেট করতে সাহায্য করে।
যদিও এই কোডল্যাবের জন্য আমরা এই টুলটির CLI ব্যবহার করব, আমরা এর UI-ভিত্তিক সংস্করণটি অন্বেষণ ও ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করি, যা আপনার স্প্যানার স্কিমা প্রয়োগ করার আগে তাতে পরিবর্তন আনার সুযোগও দেয়।
মনে রাখবেন যে, যদি spanner-migration-tool ক্লাউড শেলে চালানো হয়, তবে এটি আপনার ক্যাসান্ড্রা ভিএম-এর অভ্যন্তরীণ আইপি অ্যাড্রেসে অ্যাক্সেস নাও পেতে পারে। তাই, আমরা আপনাকে এটি সেই ভিএম-এ চালানোর পরামর্শ দিচ্ছি যেখানে আপনি ক্যাসান্ড্রা ইনস্টল করেছেন।
যে ভিএম-এ আপনি ক্যাসান্ড্রা ইনস্টল করেছেন, সেখানে নিম্নলিখিত কমান্ডটি চালান।
স্প্যানার মাইগ্রেশন টুল ইনস্টল করুন
sudo apt-get update
sudo apt-get install --upgrade google-cloud-sdk-spanner-migration-tool
ইনস্টলেশনে কোনো সমস্যা হলে, বিস্তারিত ধাপগুলোর জন্য installing-spanner-migration-tool দেখুন।
জিক্লাউড ক্রেডেনশিয়াল রিফ্রেশ করুন
gcloud auth login
gcloud auth application-default login
মাইগ্রেট স্কিমা
export CASSANDRA_HOST=`<ip address of the VM used as rpc_address above>`
export PROJECT=`<PROJECT_ID>`
gcloud alpha spanner migrate schema \
--source=cassandra \
--source-profile="host=${CASSANDRA_HOST},user=cassandra,password=cassandra,port=9042,keyspace=analytics,datacenter=datacenter1" \
--target-profile="project=${PROJECT},instance=cassandra-adapter-demo,dbName=analytics" \
--project=${PROJECT}
স্প্যানার ডিডিএল যাচাই করুন
gcloud spanner databases ddl describe analytics --instance=cassandra-adapter-demo
স্কিমা মাইগ্রেশন শেষে এই কমান্ডের আউটপুটটি হবে:
CREATE TABLE users (
active BOOL OPTIONS (
cassandra_type = 'boolean'
),
id INT64 NOT NULL OPTIONS (
cassandra_type = 'int'
),
username STRING(MAX) OPTIONS (
cassandra_type = 'text'
),
) PRIMARY KEY(id);
(ঐচ্ছিক) রূপান্তরিত ডিডিএল দেখুন
আপনি রূপান্তরিত DDL-টি দেখতে পারেন এবং স্প্যানারে এটি পুনরায় প্রয়োগ করতে পারেন (যদি অতিরিক্ত পরিবর্তনের প্রয়োজন হয়)।
cat `ls -t cassandra_*schema.ddl.txt | head -n 1`
এই কমান্ডের আউটপুট হবে
CREATE TABLE `users` (
`active` BOOL OPTIONS (cassandra_type = 'boolean'),
`id` INT64 NOT NULL OPTIONS (cassandra_type = 'int'),
`username` STRING(MAX) OPTIONS (cassandra_type = 'text'),
) PRIMARY KEY (`id`)
(ঐচ্ছিক) রূপান্তর প্রতিবেদনটি দেখুন
cat `ls -t cassandra_*report.txt | head -n 1`
রূপান্তর প্রতিবেদনটি সেই বিষয়গুলো তুলে ধরে যা আপনার মনে রাখা উচিত। উদাহরণস্বরূপ, যদি উৎস এবং স্প্যানারের মধ্যে কোনো কলামের সর্বোচ্চ নির্ভুলতার (maximum precision) অমিল থাকে, তবে তা এখানে তুলে ধরা হবে।
৬. আপনার ঐতিহাসিক ডেটা একসাথে রপ্তানি করুন
একসাথে অনেকগুলো ডেটা স্থানান্তর করার জন্য আপনাকে যা করতে হবে:
- একটি বিদ্যমান GCS বাকেট সরবরাহ করুন বা পুনরায় ব্যবহার করুন।
- ক্যাসান্ড্রা ড্রাইভার কনফিগারেশন ফাইলটি বাকেটে আপলোড করুন
- একযোগে স্থানান্তর শুরু করুন।
যদিও আপনি ক্লাউড শেল অথবা নতুন তৈরি করা ভিএম থেকে বাল্ক মাইগ্রেশন চালু করতে পারেন, আমরা এই কোডল্যাবের জন্য ভিএম ব্যবহার করার পরামর্শ দিচ্ছি, কারণ কনফিগারেশন ফাইল তৈরির মতো কিছু ধাপ লোকাল স্টোরেজে ফাইলগুলোকে স্থায়ীভাবে সংরক্ষণ করে।
একটি GCS বাকেট প্রস্তুত করুন।
এই ধাপের শেষে, আপনার একটি GCS বাকেট প্রোভিশন করা এবং CASSANDRA_BUCKET_NAME নামের একটি ভেরিয়েবলে এর পাথ এক্সপোর্ট করা সম্পন্ন হবে। আপনি যদি একটি বিদ্যমান বাকেট পুনরায় ব্যবহার করতে চান, তবে শুধু পাথটি এক্সপোর্ট করে এগিয়ে যেতে পারেন।
if [ -z ${CASSANDRA_BUCKET_NAME} ]; then
export CASSANDRA_BUCKET_NAME="gs://cassandra-demo-$(date +%Y-%m-%d-%H-%M-%S)-$(head /dev/urandom | tr -dc a-z | head -c 20)"
gcloud storage buckets create "${CASSANDRA_BUCKET_NAME}"
else
echo "using existing bucket ${CASSANDRA_BUCKET_NAME}"
fi
ড্রাইভার কনফিগারেশন ফাইল তৈরি এবং আপলোড করুন
এখানে আমরা একটি অত্যন্ত সাধারণ ক্যাসান্ড্রা ড্রাইভার কনফিগারেশন ফাইল আপলোড করেছি। ফাইলটির সম্পূর্ণ ফরম্যাটের জন্য অনুগ্রহ করে এটি দেখুন।
# Configuration for the Cassandra instance and GCS bucket
INSTANCE_NAME="cassandra-origin"
ZONE="us-central1-a"
CASSANDRA_PORT="9042"
# Retrieve the internal IP address of the Cassandra instance
CASSANDRA_IP=$(gcloud compute instances describe "${INSTANCE_NAME}" \
--format="get(networkInterfaces[0].networkIP)" \
--zone="${ZONE}")
# Check if the IP was successfully retrieved
if [[ -z "${CASSANDRA_IP}" ]]; then
echo "Error: Could not retrieve Cassandra instance IP."
exit 1
fi
# Define the full contact point
CONTACT_POINT="${CASSANDRA_IP}:${CASSANDRA_PORT}"
# Create a temporary file with the specified content
TMP_FILE=$(mktemp)
cat <<EOF > "${TMP_FILE}"
# Reference configuration for the DataStax Java driver for Apache Cassandra®.
# This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md.
datastax-java-driver {
basic.contact-points = ["${CONTACT_POINT}"]
basic.session-keyspace = analytics
basic.load-balancing-policy.local-datacenter = datacenter1
advanced.auth-provider {
class = PlainTextAuthProvider
username = cassandra
password = cassandra
}
}
EOF
# Upload the temporary file to the specified GCS bucket
if gsutil cp "${TMP_FILE}" "${CASSANDRA_BUCKET_NAME}/cassandra.conf"; then
echo "Successfully uploaded ${TMP_FILE} to ${CASSANDRA_BUCKET_NAME}/cassandra.conf"
# Concatenate (cat) the uploaded file from GCS
echo "Displaying the content of the uploaded file:"
gsutil cat "${CASSANDRA_BUCKET_NAME}/cassandra.conf"
else
echo "Error: Failed to upload file to GCS."
fi
# Clean up the temporary file
rm "${TMP_FILE}"
বাল্ক মাইগ্রেশন চালান
এটি আপনার ডেটা স্প্যানারে বাল্ক মাইগ্রেশন করার জন্য একটি নমুনা কমান্ড। প্রকৃত প্রোডাকশন ব্যবহারের ক্ষেত্রে, আপনাকে আপনার কাঙ্ক্ষিত স্কেল এবং থ্রুপুট অনুযায়ী মেশিনের ধরন ও সংখ্যা পরিবর্তন করতে হবে। বিকল্পগুলির সম্পূর্ণ তালিকার জন্য অনুগ্রহ করে README_Sourcedb_to_Spanner.md#cassandra-to-spanner-bulk-migration দেখুন।
gcloud dataflow flex-template run "sourcedb-to-spanner-flex-job" \
--project "`gcloud config get-value project`" \
--region "us-central1" \
--max-workers "2" \
--num-workers "1" \
--worker-machine-type "e2-standard-8" \
--template-file-gcs-location "gs://dataflow-templates-us-central1/latest/flex/Sourcedb_to_Spanner_Flex" \
--additional-experiments="[\"disable_runner_v2\"]" \
--parameters "sourceDbDialect=CASSANDRA" \
--parameters "insertOnlyModeForSpannerMutations=true" \
--parameters "sourceConfigURL=$CASSANDRA_BUCKET_NAME/cassandra.conf" \
--parameters "instanceId=cassandra-adapter-demo" \
--parameters "databaseId=analytics" \
--parameters "projectId=`gcloud config get-value project`" \
--parameters "outputDirectory=$CASSANDRA_BUCKET_NAME/output" \
--parameters "batchSizeForSpannerMutations=1"
এর ফলে নিচের মতো আউটপুট তৈরি হবে। তৈরি হওয়া id নোট করুন এবং ডেটাফ্লো জবের স্ট্যাটাস জানতে সেটি ব্যবহার করুন।
job: createTime: '2025-08-08T09:41:09.820267Z' currentStateTime: '1970-01-01T00:00:00Z' id: 2025-08-08_02_41_09-17637291823018196600 location: us-central1 name: sourcedb-to-spanner-flex-job projectId: span-cloud-ck-testing-external startTime: '2025-08-08T09:41:09.820267Z'
জবটির স্ট্যাটাস চেক করতে নিচের কমান্ডটি চালান এবং স্ট্যাটাসটি JOB_STATE_DONE এ পরিবর্তিত হওয়া পর্যন্ত অপেক্ষা করুন।
gcloud dataflow jobs describe --region=us-central1 <dataflow job id> | grep "currentState:"
প্রাথমিকভাবে, কাজটি একটি সারিবদ্ধ অবস্থায় থাকবে যেমন
currentState: JOB_STATE_QUEUED
জবটি কিউতে থাকা অবস্থায় বা চলমান থাকলে, জবটি নিরীক্ষণ করার জন্য আমরা আপনাকে ক্লাউড কনসোল UI-এর Dataflow/Jobs পৃষ্ঠাটি দেখার জন্য বিশেষভাবে পরামর্শ দিচ্ছি।
কাজটি সম্পন্ন হলে, কাজটির অবস্থা পরিবর্তিত হয়ে নিম্নরূপ হবে:
currentState: JOB_STATE_DONE
৭. আপনার অ্যাপ্লিকেশনটিকে স্প্যানার (কাটওভার) এর দিকে নির্দেশ করুন।
মাইগ্রেশন পর্বের পর আপনার ডেটার নির্ভুলতা এবং অখণ্ডতা পুঙ্খানুপুঙ্খভাবে যাচাই করার পরে, সবচেয়ে গুরুত্বপূর্ণ পদক্ষেপটি হলো আপনার অ্যাপ্লিকেশনের কার্যক্রমের কেন্দ্রবিন্দুকে পুরোনো ক্যাসান্ড্রা সিস্টেম থেকে নতুনভাবে ডেটা দিয়ে পূর্ণ করা স্প্যানার ডেটাবেসে স্থানান্তর করা। এই গুরুত্বপূর্ণ স্থানান্তর পর্বটি সাধারণত " কাটওভার " নামে পরিচিত।
কাটওভার পর্যায়টি সেই মুহূর্তকে নির্দেশ করে যখন লাইভ অ্যাপ্লিকেশন ট্র্যাফিককে মূল ক্যাসান্ড্রা ক্লাস্টার থেকে সরিয়ে সরাসরি শক্তিশালী এবং স্কেলেবল স্প্যানার পরিকাঠামোর সাথে সংযুক্ত করা হয়। এই রূপান্তরটি দেখায় যে অ্যাপ্লিকেশনগুলি কত সহজে স্প্যানারের শক্তিকে কাজে লাগাতে পারে, বিশেষ করে যখন স্প্যানার ক্যাসান্ড্রা ইন্টারফেস ব্যবহার করা হয়।
স্প্যানার ক্যাসান্ড্রা ইন্টারফেসের মাধ্যমে, কাটওভার প্রক্রিয়াটি সুবিন্যস্ত হয়। এর জন্য প্রধানত আপনার ক্লায়েন্ট অ্যাপ্লিকেশনগুলোকে সমস্ত ডেটা ইন্টারঅ্যাকশনের জন্য নেটিভ স্প্যানার ক্যাসান্ড্রা ক্লায়েন্ট ব্যবহার করার জন্য কনফিগার করতে হয়। আপনার ক্যাসান্ড্রা (অরিজিন) ডেটাবেসের সাথে যোগাযোগ করার পরিবর্তে, আপনার অ্যাপ্লিকেশনগুলো নির্বিঘ্নে সরাসরি স্প্যানারে (টার্গেট) ডেটা পড়া এবং লেখা শুরু করবে। কানেক্টিভিটির এই মৌলিক পরিবর্তনটি সাধারণত SpannerCqlSessionBuilder ব্যবহারের মাধ্যমে সম্পন্ন করা হয়, যা স্প্যানার ক্যাসান্ড্রা ক্লায়েন্ট লাইব্রেরির একটি মূল উপাদান এবং এটি আপনার স্প্যানার ইনস্ট্যান্সের সাথে সংযোগ স্থাপনকে সহজতর করে। এটি কার্যকরভাবে আপনার অ্যাপ্লিকেশনের সম্পূর্ণ ডেটা ট্র্যাফিক প্রবাহকে স্প্যানারের দিকে পুনঃনির্দেশিত করে।
যেসব জাভা অ্যাপ্লিকেশন ইতিমধ্যেই cassandra-java-driver লাইব্রেরি ব্যবহার করছে, সেগুলোর ক্ষেত্রে স্প্যানার ক্যাসান্ড্রা জাভা ক্লায়েন্টকে একীভূত করতে CqlSession ইনিশিয়ালাইজেশনে শুধুমাত্র সামান্য কিছু পরিবর্তন প্রয়োজন।
google-cloud-spanner-cassandra নির্ভরতা পাওয়া যাচ্ছে
স্প্যানার ক্যাসান্ড্রা ক্লায়েন্ট ব্যবহার শুরু করতে, আপনাকে প্রথমে এর ডিপেন্ডেন্সিটি আপনার প্রোজেক্টে অন্তর্ভুক্ত করতে হবে। google-cloud-spanner-cassandra আর্টিফ্যাক্টগুলো Maven Central-এ com.google.cloud গ্রুপ আইডির অধীনে প্রকাশিত হয়। আপনার জাভা প্রোজেক্টের বিদ্যমান <dependencies> সেকশনের অধীনে নিম্নলিখিত নতুন ডিপেন্ডেন্সিটি যোগ করুন। google-cloud-spanner-cassandra ডিপেন্ডেন্সিটি কীভাবে অন্তর্ভুক্ত করবেন তার একটি সরলীকৃত উদাহরণ নিচে দেওয়া হলো:
<!-- native Spanner Cassandra Client -->
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner-cassandra</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
স্প্যানারের সাথে সংযোগ করতে সংযোগ কনফিগারেশন পরিবর্তন করুন
প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করার পর, পরবর্তী ধাপ হলো স্প্যানার ডাটাবেসের সাথে সংযোগ করার জন্য আপনার কানেকশন কনফিগারেশন পরিবর্তন করা।
ক্যাসান্ড্রা ক্লাস্টারের সাথে সংযোগ স্থাপনের জন্য ব্যবহৃত একটি সাধারণ অ্যাপ্লিকেশন প্রায়শই নিম্নলিখিত কোডের অনুরূপ কোড ব্যবহার করে থাকে:
CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress("127.0.0.1", 9042))
.withLocalDatacenter("datacenter1")
.withAuthCredentials("username", "password")
.build();
এই কানেকশনটিকে স্প্যানারে রিডাইরেক্ট করতে, আপনাকে আপনার CqlSession তৈরির লজিক পরিবর্তন করতে হবে। cassandra-java-driver এর স্ট্যান্ডার্ড CqlSessionBuilder সরাসরি ব্যবহার করার পরিবর্তে, আপনাকে স্প্যানার ক্যাসান্ড্রা ক্লায়েন্ট দ্বারা প্রদত্ত SpannerCqlSession.builder() ব্যবহার করতে হবে। আপনার কানেকশন কোডটি কীভাবে পরিবর্তন করবেন তার একটি দৃষ্টান্তমূলক উদাহরণ নিচে দেওয়া হলো:
String databaseUri = "projects/<your-gcp-project>/instances/<your-spanner-instance>/databases/<your-spanner-database>";
CqlSession session = SpannerCqlSession.builder()
.setDatabaseUri(databaseUri)
.addContactPoint(new InetSocketAddress("localhost", 9042))
.withLocalDatacenter("datacenter1")
.build();
SpannerCqlSession.builder() ব্যবহার করে CqlSession ইনস্ট্যানশিয়েট করার মাধ্যমে এবং সঠিক databaseUri প্রদান করলে, আপনার অ্যাপ্লিকেশনটি এখন স্প্যানার ক্যাসান্ড্রা ক্লায়েন্টের মাধ্যমে আপনার টার্গেট স্প্যানার ডেটাবেসের সাথে একটি সংযোগ স্থাপন করবে। এই গুরুত্বপূর্ণ পরিবর্তনটি নিশ্চিত করে যে আপনার অ্যাপ্লিকেশন দ্বারা সম্পাদিত পরবর্তী সমস্ত রিড এবং রাইট অপারেশন স্প্যানারের মাধ্যমে পরিচালিত ও পরিবেশিত হবে, যা কার্যকরভাবে প্রাথমিক কাটওভারটি সম্পন্ন করে। এই পর্যায়ে, আপনার অ্যাপ্লিকেশনটি স্প্যানারের স্কেলেবিলিটি এবং নির্ভরযোগ্যতার দ্বারা চালিত হয়ে প্রত্যাশিতভাবে কাজ করতে থাকবে।
নেপথ্যে: স্প্যানার ক্যাসান্ড্রা ক্লায়েন্ট কীভাবে কাজ করে
স্প্যানার ক্যাসান্ড্রা ক্লায়েন্ট একটি স্থানীয় TCP প্রক্সি হিসেবে কাজ করে, যা কোনো ড্রাইভার বা ক্লায়েন্ট টুল দ্বারা প্রেরিত কাঁচা ক্যাসান্ড্রা প্রোটোকল বাইটগুলোকে গ্রহণ করে। এরপর এটি স্প্যানারের সাথে যোগাযোগের জন্য এই বাইটগুলোকে প্রয়োজনীয় মেটাডেটাসহ gRPC মেসেজে রূপান্তরিত করে। স্প্যানার থেকে প্রাপ্ত প্রতিক্রিয়াগুলোকে পুনরায় ক্যাসান্ড্রা ওয়্যার ফরম্যাটে অনুবাদ করে মূল ড্রাইভার বা টুলের কাছে ফেরত পাঠানো হয়।

একবার আপনি নিশ্চিত হয়ে গেলে যে স্প্যানার সমস্ত ট্র্যাফিক সঠিকভাবে পরিচালনা করছে, আপনি অবশেষে যা করতে পারবেন:
- মূল ক্যাসান্ড্রা ক্লাস্টারটি নিষ্ক্রিয় করুন।
৮. পরিষ্কার করা (ঐচ্ছিক)
পরিষ্কার করার জন্য, ক্লাউড কনসোলের স্প্যানার বিভাগে যান এবং কোডল্যাবে তৈরি করা cassandra-adapter-demo ইনস্ট্যান্সটি ডিলিট করে দিন।

ক্যাসান্ড্রা ডাটাবেস মুছে ফেলুন (যদি স্থানীয়ভাবে ইনস্টল করা থাকে বা সংরক্ষিত থাকে)।
আপনি যদি এখানে তৈরি করা Compute Engine VM-এর বাইরে Cassandra ইনস্টল করে থাকেন, তাহলে ডেটা মুছে ফেলতে বা Cassandra আনইনস্টল করতে উপযুক্ত পদক্ষেপগুলি অনুসরণ করুন।
৯. অভিনন্দন!
এরপর কী?
- স্প্যানার সম্পর্কে আরও জানুন।
- ক্যাসান্ড্রা ইন্টারফেস সম্পর্কে আরও জানুন।