यह Cloud Firestore Standard edition और Cloud Firestore Enterprise edition के लिए काम की जानकारी है. |
इस पेज पर, Cloud Firestore में MongoDB के साथ काम करने वाले डेटा को बनाए रखने और वापस पाने के लिए, किसी खास समय पर डेटा वापस पाने की सुविधा (पीआईटीआर) का इस्तेमाल करने का तरीका बताया गया है.
पीआईटीआर के कॉन्सेप्ट को समझने के लिए, पिछले समय की रिकवरी देखें.
अनुमतियां
पीआईटीआर सेटिंग मैनेज करने के लिए ज़रूरी अनुमतियां पाने के लिए, अपने एडमिन से उस प्रोजेक्ट पर ये आईएएम भूमिकाएं देने के लिए कहें जहां आपको पीआईटीआर की सुविधा चालू करनी है:
- Cloud Datastore के मालिक (
roles/datastore.owner
)
कस्टम भूमिकाओं के लिए, पक्का करें कि ये अनुमतियां दी गई हों:
- डेटाबेस बनाते समय, PITR की सुविधा चालू करने के लिए:
datastore.databases.create
- मौजूदा डेटाबेस पर PITR सेटिंग अपडेट करने के लिए:
datastore.databases.update
,datastore.databases.list
- पीआईटीआर डेटा से रीड करने के लिए:
datastore.databases.get
,datastore.entities.get
,datastore.entities.list
- पीआईटीआर डेटा एक्सपोर्ट करने के लिए:
datastore.databases.export
- पीआईटीआर डेटा इंपोर्ट करने के लिए:
datastore.databases.import
- डेटाबेस को क्लोन करने के लिए:
datastore.databases.clone
शुरू करने से पहले
पीआईटीआर का इस्तेमाल शुरू करने से पहले, इन बातों का ध्यान रखें:
- पीआईटीआर की सुविधा चालू करने के तुरंत बाद, सात दिन पहले के डेटा को ऐक्सेस नहीं किया जा सकता.
- डेटाबेस बनाते समय PITR की सुविधा चालू करने के लिए, आपको
gcloud firestore databases create
कमांड का इस्तेमाल करना होगा. Google Cloud Console का इस्तेमाल करके डेटाबेस बनाते समय, PITR की सुविधा चालू नहीं की जा सकती. - Cloud Firestore के साथ MongoDB के साथ काम करने की सुविधा चालू होने पर, PITR की सुविधा चालू होने के बाद से वर्शन सेव होने लगते हैं.
- पीआईटीआर की सुविधा बंद करने के बाद, पीआईटीआर विंडो में पीआईटीआर डेटा नहीं पढ़ा जा सकता.
- अगर PITR की सुविधा बंद करने के तुरंत बाद इसे फिर से चालू किया जाता है, तो PITR का पिछला डेटा उपलब्ध नहीं होता. पीआईटीआर की सुविधा बंद करने से पहले बनाया गया कोई भी पीआईटीआर डेटा, पीआईटीआर की समयसीमा खत्म होने की तारीख के बाद मिटा दिया जाएगा.
- अगर आपने गलती से पिछले एक घंटे में डेटा मिटा दिया है और PITR की सुविधा बंद है, तो डेटा मिटाने के एक घंटे के अंदर PITR की सुविधा चालू करके, डेटा वापस लाया जा सकता है.
- समयसीमा खत्म हो चुके PITR डेटा को पढ़ने की कोई भी कोशिश काम नहीं करती.
पीआईटीआर की सुविधा चालू करना
पीआईटीआर का इस्तेमाल करने से पहले, अपने Google Cloud प्रोजेक्ट के लिए बिलिंग चालू करें. पीआईटीआर की सुविधा का इस्तेमाल सिर्फ़ उन Google Cloud प्रोजेक्ट के लिए किया जा सकता है जिनमें बिलिंग की सुविधा चालू है.
अपने डेटाबेस के लिए PITR की सुविधा चालू करने के लिए:
कंसोल
Google Cloud Console में, डेटाबेस पेज पर जाएं.
डेटाबेस की सूची से, वह डेटाबेस चुनें जिसकी ज़रूरत है.
नेविगेशन मेन्यू में, Disaster Recovery पर क्लिक करें.
सेटिंग में बदलाव करने के लिए, बदलाव करें पर क्लिक करें.
किसी खास समय पर डेटा वापस पाने की सुविधा चालू करें चेकबॉक्स को चुनें. इसके बाद, सेव करें पर क्लिक करें.
पीआईटीआर की सुविधा चालू करने पर, स्टोरेज के लिए शुल्क लगता है. ज़्यादा जानकारी के लिए, कीमत देखें.
पीआईटीआर की सुविधा बंद करने के लिए, Google Cloud Console में मौजूद Disaster Recovery पेज पर जाकर, Enable point-in-time recovery चेकबॉक्स से सही का निशान हटाएं.
gcloud
डेटाबेस बनाते समय, gcloud firestore databases create
और --enable-ptir
कमांड का इस्तेमाल करके, PITR की सुविधा चालू करें. इसके लिए, यह तरीका अपनाएं:
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--type=firestore-native\
--enable-pitr
वैल्यू को इस तरह बदलें:
LOCATION
- वह जगह जहां आपको डेटाबेस बनाना है.DATABASE_ID
- इसे डेटाबेस आईडी पर सेट किया जाता है.
gcloud firestore databases update
कमांड का इस्तेमाल करके, PITR को इस तरह बंद किया जा सकता है:
gcloud firestore databases update\
--database=DATABASE_ID\
--no-enable-pitr
वैल्यू को इस तरह बदलें:
DATABASE_ID
- इसे डेटाबेस आईडी या (डिफ़ॉल्ट) पर सेट किया जाता है.
डेटा के रखरखाव की अवधि और सबसे पुराने वर्शन का समय पाना
कंसोल
Google Cloud Console में, डेटाबेस पेज पर जाएं.
डेटाबेस की सूची से, वह डेटाबेस चुनें जिसकी ज़रूरत है.
नेविगेशन मेन्यू में, Disaster Recovery पर क्लिक करें.
सेटिंग सेक्शन में, डेटा सुरक्षित रखने की अवधि और सबसे पुराने वर्शन का समय नोट करें.
- निजी डेटा के रखरखाव की अवधि: वह अवधि जिसमें Cloud Firestore with MongoDB compatibility, डेटाबेस के लिए डेटा के सभी वर्शन को बनाए रखता है. पीआईटीआर की सुविधा बंद होने पर, वैल्यू एक घंटे की होती है. वहीं, पीआईटीआर की सुविधा चालू होने पर, वैल्यू सात दिनों की होती है.
- सबसे पुराने वर्शन का समय: यह सबसे पुराना टाइमस्टैंप होता है. इस टाइमस्टैंप पर, PITR विंडो में डेटा के पुराने वर्शन को पढ़ा जा सकता है. इस वैल्यू को Cloud Firestore, MongoDB के साथ काम करने की सुविधा के साथ लगातार अपडेट करता है. क्वेरी किए जाने पर यह वैल्यू पुरानी हो जाती है. अगर आपको इस वैल्यू का इस्तेमाल करके डेटा वापस लाना है, तो पक्का करें कि वैल्यू के लिए क्वेरी करने के समय से लेकर डेटा वापस लाने की प्रोसेस शुरू करने के समय तक का हिसाब रखा गया हो.
- पॉइंट-इन-टाइम रिकवरी: अगर पीआईटीआर चालू है, तो
Enabled
दिखता है. अगर PITR की सुविधा बंद है, तो आपकोDisabled
दिखेगा.
gcloud
gcloud firestore databases describe कमांड को इस तरह चलाएं:
gcloud firestore databases describe --database=DATABASE_ID
DATABASE_ID
की जगह डेटाबेस आईडी या '(default)'
डालें.
यहां आउटपुट दिया गया है:
appEngineIntegrationMode: ENABLED
concurrencyMode: PESSIMISTIC
createTime: '2021-03-24T17:02:35.234Z'
deleteProtectionState: DELETE_PROTECTION_DISABLED
earliestVersionTime: '2023-06-12T16:17:25.222474Z'
etag: IIDayqOevv8CMNTvyNK4uv8C
keyPrefix: s
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
कहाँ,
earliestVersionTime
: सबसे पहले सेव किए गए PITR डेटा का टाइमस्टैंप.pointInTimeRecoveryEnablement
: PITR की सुविधा चालू होने परPOINT_IN_TIME_RECOVERY_ENABLED
दिखाता है. अगर PITR की सुविधा बंद है, तो आपकोPOINT_IN_TIME_RECOVERY_DISABLED
दिखेगा या हो सकता है किpointInTimeRecoveryEnablement
फ़ील्ड न दिखे.versionRetentionPeriod
: वह समयावधि जिसके लिए PITR डेटा को मिलीसेकंड में सेव किया जाता है. अगर पीआईटीआर की सुविधा बंद है, तो वैल्यू एक घंटे हो सकती है. अगर पीआईटीआर की सुविधा चालू है, तो वैल्यू सात दिन हो सकती है.
पीआईटीआर डेटा को पढ़ने की अनुमति
क्लाइंट लाइब्रेरी, REST API के तरीकों या FirestoreIO Apache Beam कनेक्टर का इस्तेमाल करके, PITR डेटा को पढ़ा जा सकता है.क्लाइंट लाइब्रेरी
Java
पीआईटीआर डेटा को पढ़ने के लिए, आपको ReadOnly
लेन-देन का इस्तेमाल करना होगा. रीड में सीधे तौर पर readTime
तय नहीं किया जा सकता.
ज़्यादा जानकारी के लिए, लेन-देन और बैच में लिखे गए अनुरोध लेख पढ़ें.
Firestore firestore = …
TransactionOptions options =
TransactionOptions.createReadOnlyOptionsBuilder()
.setReadTime(
com.google.protobuf.Timestamp.newBuilder()
.setSeconds(1684098540L)
.setNanos(0))
.build();
ApiFuture<Void> futureTransaction = firestore.runTransaction(
transaction -> {
// Does a snapshot read document lookup
final DocumentSnapshot documentResult =
transaction.get(documentReference).get();
// Executes a snapshot read query
final QuerySnapshot queryResult =
transaction.get(query).get();
},
options);
// Blocks on transaction to complete
futureTransaction.get();
नोड
पीआईटीआर डेटा को पढ़ने के लिए, आपको ReadOnly
लेन-देन का इस्तेमाल करना होगा. रीड में सीधे तौर पर readTime
तय नहीं किया जा सकता.
ज़्यादा जानकारी के लिए, लेन-देन और बैच में लिखे गए अनुरोध लेख पढ़ें.
const documentSnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(documentRef),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
const querySnapshot = await firestore.runTransaction(
updateFunction => updateFunction.get(query),
{readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);
REST API
पीआईटीआर की सुविधा, Cloud Firestore के उन सभी वर्शन में काम करती है जिनमें MongoDB के साथ काम करने वाले रीड मैथड इस्तेमाल किए जा सकते हैं. ये रीड मैथड ये हैं: get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery, और partitionQuery.
REST के तरीकों का इस्तेमाल करके पढ़ने के लिए, इनमें से कोई एक विकल्प आज़माएं:
पढ़ने के तरीके के अनुरोध में,
readTime
वैल्यू कोreadOptions
तरीके में, PITR के लिए इस्तेमाल किए जा सकने वाले टाइमस्टैंप के तौर पर पास करें. पीआईटीआर टाइमस्टैंप, पिछले एक घंटे के अंदर का माइक्रोसेकंड प्रिसिज़न टाइमस्टैंप या पिछले एक घंटे से पहले का पूरा मिनट टाइमस्टैंप हो सकता है. हालांकि, यहearliestVersionTime
से पहले का नहीं होना चाहिए.एक से ज़्यादा PITR रीड के लिए,
BeginTransaction
तरीके के साथreadTime
पैरामीटर का इस्तेमाल करें. ऐसाReadOnly
लेन-देन के हिस्से के तौर पर करें.
Apache Beam
Cloud Firestore with MongoDB compatibilityIO Apache Beam कनेक्टर का इस्तेमाल करके, Dataflow की मदद से Cloud Firestore with MongoDB compatibility डेटाबेस में बड़े पैमाने पर दस्तावेज़ पढ़े या लिखे जा सकते हैं.
Cloud Firestore with MongoDB compatibilityIO कनेक्टर के इस रीड मेथड में, PITR की सुविधा काम करती है. पढ़ने के ये तरीके, withReadTime(@Nullable Instant readTime)
तरीके के साथ काम करते हैं. इस तरीके का इस्तेमाल, PITR के लिए किया जा सकता है:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
एक साथ कई फ़ाइलें पढ़ने या लिखने के लिए, Dataflow पाइपलाइन के उदाहरण कोड के साथ यहां दिए गए कोड का इस्तेमाल किया जा सकता है. इस उदाहरण में, पीआईटीआर रीड के लिए withReadTime(@Nullable Instant readTime)
तरीके का इस्तेमाल किया गया है.
Instant readTime = Instant.ofEpochSecond(1684098540L);
PCollection<Document> documents =
pipeline
.apply(Create.of(collectionId))
.apply(
new FilterDocumentsQuery(
firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
.apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
...
Dataflow पाइपलाइन में readTime
के उदाहरणों की पूरी सूची देखने के लिए, GitHub रिपॉज़िटरी देखें.
पीआईटीआर डेटा से एक्सपोर्ट और इंपोर्ट करना
gcloud firestore export
कमांड का इस्तेमाल करके, PITR डेटा से अपने डेटाबेस को Cloud Storage में एक्सपोर्ट किया जा सकता है. आपके पास पीआईटीआर डेटा को एक्सपोर्ट करने का विकल्प होता है. इसके लिए, टाइमस्टैंप पिछले सात दिनों के अंदर का होना चाहिए. हालांकि, यह earliestVersionTime
से पहले का नहीं होना चाहिए. अगर तय किए गए टाइमस्टैंप पर डेटा मौजूद नहीं है, तो एक्सपोर्ट करने की प्रोसेस पूरी नहीं होगी.
पीआईटीआर एक्सपोर्ट करने की सुविधा में, सभी फ़िल्टर काम करते हैं. इनमें सभी दस्तावेज़ों को एक्सपोर्ट करने और चुनिंदा कलेक्शन को एक्सपोर्ट करने की सुविधा भी शामिल है.
डेटाबेस को एक्सपोर्ट करें. इसके लिए, चुने गए रिकवरी टाइमस्टैंप के लिए
snapshot-time
पैरामीटर तय करें.gcloud
डेटाबेस को अपने बकेट में एक्सपोर्ट करने के लिए, यह कमांड चलाएं.
gcloud firestore export gs://BUCKET_NAME_PATH \ --snapshot-time=PITR_TIMESTAMP \ --collection-ids=COLLECTION_IDS \ --namespace-ids=NAMESPACE_IDS
कहां,
BUCKET_NAME_PATH
- एक मान्य Cloud Storage बकेट. इसमें पाथ का प्रीफ़िक्स (पाथ की शुरुआत में मौजूद शब्द) जोड़ना ज़रूरी नहीं है. एक्सपोर्ट की गई फ़ाइलें इसी बकेट में सेव की जाती हैं.PITR_TIMESTAMP
- मिनट के हिसाब से PITR टाइमस्टैंप. उदाहरण के लिए,2023-05-26T10:20:00.00Z
या2023-10-19T10:30:00.00-07:00
.COLLECTION_IDS
- कलेक्शन आईडी या कलेक्शन ग्रुप आईडी की सूची, उदाहरण के लिए-'specific-collection-group1','specific-collection-group2'
.NAMESPACE_IDS
- नेमस्पेस आईडी की सूची, उदाहरण के लिए-'customer','orders'
.
पीआईटीआर डेटा एक्सपोर्ट करने से पहले, इन बातों का ध्यान रखें:
- टाइमस्टैंप को RFC 3339 फ़ॉर्मैट में डालें.
उदाहरण के लिए,
2023-05-26T10:20:00.00Z
या2023-10-19T10:30:00.00-07:00
. - पक्का करें कि आपने जो टाइमस्टैंप दिया है वह पिछले सात दिनों का हो और पूरा मिनट हो. हालांकि, यह
earliestVersionTime
से पहले का नहीं होना चाहिए. अगर तय किए गए टाइमस्टैंप पर डेटा मौजूद नहीं है, तो गड़बड़ी का मैसेज दिखता है. टाइमस्टैंप पूरा मिनट होना चाहिए. भले ही, बताया गया समय पिछले एक घंटे के अंदर का हो. - पीआईटीआर एक्सपोर्ट पूरा न होने पर, आपसे कोई शुल्क नहीं लिया जाता.
डेटाबेस में इंपोर्ट करें.
एक्सपोर्ट किए गए डेटाबेस को इंपोर्ट करने के लिए, सभी दस्तावेज़ इंपोर्ट करें में दिया गया तरीका अपनाएं. अगर आपके डेटाबेस में कोई दस्तावेज़ पहले से मौजूद है, तो उसे बदल दिया जाएगा.
किसी डेटाबेस से क्लोन करना
किसी चुने गए टाइमस्टैंप पर, किसी मौजूदा डेटाबेस को नए डेटाबेस में क्लोन किया जा सकता है:
क्लोन किया गया डेटाबेस, एक नया डेटाबेस होता है. यह सोर्स डेटाबेस की जगह पर ही बनाया जाता है.
क्लोन बनाने के लिए, Cloud Firestore सोर्स डेटाबेस के पॉइंट-इन-टाइम रिकवरी (पीआईटीआर) डेटा का इस्तेमाल करता है. क्लोन किए गए डेटाबेस में, पूरा डेटा और इंडेक्स शामिल होते हैं.
डिफ़ॉल्ट रूप से, क्लोन किए गए डेटाबेस को उसी तरीके से एन्क्रिप्ट (सुरक्षित) किया जाएगा जिस तरीके से सोर्स डेटाबेस को एन्क्रिप्ट किया गया था. इसके लिए, Google के डिफ़ॉल्ट एन्क्रिप्शन या सीएमईके एन्क्रिप्शन का इस्तेमाल किया जाएगा. CMEK एन्क्रिप्शन के लिए, एन्क्रिप्शन का कोई दूसरा टाइप तय किया जा सकता है या किसी दूसरी कुंजी का इस्तेमाल किया जा सकता है.
टाइमस्टैंप में एक मिनट का अंतर होता है. साथ ही, यह पीआईटीआर विंडो में तय की गई अवधि के दौरान, बीते समय का एक पॉइंट दिखाता है:
- अगर आपके डेटाबेस के लिए PITR की सुविधा चालू है, तो पिछले सात दिनों में से किसी भी मिनट को चुना जा सकता है. अगर PITR की सुविधा सात दिन पहले चालू की गई थी, तो इससे कम समय चुना जा सकता है.
- अगर PITR की सुविधा चालू नहीं है, तो पिछले एक घंटे में किसी भी मिनट को चुना जा सकता है.
- आपके पास सबसे पहले के उस टाइमस्टैंप की जांच करने का विकल्प होता है जिसे अपने डेटाबेस के ब्यौरे में चुना जा सकता है.
कंसोल
Firebase कंसोल में डेटाबेस क्लोन करने की सुविधा उपलब्ध नहीं है. डेटाबेस क्लोन करने के लिए, Google Cloud CLI के निर्देशों का इस्तेमाल किया जा सकता है.
gcloud
डेटाबेस को क्लोन करने के लिए, gcloud alpha firestore databases clone
कमांड का इस्तेमाल करें:
gcloud alpha firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'
इनकी जगह ये डालें:
SOURCE_DATABASE: उस मौजूदा डेटाबेस का नाम जिसे आपको क्लोन करना है. नाम,
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID
फ़ॉर्मैट में है.PITR_TIMESTAMP: मिनट के हिसाब से, आरएफ़सी 3339 फ़ॉर्मैट में पीआईटीआर टाइमस्टैंप. उदाहरण के लिए:
2025-06-01T10:20:00.00Z
या2025-06-01T10:30:00.00-07:00
.DESTINATION_DATABASE_ID: क्लोन किए गए नए डेटाबेस के लिए, डेटाबेस आईडी. यह डेटाबेस आईडी, किसी मौजूदा डेटाबेस से नहीं जुड़ा होना चाहिए.
उदाहरण:
gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db'
क्लोन किए गए डेटाबेस के एन्क्रिप्शन कॉन्फ़िगरेशन में बदलाव करना
डिफ़ॉल्ट रूप से, क्लोन किए गए डेटाबेस में एन्क्रिप्शन का वही कॉन्फ़िगरेशन होगा जो सोर्स डेटाबेस में है. एन्क्रिप्शन कॉन्फ़िगरेशन बदलने के लिए, --encryption-type
आर्ग्युमेंट का इस्तेमाल करें:
- (डिफ़ॉल्ट)
use-source-encryption
: सोर्स डेटाबेस के लिए इस्तेमाल किए गए एन्क्रिप्शन कॉन्फ़िगरेशन का ही इस्तेमाल करें. google-default-encryption
: डेटा सुरक्षित करने के लिए, Google के डिफ़ॉल्ट तरीके का इस्तेमाल करें.customer-managed-encryption
: CMEK एन्क्रिप्शन का इस्तेमाल करें.--kms-key-name
आर्ग्युमेंट में कुंजी आईडी डालें.
यहां दिए गए उदाहरण में, क्लोन किए गए डेटाबेस के लिए सीएमईके एन्क्रिप्शन को कॉन्फ़िगर करने का तरीका बताया गया है:
gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'