ক্লাউড রান থেকে সম্পূর্ণরূপে পরিচালিত ডেটাবেসে সংযোগ করা হচ্ছে

1. সংক্ষিপ্ত বিবরণ

এই ল্যাবে, আপনি সার্ভারলেস ডাটাবেস (স্প্যানার এবং ফায়ারস্টোর) কে ক্লাউড রানে চলমান অ্যাপ্লিকেশনগুলির (গো এবং নোড.জেএস) সাথে একীভূত করবেন। সিম্বাল ইটস অ্যাপ্লিকেশনটিতে ক্লাউড রানে চলমান একাধিক পরিষেবা অন্তর্ভুক্ত রয়েছে। নিম্নলিখিত ধাপগুলিতে, আপনি ক্লাউড স্প্যানার রিলেশনাল ডাটাবেস এবং ক্লাউড ফায়ারস্টোর , একটি NoSQL ডকুমেন্ট ডাটাবেস ব্যবহার করার জন্য পরিষেবাগুলি কনফিগার করবেন। ডেটা স্তর এবং অ্যাপ্লিকেশন রানটাইমের জন্য সার্ভারলেস পণ্যগুলি ব্যবহার করে আপনি ওভারহেড সম্পর্কে চিন্তা করার পরিবর্তে আপনার অ্যাপ্লিকেশন তৈরিতে মনোনিবেশ করে সমস্ত অবকাঠামো ব্যবস্থাপনাকে বিমূর্ত করতে পারবেন।

২. তুমি যা শিখবে

এই ল্যাবে, আপনি নিম্নলিখিত কাজগুলি শিখবেন:

  • স্প্যানার ইন্টিগ্রেট করুন
  • স্প্যানার পরিচালিত পরিষেবাগুলি সক্ষম করুন
  • কোডে ইন্টিগ্রেট করুন
  • স্প্যানারের সাথে সংযোগকারী কোড স্থাপন করুন
  • ফায়ারস্টোর ইন্টিগ্রেট করুন
  • ফায়ারস্টোর পরিচালিত পরিষেবাগুলি সক্ষম করুন
  • কোডে ইন্টিগ্রেট করুন
  • ফায়ারস্টোরের সাথে সংযোগকারী কোড স্থাপন করুন

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

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

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

b35bf95b8bf3d5d8.png সম্পর্কে

a99b7ace416376c4.png সম্পর্কে

bd84a6d3004737c5.png সম্পর্কে

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

সেটআপ পরিবেশ

  1. একটি প্রকল্প আইডি ভেরিয়েবল তৈরি করুন
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export SPANNER_INSTANCE=inventory-instance
export SPANNER_DB=inventory-db
export REGION=us-east1
export SPANNER_CONNECTION_STRING=projects/$PROJECT_ID/instances/$SPANNER_INSTANCE/databases/$SPANNER_DB
  1. স্প্যানার, ক্লাউড রান, ক্লাউড বিল্ড এবং আর্টিফ্যাক্ট রেজিস্ট্রি API সক্ষম করুন
gcloud services enable \
     compute.googleapis.com \
     spanner.googleapis.com \
     run.googleapis.com \
     cloudbuild.googleapis.com \
     artifactregistry.googleapis.com \
     firestore.googleapis.com \
     appengine.googleapis.com \
     artifactregistry.googleapis.com
  1. সংগ্রহস্থলটি ক্লোন করুন
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
  1. ডিরেক্টরিতে নেভিগেট করুন
cd cymbal-eats/inventory-service/spanner

৪. একটি স্প্যানার ইনস্ট্যান্স তৈরি এবং কনফিগার করুন

স্প্যানার হল ইনভেন্টরি সার্ভিসেস ব্যাকএন্ড রিলেশনাল ডাটাবেস। আপনি নিম্নলিখিত ধাপগুলিতে একটি স্প্যানার ইনস্ট্যান্স, ডাটাবেস এবং স্কিমা তৈরি করবেন।

একটি উদাহরণ তৈরি করুন

  1. একটি ক্লাউড স্প্যানার ইনস্ট্যান্স তৈরি করুন
gcloud spanner instances create $SPANNER_INSTANCE --config=regional-${REGION} \
--description="Cymbal Menu Inventory" --nodes=1

উদাহরণ আউটপুট

Creating instance...done.   
  1. স্প্যানার ইনস্ট্যান্সটি সঠিকভাবে কনফিগার করা আছে কিনা তা যাচাই করুন।
gcloud spanner instances list

উদাহরণ আউটপুট

