2009-11-12 111 views
2

嗨,大家好,我需要您的意见。我处于需要使用ajax的情况,所以我需要每30秒查询一次用户信息.....哪个更有效率的查询服务器(比如check首先是一个文本文件),如果有用户信息的更新,则可以进行完整的数据库查询或直接每30秒直接查询数据库。请说明您的推理,以便我可以衡量我的决定...... 。提前致谢。服务器或数据库

回答

0

取决于您拥有的用户数量,但做一些轮询将不可能扩展。

你应该看看comet体系结构。您应该编写一些中间件,只在需要时才会与数据库进行交互,并在内存或平面文件中执行大部分操作。中间件会在你的前端(web服务器)和实际的后端(数据库)之间进行一些缓存。

我建议你也查看memcachedb(或任何键/值DB engine)来编码你的中间件。

如果你没有太多的用户可以保留一些轮询方案。

4

我想在Web服务器上缓存,使用寿命为30秒,并拉取所有用户数据以减少往返数据库的次数。我也有客户端使用Web缓存,而不是去数据库。

它是最小增益很大的开销,否则

+0

+1 for Conditional GET – Piskvor 2009-11-12 09:15:05

4

如果您有少数用户和少量的网络客户端,然后实现最简单的解决办法。

推理:除非您遇到严重的性能问题,否则不需要优化此类内容。我开始思考这个当:

  • 有成千上万的用户在DB
  • 此信息是查询每秒数百个Web客户端

,但如果你有10个用户,那么这可能意味着每10秒需要10个网页浏览器询问这些信息。你应该担心你的服务器,因为这将是无聊死了穷人CPU;)

+0

+1 for KISS ..... – 2009-11-12 09:29:46

1

我会措施第一如果简单版本(好像查询数据库直接第一​​)不是足够好。

然后,如果这样做不够好,寻找更好的解决方案(仍然是测量结果)。

有很多ifs取决于远程给你很好的建议。

0

不知道我看到需要缓存,但也许我很天真? Cache如何知道数据是否已更改?

 
SELECT ... lots of columns 
FROM MyTable 
WHERE UserID = 1234 
     AND LastUpdated > @MyLastUpdated 

只有在AND为真时才会做任何认真的工作?如果返回零行,它没有改变 - 或者UserID = 1234不再存在,但是如果你需要知道查询可以改变也可以返回)。因此,我不认为它有必要执行“自@MyLastUpdated以来更改过的用户ID = 1234”查询,然后是完整的SELECT *。

如果您在列列表中检索LastUpdated的值,请存储该值,然后在下次检查UserID = 1234是否发生更改时将其作为参数提供。

(LASTUPDATED是不是你最后一次检查的时间,但该记录的最后更新,很明显,但它确实需要由相同的时钟每一次创建的时间上课的SQL框本身(而不是客户端的PC !!),并考虑到秋季夏令时发生的情况。)

相关问题