我使用Node的Express w / Connect中间件。 Connect的内存会话存储不适合生产:
06000
对于较大的部署,mongo或redis是有意义的。
但是什么是单一主机应用程序在生产中的一个很好的解决方案?
解决方法
花了一天来看这个。这里是我发现的选项。请求/秒通过ab -n 100000 -c 1 http://127.0.0.1:9778/在我的本地机器上执行。
>无会话 – 快(438 req /秒)
> cookieSession:不需要外部服务,速度影响小(311 req / sec) – 速度最快,会话将随cookie过期(由maxAge自定义)
> connect-redis:需要redis服务器,大速度影响(4 req / sec with redis2go和redisgreen) – 比mongo更快,会话将被删除一段时间(由ttl定制)
> connect-mongo – 需要mongodb服务器,大速度影响(2 req / sec与mongohq) – 慢于redis,需要手动clear_interval设置为清理会话
这里是我用于cookieSession的coffeescript:
server.use express.cookieSession({ secret: appConfig.site.salt cookie: maxAge: 1000*60*60 })
这里是我用于redis的coffeescript:
RedisSessionStore ?= require('connect-redis')(express) redisSessionStore ?= new RedisSessionStore( host: appConfig.databaseRedis.host port: appConfig.databaseRedis.port db: appConfig.databaseRedis.username pass: appConfig.databaseRedis.password no_ready_check: true ttl: 60*60 # hour ) server.use express.session({ secret: appConfig.site.salt cookie: maxAge: 1000*60*60 store: redisSessionStore })
这里是我的mouo coffeescript:
server.use express.session({ secret: appConfig.site.salt cookie: maxAge: 100*60*60 store: new MongoSessionStore({ db: appConfig.database.name host: appConfig.database.host port: appConfig.database.port username: appConfig.database.username password: appConfig.database.password auto_reconnect: appConfig.database.serverOptions.auto_reconnect clear_interval: 60*60 # hour }) })
现在当然,远程redis和mongo数据库将慢于他们的本地等同。我只是不能得到当地的等效工作,特别是考虑到安装和维护时间,远远超过我愿意投资,而不是托管的远程替代品,我觉得是真的为其他人,因此为什么这些托管远程数据库服务存在的第一位!
对于本地数据库benhmarks,请参阅@Mustafa’s answer。
很高兴有人来edit this answer将他们的本地数据库基准添加到组合中。