【问题标题】:do any mongodb ORMs allow you to alias fields?是否有任何 mongodb ORM 允许您为字段起别名?
【发布时间】: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 美分是我自己的测试中 upublicationUrl 之间的开销非常小,通常你要么交易空间或速度方面,必须为大量收藏和高负载站点提供这种别名能力。我宁愿交易一些额外的字节而不是处理应用程序的毛球
  • 我从事过一个项目,由于数据量大(每晚生成数十亿条记录),因此需要单字符和双字符字段名称。从一开始,我们用符号为名称起别名,并使用哈希将符号映射到字段名称。这是可以接受的,但我们也坚持使用 Ruby 的 MongoDB 驱动程序并且没有使用 ORM。
  • @cfeduke 啊,这似乎是一个不错的选择,谢谢
  • @Sammaye 但在 ORM 方面myHugeVariable 实际上与m 相同。但是在数据库内部,如果您正在处理许多记录,它们并不是特别重要。她的观点是,当您开始紧张记忆时,字段名称可能会成为一个问题。
  • 确实可以,即my_awesome_field_that_is_really_big 会极大地占用内存,但如果您正确设置网络,则相对较小的东西之间的差异是......非常小。这当然会改变嵌套的嵌套子文档。您必须记住,对于您的应用程序提取的每个文档(取决于此处的内存管理),它需要存储您的哈希的两个副本,一个原始地图和一个新地图,然后需要翻译等,真的就像多做了两层。

标签: ruby node.js mongodb orm


【解决方案1】:

每个 this discussionMongoose allows for virtual field 名称带有 getter 和 setter。不幸的是,虚拟不能用于查询和其他服务器端操作,例如 map-reduce。讨论还建议 this plugin 使用别名,这似乎解决了查询问题,但我怀疑它也会在更复杂的服务器端操作时遇到问题。

【讨论】:

    【解决方案2】:

    这很容易使用 Ruby ORM Mongoid。这是直接来自docs 的示例:

    class Band
      include Mongoid::Document
      field :n, as: :name, type: String
    end
    
    band = Band.new(name: "Placebo")
    band.attributes #=> { "n" => "Placebo" }
    
    criteria = Band.where(name: "Placebo")
    criteria.selector #=> { "n" => "Placebo" }
    

    我在很多项目(尽管都是小项目)中使用过 Mongoid,并且非常喜欢使用它。文档真的很棒,文档中也有关于性能的部分。

    【讨论】:

      【解决方案3】:

      Doctrine MongoDB ODM 允许您为字段设置别名,而您的对象(包括 getter 和 setter)可以保持可读性:

      /** @String(name="pUrl") */ 私人 $publicationUrl;

      Annotations Reference — Doctrine MongoDB ODM 1.0.0-BETA2 documentation — Field

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多