NAME: inventory-instance
DISPLAY_NAME: Cymbal Menu Inventory
CONFIG: regional-us-east1
NODE_COUNT: 1
PROCESSING_UNITS: 100
STATE: READY

একটি ডাটাবেস এবং স্কিমা তৈরি করুন

একটি নতুন ডাটাবেস তৈরি করুন এবং ডাটাবেস স্কিমা তৈরি করতে গুগল স্ট্যান্ডার্ড SQL এর ডেটা ডেফিনিশন ল্যাঙ্গুয়েজ (DDL) ব্যবহার করুন।

  1. একটি DDL ফাইল তৈরি করুন
echo "CREATE TABLE InventoryHistory (ItemRowID STRING (36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, Timestamp TIMESTAMP) PRIMARY KEY(ItemRowID)" >> table.ddl
  1. স্প্যানার ডাটাবেস তৈরি করুন
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl-file=table.ddl

উদাহরণ আউটপুট

Creating database...done.

ডাটাবেসের অবস্থা এবং স্কিমা যাচাই করুন

  1. ডাটাবেসের অবস্থা দেখুন
gcloud spanner databases describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE

উদাহরণ আউটপুট

createTime: '2022-04-22T15:11:33.559300Z'
databaseDialect: GOOGLE_STANDARD_SQL
earliestVersionTime: '2022-04-22T15:11:33.559300Z'
encryptionInfo:
- encryptionType: GOOGLE_DEFAULT_ENCRYPTION
name: projects/cymbal-eats-7-348013/instances/menu-inventory/databases/menu-inventory
state: READY
versionRetentionPeriod: 1h
  1. ডাটাবেসের স্কিমা দেখুন
gcloud spanner databases ddl describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE

উদাহরণ আউটপুট

CREATE TABLE InventoryHistory (
  ItemRowID STRING(36) NOT NULL,
  ItemID INT64 NOT NULL,
  InventoryChange INT64,
  TimeStamp TIMESTAMP,
) PRIMARY KEY(ItemRowID);

৫. স্প্যানার ইন্টিগ্রেটিং

এই বিভাগে, আপনি শিখবেন কিভাবে আপনার অ্যাপ্লিকেশনে স্প্যানার ইন্টিগ্রেট করবেন। এছাড়াও, SQL স্প্যানার ক্লায়েন্ট লাইব্রেরি , JDBC ড্রাইভার , R2DBC ড্রাইভার , REST API এবং RPC API প্রদান করে, যা আপনাকে যেকোনো অ্যাপ্লিকেশনে স্প্যানার ইন্টিগ্রেট করতে দেয়।

পরবর্তী বিভাগে, আপনি Spanner-এ ডেটা ইনস্টল, প্রমাণীকরণ এবং পরিবর্তন করতে Go ক্লায়েন্ট লাইব্রেরি ব্যবহার করবেন।

ক্লায়েন্ট লাইব্রেরি ইনস্টল করা হচ্ছে

ক্লাউড স্প্যানার ক্লায়েন্ট লাইব্রেরি আপনার পরিষেবা অ্যাকাউন্টের শংসাপত্রগুলি খুঁজে পেতে অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র (ADC) ব্যবহার করে স্বয়ংক্রিয়ভাবে ক্লাউড স্প্যানারের সাথে সংহত করা সহজ করে তোলে।

প্রমাণীকরণ সেট আপ করুন

গুগল ক্লাউড সিএলআই এবং গুগল ক্লাউড ক্লায়েন্ট লাইব্রেরিগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করে যে তারা কখন গুগল ক্লাউডে চলছে এবং বর্তমান ক্লাউড রান সংস্করণের রানটাইম পরিষেবা অ্যাকাউন্ট ব্যবহার করে। এই কৌশলটিকে অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র বলা হয় এবং এটি একাধিক পরিবেশে কোড পোর্টেবিলিটি সক্ষম করে।

তবে, ডিফল্ট পরিষেবা অ্যাকাউন্টের পরিবর্তে একটি ব্যবহারকারী-পরিচালিত পরিষেবা অ্যাকাউন্ট বরাদ্দ করে একটি ডেডিকেটেড পরিচয় তৈরি করা ভাল।

  1. পরিষেবা অ্যাকাউন্টে স্প্যানার ডেটাবেস অ্যাডমিনের ভূমিকা প্রদান করুন
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/spanner.databaseAdmin"

উদাহরণ আউটপুট

Updated IAM policy for project [cymbal-eats-6422-3462].
[...]

