【发布时间】:2012-12-31 21:40:44
【问题描述】:
我刚刚看了这个:http://blog.mongodb.org/post/38467892360/mongodb-schema-design-insights-and-tradeoffs-from
谈话中提出的一个建议:在将被多次复制的文档中,尽量使字段名称尽可能小:
通过始终使用短字段名称来减少集合大小 惯例。这将帮助您随着时间的推移节省内存。
选择“u”而不是“publicationUrl”。如果您谈论的是数百万行,这是有道理的。但是,存在很大的可读性问题。很明显,该值是一个 url,但它是什么类型的 url?
不过,这在 ORM 中可能是可以解决的。与 MongoDb 接口的任何 ORM 是否允许您说数据库中的“u”将映射到代码中的“publicationUrl”?当你在代码中有a.u 这样的东西时,可读性很差; article.u 也好不到哪里去。
(有 Ruby 和 node.js 标签是因为这些是我使用 mongo 的语言。随意添加标签。)
【问题讨论】:
-
我不知道任何 ruby 和 node.js 但我的 2 美分是我自己的测试中
u和publicationUrl之间的开销非常小,通常你要么交易空间或速度方面,必须为大量收藏和高负载站点提供这种别名能力。我宁愿交易一些额外的字节而不是处理应用程序的毛球 -
我从事过一个项目,由于数据量大(每晚生成数十亿条记录),因此需要单字符和双字符字段名称。从一开始,我们用符号为名称起别名,并使用哈希将符号映射到字段名称。这是可以接受的,但我们也坚持使用 Ruby 的 MongoDB 驱动程序并且没有使用 ORM。
-
@cfeduke 啊,这似乎是一个不错的选择,谢谢
-
@Sammaye 但在 ORM 方面
myHugeVariable实际上与m相同。但是在数据库内部,如果您正在处理许多记录,它们并不是特别重要。她的观点是,当您开始紧张记忆时,字段名称可能会成为一个问题。 -
确实可以,即
my_awesome_field_that_is_really_big会极大地占用内存,但如果您正确设置网络,则相对较小的东西之间的差异是......非常小。这当然会改变嵌套的嵌套子文档。您必须记住,对于您的应用程序提取的每个文档(取决于此处的内存管理),它需要存储您的哈希的两个副本,一个原始地图和一个新地图,然后需要翻译等,真的就像多做了两层。