【发布时间】:2013-09-10 19:41:06
【问题描述】:
我是 RavenDB 的新手,我有一个 Raven DB 文档:
Student
{
Id : int
Subjects : List<int>
}
我正在尝试编写查询以获取 id 为 1 的学生和 id 为 2 的学生的科目的交集
{
ID : 1
Subjects : {22, 23, 25}
}
{
ID : 2
Subjects : {22, 25 }
}
这些交叉点将是 {22,25} 在这种情况下,我还需要交叉点主题 2 的计数。
处理此类查询的最佳方法是什么?还有其他 NoSQL 解决方案可以更好地处理这种查询吗?另外,我正在尝试将学生集合缓存在内存中。
我需要一个支持分片的数据库,并且我有一个包含 1500 万个文档的数据集(我可以使用 Raven 或 Mongo 等数据库解决方案将它们分片到不同的机器上)。我必须在 db 级别执行此操作,但在 RavenDB 文档中我找不到任何如何在 db 级别执行此操作。
【问题讨论】:
-
你试过什么?请发布一些代码。另外 - 为什么在数据库中完成它很重要?您可以简单地检索这两个学生并自己进行交叉。您还没有解释为什么需要数据库解决方案。您是否以某种方式汇总了这些结果?怎么样?
-
@MattJohnson 我需要用于分片的 db 解决方案,而且我有一个包含 1500 万个文档的数据集(我可以使用 raven 或 mongo 等 db 解决方案将它们分片到不同的机器上)。因此,必须在数据库级别执行此操作。我在 ravendb 文档中找不到任何如何在 db 级别执行此操作。
-
当然,您可能需要存储 1500 万份文档。您还想查询 1500 万个文档的交集吗?您的示例说您正在检索 2。如果这是典型的,您应该只加载这两个文档并在客户端 linq 中自己进行交集(例如)
-
@MattJohnson 如果我有 1500 万学生分布在 3 台机器上。我需要所有参加科目 1 和科目 2 的学生。我假设如果它在 db 级别,则查询将传递给所有 3 台机器,并且在每台机器拥有的数据部分执行查询,结果减少回客户。
-
@MattJohnson 我假设这种查询可以使用 map/reduce 执行,结果由主题键入,值是学生 ID 列表。
标签: nosql ravendb nosql-aggregation