ক্লায়েন্ট লাইব্রেরি ব্যবহার করা

স্প্যানার ক্লায়েন্ট লাইব্রেরিগুলি স্প্যানারের সাথে একীভূত হওয়ার জটিলতাগুলি সারাংশ করে এবং অনেক জনপ্রিয় প্রোগ্রামিং ভাষায় উপলব্ধ।

একটি স্প্যানার ক্লায়েন্ট তৈরি করুন

স্প্যানার ক্লায়েন্ট হল ক্লাউড স্প্যানার ডাটাবেসে ডেটা পড়ার এবং লেখার জন্য একটি ক্লায়েন্ট। একটি ক্লায়েন্ট একই সাথে ব্যবহার করা নিরাপদ, এর ক্লোজ পদ্ধতি ব্যতীত।

নিচের স্নিপেটটি একটি স্প্যানার ক্লায়েন্ট তৈরি করে

main.go সম্পর্কে

var dataClient *spanner.Client
...
dataClient, err = spanner.NewClient(ctx, databaseName)

আপনি একটি ক্লায়েন্টকে একটি ডাটাবেস সংযোগ হিসেবে ভাবতে পারেন: ক্লাউড স্প্যানারের সাথে আপনার সমস্ত মিথস্ক্রিয়া একটি ক্লায়েন্টের মাধ্যমেই করতে হবে। সাধারণত আপনার অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে আপনি একটি ক্লায়েন্ট তৈরি করেন এবং তারপরে আপনি সেই ক্লায়েন্টটিকে পুনরায় ব্যবহার করে লেনদেন পড়তে, লিখতে এবং সম্পাদন করতে পারেন। প্রতিটি ক্লায়েন্ট ক্লাউড স্প্যানারের রিসোর্স ব্যবহার করে।

ডেটা পরিবর্তন করুন

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

এই ল্যাবে, আপনি স্প্যানারে ডেটা পরিবর্তন করতে মিউটেশন ব্যবহার করবেন।

স্প্যানারে মিউটেশন

মিউটেশন হলো মিউটেশন অপারেশনের জন্য একটি ধারক। মিউটেশন হল ক্লাউড স্প্যানার ডাটাবেসের বিভিন্ন সারি এবং টেবিলে পরমাণুভাবে প্রয়োগ করা সন্নিবেশ, আপডেট এবং মুছে ফেলার একটি ক্রম।

main.go সম্পর্কে

m := []*spanner.Mutation{}

m = append(m, spanner.Insert(
        "inventoryHistory",
         inventoryHistoryColumns,
        []interface{}{uuid.New().String(), element.ItemID, element.InventoryChange, time.Now()}))

কোডের স্নিপেট ইনভেন্টরি ইতিহাস টেবিলে একটি নতুন সারি সন্নিবেশ করায়।

স্থাপন এবং পরীক্ষা

এখন যেহেতু স্প্যানার কনফিগার করা হয়েছে এবং আপনি মূল কোড উপাদানগুলি পর্যালোচনা করেছেন, অ্যাপ্লিকেশনটি ক্লাউড রানে স্থাপন করুন।

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

ক্লাউড রান একটি মাত্র কমান্ডের মাধ্যমে স্বয়ংক্রিয়ভাবে আপনার কোড তৈরি, পুশ এবং স্থাপন করতে পারে। নিম্নলিখিত কমান্ডে, আপনি run সার্ভিসে deploy কমান্ডটি কল করবেন, যেখানে রানিং অ্যাপ্লিকেশন দ্বারা ব্যবহৃত ভেরিয়েবলগুলি যেমন SPANNER_CONNECTION_STRING যা আপনি আগে তৈরি করেছিলেন তা পাস করবেন।

  1. ওপেন টার্মিনাল ক্লিক করুন
  2. ক্লাউড রানে ইনভেন্টরি পরিষেবা স্থাপন করুন
gcloud run deploy inventory-service \
    --source . \
    --region $REGION \
    --update-env-vars SPANNER_CONNECTION_STRING=$SPANNER_CONNECTION_STRING \
    --allow-unauthenticated \
    --project=$PROJECT_ID \
    --quiet

উদাহরণ আউটপুট

Service [inventory-service] revision [inventory-service-00001-sug] has been deployed and is serving 100 percent of traffic.
Service URL: https://inventory-service-ilwytgcbca-uk.a.run.app
  1. পরিষেবা URL সংরক্ষণ করুন
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")

