Firestore Standard সংস্করণের ডেটাবেস থেকে Firestore Enterprise সংস্করণের ডেটাবেসে ডেটা স্থানান্তরের জন্য, আমরা নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করার পরামর্শ দিই:
আমদানি এবং রপ্তানির বৈশিষ্ট্য। আমদানি প্রক্রিয়া থেকে প্রাপ্ত ডেটা ফাইলগুলো এন্টারপ্রাইজ সংস্করণ এবং স্ট্যান্ডার্ড সংস্করণ উভয়ের সাথেই সামঞ্জস্যপূর্ণ।
firestore-to-firestoreDataflow টেমপ্লেট। Dataflow পরিষেবা আপনাকে ডেটা পাইপলাইন তৈরি করতে দেয় এবংfirestore-to-firestoreটেমপ্লেটটি Cloud Firestore ডেটাবেসগুলোর মধ্যে একটি ব্যাচ পাইপলাইন তৈরি করে।
কম কনফিগারেশন অপশন ব্যবহার করে ইম্পোর্ট এবং এক্সপোর্ট চালানোই হলো সহজতর উপায়।
Dataflow টেমপ্লেটটি আরও বেশি কাস্টমাইজযোগ্য। আপনি আংশিক মাইগ্রেশন সম্পাদন করতে বা ডেটা রূপান্তর করতে টেমপ্লেট কোডটি প্রসারিত করতে পারেন। এছাড়াও আপনি ওয়ার্কারের সংখ্যা এবং আকার নিয়ন্ত্রণ করতে পারেন।
উভয় বিকল্পই প্রকল্প ও অঞ্চল জুড়ে স্থানান্তর সমর্থন করে।
এক্সপোর্ট এবং ইম্পোর্টের মাধ্যমে ডেটা স্থানান্তর করুন।
এক্সপোর্ট এবং ইম্পোর্ট অপারেশনের মাধ্যমে ডেটা মাইগ্রেট করতে, “এক্সপোর্ট এবং ইম্পোর্ট ডেটা” দেখুন। অন্য কোনো প্রজেক্টের ডেটাবেসে ডেটা স্থানান্তর করতে, “প্রজেক্টগুলোর মধ্যে ডেটা স্থানান্তর” দেখুন।
Dataflow টেমপ্লেট ব্যবহার করে ডেটা স্থানান্তর করুন
firestore-to-firestore Dataflow টেমপ্লেট ব্যবহার করে ডেটা মাইগ্রেট করতে নিম্নলিখিত নির্দেশাবলী অনুসরণ করুন।
শুরু করার আগে
ডেটা মাইগ্রেশন শুরু করার আগে, নিশ্চিত করুন যে সোর্স ডেটাবেসে পয়েন্ট-ইন-টাইম রিকভারি (PITR) সক্রিয় করা আছে। Dataflow জবটি একটি PITR টাইমস্ট্যাম্পে ডেটা পড়ার জন্য PITR ব্যবহার করে। যদি PITR নিষ্ক্রিয় থাকে, তবে জবটি এক ঘণ্টার বেশি সময় ধরে চললে ব্যর্থ হয়।
পরবর্তী বিভাগে বর্ণিত প্রয়োজনীয় ভূমিকাগুলো অর্পণ করুন।
প্রয়োজনীয় ভূমিকা
এক ডাটাবেস থেকে অন্য ডাটাবেসে ডেটা স্থানান্তর করতে, নিম্নলিখিত রোলগুলো নির্ধারণ করুন। আপনি কাস্টম রোল বা অন্যান্য পূর্বনির্ধারিত রোলের মাধ্যমেও প্রয়োজনীয় অনুমতিগুলো পেতে পারেন:
- নতুন ডেটাবেস তৈরি করতে এবং Cloud Firestore ডেটা অ্যাক্সেস করার জন্য প্রয়োজনীয় অনুমতি পেতে, আপনার অ্যাডমিনিস্ট্রেটরকে আপনার প্রোজেক্টে ক্লাউড ডেটাস্টোর ওনার (
roles/datastore.owner) আইডেন্টিটি অ্যান্ড অ্যাক্সেস ম্যানেজমেন্ট (IAM) রোলটি মঞ্জুর করার জন্য অনুরোধ করুন। আপনার Cloud Firestore ডেটাবেসগুলিতে Dataflow জবকে রিড এবং রাইট অ্যাক্সেস দিতে, Dataflow ওয়ার্কার সার্ভিস অ্যাকাউন্টটি (উদাহরণস্বরূপ,
PROJECT_NUMBER -compute@নির্ধারণ করুন।PROJECT_NUMBER -compute@আপনার প্রোজেক্টে ক্লাউড ডেটাস্টোর ইউজার (roles/datastore.user) IAM রোলটি।Dataflow নিরাপত্তা সম্পর্কে আরও তথ্যের জন্য, Dataflow নিরাপত্তা এবং অনুমতিসমূহ দেখুন।
IAM রোল প্রদান করার বিষয়ে আরও তথ্যের জন্য, ‘প্রজেক্ট, ফোল্ডার এবং অর্গানাইজেশনে অ্যাক্সেস পরিচালনা’ দেখুন।
১. একটি নতুন ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণ ডাটাবেস তৈরি করুন
স্ট্যান্ডার্ড এডিশন ডেটাবেস থেকে এন্টারপ্রাইজ এডিশন ডেটাবেসে ডেটা স্থানান্তর করতে, আপনাকে প্রথমে এন্টারপ্রাইজ এডিশনের গন্তব্য ডেটাবেসটি তৈরি করতে হবে। ‘একটি ডেটাবেস তৈরি করুন ’ দেখুন।
২. Dataflow firestore-to-firestore টেমপ্লেটটি চালান।
firestore-to-firestore টেমপ্লেট ব্যবহার করে আপনার Dataflow জবটি কনফিগার ও রান করুন। এই টেমপ্লেটটি সম্পূর্ণ ডাটাবেস অথবা শুধুমাত্র নির্দিষ্ট কালেকশন গ্রুপ মাইগ্রেট করা সমর্থন করে।
সীমাবদ্ধতা
firestore-to-firestore Dataflow টেমপ্লেটের জন্য নিম্নলিখিত সীমাবদ্ধতাগুলো বিবেচনা করুন:
- উৎস ডাটাবেসটি অবশ্যই একটি স্ট্যান্ডার্ড সংস্করণ ডাটাবেস হতে হবে।
- মাইগ্রেশন একটি নির্দিষ্ট রিড-টাইমে ডেটা রিড করে। আমরা সোর্স ডেটাবেসে পয়েন্ট-ইন-টাইম রিকভারি (PITR) এনাবল করার পরামর্শ দিই। যদি PITR এনাবল করা না থাকে, তাহলে এক ঘণ্টা পর ডেটার মেয়াদ শেষ হয়ে যায় এবং ডেটা মাইগ্রেশন সম্পন্ন হওয়ার জন্য এই সময় যথেষ্ট নাও হতে পারে। PITR ডেটার রিটেনশন সাত দিন পর্যন্ত বাড়িয়ে দেয়।
- সূচকগুলো স্থানান্তরিত করা হয়নি।
Dataflow জবটি ডাটাবেস কনফিগারেশন, যেমন টাইম টু লিভ (TTL) পলিসি, ব্যাকআপ, PITR, এবং কাস্টমার-ম্যানেজড এনক্রিপশন কী (CMEK) মাইগ্রেট করে না।
আপনাকে অবশ্যই নতুন ডেটাবেসে এই সেটিংসগুলো কনফিগার করতে হবে। ডেটা মাইগ্রেশনের গতি বাড়ানোর জন্য, মাইগ্রেশন শেষ না হওয়া পর্যন্ত গন্তব্য ডেটাবেসে TTL, ব্যাকআপ এবং PITR কনফিগার করবেন না।
নিম্নলিখিত উদাহরণগুলিতে দেখানো হয়েছে কীভাবে Google Cloud CLI ব্যবহার করে টেমপ্লেটটি চালানো যায়।
সমস্ত ডেটা স্থানান্তর করুন
সমস্ত ডেটা স্থানান্তর করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud dataflow flex-template run "JOB_NAME" \ --project "PROJECT" \ --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
JOB_NAME: পদটির একটি নাম। -
PROJECT: আপনার Google Cloud প্রজেক্টের আইডি। -
REGION_NAME: Google Cloud সেই অবস্থান যেখানে আপনি Dataflow জবটি চালাতে চান। আপনার ডেটাবেসগুলোর কাছাকাছি একটি অবস্থান ব্যবহার করুন। VERSION: টেমপ্লেটের যে সংস্করণটি আপনি ব্যবহার করতে চান। আপনি নিম্নলিখিত মানগুলি ব্যবহার করতে পারেন:- টেমপ্লেটের
latestসংস্করণটি ব্যবহার করুন, যা বাকেটের মধ্যে থাকা তারিখবিহীন প্যারেন্ট ফোল্ডারে উপলব্ধ— gs://dataflow-templates REGION_NAME /latest/ - টেমপ্লেটের একটি নির্দিষ্ট সংস্করণ ব্যবহার করার জন্য সংস্করণের নামটি, যেমন
2023-09-12-00_RC00, ব্যবহার করতে হবে, যা বাকেটের মধ্যে সংশ্লিষ্ট তারিখযুক্ত প্যারেন্ট ফোল্ডারে পাওয়া যাবে— gs://dataflow-templates- REGION_NAME /
- টেমপ্লেটের
SOURCE_PROJECT_ID: উৎস Google Cloud প্রজেক্টের আইডি, যেটিতে ফায়ারস্টোর স্ট্যান্ডার্ড এডিশন ডেটাবেসটি রয়েছে।SOURCE_DATABASE_ID: উৎস Cloud Firestore ডাটাবেসের আইডি।DESTINATION_PROJECT_ID: নতুন Cloud Firestore ডেটাবেসের জন্য গন্তব্য Google Cloud প্রকল্পের আইডি।DESTINATION_DATABASE_ID: গন্তব্য Cloud Firestore ডাটাবেসের আইডি।READ_TIME: উৎস ডেটাবেস থেকে ডেটা পড়ার জন্য টাইমস্ট্যাম্প। এটিকে RFC 3339 ফরম্যাটের একটি টাইমস্ট্যাম্পে, মিনিটের ব্যবধানে সেট করতে হবে, যেমন2026-05-15T16:31:00.00Z।প্রাচীনতম বৈধ টাইমস্ট্যাম্পটি আপনার পয়েন্ট-ইন-টাইম রিকভারি (PITR) সেটিংসের উপর নির্ভর করে। প্রাচীনতম সংস্করণের সময় জানুন দেখুন।
নির্দিষ্ট সংগ্রহ গোষ্ঠী স্থানান্তর করুন
শুধুমাত্র নির্দিষ্ট কালেকশন গ্রুপগুলো মাইগ্রেট করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud dataflow jobs run "JOB_NAME" \ --project "PROJECT" \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "collectionGroupIds=COLLECTION_GROUP_IDS" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
-
JOB_NAME: পদটির একটি নাম। -
PROJECT: আপনার Google Cloud প্রজেক্টের আইডি। -
REGION_NAME: Google Cloud সেই অবস্থান যেখানে আপনি Dataflow জবটি চালাতে চান। আপনার ডেটাবেসগুলোর কাছাকাছি একটি অবস্থান ব্যবহার করুন। VERSION: টেমপ্লেটের যে সংস্করণটি আপনি ব্যবহার করতে চান। আপনি নিম্নলিখিত মানগুলি ব্যবহার করতে পারেন:- টেমপ্লেটের
latestসংস্করণটি ব্যবহার করুন, যা বাকেটের মধ্যে থাকা তারিখবিহীন প্যারেন্ট ফোল্ডারে উপলব্ধ— gs://dataflow-templates REGION_NAME /latest/ - টেমপ্লেটের একটি নির্দিষ্ট সংস্করণ ব্যবহার করার জন্য সংস্করণের নামটি, যেমন
2023-09-12-00_RC00, ব্যবহার করতে হবে, যা বাকেটের মধ্যে সংশ্লিষ্ট তারিখযুক্ত প্যারেন্ট ফোল্ডারে পাওয়া যাবে— gs://dataflow-templates- REGION_NAME /
- টেমপ্লেটের
SOURCE_PROJECT_ID: উৎস Google Cloud প্রজেক্টের আইডি, যেটিতে ফায়ারস্টোর স্ট্যান্ডার্ড এডিশন ডেটাবেসটি রয়েছে।SOURCE_DATABASE_ID: উৎস Cloud Firestore ডাটাবেসের আইডি।COLLECTION_GROUP_IDS: মাইগ্রেট করার জন্য কালেকশন গ্রুপ আইডিগুলোর একটি কমা-দ্বারা-বিভক্ত তালিকা।সাব-কালেকশনগুলো রিকার্সিভলি অন্তর্ভুক্ত করা হয় না। উদাহরণস্বরূপ, আপনি যদি
usersকালেকশন গ্রুপটি নির্দিষ্ট করেন, তাহলে মাইগ্রেশনটি/users/userid/messagesঠিকানায় থাকাmessagesসাব-কালেকশনটি অন্তর্ভুক্ত করবে না, যদি না আপনিmessagesকালেকশন গ্রুপটিও নির্দিষ্ট করেন।DESTINATION_PROJECT_ID: নতুন Cloud Firestore ডেটাবেসের জন্য গন্তব্য Google Cloud প্রকল্পের আইডি।DESTINATION_DATABASE_ID: গন্তব্য Cloud Firestore ডাটাবেসের আইডি।READ_TIME: উৎস ডেটাবেস থেকে ডেটা পড়ার জন্য টাইমস্ট্যাম্প। এটিকে RFC 3339 ফরম্যাটের একটি টাইমস্ট্যাম্পে, মিনিটের ব্যবধানে সেট করতে হবে, যেমন2026-05-15T16:31:00.00Z।প্রাচীনতম বৈধ টাইমস্ট্যাম্পটি আপনার পয়েন্ট-ইন-টাইম রিকভারি (PITR) সেটিংসের উপর নির্ভর করে। প্রাচীনতম সংস্করণের সময় জানুন দেখুন।
৩. ডাটাবেস কনফিগার করুন
firestore-to-firestore জবটি শুধুমাত্র ডেটা মাইগ্রেট করে। ইনডেক্স এবং অন্যান্য ডাটাবেস সেটিংস মাইগ্রেট করা হয় না । ডেটা মাইগ্রেট করার পাশাপাশি, নতুন ডাটাবেসে নিম্নলিখিত বিষয়গুলো কনফিগার করার কথা বিবেচনা করুন:
ইনডেক্স : ফায়ারস্টোর এন্টারপ্রাইজ এডিশন ডাটাবেসে কোয়েরি চালানোর জন্য ইনডেক্স থাকা কঠোরভাবে আবশ্যক নয় এবং ডিফল্টরূপে স্বয়ংক্রিয়ভাবে ইনডেক্স তৈরি করে না। আপনার কোয়েরির জন্য ইনডেক্স তৈরি করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণ সূচিপত্রের সংক্ষিপ্ত বিবরণ ।
- ইনডেক্স ব্যবহার করে কোয়েরির পারফরম্যান্স উন্নত করুন ।
- আপনি Firebase CLI ব্যবহার করে ইনডেক্সগুলো এক্সপোর্ট করতে এবং নতুন ডেটাবেসে সেগুলো ডেপ্লয় করতে পারেন।
- ইনডেক্স ব্যবহার করে অপ্টিমাইজ করা যায় এমন কোয়েরিগুলো শনাক্ত করতে কোয়েরি ইনসাইটস ব্যবহার করুন।
TTL : TTL নীতিমালা তৈরি করুন ।
ব্যাকআপ : ব্যাকআপ সেট আপ করুন ।
PITR : PITR সক্রিয় করুন ।
আপনার ডাটাবেস কনফিগার করার পর, আপনি নতুন ডাটাবেস দিয়ে আপনার অ্যাপ পরীক্ষা করা চালিয়ে যেতে পারেন। সম্পূর্ণ মাইগ্রেশনের জন্য, নতুন ডাটাবেস ব্যবহার করতে আপনার অ্যাপ্লিকেশনগুলো আপডেট করুন।
সমস্যা সমাধান
বড় ডেটাবেসের ক্ষেত্রে, কাজটি একবারে অনেক বেশি ডেটা পড়লে ব্যর্থ হতে পারে। এর সমাধান করতে:
maxNumWorkersএর মান বৃদ্ধি করুন।
এরপর কী?
- পাইপলাইন অপারেশনের মাধ্যমে ডেটা কোয়েরি করা সম্পর্কে জানুন।
- ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণে কোয়েরি অপ্টিমাইজ করার উপায় সম্পর্কে জানুন
- এন্টারপ্রাইজ এডিশন ডেটাবেস কীভাবে স্কেল করে তা বুঝুন।