ক্লাউড ডেটাস্টোরের সাথে স্প্রিং বুট অ্যাপ্লিকেশন

1. ওভারভিউ

Google ক্লাউড ডেটাস্টোর হল একটি NoSQL ডকুমেন্ট ডাটাবেস যা স্বয়ংক্রিয় স্কেলিং, উচ্চ কার্যকারিতা এবং অ্যাপ্লিকেশন বিকাশের সহজতার জন্য তৈরি করা হয়েছে।

আপনি কি শিখবেন

  • স্প্রিং বুটে জাভা অবজেক্টগুলি সংরক্ষণ এবং পুনরুদ্ধার করতে ক্লাউড ডেটাস্টোর কীভাবে ব্যবহার করবেন

আপনি কি প্রয়োজন হবে

আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার করবেন?

শুধুমাত্র মাধ্যমে এটি পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন

আপনি Google ক্লাউড প্ল্যাটফর্ম পরিষেবাগুলি ব্যবহার করার বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত PROJECT_ID হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 853e55310c205094.png .

55efc1aaa7a4d3ad.png

যদি এটি আপনার প্রথমবার ক্লাউড শেল শুরু হয়, তাহলে এটি কী তা বর্ণনা করে আপনাকে একটি মধ্যবর্তী স্ক্রীন উপস্থাপন করা হবে। যদি আপনি একটি মধ্যবর্তী স্ক্রীনের সাথে উপস্থাপিত হন, তবে চালিয়ে যান ক্লিক করুন।

9c92662c6a846a5c.png

ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷

9f0e51b578fecce5.png

এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণীকৃত হয়েছেন এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

3. ক্লাউড ডেটাস্টোর শুরু করুন

GCP কনসোলে , মেনুতে নেভিগেট করুন -> ডেটাস্টোর (স্টোরেজ বিভাগে) অথবা এখানে ক্লিক করুন

আপনি যদি বর্তমান প্রকল্পে ডেটাস্টোর ব্যবহার না করে থাকেন তবে আপনি "একটি ক্লাউড ফায়ারস্টোর মোড নির্বাচন করুন" স্ক্রীন দেখতে পাবেন। "ডেটাস্টোর মোড" বিকল্পটি নির্বাচন করুন।

f938295c7ff297f4.png

এর পরে, আপনি "আপনার ডেটা কোথায় সংরক্ষণ করবেন তা চয়ন করুন" স্ক্রীন দেখতে পাবেন। us-east1 বা অন্য কোনো আঞ্চলিক অবস্থান নির্বাচন করুন এবং "ডেটাবেস তৈরি করুন" এ ক্লিক করুন:

916ac84fec10fae7.png

4. একটি নতুন স্প্রিং বুট জাভা অ্যাপ্লিকেশন বুটস্ট্র্যাপ করুন

CloudShell পরিবেশ থেকে, একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন শুরু এবং বুটস্ট্র্যাপ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

$ curl https://start.spring.io/starter.tgz \
  -d packaging=war \
  -d dependencies=cloud-gcp \
  -d type=maven-project \
  -d baseDir=datastore-example \
  -d bootVersion=3.0.5 | tar -xzvf -

এটি Maven এর pom.xml , একটি Maven র‍্যাপার এবং একটি অ্যাপ্লিকেশন এন্ট্রিপয়েন্ট সহ একটি নতুন Maven প্রকল্প সহ একটি নতুন datastore-example/ ডিরেক্টরি তৈরি করবে।

আমাদের অ্যাপ্লিকেশন ব্যবহারকারীদের কমান্ড লিখতে এবং ফলাফল দেখতে একটি CLI প্রদান করবে। আমরা একটি বইয়ের প্রতিনিধিত্ব করার জন্য একটি ক্লাস তৈরি করব এবং তারপরে ডেটাস্টোর রিপোজিটরি ব্যবহার করে ক্লাউড ডেটাস্টোরে সংরক্ষণ করব।

আমাদের pom.xml এ আরও একটি প্রয়োজনীয় নির্ভরতা যোগ করতে হবে।

