इस पेज पर, Cloud Firestore में डेटा को सेव रखने और उसे वापस पाने के लिए, किसी खास समय का डेटा वापस लाने की सुविधा (पीआईटीआर) का इस्तेमाल करने का तरीका बताया गया है.
पीआईटीआर के कॉन्सेप्ट को समझने के लिए, पिछले समय की रिकवरी देखें.
अनुमतियां
पीआईटीआर की सेटिंग मैनेज करने के लिए ज़रूरी अनुमतियां पाने के लिए, अपने एडमिन से उस प्रोजेक्ट पर ये आईएएम भूमिकाएं देने के लिए कहें जहां आपको पीआईटीआर चालू करना है:
- Cloud Datastore का मालिक (
roles/datastore.owner
)
पसंद के मुताबिक बनाई गई भूमिकाओं के लिए, पक्का करें कि ये अनुमतियां दी गई हों:
- डेटाबेस बनाते समय, पीआईटीआर चालू करने के लिए:
datastore.databases.create
- मौजूदा डेटाबेस पर पीआईटीआर सेटिंग अपडेट करने के लिए:
datastore.databases.update
,datastore.databases.list
- पीआईटीआर डेटा से डेटा पढ़ने के लिए:
datastore.databases.get
,datastore.entities.get
,datastore.entities.list
- पीआईटीआर डेटा एक्सपोर्ट करने के लिए:
datastore.databases.export
- पीआईटीआर डेटा इंपोर्ट करने के लिए:
datastore.databases.import
शुरू करने से पहले
पीआईटीआर का इस्तेमाल शुरू करने से पहले, इन बातों का ध्यान रखें:
- पीआईटीआर चालू करने के तुरंत बाद, पिछले सात दिनों का डेटा नहीं पढ़ा जा सकता.
- डेटाबेस बनाते समय पीआईटीआर चालू करने के लिए, आपको
gcloud firestore databases create
कमांड का इस्तेमाल करना होगा. Google Cloud कंसोल का इस्तेमाल करके डेटाबेस बनाते समय, पीआईटीआर की सुविधा चालू नहीं की जा सकती. - PITR चालू करने के बाद, Cloud Firestore उस समय से वर्शन सेव करना शुरू कर देता है.
- पीआईटीआर की सुविधा बंद करने के बाद, पीआईटीआर विंडो में पीआईटीआर डेटा नहीं पढ़ा जा सकता.
- पीआईटीआर की सुविधा बंद करने के तुरंत बाद उसे फिर से चालू करने पर, पीआईटीआर का पुराना डेटा उपलब्ध नहीं रहेगा. पीआईटीआर बंद करने से पहले बनाया गया कोई भी पीआईटीआर डेटा, पीआईटीआर की समयसीमा खत्म होने के बाद मिटा दिया जाएगा.
- अगर आपने पिछले एक घंटे में गलती से डेटा मिटाया है और पीआईटीआर की सुविधा बंद है, तो डेटा को वापस पाया जा सकता है. इसके लिए, डेटा मिटाने के एक घंटे के अंदर पीआईटीआर की सुविधा चालू करें.
- एक्सपायर हो चुके पीआईटीआर डेटा को पढ़ने की कोशिश करने पर, कोई भी डेटा नहीं मिलता.
पीआईटीआर चालू करना
पीआईटीआर का इस्तेमाल करने से पहले, अपने Google Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू करें. पीआईटीआर की सुविधा का इस्तेमाल सिर्फ़ उन Google Cloud प्रोजेक्ट के लिए किया जा सकता है जिनमें बिलिंग की सुविधा चालू है.
अपने डेटाबेस के लिए पीआईटीआर चालू करने के लिए:
कंसोल
Google Cloud Console में, डेटाबेस पेज पर जाएं.
डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत है.
नेविगेशन मेन्यू में, आपदा से जुड़ी रिकवरी पर क्लिक करें.
सेटिंग में बदलाव करने के लिए, बदलाव करें पर क्लिक करें.
किसी खास समय की बैकअप कॉपी को वापस लाने की सुविधा चालू करें चेक बॉक्स को चुनें. इसके बाद, सेव करें पर क्लिक करें.
पीआईटीआर की सुविधा चालू करने पर, स्टोरेज के लिए शुल्क देना होगा. ज़्यादा जानकारी के लिए, कीमत देखें.
पीआईटीआर को बंद करने के लिए, Google Cloud कंसोल में आपदा से जुड़ी रिकवरी के पेज से, किसी खास समय की डेटा रिकवरी की सुविधा चालू करें चेक बॉक्स से सही का निशान हटाएं.
gcloud
डेटाबेस बनाते समय, gcloud firestore databases create
कमांड की मदद से पीआईटीआर की सुविधा को इस तरह चालू करें:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
वैल्यू को इस तरह बदलें:
LOCATION
- वह जगह जहां आपको अपना डेटाबेस बनाना है.DATABASE_ID
- डेटाबेस आईडी या (डिफ़ॉल्ट) पर सेट करें.TYPE
- firestore-native पर सेट करें.
gcloud firestore databases update
कमांड का इस्तेमाल करके, पीआईटीआर को इस तरह बंद किया जा सकता है:
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
वैल्यू को इस तरह बदलें:
DATABASE_ID
- डेटाबेस आईडी या (डिफ़ॉल्ट) पर सेट करें.
डेटा के रखरखाव की अवधि और सबसे पुराने वर्शन का समय पाना
कंसोल
Google Cloud Console में, डेटाबेस पेज पर जाएं.
डेटाबेस की सूची से वह डेटाबेस चुनें जिसकी ज़रूरत है.
नेविगेशन मेन्यू में, आपदा से जुड़ी रिकवरी पर क्लिक करें.
सेटिंग सेक्शन में, डेटा सेव रखने की अवधि और सबसे पुराने वर्शन का समय देखें.
- डेटा के रखरखाव की अवधि: वह अवधि जिसमें Cloud Firestore, डेटाबेस के लिए डेटा के सभी वर्शन को सेव रखता है. पीआईटीआर बंद होने पर, इसकी वैल्यू एक घंटा होती है. वहीं, पीआईटीआर चालू होने पर, इसकी वैल्यू सात दिन होती है.
- सबसे पुराने वर्शन का समय: वह सबसे पुराना टाइमस्टैंप जब पीआईटीआर विंडो में डेटा के पुराने वर्शन पढ़े जा सकते हैं. Cloud Firestore इस वैल्यू को लगातार अपडेट करता रहता है. जब भी इसकी क्वेरी की जाती है, तब यह पुरानी हो जाती है. अगर डेटा को वापस पाने के लिए इस वैल्यू का इस्तेमाल किया जा रहा है, तो वैल्यू के लिए क्वेरी करने के बाद से, डेटा वापस पाने की प्रोसेस शुरू करने तक के समय का ध्यान रखें.
- पिछले समय की रिकवरी: अगर पीआईटीआर चालू है, तो
Enabled
दिखता है. अगर पीआईटीआर बंद है, तो आपको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
: सेव किए गए सबसे पुराने पीआईटीआर डेटा का टाइमस्टैंप.pointInTimeRecoveryEnablement
: अगर पीआईटीआर चालू है, तोPOINT_IN_TIME_RECOVERY_ENABLED
दिखाता है. अगर पीआईटीआर बंद है, तो आपकोPOINT_IN_TIME_RECOVERY_DISABLED
दिखेगा या हो सकता है किpointInTimeRecoveryEnablement
फ़ील्ड न दिखे.versionRetentionPeriod
: वह समयावधि जिसके लिए पीआईटीआर डेटा को सेव करके रखा जाता है. इसे मिलीसेकंड में दिखाया जाता है. पीआईटीआर की सुविधा बंद होने पर, इसकी वैल्यू एक घंटा हो सकती है. वहीं, पीआईटीआर की सुविधा चालू होने पर, इसकी वैल्यू सात दिन हो सकती है.
पीआईटीआर डेटा पढ़ना
क्लाइंट लाइब्रेरी, REST API के तरीकों या FirestoreIO Apache Beam कनेक्टर का इस्तेमाल करके, पीआईटीआर डेटा पढ़ा जा सकता है.
क्लाइंट लाइब्रेरी
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 के सभी रीड मैथड में काम करती हैं. ये मैथड ये हैं: get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery, और partitionQuery.
REST तरीकों का इस्तेमाल करके डेटा पढ़ने के लिए, इनमें से कोई एक विकल्प आज़माएं:
डेटा पढ़ने के तरीके के अनुरोध में,
readOptions
तरीके मेंreadTime
वैल्यू को इस्तेमाल किए जा सकने वाले पीआईटीआर टाइमस्टैंप के तौर पर पास करें. पीआईटीआर टाइमस्टैंप, पिछले एक घंटे के अंदर का माइक्रोसेकंड सटीक टाइमस्टैंप या पिछले एक घंटे के बाद का पूरा मिनट टाइमस्टैंप हो सकता है. हालांकि, यहearliestVersionTime
से पहले का नहीं होना चाहिए.एक से ज़्यादा पीआईटीआर रीड के लिए,
ReadOnly
ट्रांज़ैक्शन के हिस्से के तौर पर,BeginTransaction
तरीके के साथreadTime
पैरामीटर का इस्तेमाल करें.
Apache Beam
Dataflow की मदद से, बड़े पैमाने पर Cloud Firestore डेटाबेस में दस्तावेज़ों को पढ़ने या लिखने के लिए, Cloud FirestoreIO Apache Beam कनेक्टर का इस्तेमाल करें.
Cloud FirestoreIO कनेक्टर के इन तरीकों से, पीआईटीआर रीड की सुविधा का इस्तेमाल किया जा सकता है. डेटा पढ़ने के ये तरीके, withReadTime(@Nullable Instant readTime)
तरीके के साथ काम करते हैं. इस तरीके का इस्तेमाल, पीआईटीआर के ज़रिए डेटा पढ़ने के लिए किया जा सकता है:
- 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
कमांड का इस्तेमाल करके, अपने डेटाबेस को पीआईटीआर डेटा से 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'
.
पीआईटीआर डेटा एक्सपोर्ट करने से पहले, इन बातों का ध्यान रखें:
- टाइमस्टैंप को आरएफ़सी 3339 फ़ॉर्मैट में डालें.
उदाहरण के लिए,
2023-05-26T10:20:00.00Z
या2023-10-19T10:30:00.00-07:00
. - पक्का करें कि आपने जो टाइमस्टैंप दिया है वह पिछले सात दिनों के अंदर का हो और
earliestVersionTime
से पहले का न हो. अगर तय किए गए टाइमस्टैंप पर डेटा मौजूद नहीं है, तो गड़बड़ी का मैसेज जनरेट होता है. टाइमस्टैंप एक पूरा मिनट का होना चाहिए. भले ही, तय किया गया समय पिछले एक घंटे के अंदर का हो. - PITR एक्सपोर्ट पूरा न होने पर, आपसे कोई शुल्क नहीं लिया जाता.
डेटाबेस में इंपोर्ट करें.
एक्सपोर्ट किया गया डेटाबेस इंपोर्ट करने के लिए, सभी दस्तावेज़ इंपोर्ट करें में दिया गया तरीका अपनाएं. अगर आपके डेटाबेस में कोई दस्तावेज़ पहले से मौजूद है, तो उसे बदल दिया जाएगा.