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
答案 0 :(得分:3)
是否有更好的方法来获取firestore集合/文档的大小?
不,那是我要做的。好吧...总的来说,我会尽量避免使用此类易变的操作。但是,如果您真的需要知道集合中的文档占用了多少空间,则汇总每个文档大小的总和就是计算它的方法,并且Cloud Functions似乎是一种自然的技术,可以在每次更新时执行该计算。