【问题标题】:Get firestore collection size获取 Firestore 集合大小
【发布时间】:2019-07-06 18:41:11
【问题描述】:

TL;DR 是否有 API 来获取 Firestore 集合大小,而不是我们必须手动进行?

所以根据他们的docs,可以通过识别他们的数据类型来计算文档大小。

示例代码如下:

import datetime

def calculate_doc_size(data):
    if isinstance(data, dict):
        size = 0
        for key, value in data.items():
            key_size = len(key) + 1
            value_size = calculate_doc_size(value)
            key_pair_size = key_size + value_size
            size += key_pair_size
        return size
    elif isinstance(data, str):
        return len(data) + 1
    elif any([isinstance(data, bool), data is None]):
        return 1
    elif isinstance(data, (datetime.datetime, float, int)):
        return 8
    elif isinstance(data, list):
        return sum([calculate_doc_size(item) for item in data])

def calculate_doc_name_size(path):
    size = 0
    for collection in path.split('/'):
        size += len(collection) + 1
    return size + 16

document = {'a': {'a': 1, 'b': 2, 'c': None}, 'b': [1, 2, 3], 'c': [{'a': 1}]}
size =  calculate_doc_name_size('database/account1/my_doc_id') + calculate_doc_size(document) + 32
print(size) # prints 139

所以我的想法是使用云函数计算on write 事件中的文档大小,并维护一个计数器来指定任何给定时间点的集合大小。 (大小以字节为单位)

我所说的大小不是文档中键的数量,而是占用的存储空间。

有没有更好的方法来获取 Firestore 集合/文档大小?

用例:
假设我想像 gmail 那样通过存储空间来限制帐户(每个用户 15GB)。我想通过每个帐户都是由 account_id 标识的集合来实现这一点。 示例:

- database
    - account 1
        - collection 1
        - collection 2
    - account 2
        - collection 1
        - collection 2

相关帖子:calculating size of google firestore documents

【问题讨论】:

    标签: python firebase google-cloud-firestore


    【解决方案1】:

    有没有更好的方法来获取 Firestore 集合/文档大小?

    不,这就是我要做的。好吧...总的来说,我会尽量避免此类操作,因为它们非常不稳定。但是,如果您确实需要知道集合中的文档占用了多少空间,那么汇总每个文档的大小之和是计算它的方法,而 Cloud Functions 似乎是一种在每次更新时执行该计算的自然技术。

    【讨论】:

    • 感谢您的快速回复。是否会将任何此类 API 添加到 Firestore?不要求这样的路线图。这对于确定文档大小是否超过 1MB 的限制也很有用。我正在寻找类似db.collection('some-collection').getSize() 甚至更好的db.collection('some-collection').document('some-doc-id').getSize()
    • 目前还没有在 API 中添加这样一个“集合的存储大小”的工作,我个人也没有看到对这个特定功能有很多需求。您可以随时通过filing a feature request投票。
    • 肯定会将其添加为功能请求。但可以肯定的是,firebase 团队目前正忙于在 firestore 中开发 OR queries 支持,这已经获得了很大的关注,所以这将被搁置。此功能对于查找跨所有集合和子集合的数据分布以及调试很有用。谢谢你的时间:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2012-11-12
    • 2015-09-08
    • 2020-11-24
    • 2020-03-07
    • 2018-04-09
    • 2021-03-04
    相关资源
    最近更新 更多