【问题标题】:Seperate Object over multiple models or encode in JSON?在多个模型上分离对象或在 JSON 中编码?
【发布时间】:2011-06-06 17:05:38
【问题描述】:

对不起,如果这个问题听起来很奇怪,但我真的不知道该怎么说。 本质上,我的应用程序将包含一堆对象。每个对象都有某种帖子/评论结构,但独特的是,它或多或少是静态的,所以我发现将每一个帖子和评论放入我的数据库是没有意义的,因为这会导致更多数据库负载?取而代之的是,我正在考虑将帖子的 JSON 表示与其 cmets 放在一起,因此每个对象只会导致一次数据库访问。然后我会在控制器或视图或其他东西中呈现 JSON 对象。这是一个有效的解决方案吗?

【问题讨论】:

    标签: ruby-on-rails model-view-controller database-design data-modeling


    【解决方案1】:

    没有!

    除非您的规模很大,否则您将失去所有查询该数据的能力,这对您没有任何好处。数据库的工作是有效地为您提取这些内容,如果您创建正确的索引并实施正确的缓存策略,您应该不会遇到任何数据库负载问题。为了提高速度,你想用你自己的明显不太有用的版本替换 Rails ORM 的所有优点,在你需要它之​​前。

    如果以后你想做一个最流行的 cmets 侧边栏小部件怎么办?或者您想在表格中浏览 cmets,而不管它们与哪个帖子相关联,以进行审核?如果您希望您的数据可搜索怎么办?

    不要为了过早优化而牺牲您轻松查询和操作数据的能力。

    【讨论】:

    • 我想我没有强调,对象是真正静态的,所以它们是不可更新/可更改的。我试着把它们想象成快照/图像。因为它们被放入数据库后不会被更改,我认为将它们分开是没有意义的,对吧?
    • 事后看来总是更明智。幸运的是,两年后我变得更聪明了
    【解决方案2】:

    虽然这听起来是个好主意,但我认为从长远来看,当你的帖子上有很多 cmets 时会发生什么,我认为它不会奏效。您必须从数据库中获取长字符串,然后将新评论添加到其中,然后在数据中更新它。与在表格中再插入一条评论相比,这将是非常低效的。

    另外,想想会发生什么,如果在某个时候,您将不得不让用户选择更新评论。从那个长字符串中获取特定的评论然后更新它将是一场噩梦,你不觉得吗?

    【讨论】:

    • 我想我没有强调,对象是真正静态的,所以它们是不可更新/可更改的。我试着把它们想象成快照/图像。因为它们被放入数据库后不会被更改,我认为将它们分开是没有意义的,对吧?
    • 如果您绝对确定一旦将它们放入数据库,它们就不会改变,有点像仅报告的数据库,那么我肯定不会发现您的方法有任何问题。事实上,它会加速您的网站,因为不会有表连接等。请记住,您可能仍需要在某个阶段进行分页
    【解决方案3】:

    一般来说,您希望使用 JSON 等作为最后的手段。如果您的信息不一定提前知道,那么将 JSON 存储在数据库中是有意义的。它不能替代适当的数据建模,也不能在性能方面取胜。

    为了让您了解我正在考虑在项目中使用它的位置,在 LedgerSMB 中,我们希望能够让顾问跟踪有关某些 db 对象的附加信息。因为我们事先不知道它会是什么,所以 JSON 很有意义。我们不希望搜索数据或支持搜索数据,但如果我们这样做,可以使用 plv8js 进行安排。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多