CouchDB的推荐文档结构

时间:2010-02-04 03:14:56

标签: data-modeling couchdb

我们目前正在考虑将Postgres更改为CouchDB以用于使用情况监控应用程序。一些数字:

大约2000个连接,每5分钟轮询一次,每天大约600,000个新行。在Postgres中,我们存储了按日分区的数据:

t_usage {service_id,timestamp,data_in,data_out}
t_usage_20100101继承了t_usage t_usage_20100102继承了t_usage。等

我们使用乐观存储过程来编写数据,该过程假设分区存在并在必要时创建它。我们可以很快插入。

为了读取数据,我们的用例按重要性和当前性能顺序排列:
*单一服务,单日使用:良好的表现
*多项服务,月使用:表现不佳
*单一服务,月使用:表现不佳
*多个服务,多个月:非常差的性能
*多项服务,单日:良好的表现

这是有道理的,因为分区已经优化了几天,这是迄今为止我们最重要的用例。但是,我们正在研究改进次要要求的方法。

我们经常需要按小时对查询进行参数化,例如,仅在上午8点到下午6点之间给出结果,因此汇总表的用途有限。 (这些参数的变化频率足以创建多个数据汇总表格。)

有了这样的背景,第一个问题是:CouchDB是否适合这些数据?如果是,在给定上述用例的情况下,您将如何在CouchDB文档中对数据进行最佳建模?到目前为止我已经把一些选项放在一起,我们正在进行基准测试(_id,_rev排除):

每天每个连接一个文档

{
  service_id:555
  day:20100101
  usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}

每月约有6万份新文件。大多数新数据都是对现有文档的更新,而不是新文档。

(这里,使用中的对象是在轮询的时间戳上键入的,以及字节输入和输出的值)。

每月连接一个文档

{
  service_id:555
  month:201001
  usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}

每月大约2,000份新文件。适度更新现有文档。

每行收集一份文件

{
  service_id:555
  timestamp:1265248762
  in:584
  out:11342
}
{
  service_id:555
  timestamp:1265249062
  in:94
  out:1242
}

每月大约15,000,000份新文件。所有数据都是新文档的插入。插入速度更快,但我对数百万份文档在一年或两年后的效率有疑问。文件IO似乎太高了(虽然我是第一个承认我并不完全理解它的机制)。

我正试图以面向文档的方式解决这个问题,虽然打破RDMS的习惯很困难:)事实上你只能对视图进行最低限度的参数设置让我有点担心。那就是说,上面哪一个最合适呢?是否有其他格式我没有考虑哪种格式会更好?

提前致谢,

杰米。

1 个答案:

答案 0 :(得分:10)