【问题标题】:Pre calculated counts relative to variety of options相对于各种选项的预先计算的计数
【发布时间】:2015-08-27 14:37:51
【问题描述】:

与我一直在努力通过谷歌寻找解决方案的原因相同,我在为这篇文章的标题而苦苦挣扎,我在问什么??

我通常会在 rails+postgresql 中编写这个应用程序,但我被meteor+mongodb 所吸引,尽管这可能与问题无关。

我正在尝试为数据库模型预先计算和索引值,该模型应该根据用户提供的其他参数进行更改/更新。该数据库将包含数百万条记录,因此预先填充这些值将是理想的。

我最终将拥有一个充满“公司”的数据库,这些“公司”具有各种属性,例如:

location_country
location_city
incorporation_month
incorporation_year
...

在列出所有公司时,网站将允许用户通过上述属性缩小列表范围。

因此,我通常会在将公司添加到数据库时为每个属性的值添加一个计数器,并且可以在列表网页中快速访问此计数,例如:

select country:
    > England (22 companies)
    > France (26 companies)
    ...

但是当一个人可以向搜索添加多个参数时,事情就变得更加棘手了:

Select incorporation year:
    2015 (126 companies) SELECTED
    2014 (435 companies)
    2013 (315 companies)

# below counts are including the above selection as a parameter
# but should be pre calculated

Select location:
    England (13 companies)
    France (8 companies)

我正试图弄清楚我应该保存什么,以便无论给出什么搜索参数序列,我都可以进行计数。

这个问题非常模糊,因为我只是在寻找我应该搜索或阅读的内容/位置的指示。

如果有人能指出我正确的方向,我将不胜感激?

【问题讨论】:

  • 您知道人们对早期优化的看法...您将遭受组合爆炸的困扰,只需保留所有计数,然后在它们发生变化时对其进行更新。这个问题绝不应该是您选择哪个框架/堆栈的门控项目,这种功能已经构建在每个框架中。

标签: mysql ruby-on-rails mongodb meteor database


【解决方案1】:

这里有一个选项...为用于计算计数的对象保留一个 ID 数组,然后当您选择多个参数时,您可以合并这些数组以获取您的计数。

例子

# Anywhere
Counts = new Mongo.Collection("counts");

# Client (or maybe Server method)
countByLocationEngland = Counts.findOne({location_country: 'GB'});

countByIncorporationYear = Counts.findOne({incorporation_year: 2015});

union = _.union(countByLocationEngland.array, countByIncorporationYear.array);

count = union.length

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2018-03-03
    相关资源
    最近更新 更多