ক্লাউড শেল মেনু থেকে ওপেন এডিটর ক্লিক করে ওয়েব কোড এডিটর খুলুন।

6d823258c76a7452.png

সম্পাদক লোড হওয়ার পরে, Google ক্লাউড ডেটাস্টোর স্টার্টার এবং স্প্রিং শেল স্টার্টার নির্ভরতা যোগ করতে pom.xml ফাইলটি পরিবর্তন করুন:

pom.xml

<project>
  ...
  <dependencies>
        ...
        <!-- Add GCP Datastore Starter -->
        <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
        </dependency>

        <!-- Add Spring Shell Starter -->
        <dependency>
                <groupId>org.springframework.shell</groupId>
                <artifactId>spring-shell-starter</artifactId>
                <version>3.0.2</version>
        </dependency>

  </dependencies>
</project>

5. বইয়ের ক্লাস তৈরি করুন

সম্পাদক ব্যবহার করে, নিম্নলিখিত বিষয়বস্তু সহ Book ক্লাস তৈরি করুন:

datastore-example/src/main/java/com/example/demo/Book.java

package com.example.demo;

import com.google.cloud.spring.data.datastore.core.mapping.Entity;
import org.springframework.data.annotation.Id;

@Entity(name = "books")
public class Book {
  @Id
  Long id;

  String title;

  String author;

  int year;

  public Book(String title, String author, int year) {
    this.title = title;
    this.author = author;
    this.year = year;
  }

  public long getId() {
    return this.id;
  }

  @Override
  public String toString() {
    return "Book{" +
        "id=" + this.id +
        ", title='" + this.title + '\'' +
        ", author='" + this.author + '\'' +
        ", year=" + this.year +
        '}';
  }
}

আপনি দেখতে পাচ্ছেন, এটি একটি সাধারণ পোজো। ক্লাসটি @Entity এর সাথে টীকা করা হয়েছে যাতে বোঝা যায় যে এটি ডেটাস্টোরে সংরক্ষণ করা যেতে পারে এবং ধরনের নাম প্রদান করতে পারে (এসকিউএল ডাটাবেসে একটি সারণী হিসাবে মনে করুন, আরও বিশদ বিবরণের জন্য ডকুমেন্টেশন দেখুন)। সদয় নামটি ঐচ্ছিক - যদি এটি বাদ দেওয়া হয়, তাহলে শ্রেণীর নামের উপর ভিত্তি করে সদয় নাম তৈরি করা হবে।

মনে রাখবেন যে আমরা @Id এর সাথে id সম্পত্তি টীকা করেছি। এটি নির্দেশ করে যে আমরা এই ক্ষেত্রটিকে ডেটাস্টোর কী-এর শনাক্তকারী অংশ হিসাবে ব্যবহার করতে চাই। প্রতিটি ডেটাস্টোর সত্তার একটি শনাক্তকারী প্রয়োজন। সমর্থিত প্রকারগুলি হল String এবং Long

বস্তুর স্ট্রিং উপস্থাপনাকে আরও পাঠযোগ্য করার জন্য আমরা toString পদ্ধতিটি ওভাররাইড করি; আমরা তাদের প্রিন্ট আউট যখন এটি দরকারী হবে.

6. BookRepository ইন্টারফেস তৈরি করুন

নিম্নলিখিত বিষয়বস্তু সহ BookRepository ক্লাস তৈরি করুন:

datastore-example/src/main/java/com/example/demo/BookRepository.java

package com.example.demo;

import java.util.List;

import com.google.cloud.spring.data.datastore.repository.DatastoreRepository;


public interface BookRepository extends DatastoreRepository<Book, Long> {

  List<Book> findByAuthor(String author);

  List<Book> findByYearGreaterThan(int year);

  List<Book> findByAuthorAndYear(String author, int year);
}

ইন্টারফেসটি DatastoreRepository<Book, Long> কে প্রসারিত করে যেখানে Book হল ডোমেন ক্লাস এবং Long হল Id প্রকার। আমরা আমাদের সংগ্রহস্থলে তিনটি ক্যোয়ারী পদ্ধতি ঘোষণা করি যার জন্য বাস্তবায়নগুলি পর্দার আড়ালে স্বয়ংক্রিয়ভাবে তৈরি হয়।

