java - 最佳实践 : Save Empty Fields as null or omit Field Completely and Manage Missing Fields in Code?

标签 java json mongodb

鉴于集合将包含 50 多万份文档, 每个文档都有最大数量的字段(如选项 a 所示) 处理可能为空/稀疏的字段的最佳实践是什么?

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 ram 使用和性能方面考虑,将字段保留为 null 有哪些注意事项? 本质上,省略空字段会造成应用程序需要实现一种方法来检查字段是否存在的情况。 如果将这个“空检查”委托(delegate)给代码,在应用程序层面应该有哪些考虑?重吗? 如果集合中的字段为空,是否会忽略这些字段,将重量委托(delegate)给客户端代码层?

最佳答案

我的建议是将它们保留为空并检查该字段是否存在。与关系数据库相比,文档数据库的一个缺点是表只需提供一次列名,而每个文档必须提供该文档中每个字段的名称。

因此,考虑到您有 5000 万个文档,并且字段名称 technical_description 的长度约为 20 个字符,因此,仅用于解释每个文档中的一个键名称就会占用超过 1 GB 的存储空间。如果一半文档的值为 null,那么至少有一半的 GB 空间被完全浪费。

如果文档加载到内存中,该空间在 RAM 中使用。使用索引时,索引将被放入内存中,然后发送到客户端的任何文档都需要根据要求放入内存中。通常,并非所有文档都会同时访问,并且 MongoDB 内置了带有游标对象的分页功能。

另一方面,我不太了解在Java中确定一个对象不具有某个字段的工作量有多大,但看起来这应该是一个相当轻的操作。

关于java - 最佳实践 : Save Empty Fields as null or omit Field Completely and Manage Missing Fields in Code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221393/

相关文章:

java - EasyMock JUnit 测试在 setter 方法上抛出错误

java - 无法访问的代码编译没有错误 - 如何?

java - 如何在不必实现接口(interface)方法的情况下使用它们?

java - MongoDB,如何使用 JAVA 代码在集合之间建立链接

javascript - mongodb 中的 json 对象

java - 在ArrayBlockingQueue中,为什么将final成员字段复制到本地final变量中?

json - 如何将 MongoDB 文档转换为 JSON 对象

JavaScript:比较两个 JSON 对象的结构,同时忽略它们的值

python - Pandas read_json : skip first lines of the file

javascript - 仅返回 MongoDB 查询中一个字段的不同值