我正在尝试查看是否可以将特定算法转换为 RavenDB/CouchDB 使用的那种 map-reduce 索引,即“预先计算的”map-reduce(这意味着索引在插入和更新时刷新,而不是在执行实际查询)。
假设我们有一个典型的在线商店,有 50,000 种产品,按类别分组。每个产品都有一个“属性值”的集合,例如“[Red, Round, Metal]”。
由于我们的网站上有很多产品,而且每个类别中可能有很多项目,我们希望为用户提供另一种方式来“过滤”他当前看到的产品。
例如,如果一个类别是“低于 20 美元”,那么这个类别中有一大堆产品。但是我们的用户只需要看到低于 20 美元和红色的产品。不幸的是,“低于 20 美元”类别中没有子类别“红色”。
我们的算法将获取当前的产品列表,并生成一个“有趣的”属性和属性值列表,即,给定一个产品列表,它会输出如下内容:
Color
Red (40)
Blue (32)
Yellow (17)
Material
Metal (37)
Plastic (36)
Wood (23)
Shape
Square (56)
Round (17)
Cylinder (12)
这种算法是否可以通过某种方式预先计算 à la RavenDB/CouchDB map-reduce 索引?如果不是,为什么是这样(这样我将来可以识别那种算法),如果是,怎么做?
提供了一个C# 4.0 Visual Studio 测试解决方案,它演示了潜在的数据结构和示例数据,以及尝试使用 map-reduce 实现(这似乎不是可预计算的)。