在博客与MongoDB中滚动,表达和Node.js的作者提到它缩短属性名是个好主意:
....用MongoDB的经常报告的问题是数据的磁盘上的大小...每个记录存储所有现场的名字....这意味着,它往往可以更节省空间,以具有性如“T”,或“b”,而不是“标题”或“身体”,不过因为怕混乱的,除非真正需要我会避免这种情况!
我知道如何做到这一点的解决方案。 我更感兴趣时,这的确是必要的吗?
在博客与MongoDB中滚动,表达和Node.js的作者提到它缩短属性名是个好主意:
....用MongoDB的经常报告的问题是数据的磁盘上的大小...每个记录存储所有现场的名字....这意味着,它往往可以更节省空间,以具有性如“T”,或“b”,而不是“标题”或“身体”,不过因为怕混乱的,除非真正需要我会避免这种情况!
我知道如何做到这一点的解决方案。 我更感兴趣时,这的确是必要的吗?
引述高德纳 :
过早的优化是所有罪恶的根源(或至少大部分)在编程。
构建应用程序似乎然而最明智的,维护和逻辑。 然后,如果你有性能或存储问题,对付那些有最大的影响,直到性能令人满意或收益递减的规律意味着有进一步的优化是没有意义的。
如果您不确定的特殊设计决策的影响(如长属性名),创建原型来测试各种假设(如“将较短的属性名称节省多少空间”)。 不要指望测试的结果是决定性的,但它可以教你的东西,你没有想到去学习。
保持优先级的优先级以上的有意义的名称为短名称,除非你自己的情况和测试提供了一个具体的理由来改变这些优先事项。
正如提到的评论的SERVER-863 ,如果你使用的MongoDB 3.0+启用与活泼的压缩WiredTiger存储选项,长字段名的压缩有效地照顾缩短为你变得不再是一个问题。
底线了:所以,保持紧凑,因为它仍然停留有意义。
我不认为这是每一个真正需要被缩短到一个字母的名字。 反正你应该缩短他们尽可能的,你觉得舒服。 比方说你有一个用户名:{名字,中间名,姓氏}你可能会好到哪里去甚至名称:{第一,中间,最后}。 如果你感觉很舒服,你可能是罚款的名字:{F,M,L}。
您应使用短名:由于它会占用磁盘空间,内存,从而可能会有所放缓您的应用程序(较少的对象在内存中保留,由于大尺寸和更长的查询时间慢查询时间为寻求在数据需要更长的时间)。
一个很好的模式文档可以告诉大家,t代表镇而不是为标题的开发商。 根据您的堆栈上,你甚至可以从通过一些辅助utils的这些捷径努力不懈,它隐藏了开发商。
最后,我要说的是,有没有指引,何时以及有多少,你应该缩短您的架构名称。 这在很大程度上取决于你的环境和需求。 但是,你就可以保持紧凑,如果你能提供一个很好的文件,说明一切和/或提供utils的缓解的开发者和管理员的生活。 反正管理员很可能直接与MongoDB的互动,所以我想有一个好的文档不容错过。
如果使用冗长的XML,试图改善与自定义名称可能是非常重要的。 在服务器863票的用户评论在他的情况说。 我'存储外部定义的XML对象,具有详细的命名:该字段名都,也许,总记录大小的70%。 因此,字段名标记化可能是一个巨大的胜利,无论是在I / O和存储效率方面“。
添加在此我的2美分..
龙命名的属性(或“AbnormallyLongNameAttributes”),可以在设计数据模型来避免。 在我以前的组织我们测试保持短命名的属性策略,比如,组织定义4-5字母编码字符串,如:
虽然我们在查询性能观察到的提高,主要是由于在数据的尺寸的减小被通过网络传输,或(因为我们使用JAVA与MongoDB的)在MongoDB中文件/ Java的地图堆空间“钥匙”的长度的减小,在性能上的全面提升是低于15%。
在我个人看来,这是来了在维护/管理设计数据的附加系统的额外费用(和一个巨大的头痛)微optimzation属性字典对每个数据模型。 被要求这个系统有一个组织广泛的透明度,同时调试应用程序/应答客户查询。
如果你在一个位置,发现自己哪里高达在这一战略的性能提高20%是赚钱的你,可能是时候扩展您的MongoDB服务器/选择一些其他的数据建模/查询策略,或者选择不同的数据库完全。