gpt4 book ai didi

ruby-on-rails - 在MongoDB中使用巨大的 "documents"不好吗?

转载 作者:可可西里 更新时间:2023-11-01 09:13:53 26 4
gpt4 key购买 nike

既然我们可以用任何我们想要的方式构造一个 MongoDB,我们就可以这样做

{ products:
[
{ date: "2010-09-08", data: { pageviews: 23, timeOnPage: 178 }},
{ date: "2010-09-09", data: { pageviews: 36, timeOnPage: 202 }}
],
brands:
[
{ date: "2010-09-08", data: { pageviews: 123, timeOnPage: 210 }},
{ date: "2010-09-09", data: { pageviews: 61, timeOnPage: 876 }}
]
}

随着我们日复一日地向其中添加数据,products 文档和brands 文档将变得越来越大。 3 年后,productsbrands 中将有一千个元素。对 MongoDB 不好吗?我们是否应该将其分解为 4 个文档:

{ type: 'products', date: "2010-09-08", data: { pageviews: 23, timeOnPage: 178 }}
{ type: 'products', date: "2010-09-09", data: { pageviews: 36, timeOnPage: 202 }}
{ type: 'brands', date: "2010-09-08", data: { pageviews: 123, timeOnPage: 210 }}
{ type: 'brands', date: "2010-09-08", data: { pageviews: 61, timeOnPage: 876 }}

那么 3 年后,将只有 2000 个“文档”?

最佳答案

假设您正在使用 Mongoid(您标记了它),您可能不想使用您的第一个模式想法。每次你想查找一个小值时,Mongoid 都拉出那些巨大的文档是非常低效的。

对您来说可能更好的模型是:

class Log
include Mongoid::Document

field :type
field :date
field :pageviews, :type => Integer
field :time_on_page, :type => Integer
end

这将为您提供如下所示的文档:

{_id: ..., date: '2010-09-08', type: 'products', pageviews: 23, time_on_page: 178}

不用担心文档的数量 - Mongo 可以处理数十亿个文档。您可以根据类型和日期编制索引,轻松找到您想要的任何数字。

此外,通过这种方式,通过驱动程序更新记录要容易得多,甚至无需从数据库中提取记录。例如,在每次网页浏览中,您可以执行以下操作:

Log.collection.update({'type' => 'products', 'date' => '2010-09-08'}, {'$inc' => {'pageview' => 1}})

关于ruby-on-rails - 在MongoDB中使用巨大的 "documents"不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com