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

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

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

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

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

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

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

  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

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

একটি নতুন ডাটাবেস তৈরি করুন এবং ডাটাবেস স্কিমা তৈরি করতে Google স্ট্যান্ডার্ড 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);

5. স্প্যানার সংহত করা

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

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

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

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

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

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

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

  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}]

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

ক্লাউড স্প্যানার ঘোষণামূলক 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 স্টেটমেন্টের ফলাফল অর্জন করার বিভিন্ন উপায় থাকতে পারে। ক্যোয়ারী এক্সিকিউশন প্ল্যান কনসোল এবং ক্লায়েন্ট লাইব্রেরিতে অ্যাক্সেসযোগ্য। স্প্যানার কীভাবে এসকিউএল কোয়েরি পরিচালনা করে তা দেখতে:

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

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

149f8bae468f8b34.png

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

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

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

জিক্লাউড স্প্যানারে একটি ক্যোয়ারী চালানোর সময় ব্যবহৃত সংস্করণ দেখতে, -কোয়েরি-মোড পতাকাটি প্রোফাইলে সেট করুন

  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:

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

এই ল্যাবের নতুন সংস্করণটি হল সংস্করণ 4। এরপর, আপনি ক্যোয়ারী অপ্টিমাইজারের জন্য সংস্করণ 4 ব্যবহার করতে স্প্যানার টেবিল আপডেট করবেন।

  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

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

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

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

6843abaf4263e112.png

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

তথ্য মডেল

একটি Firestore ডাটাবেস সংগ্রহ এবং নথির সমন্বয়ে গঠিত।

b60acd63d4793a6c.png

নথিপত্র

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

5571cb2f261d2dbe.png

সংগ্রহ

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

5811378cb721e5ec.png

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

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

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

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

9. আপনার অ্যাপ্লিকেশনে Firestore সংহত করা

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

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

  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

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
    }
  }
}

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

Firestore পরিচালিত পরিষেবাগুলি সক্ষম করুন৷

  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() পদ্ধতির সাথে, আপনাকে অবশ্যই একটি আইডি নির্দিষ্ট করতে হবে যাতে ডকুমেন্ট তৈরি করা যায়।

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

index.js

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'
  });

এই কোডটি একটি ডকুমেন্ট তৈরি করবে যাতে ব্যবহারকারীর তৈরি করা ডকুমেন্ট আইডি 123 উল্লেখ থাকে। Firestore আপনার পক্ষ থেকে একটি আইডি তৈরি করতে, add() বা create() পদ্ধতি ব্যবহার করুন।

একটি নথি আপডেট করুন

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

নীচের স্নিপেটে, কোডটি অর্ডার 123 আপডেট করে

index.js

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

একটি নথি মুছুন

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

নীচের স্নিপেট অর্ডার 123 মুছে দেয়।

index.js

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

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

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

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

  1. Inventory_SERVICE_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. একটি অর্ডার অনুরোধ তৈরি করুন এবং Firestore ডাটাবেসে একটি নতুন অর্ডার পোস্ট করুন৷
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. Firestore কনসোলে নেভিগেট করুন
  2. Data এ ক্লিক করুন

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. Firestore কনসোলে নেভিগেট করুন
  2. Data এ ক্লিক করুন

cfcf78d200e15b84.png

একটি নথি মুছুন

  1. Firestore অর্ডার সংগ্রহ থেকে আইটেম 46429 মুছুন
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}

ফলাফল দেখুন

  1. Firestore কনসোলে নেভিগেট করুন
  2. Data এ ক্লিক করুন

73e14d69211d1539.png

11. অভিনন্দন!

অভিনন্দন, আপনি ল্যাব শেষ!

এরপর কি:

অন্যান্য Cymbal Eats কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার কর

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

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

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