cbd*_*per 14 firebase google-cloud-firestore
从Firestore docs 中,我们得到Firestore 文档的最大大小是:
文档的最大大小1 MiB(1,048,576 字节)
题
我如何知道单个文档的当前大小,以检查我是否接近 1mb 限制?
例子:
var docRef = db.collection("cities").doc("SF");
docRef.get().then(function(doc) {
if (doc.exists) {
console.log("Document data:", doc.data());
// IS THERE A PROPERTY THAT CAN DISPLAY THE DOCUMENT FILE SIZE?
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
Run Code Online (Sandbox Code Playgroud)
Dou*_*son 12
用于计算文档大小的计算在此处有完整记录。那里有很多文字,所以请导航到那里阅读。在这里复制所有文本是不值得的。
如果您必须在文档增长时手动计算其大小,我的观点是您可能没有对数据进行可扩展的建模。如果您有可以无限增长的数据列表,您可能不应该使用列表字段,而是将该数据放在新集合或子集合中的文档中。此规则有一些例外,但一般来说,您不必担心计算客户端代码中文档的大小。
Ale*_*ks 7
我发布了一个 npm包来计算 Firestore 文档的大小。
其他像sizeof或object-sizeof那样计算 JS 对象大小的包不会给你一个精确的结果,因为 Firestore 中的一些原语具有不同的字节值。例如,Js 中的 boolean 存储在 4 个字节中,在 Firestore 文档中存储为 1 个字节。Null 是 0 个字节,在 Firestore 中它是 1 个字节。
除此之外,Firestore 还拥有自己独特的固定字节大小的类型:地理点、日期、参考。
引用是一个大对象。像这样的包sizeof将遍历 Reference 的所有方法/属性,而不是在这里做正确的事情。即对文档名称的字符串值 + 其路径 + 16 个字节求和。此外,如果 Reference 指向父 doc ,sizeof或者object-sizeof不会在此处检测到循环引用,这可能比不正确的大小带来更大的麻烦。
对于想要根据最大1 MiB(1,048,576 字节)配额检查文档大小的 Android 用户,我制作了一个库,可以帮助您计算:
这样,您就可以始终保持在限制之下。这个库背后的算法是在关于Storage Size的官方文档中解释的算法。
我正在查看 Firebase 参考,期望元数据具有属性,但它没有。你可以在这里查看。
所以我的下一个方法是将物体的重量计算为近似值。该整型尺寸库似乎有其合理的API。
所以它会是这样的:
sizeof.sizeof(doc.data());
Run Code Online (Sandbox Code Playgroud)
我不会使用文档快照,因为它包含元数据,就像有待处理的保存一样。另一方面,在某些情况下,高估可能会更好。
[更新] 感谢道格史蒂文森的精彩见解
所以我很好奇实际会有多少差异,所以我用我笨重的 js 做了一个肮脏的比较,你可以在这里看到演示
考虑这个对象:
{
"boolean": true,
"number": 1,
"text": "example"
}
Run Code Online (Sandbox Code Playgroud)
并打折id这是结果:
| Method | Bytes |
|---------|-------|
| FireDoc | 37 |
| sizeOf | 64 |
Run Code Online (Sandbox Code Playgroud)
所以 sizeOf 库可能是一个很好的预测器,如果我们想高估(假设计算很好并且对于更复杂的实体或多或少地表现相同)。但正如评论中所解释的,这是一个粗略的估计。
| 归档时间: |
|
| 查看次数: |
9665 次 |
| 最近记录: |