2011-01-30 54 views
3

我是CouchDB的新手,但这与问题无关。这个问题很简单,但我不清楚。用户上次访问CouchDB的时间

例如:鲍里斯5秒钟前在网站上查看他的个人资料伊凡看到它。

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

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

那么,你如何做到这一点,或者你有什么想法?

+0

答案取决于您是使用Couch应用程序(直接浏览器连接到CouchDB)还是传统的中间层(例如PHP,Ruby on Rails,Tomcat,Django)。这是什么?谢谢。 – JasonSmith 2011-01-31 04:48:03

回答

1

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

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

+0

+1,即使我有相互竞争的答案,我同意Redis是一个好主意。定期同步的快速更新对于Redis来说是完美的。尽可能远离CouchDB;这取决于您的应用程序的整个利弊。但Redis(memcache等)无论如何都是应用程序的普遍增强。 – JasonSmith 2011-01-31 05:10:04

0

CouchDB在快速文档更新中没有问题。就像MySQL一样。高_rev是没有问题的。

唯一的问题是,您必须对从第1天开始的沙发负责。所有CouchDB用户都必须这样做,但您可能需要尽快完成此操作。 (有一些更新的应用程序有一个全盘的风险较低,因此开发人员可以推迟这项工作。)

  • 民意调查数据库和运行压缩是否需要它(根据大小,文件数,seq_id号)
  • 轮询您的观点并进行压缩
  • 始终有足够的磁盘容量和I/O带宽来支持压缩。数学最差情况:您需要数据库大小的两倍,写入速度是两倍;但是,大多数应用程序需要较少。由于您正在更新文档,不添加它们,您将需要方式更少。
2

这不是一个完整的答案,而是一个可能的优化。除了这里的任何其他答案之外,它将起作用。

除了存储最新的时间戳之外,只有在时间戳已经被例如改变后才更新时间戳。 5秒或60秒。

假设用户每天刷新一天。这是86,400更新。但是,如果您只更新5秒间隔的时间戳,即17,280; 60秒是1440。

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

你也可以在服务器端做到这一点。在CouchDB中编写一个_update函数,您可以像查询那样查询。 POST /db/_design/my_app/_update/last-access/the_doc_id?time=2011-01-31T05:05:31.872Z。更新函数将执行相同的操作:检查旧时间戳,并且不执行任何操作,或根据已用时间更新它。

+0

谢谢你的回答。看起来60秒延迟是安静的,所以我会用它。 – unno 2011-01-31 14:18:10

相关问题