প্রথমটি হল findByAuthor . আপনি অনুমান করতে পারেন, এই পদ্ধতির বাস্তবায়ন একটি ক্যোয়ারী চালাবে যা লেখক ক্ষেত্রের সমতার জন্য শর্ত ফিল্টারে একটি ব্যবহারকারী-প্রদত্ত মান ব্যবহার করবে।

findByYearGreaterThan পদ্ধতি একটি কোয়েরি চালায় যা ব্যবহারকারীর প্রদত্ত মানের চেয়ে বেশি বছরের ক্ষেত্রে ফিল্টার করে।

findByAuthorAndYear একটি ক্যোয়ারী চালায় যা এমন সত্তার সন্ধান করে যেখানে লেখক এবং বছরের ক্ষেত্রগুলি ব্যবহারকারীর প্রদত্ত মানগুলির সাথে মেলে।

7. ইন্টারেক্টিভ CLI অ্যাপ্লিকেশন তৈরি করুন

প্রধান অ্যাপ্লিকেশন DemoApplication ক্লাস খুলুন এবং এটির মত দেখতে এটি পরিবর্তন করুন:

datastore-example/src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

import java.util.List;

import com.google.common.collect.Lists;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;

@ShellComponent
@SpringBootApplication
public class DemoApplication {
  @Autowired
  BookRepository bookRepository;

  public static void main(String[] args) {
     SpringApplication.run(DemoApplication.class, args);
  }

  @ShellMethod("Saves a book to Cloud Datastore: save-book <title> <author> <year>")
  public String saveBook(String title, String author, int year) {
     Book savedBook = this.bookRepository.save(new Book(title, author, year));
     return savedBook.toString();
  }

  @ShellMethod("Loads all books")
  public String findAllBooks() {
     Iterable<Book> books = this.bookRepository.findAll();
     return Lists.newArrayList(books).toString();
  }

  @ShellMethod("Loads books by author: find-by-author <author>")
  public String findByAuthor(String author) {
     List<Book> books = this.bookRepository.findByAuthor(author);
     return books.toString();
  }

  @ShellMethod("Loads books published after a given year: find-by-year-after <year>")
  public String findByYearAfter(int year) {
     List<Book> books = this.bookRepository.findByYearGreaterThan(year);
     return books.toString();
  }

  @ShellMethod("Loads books by author and year: find-by-author-year <author> <year>")
  public String findByAuthorYear(String author, int year) {
     List<Book> books = this.bookRepository.findByAuthorAndYear(author, year);
     return books.toString();
  }

  @ShellMethod("Removes all books")
  public void removeAllBooks() {
     this.bookRepository.deleteAll();
  }
}

নোট করুন কিভাবে আমরা @ShellComponent দিয়ে ক্লাসটি টীকা করেছি। এটি স্প্রিংকে জানায় যে আমরা এই ক্লাসটি CLI কমান্ডের উত্স হিসাবে ব্যবহার করতে চাই। @ShellMethod এর সাথে টীকাকৃত পদ্ধতিগুলি আমাদের অ্যাপ্লিকেশনে CLI কমান্ড হিসাবে প্রকাশ করা হবে।

এখানে আমরা BookRepository ইন্টারফেসে ঘোষিত পদ্ধতিগুলি ব্যবহার করি: findByAuthor , findByYearGreaterThan , findByAuthorAndYear । এছাড়াও আমরা তিনটি বিল্ট-ইন পদ্ধতি ব্যবহার করি: save , findAll এবং deleteAll