ক্লাউড রান অ্যাপ্লিকেশনটি পরীক্ষা করুন

একটি আইটেম ঢোকান

  1. ক্লাউডশেলে, নিম্নলিখিত কমান্ডটি প্রবেশ করান।
POST_URL=$INVENTORY_SERVICE_URL/updateInventoryItem
curl -i -X POST ${POST_URL} \
--header 'Content-Type: application/json' \
--data-raw '[
    {
        "itemID": 1,
        "inventoryChange": 5
    }
]'

উদাহরণ আউটপুট

HTTP/2 200
access-control-allow-origin: *
content-type: application/json
x-cloud-trace-context: 10c32f0863d26521497dc26e86419f13;o=1
date: Fri, 22 Apr 2022 21:41:38 GMT
server: Google Frontend
content-length: 2

OK

একটি আইটেম জিজ্ঞাসা করুন

  1. ইনভেন্টরি পরিষেবাটি জিজ্ঞাসা করুন
GET_URL=$INVENTORY_SERVICE_URL/getAvailableInventory
curl -i ${GET_URL}

উদাহরণ প্রতিক্রিয়া

HTTP/2 200
access-control-allow-origin: *
content-type: text/plain; charset=utf-8
x-cloud-trace-context: b94f921e4c2ae90210472c88eb05ace8;o=1
date: Fri, 22 Apr 2022 21:45:50 GMT
server: Google Frontend
content-length: 166

[{"ItemID":1,"Inventory":5}]

৬. স্প্যানার ধারণা

ক্লাউড স্প্যানার ঘোষণামূলক SQL স্টেটমেন্ট ব্যবহার করে তার ডাটাবেসগুলি অনুসন্ধান করে। SQL স্টেটমেন্টগুলি ফলাফল কীভাবে প্রাপ্ত হবে তা বর্ণনা না করেই ব্যবহারকারী কী চায় তা নির্দেশ করে।

  1. টার্মিনালে, পূর্বে তৈরি রেকর্ডের জন্য টেবিলটি জিজ্ঞাসা করতে এই কমান্ডটি প্রবেশ করান।
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM InventoryHistory WHERE ItemID=1'

উদাহরণ আউটপুট

ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp: 

কোয়েরি এক্সিকিউশন প্ল্যান

একটি কোয়েরি এক্সিকিউশন প্ল্যান হল ফলাফল পেতে স্প্যানার যে ধাপগুলি ব্যবহার করে তার একটি সিরিজ। একটি নির্দিষ্ট SQL স্টেটমেন্টের ফলাফল অর্জনের বিভিন্ন উপায় থাকতে পারে। কোয়েরি এক্সিকিউশন প্ল্যানগুলি কনসোল এবং ক্লায়েন্ট লাইব্রেরিতে অ্যাক্সেসযোগ্য। স্প্যানার কীভাবে SQL কোয়েরিগুলি পরিচালনা করে তা দেখতে:

  1. কনসোলে, ক্লাউড স্প্যানার ইনস্ট্যান্স পৃষ্ঠাটি খুলুন।
  2. ক্লাউড স্প্যানার ইনস্ট্যান্সে যান
  3. ক্লাউড স্প্যানার ইনস্ট্যান্সের নামে ক্লিক করুন। ডাটাবেস বিভাগ থেকে, আপনি যে ডাটাবেসটি অনুসন্ধান করতে চান তা নির্বাচন করুন।
  4. কোয়েরি-তে ক্লিক করুন।
  5. কোয়েরি এডিটরে নিম্নলিখিত কোয়েরিটি লিখুন
SELECT * FROM InventoryHistory WHERE ItemID=1
  1. RUN এ ক্লিক করুন
  2. ব্যাখ্যা ক্লিক করুন

ক্লাউড কনসোল আপনার প্রশ্নের জন্য একটি ভিজ্যুয়াল এক্সিকিউশন প্ল্যান প্রদর্শন করে।

149f8bae468f8b34.png সম্পর্কে

কোয়েরি অপ্টিমাইজার

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

ক্লাউড স্প্যানার নতুন কোয়েরি অপ্টিমাইজার সংস্করণ হিসেবে অপ্টিমাইজার আপডেটগুলি চালু করে। ডিফল্টরূপে, প্রতিটি ডাটাবেস সংস্করণটি প্রকাশের 30 দিনের মধ্যে অপ্টিমাইজারের সর্বশেষ সংস্করণ ব্যবহার শুরু করে।

