1

我需要做一个消息应用程序,我想使用 couchdb。

消息文档是这样的:

message = {
   'from':'uuid1',
   'to':'uuid2',
   'message':'asd asd asd',
   'date':1342643405.84
}

我需要过滤以获取针对用户的消息并按日期进行分页。

所以为了过滤我创建了一个视图... emit([doc.from, doc.to], doc) ...

为了更好地进行分页而不是仅仅跟踪键,我想每天、每周或每月创建一个新的数据库来存储消息。数据库名称可以是这样的(这是按天计算的):

...
message_2012/07/01
message_2012/07/02
message_2012/07/03
...

这样我可以只打数据库的一部分,但我不知道这是一个好主意还是坏主意。

4

1 回答 1

1

CouchDB 构建索引的方式(使用 B 树)意味着只要您适当地创建视图,您就不必担心您担心的是什么。

您需要使用日期作为您发出的复合键中的第一个键来创建视图。并且您需要一个单独的视图来分页/分组/排序的每个日期类型。因此,如果您希望能够每天、每周、每月和每年选择文档,那么您将需要四个视图 - 一个用于每种不同类型的日期。

只需确保将您的日期转换为可以按词法排序/搜索/分组的格式。例如,您的每月视图可能是:

function(d) {
  if( d.from && d.to && d.date ) {
    var date = new Date( d.date ),
      month = ('0' + (1 + date.getMonth())).slice(-2),
      year = date.getYear();

    date_string = date.getFullYear() + '-' + month;

    emit( [ date_string, d.from, d.to ] );
  }
}
于 2012-07-19T05:19:40.917 回答