আসুন saveBook পদ্ধতিটি দেখি। আমরা শিরোনাম, লেখক এবং বছরের জন্য ব্যবহারকারী-প্রদত্ত মান ব্যবহার করে একটি Book অবজেক্ট তৈরি করি। আপনি দেখতে পাচ্ছেন, আমরা একটি id মান প্রদান করি না, তাই এটি স্বয়ংক্রিয়ভাবে বরাদ্দ করা হবে এবং সংরক্ষণ করার সময় id ক্ষেত্রে বরাদ্দ করা হবে। save পদ্ধতিটি Book টাইপের একটি বস্তু গ্রহণ করে এবং ক্লাউড ডেটাস্টোরে সংরক্ষণ করে। এটি id ক্ষেত্র সহ সমস্ত ক্ষেত্র জনবহুল সহ একটি Book অবজেক্ট প্রদান করে। শেষ পর্যন্ত আমরা এই বস্তুর একটি স্ট্রিং উপস্থাপনা ফেরত.

বাকি পদ্ধতিগুলি একইভাবে কাজ করে: তারা উপযুক্ত সংগ্রহস্থল পদ্ধতিতে প্যারামিটারে পাস করাকে গ্রহণ করে এবং স্ট্রিংকৃত ফলাফল প্রদান করে।

8. অ্যাপ্লিকেশন চালান

অ্যাপ্লিকেশনটি তৈরি এবং শুরু করতে, প্রথমে নিশ্চিত করুন যে JAVA_HOME সঠিক সংস্করণে সেট করা আছে:

$ export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64

ক্লাউড শেল-এ এই কমান্ডটি চালান (প্রজেক্ট datastore-example/ যেখানে pom.xml অবস্থিত এর রুট থেকে):

$ ./mvnw spring-boot:run
export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64

একটি সফল বিল্ড স্টেজ পরে, বসন্ত লোগো প্রদর্শিত হবে এবং শেল প্রম্পট প্রদর্শিত হবে:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.5)



shell:>

এখন আপনি আমরা আগে সংজ্ঞায়িত কমান্ড দিয়ে পরীক্ষা করতে পারেন। কমান্ডের তালিকা দেখতে, সাহায্য কমান্ড ব্যবহার করুন:

shell:> help
...
find-all-books: Loads all books
find-by-author: Loads books by author: find-by-author <author>
find-by-author-year: Loads books by author and year: find-by-author-year <author> <year>
find-by-year-after: Loads books published after a given year: find-by-year-after <year>
remove-all-books: Removes all books
save-book: Saves a book to Cloud Datastore: save-book <title> <author> <year>

নিম্নলিখিত চেষ্টা করুন:

  1. save-book কমান্ড ব্যবহার করে কয়েকটি বই তৈরি করুন
  2. find-all-books কমান্ড ব্যবহার করে একটি অনুসন্ধান চালান
  3. নির্দিষ্ট লেখকের বই খুঁজুন: find-by-author <author>
  4. নির্দিষ্ট বছরের পরে প্রকাশিত বইগুলি খুঁজুন: find-by-year-after <year>
  5. নির্দিষ্ট লেখক এবং বছর দ্বারা বই খুঁজুন: find-by-author-year <author> <year>

9. ওয়েব ইন্টারফেস ব্যবহার করে ডেটাস্টোরে কী সংরক্ষিত আছে তা দেখুন

ক্লাউড ডেটাস্টোরে সত্তাগুলি কীভাবে সংরক্ষণ করা হয় তা দেখতে, GCP কনসোলে যান। প্রয়োজনে সদয় ক্ষেত্রে "বই" ইনপুট করুন।

5fab21a6c89f45a.png

10. পরিষ্কার করুন

পরিষ্কার করার জন্য, অ্যাপ্লিকেশন শেল থেকে যথাযথভাবে নামযুক্ত remove-all-books কমান্ড ব্যবহার করে সমস্ত বই সরিয়ে ফেলুন।

shell:> remove-all-books

অ্যাপ্লিকেশন থেকে প্রস্থান করতে quit কমান্ড ব্যবহার করুন, তারপর Ctrl+C

11. অভিনন্দন!

এই কোডল্যাবে, আপনি একটি ইন্টারেক্টিভ CLI অ্যাপ্লিকেশন তৈরি করেছেন যেটি ক্লাউড ডেটাস্টোর থেকে বস্তুগুলি সংরক্ষণ এবং পুনরুদ্ধার করতে পারে!

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।