gpt4 book ai didi

size - 计算 Google Firestore 文档的大小

转载 作者:行者123 更新时间:2023-12-03 14:29:20 27 4
gpt4 key购买 nike

Firestore 文档详细说明了如何手动计算文档的存储大小,但似乎没有在任何文档引用、快照或元数据中为此提供功能。

在我尝试使用我自己的计算之前,有没有人知道官方或非官方的函数?

这是我在 https://firebase.google.com/docs/firestore/storage-size 处对文档的解释中(完全未经测试)对此类功能的第一次剪辑。

function calcFirestoreDocSize(collectionName, docId, docObject) {
let docNameSize = encodedLength(collectionName) + 1 + 16
let docIdType = typeof(docId)
if(docIdType === 'string') {
docNameSize += encodedLength(docId) + 1
} else {
docNameSize += 8
}
let docSize = docNameSize + calcObjSize(docObject)

return docSize
}
function encodedLength(str) {
var len = str.length;
for (let i = str.length - 1; i >= 0; i--) {
var code = str.charCodeAt(i);
if (code > 0x7f && code <= 0x7ff) {
len++;
} else if (code > 0x7ff && code <= 0xffff) {
len += 2;
} if (code >= 0xDC00 && code <= 0xDFFF) {
i--;
}
}
return len;
}

function calcObjSize(obj) {
let key;
let size = 0;
let type = typeof obj;

if(!obj) {
return 1
} else if(type === 'number') {
return 8
} else if(type === 'string') {
return encodedLength(obj) + 1
} else if(type === 'boolean') {
return 1
} else if (obj instanceof Date) {
return 8
} else if(obj instanceof Array) {
for(let i = 0; i < obj.length; i++) {
size += calcObjSize(obj[i])
}
return size
} else if(type === 'object') {

for(key of Object.keys(obj)) {
size += encodedLength(key) + 1
size += calcObjSize(obj[key])
}
return size += 32
}
}

最佳答案

在 Android 中,如果您想根据 1 MiB(1,048,576 字节)的最大值检查文档的大小,有一个库可以帮助您:

  • https://github.com/alexmamo/FirestoreDocument-Android/tree/master/firestore-document

  • 这样,您就可以始终保持在限制之下。这个库背后的算法是在关于 Storage Size 的官方文档中解释的算法。 .

    关于size - 计算 Google Firestore 文档的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49473148/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com