gcloud spanner-এ একটি কোয়েরি চালানোর সময় ব্যবহৃত সংস্করণটি দেখতে, –query-mode ফ্ল্যাগটি PROFILE-তে সেট করুন।

  1. অপ্টিমাইজার সংস্করণটি দেখতে নিম্নলিখিত কমান্ডটি প্রবেশ করান
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'

উদাহরণ আউটপুট

TOTAL_ELAPSED_TIME: 6.18 msecs
CPU_TIME: 5.17 msecs
ROWS_RETURNED: 1
ROWS_SCANNED: 1
OPTIMIZER_VERSION: 3
 RELATIONAL Distributed Union
 (1 execution, 0.11 msecs total latency)
 subquery_cluster_node: 1
    |
    +- RELATIONAL Distributed Union
    |  (1 execution, 0.09 msecs total latency)
    |  call_type: Local, subquery_cluster_node: 2
    |   |
    |   \- RELATIONAL Serialize Result
    |      (1 execution, 0.08 msecs total latency)
    |       |
    |       +- RELATIONAL Scan
    |       |  (1 execution, 0.08 msecs total latency)
    |       |  Full scan: true, scan_target: InventoryHistory, scan_type: TableScan
    |       |   |
    |       |   +- SCALAR Reference
    |       |   |  ItemRowID
    |       |   |
    |       |   +- SCALAR Reference
    |       |   |  ItemID
    |       |   |
    |       |   +- SCALAR Reference
    |       |   |  InventoryChange
    |       |   |
    |       |   \- SCALAR Reference
    |       |      Timestamp
    |       |
    |       +- SCALAR Reference
    |       |  $ItemRowID
    |       |
    |       +- SCALAR Reference
    |       |  $ItemID
    |       |
    |       +- SCALAR Reference
    |       |  $InventoryChange
    |       |
    |       \- SCALAR Reference
    |          $Timestamp
    |
    \- SCALAR Constant
       true

ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:

অপ্টিমাইজার সংস্করণ আপডেট করুন

এই ল্যাবের সময়ে সর্বশেষ সংস্করণটি হল সংস্করণ ৪। এরপর, আপনি কোয়েরি অপ্টিমাইজারের জন্য সংস্করণ ৪ ব্যবহার করার জন্য স্প্যানার টেবিলটি আপডেট করবেন।

  1. অপ্টিমাইজার আপডেট করুন
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl='ALTER DATABASE InventoryHistory
SET OPTIONS (optimizer_version = 4)'

উদাহরণ আউটপুট

Schema updating...done. 
  1. অপ্টিমাইজার সংস্করণ আপডেট দেখতে নিম্নলিখিত কমান্ডটি প্রবেশ করান
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'

উদাহরণ আউটপুট

TOTAL_ELAPSED_TIME: 8.57 msecs
CPU_TIME: 8.54 msecs
ROWS_RETURNED: 1
ROWS_SCANNED: 1
OPTIMIZER_VERSION: 4
[...]

মেট্রিক্স এক্সপ্লোরারে কোয়েরি অপ্টিমাইজার সংস্করণটি ভিজ্যুয়ালাইজ করুন

আপনার ডাটাবেস ইনস্ট্যান্সের জন্য কোয়েরির সংখ্যা কল্পনা করতে আপনি ক্লাউড কনসোলে মেট্রিক্স এক্সপ্লোরার ব্যবহার করতে পারেন। প্রতিটি ডাটাবেসে কোন অপ্টিমাইজার সংস্করণ ব্যবহার করা হচ্ছে তা আপনি দেখতে পারবেন।

  1. ক্লাউড কনসোলের মনিটরিং-এ যান এবং বাম দিকের মেনুতে মেট্রিক্স এক্সপ্লোরার নির্বাচন করুন।
  2. রিসোর্স টাইপ ক্ষেত্রে, ক্লাউড স্প্যানার ইনস্ট্যান্স নির্বাচন করুন।
  3. মেট্রিক ক্ষেত্রে, প্রশ্নের সংখ্যা নির্বাচন করুন এবং প্রয়োগ করুন।
  4. গ্রুপ বাই ফিল্ডে, ডাটাবেস, অপ্টিমাইজার_ভার্সন এবং স্ট্যাটাস নির্বাচন করুন।

581b859c25790b21.png সম্পর্কে

৭. একটি ফায়ারস্টোর ডাটাবেস তৈরি এবং কনফিগার করুন

