用户使用CouchDB最后访问时间

时间:2011-01-30 15:27:35

标签: couchdb

我是CouchDB的新手,但这与问题无关。问题很简单,但对我来说并不清楚。

例如:Boris在5秒前登陆该网站并查看他的个人资料Ivan看到了它。

如何正确实现此功能(用户上次访问时间)?

问题在于,如果我们在CouchDB中更新用户个人资料文档,例如属性last_access_time,每次刷新一个页面时,我们都会得到最相关的信息(用MySQL我们就是这样做的),但另一方面,我们将文件的_rev大约在100000 ++左右。那一天。

那么,你是怎么做到的,或者你有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这不是一个完整的答案,而是一种可能的优化。除了这里的任何其他答案,它还可以使用。

不是存储最新的时间戳,而是仅在时间戳已更改时更新时间戳。 5秒或60秒。

假设用户每天刷新一天。这是86,400次更新。但是如果你只以5秒的间隔更新时间戳,那就是17,280; 60秒是1,440。

您可以在客户端执行此操作。如果要更新时间戳,请获取当前文档并检查旧时间戳。如果小于 5秒,则不要做任何事情。否则,请正常更新。

您也可以在服务器端执行此操作。在CouchDB中写一个_update函数,您可以查询,例如POST /db/_design/my_app/_update/last-access/the_doc_id?time=2011-01-31T05:05:31.872Z。更新功能将执行相同的操作:检查旧时间戳,并且不执行任何操作或更新它,具体取决于已用时间。

答案 1 :(得分:1)

如果某个文档的(大)部分是相对静态的,而且(一个小的)部分是高度动态的,我会考虑将它分成两个不同的文档。

另一种选择可能是使用更适合这种性质的小数据的高写入吞吐量的东西,例如Redis或可能的MongoDB,并且(如果需要)有后台任务偶尔将信息写入CouchDB。 / p>

答案 2 :(得分:0)

CouchDB对快速文档更新没有任何问题。就像MySQL一样。高_rev没问题。

唯一的事情就是,你必须从第1天开始对你的沙发负责。所有CouchDB用户都必须这样做,但是你可能必须尽快完成。 (几乎没有更新的应用程序可以降低整个磁盘的风险,因此开发人员可以推迟这项工作。)

  • 轮询您的数据库并在需要时运行压缩(基于大小,文档数量,seq_id数字)
  • 轮询你的观点并进行压缩
  • 始终拥有足够的磁盘容量和i / o带宽以支持压缩。数学最坏情况:您需要2倍的数据库大小和2倍的写入速度;但是,大多数应用需要更少。由于您要更新文档而不是添加文档,因此需要方式更少。