firebase 获取firestore集合大小

osh3o9ms  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(122)

TL;DR是否有API可以获取firestore集合大小,而不必手动执行此操作?

因此,根据他们的文档,可以通过识别他们的数据类型来计算文档大小。
下面是一个示例代码来说明上述内容:

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一样通过存储空间来限制一个帐户(每个用户15 GB)。我想通过每个帐户都是一个由account_id标识的集合来实现这一点。例如:

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

相关帖子:calculating size of google firestore documents

ogq8wdun

ogq8wdun1#

有没有更好的方法来获得firestore集合/文档大小?
不,我差不多也会这么做。嗯......一般来说,我会尽量避免这种操作,因为它们是高度不稳定的。但是如果你真的需要知道集合中的文档占用了多少空间,那么计算每个文档大小的总和就是一种方法,而云函数似乎是一种自然的技术,可以在每次更新时执行这种计算。

t1rydlwq

t1rydlwq2#

您可以使用firestore_size来计算firestore中文档的大小。
安装使用:

pip install firestore_size

以下是如何使用它的示例:

from firestore_size.calculate import document_size

# initialize firebase and firestore client

collection = db.collection("data")
doc = collection.doc(id).get()
data = doc.to_dict()

doc_size = document_size(data)
print("Doc Size is ", doc_size)

点击此处查看更多信息:https://github.com/WaseemSabir/firestore_size

相关问题