ফায়ারস্টোর হল একটি NoSQL ডকুমেন্ট ডাটাবেস যা স্বয়ংক্রিয় স্কেলিং, উচ্চ কর্মক্ষমতা এবং অ্যাপ্লিকেশন ডেভেলপমেন্টের সহজতার জন্য তৈরি। যদিও ফায়ারস্টোর ইন্টারফেসে ঐতিহ্যবাহী ডাটাবেসের মতো অনেক বৈশিষ্ট্য রয়েছে, তবুও একটি NoSQL ডাটাবেস ডেটা অবজেক্টের মধ্যে সম্পর্ক বর্ণনা করার ক্ষেত্রে তাদের থেকে আলাদা।

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

6843abaf4263e112.png সম্পর্কে

৮. ফায়ারস্টোর ধারণা

ডেটা মডেল

একটি ফায়ারস্টোর ডাটাবেস সংগ্রহ এবং নথি দিয়ে তৈরি।

b60acd63d4793a6c.png সম্পর্কে

কাগজপত্র

প্রতিটি নথিতে কী-মান জোড়ার একটি সেট থাকে। ফায়ারস্টোর ছোট নথির বৃহৎ সংগ্রহ সংরক্ষণের জন্য অপ্টিমাইজ করা হয়েছে।

5571cb2f261d2dbe.png সম্পর্কে

সংগ্রহ

আপনাকে অবশ্যই সমস্ত নথি সংগ্রহে সংরক্ষণ করতে হবে। নথিতে উপ-সংগ্রহ এবং নেস্টেড অবজেক্ট থাকতে পারে, যার মধ্যে স্ট্রিং-এর মতো আদিম ক্ষেত্র বা তালিকার মতো জটিল অবজেক্ট অন্তর্ভুক্ত থাকতে পারে।

5811378cb721e5ec.png সম্পর্কে

একটি ফায়ারস্টোর ডাটাবেস তৈরি করুন

  1. ফায়ারস্টোর ডাটাবেস তৈরি করুন
gcloud firestore databases create --location=$REGION

উদাহরণ আউটপুট

Success! Selected Google Cloud Firestore Native database for cymbal-eats-6422-3462

৯. আপনার অ্যাপ্লিকেশনে ফায়ারস্টোরকে একীভূত করা

এই বিভাগে, আপনি পরিষেবা অ্যাকাউন্ট আপডেট করবেন, ফায়ারস্টোর অ্যাক্সেস পরিষেবা অ্যাকাউন্ট যুক্ত করবেন, ফায়ারস্টোর সুরক্ষা নিয়মগুলি পর্যালোচনা এবং স্থাপন করবেন এবং ফায়ারস্টোরে ডেটা কীভাবে পরিবর্তন করা হয় তা পর্যালোচনা করবেন।

প্রমাণীকরণ সেট আপ করুন

  1. পরিষেবা অ্যাকাউন্টে ডেটাস্টোর ব্যবহারকারীর ভূমিকা প্রদান করুন
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/datastore.user"

উদাহরণ আউটপুট

Updated IAM policy for project [cymbal-eats-6422-3462].

ফায়ারস্টোর নিরাপত্তা নিয়ম

নিরাপত্তা নিয়মগুলি অ্যাক্সেস নিয়ন্ত্রণ এবং ডেটা যাচাইকরণ, অভিব্যক্তিপূর্ণ কিন্তু সহজবোধ্য বিন্যাস প্রদান করে।

  1. অর্ডার-সার্ভিস/স্টার্টার-কোড ডিরেক্টরিতে নেভিগেট করুন।
cd ~/cymbal-eats/order-service
  1. ক্লাউড এডিটরে firestore.rules ফাইলটি খুলুন।
cat firestore.rules

ফায়ারস্টোর.নিয়ম

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents { ⇐ All database
    match /{document=**} { ⇐ All documents
      allow read: if true; ⇐ Allow reads
    }
    match /{document=**} {
      allow write: if false; ⇐ Deny writes
    }
  }
}

সতর্কতা: ফায়ারস্টোর স্টোরেজের অ্যাক্সেস সীমিত করাই সর্বোত্তম অনুশীলন। এই ল্যাবের উদ্দেশ্যে, সমস্ত পঠন অনুমোদিত। এটি কোনও প্রস্তাবিত উৎপাদন কনফিগারেশন নয়।

ফায়ারস্টোর পরিচালিত পরিষেবাগুলি সক্ষম করুন

  1. ওপেন টার্মিনাল ক্লিক করুন
  2. বর্তমান প্রজেক্ট আইডি দিয়ে .firebaserc ফাইল তৈরি করুন। ডিপ্লয় টার্গেটের সেটিংস আপনার প্রজেক্ট ডিরেক্টরির .firebaserc ফাইলে সংরক্ষণ করা হয়।

