【发布时间】:2023-03-27 18:42:02
【问题描述】:
我目前正在尝试确定 CouchDB 是否适合我的用例,如果适合,如何。我的情况类似于以下:
第一组文件(我们称它们为公司):
{
"_id" : 1,
"name" : "Foo"
}
{
"_id" : 2,
"name" : "Bar"
}
{
"_id" : 3,
"name" : "Baz"
}
第二组文档(我们称之为项目):
{
"_id" : 4,
"name" : "FooProject1",
"company" : 1
}
{
"_id" : 5,
"name" : "FooProject2",
"company" : 1
}
...
{
"_id" : 100,
"name" : "BazProject2",
"company" : 3
}
第三组文档(我们称之为事件):
{
"_id" : "300",
"project" : 4,
"description" : "...",
"cost" : 200
}
{
"_id" : "301",
"project" : 4,
"description" : "...",
"cost" : 400
}
{
"_id" : "302",
"project" : 4,
"description" : "...",
"cost" : 500
}
...
所以简而言之,每个公司都有多个项目,每个项目都可能有多个事件。我对数据建模的一个原因是,我主要来自 SQL 背景,因此建模可能完全不合适。第二个原因是,我想通过使用 couchdb 提供的 REST-API 非常轻松地添加新事件。所以事件必须是单个文档。
但是,我现在想获得一个视图,以便我计算每家公司的总成本。我可以使用 map-reduce 和链接文档轻松定义视图,这些文档可以让我了解每个项目的总金额。但是,一旦我处于项目级别,我就无法进一步达到公司级别。
这可能使用 couchDb 吗?这种汇总数据听起来像是 map-reduce 的完美用例。在 SQL 中我只会做一个三表连接,但似乎在 couchDb 中我能得到的最好的是两表连接。
【问题讨论】:
-
您不能(或至少不应该)在 CouchDB 中进行任何联接。您可以使用列表函数来合并相邻的行(排序规则),但其他任何事情都会破坏您的性能。