【发布时间】:2021-02-11 11:42:11
【问题描述】:
情况如下:我有一个 Firestore 数据库。我每天都将它下载到 Google Cloud Storage Bucket 作为备份。如果我想在本地下载它,我使用这个命令gsutil -m cp -r gs://BUCKET_PATH "DESTINATION_PATH" 并且它工作正常。
我的问题:我下载的Bucket的格式是LevelDB(我认为)。在我的机器上,它看起来像这样:
例如,这是我通过 Google 存储下载时在 Firestore 中的 /users 集合。在文件夹中,我有多个二进制文件(“output-...”)和一个文件(这里:“all_namespaces_kind_users”)用于元数据。
我的目标:我希望能够在 json 文件中读取我的数据库。
我的尝试:
- 我尝试使用这个转换器:https://github.com/Venryx/firestore-leveldb-tools,但它使用 Python2 和一些旧的谷歌库。使用这个转换器,我必须在本地下载 SDK(见下文)。
#repoRoot = os.getcwd()
repoRoot = os.path.dirname(os.path.realpath(__file__))
# import google sdks
sys.path.append(os.path.join(repoRoot, 'SDKs/google_appengine'))
sys.path.append(os.path.join(repoRoot, 'SDKs/google-cloud-sdk/lib/third_party'))
from google.appengine.api.files import records
from google.appengine.datastore import entity_pb
from google.appengine.api import datastore
- 使用先例转换器,我尝试使用以下建议将其更新为 Python3:https://github.com/Venryx/firestore-leveldb-tools/issues/1#issuecomment-674563473。我成功替换了第一个导入
from google.appengine.api.files import records,但没有替换其他两个。 - 对于另外两个:
from google.appengine.datastore import entity_pb和from google.appengine.api import datastore,我看到了这个:https://pypi.org/project/protobuf-cloud-datastore-translator/,但我不完全理解。
我的问题:如何将我的 Firestore 数据库(存储在 Google 存储桶中)转换为 json 文件? 也许有人有完全不同的提议方法?还是我应该坚持我的方式?在这种情况下,如何使用更新的谷歌库完成将转换器转换为 Python3 的工作?
BONUS QUESTION:如何 h**l 没有 Google 有一个干净的解决方案? (还是我傻?)
【问题讨论】:
-
您使用什么命令或配方来备份数据库?
-
我每天都在使用云函数和 Google Cloud Scheduler 调用该函数。我采用了与此处编写的相同的 Cloud 功能:medium.com/swlh/…(在 index.js 下)
-
您好,一个不错的选择可能是在您的云功能中,每次您在使用 node-firebase-import-export 将数据库导出为 json 格式的同时对存储桶进行备份(查看导出部分) 然后你把它发送到其他地方保存。
-
你找到解决这个问题的方法了吗?我有一种感觉,谷歌让这一切变得尽可能痛苦,以获取您的数据以绑定您的服务
-
只需检查接受的解决方案。效果很好(子集合除外)。
标签: python firebase google-cloud-firestore google-cloud-storage google-cloud-datastore