firebaserc.tmpl সম্পর্কে

sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
  1. ফায়ারবেস বাইনারি ডাউনলোড করুন
curl -sL https://firebase.tools | upgrade=true bash

উদাহরণ আউটপুট

-- Checking for existing firebase-tools on PATH...
Your machine already has firebase-tools@10.7.0 installed. Nothing to do.
-- All done!
  1. ফায়ারস্টোরের নিয়মগুলি স্থাপন করুন।
firebase deploy 

উদাহরণ আউটপুট

=== Deploying to 'cymbal-eats-6422-3462'...

i  deploying firestore
i  cloud.firestore: checking firestore.rules for compilation errors...
✔  cloud.firestore: rules file firestore.rules compiled successfully
i  firestore: uploading rules firestore.rules...
✔  firestore: released rules firestore.rules to cloud.firestore

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/cymbal-eats-6422-3462/overview

ডেটা পরিবর্তন করুন

সংগ্রহ এবং নথিগুলি ফায়ারস্টোরে অন্তর্নিহিতভাবে তৈরি করা হয়। কেবল একটি সংগ্রহের মধ্যে একটি নথিতে ডেটা বরাদ্দ করুন। যদি সংগ্রহ বা নথির কোনওটিই বিদ্যমান না থাকে, তাহলে ফায়ারস্টোর এটি তৈরি করে।

ফায়ারস্টোরে ডেটা যোগ করুন

ক্লাউড ফায়ারস্টোরে ডেটা লেখার বিভিন্ন উপায় রয়েছে:

  • একটি সংগ্রহের মধ্যে একটি নথির ডেটা সেট করুন, স্পষ্টভাবে একটি নথি শনাক্তকারী নির্দিষ্ট করে।
  • একটি সংগ্রহে একটি নতুন নথি যোগ করুন। এই ক্ষেত্রে, ক্লাউড ফায়ারস্টোর স্বয়ংক্রিয়ভাবে নথি শনাক্তকারী তৈরি করে।
  • স্বয়ংক্রিয়ভাবে তৈরি শনাক্তকারী দিয়ে একটি খালি নথি তৈরি করুন এবং পরে এতে ডেটা বরাদ্দ করুন।

পরবর্তী বিভাগটি আপনাকে সেট পদ্ধতি ব্যবহার করে একটি নথি তৈরি করার জন্য নির্দেশনা দেবে।

একটি ডকুমেন্ট সেট করুন

একটি ডকুমেন্ট তৈরি করতে set() পদ্ধতি ব্যবহার করুন। set() পদ্ধতিতে, আপনাকে ডকুমেন্ট তৈরির জন্য একটি আইডি নির্দিষ্ট করতে হবে।

নিচের কোড স্নিপেটটি একবার দেখুন।

ইনডেক্স.জেএস

const orderDoc = db.doc(`orders/123`);
await orderDoc.set({
    orderNumber: 123,
    name: Anne,
    address: 555 Bright Street,
    city: Mountain View,
    state: CA,
    zip: 94043,
    orderItems: [id: 1],
    status: 'New'
  });

এই কোডটি একটি ডকুমেন্ট তৈরি করবে যেখানে একটি ব্যবহারকারী-উত্পাদিত ডকুমেন্ট আইডি ১২৩ উল্লেখ করা হবে। আপনার পক্ষ থেকে ফায়ারস্টোরকে একটি আইডি তৈরি করতে, add() অথবা create() পদ্ধতি ব্যবহার করুন।

একটি ডকুমেন্ট আপডেট করুন

আপডেট পদ্ধতি update() আপনাকে সম্পূর্ণ ডকুমেন্ট ওভাররাইট না করেই কিছু ডকুমেন্ট ফিল্ড আপডেট করতে দেয়।

নিচের স্নিপেটে, কোড আপডেটের ক্রম ১২৩

ইনডেক্স.জেএস

const orderDoc = db.doc(`orders/123`);
await orderDoc.update(name: "Anna");

একটি ডকুমেন্ট মুছে ফেলুন

ফায়ারস্টোরে, আপনি একটি ডকুমেন্ট থেকে সংগ্রহ, ডকুমেন্ট বা নির্দিষ্ট ক্ষেত্র মুছে ফেলতে পারেন। একটি ডকুমেন্ট মুছে ফেলার জন্য, delete() পদ্ধতিটি ব্যবহার করুন।

