工作中主要负责的系统主要以MongoDB数据库为主,开发过程中积累了一些经验和实际使用case,前一段时间把相关的场景整理了一下,组织了几篇文章。另外我尝试想把这些文发布到MongoDB中文社区,与负责人沟通后,他们提出了一些文章中有待商榷和不严谨的地方,我在这里做一个梳理和复盘修正。
关于时间存储格式
时间可以直接定义为格式化的时间,便于识别和查询。不必特意存储时间戳,这样方便可视化的工具查询核对。
这里的格式化的时间有歧义,会被认为是时间字符串,比如(2019-07-03 19:10:11),我的本意是想表达使用ISODate类型的时间格式存储。
时间戳和时间格式两个数据类型的存储是一个选择问题,有的人习惯使用时间戳存储,有的人习惯用时间类型存储。
建议存时间戳的认为,时间转换成字符串很方便,字符串转换成时间很不方便。还有效率的问题。
字段语义化和字段映射
字段长度尽可能的短,不宜过长。也是考虑到内存优化。
原厂专家的建议是
实际并不存在长短的问题,因为有压缩,字段名这种重复的字段压缩后可以忽略
最开始我在考虑MongoDb是基于内存和key value形式的数据库,
关于【命名规范,短字符的建议】这一条,我在官方和社区都没有找到正面的回应,官方的文档大多是以小写命名做字段定义的,所以对于这个观点 我也是在逐步否定,或者说这种做法对内存的优化并不明显,反而牺牲了字段语意化,增加了开发字段映射和沟通成本。
正常的做法是:按照驼峰或者全部小写的语义化命名即可
单文档宽度
注意这种情况下,切忌文档过宽。那如何避免这种情况,我的方法是预估最大字段数,以20个字段为节点,多于20则采用嵌套document的设计方式组织document。
这是工作中的设计经验,有不严谨的地方,容易误导读者。不应该有20的这个量化数据,我的本意是,如果一级属性太多,可以整理为二级嵌套字段,仅此而已。
MongoDb开发系列:认识不一样的MongoDb
MongoDb的历史,应用领域,行业热衷特点
MongoDb开发系列:不畏时间操作
MongoDB开发系列,助力开发的驱动及注意事项
MongoDB开发系列,基于MongoDb 数据库产品概括
文章已同步到公众号《图南科技》欢迎关注