Mapreduce 我的数据结构和查询在RavenDB中是否可行?

Mapreduce 我的数据结构和查询在RavenDB中是否可行?,mapreduce,ravendb,Mapreduce,Ravendb,SQL Server中的数据结构存在问题,因为我们是按计算字段排序的。考虑到这一点,我们想知道是否有可能使用map reduce来准备索引,以保持我们的响应快速-特别是在RavenDB中 FYI——我以前在DBA上问过这个问题,得到了一些很好的答案,但是想考虑一下这种不同的方法: 我将尝试给出一个例子-这不是我的表结构-我只是试图概述问题,以便找到解决方案 人名 兄弟的名字 姐妹姓名Id,姓名 PersonBrothers加入表PersonId,BrotherNameId PersonSist

SQL Server中的数据结构存在问题,因为我们是按计算字段排序的。考虑到这一点,我们想知道是否有可能使用map reduce来准备索引,以保持我们的响应快速-特别是在RavenDB中

FYI——我以前在DBA上问过这个问题,得到了一些很好的答案,但是想考虑一下这种不同的方法:

我将尝试给出一个例子-这不是我的表结构-我只是试图概述问题,以便找到解决方案

人名

兄弟的名字

姐妹姓名Id,姓名

PersonBrothers加入表PersonId,BrotherNameId

PersonSisters加入表PersonId,SisterNameId

好吧,想象一下这个数据库容纳了来自一个小国的每个人。数据库保存着每个人的兄弟姐妹的姓名记录,它不会将一个人映射到他们的兄弟姐妹——只是他们的姓名,这样我们就可以找到关于姓名的统计数据

显然,许多名称是共享的,因此目前在SQL Server中,联接表为我们规范了这一点

我想做的是,取一个用户,找出系统中每个其他用户的兄弟姓名匹配数和姐妹姓名匹配数,然后将这两个匹配项相加,按降序排列。因此,这将为我们提供一个拥有最多兄弟姐妹共同名字的用户列表

我只对前十名的比赛感兴趣,但我想我必须得到全部的结果才能算出前十名的比赛

请注意,在我的实际数据中,一个人可以有一百万个兄弟姐妹。这就是我遇到性能问题的地方

这就是我计算兄弟和姐妹匹配的方法

select p.id, matches
FROM Person p
LEFT JOIN 
    (
        SELECT 
        COUNT(*) AS Matches,
        pbn.PersonId
        FROM PersonBrothersNames pbn
        INNER JOIN Brothersnames bn on pbn.BrothernameId =bn.Id
        inner join PersonBrothersName otherpbn on otherpbn.BrothernameId = bn.Id

        WHERE pbn.PersonId= @PersonId and pbn.PersonId <> otherpbn.personid
        GROUP BY  pbn.PersonId

    ) As BrothersNamesJoin ON BrothersNamesJoin.Person = p.Id

您可以这样做:

     { "Name": "a", "Brothers": ["b","c"] }
然后,您可以为他们编制索引,并使用更类似于此的捆绑包来搜索具有类似兄弟姓名的其他人。
是的,它会给你排名。

如果一个人能有150万个兄弟,我知道这在现实生活中是不可能的,这还会用一个更像这样的指数快速响应吗?是的,因为它不会以同样的方式处理这个问题。它对相似性向量进行比较。和往常一样,你必须进行测试。我没有用1.5 mil对它进行测试,但它是用大量数据进行测试的。谢谢Ayende-稍后将在这里进行测试和评论。正如您的回答中所述,我们尝试保存一个包含1.5 mil条目的文档,每个条目都很长,Silverlight应用程序没有响应。这是因为Raven无法管理如此大的文档还是silverlight客户端的限制?我们将尝试直接查询。。。