鉴于将有5000多万份文件的集合, 每个文档都有最大字段数(如选项a所示) 处理可以为null /稀疏的字段的最佳做法是什么?
a)将具有相同字段和空字段的每个文档保存为null是否更好?
{
"_id": "54ca5b234d2dfeba4f9ab613",
"person_id": 1,
"person_name": "Bob",
"office_phone": null,
"description": "This is where the description is entered",
"technical_description": null
}
b)或者,如果他们没有数据,最好省略字段吗?
{
"_id": "54ca5b234d2dfeba4f9ab613",
"person_id": 1,
"person_name": "Bob",
"description": "This is where the description is entered",
}
在mongod
内存使用和性能方面保留字段为null的注意事项是什么?
基本上省略空的字段会产生一种情况,即应用程序需要实现检查字段是否存在的方法。
如果将此“空检查”委托给代码,应该在应用程序级别进行哪些考虑?它很重吗?
如果集合中的字段为空,则省略该字段只会将沉重代表委托给客户端代码层吗?
答案 0 :(得分:2)
我的建议是将它们留空并检查该字段是否存在。文档数据库相对于关系数据库的一个缺点是,表只需要提供一次列的名称,而每个文档必须提供该文档中每个字段的名称。
因此,考虑到您有5000万个文档且字段名称technical_description
长度大约为20个字符,因此每个文档中只有一个密钥名称才会使用超过1 GB的存储空间。如果您的一半文档的值为null
,那么这至少是GB完全浪费空间的一半。
如果文档已加载到内存中,则将用于RAM中。使用索引时,索引将被放入内存中,然后发送到客户端的任何文档都需要在被要求时放入内存。通常不是所有文档都是一次访问的,MongoDB已经内置了一个游标对象。
另一方面,我并不熟悉Java中确定某个对象没有某个字段的重要程度,但它看起来应该是一个相当轻松的操作。