इस पेज में बताया गया है कि Cloud Firestore में डेटा बनाए रखने और वापस पाने के लिए, पॉइंट-इन-टाइम रिकवरी (पीआईटीआर) का इस्तेमाल कैसे किया जा सकता है.
पीआईटीआर कॉन्सेप्ट को समझने के लिए, पॉइंट-इन-टाइम रिकवरी लेख पढ़ें.
अनुमतियां
PITR सेटिंग मैनेज करने के लिए ज़रूरी अनुमतियां पाने के लिए, अपने एडमिन से उस प्रोजेक्ट के लिए यहां दी गई IAM भूमिकाएं देने के लिए कहें जिसमें आपको PITR चालू करनी है:
- 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
- PITR डेटा एक्सपोर्ट करने के लिए:
datastore.databases.export
- PITR डेटा इंपोर्ट करने के लिए:
datastore.databases.import
शुरू करने से पहले
पीआईटीआर का इस्तेमाल शुरू करने से पहले, इन बातों का ध्यान रखें:
- आप पिछले सात दिनों से पढ़ना शुरू नहीं कर सकते PITR चालू करें.
- अगर डेटाबेस बनाते समय आपको पीआईटीआर को चालू करना है, तो आपको
gcloud firestore databases create
निर्देश. पीआईपी (पिक्चर में पिक्चर) की सुविधा चालू करते समय GCP कंसोल का इस्तेमाल करके डेटाबेस नहीं बनाया जा सकता. - Cloud Firestore अब से लेकर अब तक वर्शन को सेव रखना शुरू कर देता है PITR चालू करना.
- PITR बंद करने के बाद, PITR विंडो में PITR डेटा नहीं पढ़ा जा सकता.
- अगर पीआईटीआर को बंद करने के तुरंत बाद इसे फिर से चालू किया जाता है, तो पीआईटीआर का पुराना डेटा अब उपलब्ध नहीं है. पीआईटीआर को बंद करने से पहले बनाया गया कोई भी पीआईटीआर डेटा को PITR की समयसीमा खत्म होने के बाद मिटा दिया जाएगा.
- अगर आपने गलती से पिछले एक घंटे का डेटा मिटा दिया है और पीआईटीआर बंद कर दिया गया है, तो मिटाने के एक घंटे के अंदर पीआईटीआर को चालू करके, आपके डेटा को वापस लाया जा सकता है.
- पीआईटीआर की समयसीमा खत्म होने के बाद, डेटा को नहीं पढ़ा जा सका.
PITR चालू करें
PITR का इस्तेमाल करने से पहले, अपने Google Cloud के लिए बिलिंग की सुविधा चालू करें प्रोजेक्ट. सिर्फ़ ऐसे Google Cloud प्रोजेक्ट जिनमें बिलिंग की सुविधा चालू है, PITR फ़ंक्शन का इस्तेमाल किया जा सकता है.
अपने डेटाबेस के लिए PITR चालू करने के लिए:
कंसोल
Google Cloud Platform कंसोल में, डेटाबेस पेज पर जाएं.
डेटाबेस की सूची से ज़रूरी डेटाबेस चुनें.
नेविगेशन मेन्यू में, आपदा रिकवरी पर क्लिक करें.
सेटिंग में बदलाव करने के लिए, बदलाव करें पर क्लिक करें.
पॉइंट-इन-टाइम रिकवरी चालू करें चेक बॉक्स चुनें. इसके बाद, सेव करें पर क्लिक करें.
पीआईटीआर को चालू करने पर, स्टोरेज के लिए पैसे चुकाने होंगे. ज़्यादा जानकारी के लिए, कीमत देखें.
पीआईटीआर को बंद करने के लिए, GCP कंसोल के डिज़ास्टर रिकवरी पेज पर जाकर, पॉइंट-इन-टाइम रिकवरी चालू करें चेक बॉक्स से सही का निशान हटाएं.
gcloud
डेटाबेस बनाने के दौरान, gcloud firestore databases create
कमांड का इस्तेमाल करके PITR चालू करें:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
वैल्यू को इस तरह बदलें:
Location
- वह जगह जहां आप अपना डेटाबेस बनाना चाहते हैं.DATABASE_ID
- को डेटाबेस आईडी या (डिफ़ॉल्ट) पर सेट करें.TYPE
- फ़ायरस्टोर-नेटिव पर सेट करें.
gcloud firestore databases update
निर्देश का इस्तेमाल करके, पीआईपी (पिक्चर में पिक्चर) को बंद किया जा सकता है. इसके लिए, यह तरीका अपनाएं:
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
वैल्यू को इस तरह बदलें:
DATABASE_ID
- को डेटाबेस आईडी या (डिफ़ॉल्ट) पर सेट करें.
डेटा के रखरखाव की अवधि और सबसे पहले के वर्शन के बारे में जानकारी पाना
कंसोल
Google Cloud Platform कंसोल में, डेटाबेस पेज पर जाएं.
डेटाबेस की सूची से ज़रूरी डेटाबेस चुनें.
नेविगेशन मेन्यू में, आपदा रिकवरी पर क्लिक करें.
सेटिंग सेक्शन में, निजी डेटा के रखरखाव की अवधि और सबसे पुराना वर्शन समय पर ध्यान दें.
- निजी डेटा के रखरखाव की अवधि: वह अवधि जिसमें Cloud Firestore में बना रहता है डेटाबेस के लिए डेटा के सभी वर्शन. वैल्यू एक घंटे की होती है, जब पीआईटीआर होता है बंद कर दिया जाएगा और PITR चालू होने के सात दिन बाद तक दिखाया जाएगा.
- सबसे पुराना वर्शन समय: वह सबसे पुराना टाइमस्टैंप जिस पर पीआईटीआर विंडो में जाकर इस डेटा को पढ़ा जा सकता है. यह मान लगातार अपडेट किया जाता है जो Cloud Firestore से जुड़ा होता है. साथ ही, इस पर क्वेरी करते ही यह पुराना हो जाता है. अगर आपको डेटा वापस पाने के लिए इस वैल्यू का इस्तेमाल कर रहे हैं, तो पक्का करें कि वैल्यू के बारे में उस क्षण से क्वेरी की जाती है, जब आपने वापस पाना.
- पॉइंट-इन-टाइम रिकवरी: इसमें
Enabled
दिखता है. अगर पीआईटीआर चालू है. अगर पीआईटीआर बंद है, तो आपकोDisabled
.
gcloud
gcloud Firestore डेटाबेस का ब्यौरा देने वाले कमांड को इस तरह चलाएं:
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/(default)
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
- वह समयावधि जिसके लिए पीआईटीआर डेटा को मिलीसेकंड में सेव करके रखा जाता है. पीआईटीआर बंद होने पर, यह वैल्यू एक घंटे की हो सकती है. इसके अलावा, अगर पीआईटीआर चालू है, तो यह वैल्यू सात दिन की हो सकती है.
PITR डेटा पढ़ें
क्लाइंट लाइब्रेरी, REST API के तरीकों या FirestoreIO Apache बीम कनेक्टर का इस्तेमाल करके, PITR डेटा को पढ़ा जा सकता है.
क्लाइंट लाइब्रेरी
Java
PITR डेटा देखने के लिए, आपको 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();
नोड
PITR डेटा देखने के लिए, आपको 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
PITR रीड उन सभी Cloud Firestore तरीकों में काम करती है जिनमें get, list, batchGet, listCollectionIds, listDocuments, runQuery, runएग्रीगेशनQuery, और partitionQuery.
REST के तरीकों का इस्तेमाल करके पढ़ने के लिए, इनमें से कोई एक विकल्प आज़माएं:
पढ़ने के तरीके के अनुरोध में,
readOptions
तरीके मेंreadTime
वैल्यू को पीआईटीआर टाइमस्टैंप के तौर पर पास करें. PITR टाइमस्टैंप, पिछले घंटे के माइक्रोसेकंड में सटीक होने वाला टाइमस्टैंप या पिछले घंटे के बाद का पूरा मिनट टाइमस्टैंप हो सकता है, लेकिनearliestVersionTime
से पहले का नहीं हो सकता.एक से ज़्यादा पीआईटीआर रीड के लिए,
ReadOnly
लेन-देन के हिस्से के तौर पर,BeginTransaction
तरीके के साथreadTime
पैरामीटर का इस्तेमाल करें.
अपाची बीम
Dataflow की मदद से, Cloud Firestore डेटाबेस में दस्तावेज़ों को बड़े पैमाने पर पढ़ने या लिखने के लिए, Cloud FirestoreIO Apache बीम कनेक्टर का इस्तेमाल करें.
पीआईटीआर रीड का इस्तेमाल, नीचे दिए गए रीड के तरीकों में किया जा सकता है:
Cloud FirestoreIO कनेक्टर. पढ़ने के ये तरीके
आपके इस्तेमाल किए जाने वाले withReadTime(@Nullable Instant readTime)
तरीके को PITR के लिए इस्तेमाल किया जा सकता है
पढ़ता है:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
एक साथ पढ़ने या लिखने से जुड़ी कार्रवाइयों के लिए, डेटाफ़्लो पाइपलाइन कोड के उदाहरण के साथ नीचे दिए गए कोड का इस्तेमाल किया जा सकता है. इस उदाहरण में, पीआईटीआर रीड के लिए 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 डेटा स्टोर करने की जगह पर जाएं.
पीआईटीआर डेटा से एक्सपोर्ट और इंपोर्ट करें
PITR डेटा से अपने डेटाबेस को Cloud Storage में एक्सपोर्ट किया जा सकता है
gcloud firestore export
निर्देश का इस्तेमाल करके. पीआईटीआर डेटा को एक्सपोर्ट किया जा सकता है, जहां टाइमस्टैंप पूरे एक मिनट का टाइमस्टैंप होता है
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
- मिनट के स्तर पर पीआईपी (पिक्चर में पिक्चर) टाइमस्टैंप. उदाहरण के लिए,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 एक्सपोर्ट की प्रोसेस पूरी न हो पाने के लिए, आपसे शुल्क नहीं लिया जाएगा.
किसी डेटाबेस में इंपोर्ट करें.
अपने एक्सपोर्ट किया गया डेटाबेस. अगर कोई दस्तावेज़ आपके डेटाबेस में पहले से मौजूद है, तो ओवरराइट हो जाएगा.