3

我开始在 CouchDB 上工作,从 Facebook Insights 和其他来源收集分析信息。我不确定文档的正确设计,并希望更有经验的 CouchDB 用户看到它,并在我即将犯任何大错误时警告我。

{
"_id": "0b69a33807d4cb63680dbebc16000af5",
"_rev": "1-7c9916592c377e32cf83acf746a8647c",
//array of metrics, one element per facebook page, around 10 pages per document**
"metrics": [        
    {
        "sourceId": "210627525692699", //facebook page ID
        "source": "facebook",
        "values": {
           "page_likes": 53
           //many more other metrics, around 100
       }
   },
   {
       "sourceId": "354413697924499", // //facebook page ID
       "source": "facebook",
       "values": {
           "page_wall_posts_source_unique": {other: 0, composer: 1},
           "page_likes": 12
           //many more other metrics, around 100
       }
   }
],
"timestamp": [
   2012,
   10,
   15,
   10,
   0,
   0
],
"customerId": "71ff942f-9283-4916-ab84-4927bce09117"
}

预期文件数量:每小时+10 000,每天+240 000。

对文件的预期要求:

  • 给定时间段内每个客户、每个 sourceId、每个指标的值总和
  • 更复杂指标的专用视图

问题:

  • 为了获得一些复杂指标的分析(如 page_wall_posts_source_unique),我们需要构建专门的视图,可能其中有很多,我应该预期视图更新时间会出现问题吗?
  • 使用数组作为时间戳是正确的决定,还是使用 long 更好?
  • 我应该使用一个设计文档还是将每个视图都放入一个新文档中?
4

2 回答 2

0

我认为您最好不要将 CouchDb 用于此目的。在我看来,您最大的目标之一是在您的数据中进行一些聚合——这并不是 CouchDb 设计的主要目标。

实际上,CouchDb 有一个非常纯粹的聚合部分(我从它的实际经验中发现,我在 3 个项目中实现它)。因为你可以像傻瓜文本搜索部分一样添加Lucene,它会扩展它的查询功能,但无论如何它会比你可能需要的少。CouchDb 非常适合 Wikipedia 可能的项目,因为每次更新文档时,它都会使用新版本创建文档,并且您仍然拥有旧版本。这就是主要功能并查看您的项目,我看不出您想使用它。

此外,CouchDb 不适用于数百万个小文档。它更喜欢使用平均数量的中等大小的文档进行操作。但是数以百万计的小文档对于 CouchDb 视图系统来说并不是完美的东西。

所以我建议你选择你的主要目标并看看其他 NoSQL 解决方案,因为在 NoSQL 世界中,没有一个解决方案可以满足所有目标,相反,当你使用时,所选目标有自己的解决方案,不像 SQL 那样一个适用于所有事物。乍一看,我认为 MongoDB 应该符合您的目标。

但是,无论如何,回答你的问题:1)认为是的,但这取决于有多少文档将重新计算 2)我更喜欢使用 Long 值,因为当你有单个值时你可以查询它,如果你有数组不同的值,你会有问题。并且还使用像时间戳这样的长整数,这是一种常见的做法。3)没什么大不了的。你可以做任何你想做的事。

于 2012-12-08T17:41:58.207 回答
0

谢谢你们的回复。

Ph0en1x,我部分同意你的观点,CouchDB 不是一个显而易见的选择,但我对其他选择更不确定,到目前为止会坚持使用 CouchDB。

无论如何,这是我从多个来源收集的答案:

1)显然,这取决于文件的数量。但是对于小文件,概率会增加。

2)两种方法都可以,时间戳更通用一点。

3) 一个文档中的视图越多,它们被重新索引的可能性就越高。因此,我试图尽可能减少一个文档中的视图数量。

于 2012-12-09T19:28:06.640 回答