নিচের স্নিপেটটি অর্ডার ১২৩ মুছে ফেলে।

ইনডেক্স.জেএস

const orderDoc = db.doc(`orders/123`);
await orderDoc.delete();

১০. স্থাপন এবং পরীক্ষা

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

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

  1. ইনভেন্টরি সার্ভিসের সাথে ইন্টিগ্রেট করার জন্য URL টি INVENTORY_SERVICE_URL ভেরিয়েবলে সংরক্ষণ করুন।
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
 --region=$REGION \
 --format=json | jq \
 --raw-output ".status.url")
  1. অর্ডার পরিষেবা স্থাপন করুন
gcloud run deploy order-service \
  --source . \
  --platform managed \
  --region $REGION \
  --allow-unauthenticated \
  --project=$PROJECT_ID \
  --set-env-vars=INVENTORY_SERVICE_URL=$INVENTORY_SERVICE_URL \
  --quiet

উদাহরণ আউটপুট

[...]
Done.
Service [order-service] revision [order-service-00001-qot] has been deployed and is serving 100 percent of traffic.
Service URL: https://order-service-3jbm3exegq-uk.a.run.app

ক্লাউড রান অ্যাপ্লিকেশনটি পরীক্ষা করুন

একটি ডকুমেন্ট তৈরি করুন

  1. অর্ডার সার্ভিস অ্যাপ্লিকেশনের URL পরীক্ষার জন্য একটি ভেরিয়েবলের মধ্যে সংরক্ষণ করুন।
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
  --platform managed \
  --region $REGION \
  --format=json | jq \
  --raw-output ".status.url")
  1. একটি অর্ডার অনুরোধ তৈরি করুন এবং ফায়ারস্টোর ডাটাবেসে একটি নতুন অর্ডার পোস্ট করুন
curl --request POST $ORDER_SERVICE_URL/order \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Jane Doe",
         "email": "Jane.Doe-cymbaleats@gmail.com",
    "address": "123 Maple",
    "city": "Buffalo",
    "state": "NY",
    "zip": "12346",
    "orderItems": [
        {
            "id": 1
        }
    ]
}'

উদাহরণ আউটপুট

{"orderNumber":46429}

পরবর্তী ব্যবহারের জন্য অর্ডার নম্বরটি সংরক্ষণ করুন।

export ORDER_NUMBER=<value_from_output>

ফলাফল দেখুন

ফায়ারস্টোরে ফলাফল দেখুন

  1. ফায়ারস্টোর কনসোলে নেভিগেট করুন
  2. ডেটাতে ক্লিক করুন।

465ceca6198b2b88.png সম্পর্কে

একটি ডকুমেন্ট আপডেট করুন

জমা দেওয়া অর্ডারে পরিমাণ অন্তর্ভুক্ত ছিল না।

  1. রেকর্ডটি আপডেট করুন এবং একটি পরিমাণ কী-মান জোড়া যোগ করুন
curl --location -g --request PATCH $ORDER_SERVICE_URL/order/${ORDER_NUMBER} \
--header 'Content-Type: application/json' \
--data-raw '{
"orderItems": [
        {   
            "id": 1,
            "quantity": 1   
        }
    ]
}'

উদাহরণ আউটপুট

{"status":"success"}

ফলাফল দেখুন

ফায়ারস্টোরে ফলাফল দেখুন

  1. ফায়ারস্টোর কনসোলে নেভিগেট করুন
  2. ডেটাতে ক্লিক করুন।

অনুসরণ

একটি ডকুমেন্ট মুছে ফেলুন

  1. ফায়ারস্টোর অর্ডার সংগ্রহ থেকে ৪৬৪২৯ আইটেমটি মুছুন
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}

ফলাফল দেখুন

  1. ফায়ারস্টোর কনসোলে নেভিগেট করুন
  2. ডেটাতে ক্লিক করুন।

73e14d69211d1539.png সম্পর্কে

১১. অভিনন্দন!

অভিনন্দন, তুমি ল্যাব শেষ করেছ!

এরপর কি:

অন্যান্য সিম্বাল ইটস কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার করা

এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সের জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, হয় রিসোর্স ধারণকারী প্রজেক্টটি মুছে ফেলুন, অথবা প্রজেক্টটি রেখে পৃথক রিসোর্সগুলি মুছে ফেলুন।

প্রকল্পটি মুছে ফেলা হচ্ছে

বিলিং দূর করার সবচেয়ে সহজ উপায় হল টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।