1. ওভারভিউ
ক্লাউড স্প্যানার একটি অত্যন্ত-উপলব্ধ, অনুভূমিকভাবে স্কেলযোগ্য, এবং বহু-আঞ্চলিক RDBMS৷ এই কোড ল্যাবটি ক্লাউড স্প্যানারের একটি ক্ষুদ্রতম উদাহরণ ব্যবহার করবে, কিন্তু আপনার হয়ে গেলে এটি বন্ধ করতে ভুলবেন না!
আপনি কি শিখবেন
- স্প্রিং বুট দিয়ে ডেটা সংরক্ষণ এবং পুনরুদ্ধার করতে ক্লাউড স্প্যানার কীভাবে ব্যবহার করবেন
আপনি কি প্রয়োজন হবে
- একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্প
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার করবেন?
আপনি Google ক্লাউড প্ল্যাটফর্ম পরিষেবাগুলি ব্যবহার করার বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ (যদি আপনার ইতিমধ্যেই একটি Gmail বা G Suite অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)
প্রজেক্ট আইডিটি মনে রাখবেন, সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID
হিসাবে উল্লেখ করা হবে।
- এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷
এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। "ক্লিনিং আপ" বিভাগে যে কোনও নির্দেশাবলী অনুসরণ করতে ভুলবেন না যা আপনাকে কীভাবে সংস্থানগুলি বন্ধ করতে হবে তা পরামর্শ দেয় যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন৷ Google ক্লাউডের নতুন ব্যবহারকারীরা $300USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন .
আপনি যদি আগে কখনও ক্লাউড শেল শুরু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রীন (ভাঁজের নীচে) উপস্থাপন করা হবে যা বর্ণনা করে। যদি এটি হয়, তবে চালিয়ে যান ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এককালীন স্ক্রীনটি দেখতে কেমন তা এখানে রয়েছে:
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, শুধুমাত্র একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং প্রকল্পটি ইতিমধ্যে আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
3. ক্লাউড স্প্যানার শুরু করুন
gcloud CLI ব্যবহার করে Cloud Spanner API সক্ষম করুন:
gcloud services enable spanner.googleapis.com
একটি ক্লাউড স্প্যানার উদাহরণ তৈরি করুন:
gcloud spanner instances create spanner-instance \ --config=regional-us-central1 \ --nodes=1 --description="A Spanner Instance"
উদাহরণের মধ্যে একটি ডাটাবেস তৈরি করুন:
gcloud spanner databases create orders \ --instance=spanner-instance
ডেটা স্কিমা বর্ণনা করতে একটি schema.ddl
ফাইল তৈরি করুন:
cat << EOF > schema.ddl CREATE TABLE orders ( order_id STRING(36) NOT NULL, description STRING(255), creation_timestamp TIMESTAMP, ) PRIMARY KEY (order_id); CREATE TABLE order_items ( order_id STRING(36) NOT NULL, order_item_id STRING(36) NOT NULL, description STRING(255), quantity INT64, ) PRIMARY KEY (order_id, order_item_id), INTERLEAVE IN PARENT orders ON DELETE CASCADE; EOF
ক্লাউড স্প্যানার ডাটাবেসে স্কিমা প্রয়োগ করুন:
gcloud spanner databases ddl update orders \ --instance=spanner-instance \ --ddl="$(<schema.ddl)"
4. একটি নতুন স্প্রিং বুট জাভা অ্যাপ্লিকেশন বুটস্ট্র্যাপ করুন
ক্লাউড শেল পরিবেশ থেকে, একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন শুরু এবং বুটস্ট্র্যাপ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
$ curl https://start.spring.io/starter.tgz \ -d packaging=jar \ -d dependencies=cloud-gcp,web,lombok \ -d baseDir=spanner-example \ -d type=maven-project \ -d bootVersion=3.2.6 | tar -xzvf - $ cd spanner-example
এটি একটি নতুন Maven প্রকল্পের সাথে একটি নতুন spanner-example/
ডিরেক্টরি তৈরি করবে, সাথে Maven এর pom.xml
, একটি Maven র্যাপার, সেইসাথে একটি অ্যাপ্লিকেশন এন্ট্রিপয়েন্ট।
pom.xml
ফাইলে, স্প্রিং ডেটা ক্লাউড স্প্যানার স্টার্টার যোগ করুন।
spanner-example/pom.xml
<project>
...
<dependencies>
...
<!-- Add Spring Cloud GCP Spanner Starter -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-spanner</artifactId>
</dependency>
...
</dependencies>
...
</project>
application.properties-এ, স্প্যানার ডাটাবেস সংযোগ তথ্য কনফিগার করুন:
spanner-example/src/main/resources/application.properties
spring.cloud.gcp.spanner.instance-id=spanner-instance spring.cloud.gcp.spanner.database=orders
নিশ্চিত করুন যে JAVA_HOME
সঠিক সংস্করণে সেট করা আছে:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
আপনার Maven কনফিগারেশন সঠিক কিনা তা নিশ্চিত করতে অ্যাপটি পুনরায় তৈরি করুন:
./mvnw package
5. সত্তা তৈরি করুন
স্প্রিং ক্লাউড জিসিপি-এর স্প্রিং ডেটা স্প্যানার সমর্থনের সাথে, আপনি স্প্রিং ডেটা ব্যবহার করে সহজেই একটি জাভা অবজেক্ট তৈরি করতে পারেন এবং একটি স্প্যানার টেবিলে ইডিওম্যাটিক ORM ম্যাপিং করতে পারেন৷
প্রথমে একটি অর্ডার আইটেম ক্লাস তৈরি করুন।
spanner-example/src/main/java/com/example/demo/OrderItem.java
package com.example.demo;
import com.google.cloud.spring.data.spanner.core.mapping.Column;
import com.google.cloud.spring.data.spanner.core.mapping.PrimaryKey;
import com.google.cloud.spring.data.spanner.core.mapping.Table;
@Table(name="order_items")
@Data
class OrderItem {
@PrimaryKey(keyOrder = 1)
@Column(name="order_id")
private String orderId;
@PrimaryKey(keyOrder = 2)
@Column(name="order_item_id")
private String orderItemId;
private String description;
private Long quantity;
}
স্প্যানারে পিতামাতা/সন্তানের সম্পর্কের জন্য, আপনার একটি যৌগিক প্রাথমিক কী ব্যবহার করা উচিত। এই উদাহরণে, যৌগিক কী হল order_id
, এবং order_item_id
।
পরবর্তী, একটি অর্ডার ক্লাস তৈরি করুন:
spanner-example/src/main/java/com/example/demo/Order.java
package com.example.demo;
import java.time.LocalDateTime;
import java.util.List;
import lombok.Data;
import com.google.cloud.spring.data.spanner.core.mapping.Column;
import com.google.cloud.spring.data.spanner.core.mapping.Interleaved;
import com.google.cloud.spring.data.spanner.core.mapping.PrimaryKey;
import com.google.cloud.spring.data.spanner.core.mapping.Table;
@Table(name="orders")
@Data
public class Order {
@PrimaryKey
@Column(name="order_id")
private String id;
private String description;
@Column(name="creation_timestamp")
private LocalDateTime timestamp;
@Interleaved
private List<OrderItem> items;
}
অর্ডার আইটেমগুলির সাথে এক থেকে একাধিক সম্পর্ক তৈরি করতে এই ক্লাসটি @Interleaved
টীকা ব্যবহার করে।
6. OrderRepository ইন্টারফেস তৈরি করুন
নিম্নলিখিত বিষয়বস্তু দিয়ে OrderRepository
ক্লাস তৈরি করুন:
spanner-example/src/main/java/com/example/demo/OrderRepository.java
package com.example.demo;
import com.google.cloud.spring.data.spanner.repository.SpannerRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface OrderRepository extends SpannerRepository<Order, String> {
}
ইন্টারফেসটি SpannerRepository<Order, String>
কে প্রসারিত করে যেখানে Order
হল ডোমেইন ক্লাস এবং String
হল প্রাথমিক কী প্রকার। স্প্রিং ডেটা স্বয়ংক্রিয়ভাবে এই ইন্টারফেসের মাধ্যমে CRUD অ্যাক্সেস প্রদান করবে এবং আপনাকে কোনো অতিরিক্ত কোড তৈরি করতে হবে না।
7. মৌলিক অপারেশনের জন্য একটি REST কন্ট্রোলার তৈরি করুন
প্রধান অ্যাপ্লিকেশন DemoApplication
ক্লাস খুলুন এবং এটির মত দেখতে এটি পরিবর্তন করুন:
spanner-example/src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
import java.time.LocalDateTime;
import java.util.UUID;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@RestController
class OrderController {
private final OrderRepository orderRepository;
OrderController(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
@GetMapping("/api/orders/{id}")
public Order getOrder(@PathVariable String id) {
return orderRepository.findById(id)
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, id + " not found"));
}
@PostMapping("/api/orders")
public String createOrder(@RequestBody Order order) {
// Spanner currently does not auto generate IDs
// Generate UUID on new orders
order.setId(UUID.randomUUID().toString());
order.setTimestamp(LocalDateTime.now());
order.getItems().forEach(item -> {
// Assign parent ID, and also generate child ID
item.setOrderId(order.getId());
item.setOrderItemId(UUID.randomUUID().toString());
});
Order saved = orderRepository.save(order);
return saved.getId();
}
}
8. অ্যাপ্লিকেশন চালান
পুনর্নির্মাণ এবং অ্যাপ্লিকেশন চালান!
./mvnw spring-boot:run
এটি সঠিকভাবে শুরু হওয়া উচিত এবং পোর্ট 8080 এ শুনতে হবে।
আপনি শেষ পয়েন্টে একটি অর্ডার রেকর্ড পোস্ট করতে পারেন:
curl -H"Content-Type: application/json" -d'{"description": "My orders", "items": [{"description": "Android Phone", "quantity": "1"}]}' \ http://localhost:8080/api/orders
এটি অর্ডারের UUID
দিয়ে সাড়া দিতে হবে।
তারপর আপনি UUID
দিয়ে অর্ডারটি পুনরুদ্ধার করতে পারেন:
curl http://localhost:8080/api/orders/REPLACE_WITH_ORDER_UUID
ক্লাউড স্প্যানারে ডেটা কীভাবে সংরক্ষণ করা হয় তা দেখতে, ক্লাউড কনসোলে যান এবং স্প্যানার → স্প্যানার ইনস্ট্যান্স → অর্ডার ডাটাবেস → অর্ডার টেবিল → ডেটাতে নেভিগেট করুন।
9. পরিষ্কার করুন
পরিষ্কার করতে, স্প্যানার ইনস্ট্যান্সটি মুছুন যাতে এটি আর চার্জ বহন না করে!
gcloud spanner instances delete spanner-instance -q
10. অভিনন্দন!
এই কোডল্যাবে, আপনি একটি ইন্টারেক্টিভ CLI অ্যাপ্লিকেশন তৈরি করেছেন যা ক্লাউড স্প্যানার থেকে ডেটা সংরক্ষণ এবং পুনরুদ্ধার করতে পারে!
আরও জানুন
- ক্লাউড স্প্যানার: https://cloud.google.com/spanner/
- GCP প্রকল্পে বসন্ত: https://googlecloudplatform.github.io/spring-cloud-gcp/reference/html/
- GCP GitHub সংগ্রহস্থলে বসন্ত: https://github.com/spring-cloud/spring-cloud-gcp
- Google ক্লাউড প্ল্যাটফর্মে জাভা: https://cloud.google.com/java/
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।