我目前正在使用自己的MEAN堆栈进行项目。
现在我正在创建一个新项目我有一个集合,我在服务器端使用Express进行分页,每次返回页面大小(例如,总计2000中的10个结果)和找到的总行数用户执行的查询(例如,用户ID 3为193)。
虽然这很好用,但我担心这会在服务器上造成巨大的负担,因为用户可以轻松地将50-60页的页面分别拉出10,20,50或甚至100个结果。
我向你们提出的问题是:如果我说像这样每隔几秒就会有1000个并发用户分页,MongoDB能否应对这个问题?如果没有,那么我的替代方案可能是什么?
无论如何我还可以在我的app / MongoDB上模拟这样的并发读取测试吗?
请注意我必须进行服务器端分页,因为该应用程序非常动态,信息可能会经常更改。
答案 0 :(得分:0)
如果您计划仅使用单个网络服务器,则可以将属于某个页面的结果集缓存到内存中。如果您计划使用多个Web服务器,内存中的缓存会导致服务器上的结果集不同,因此在这种情况下,我建议您将缓存存储在MongoDB或Redis中。
某个结果集将存储在缓存中的某个键下。您的密钥可能由entityName
+ filterOptions
+ offset
+ resultsLimit
组成。例如,您正在使用movies
重新加载title=titanic
,跳过前100个,所以offset=100
并且每页只加载50个limit=50
,这些都会被连接起来成一把钥匙。
当请求进入时,您首先尝试从缓存加载结果集。如果结果集在缓存中,您将把它返回给客户端。如果它不在缓存中,您可以在数据库中查询最新的结果集,将其放入缓存并将其返回给客户端。
您是否可以通过1000个并发用户实现这一目标取决于您的硬件,加载的数据,加载方式以及实施效率。有一种方法可以找到并进行测试。
当然,通过使用Node.js的异步功能,您可以实现最佳的可伸缩性,因此每个可以执行的调用async
,例如数据库调用,都应该是异步执行的。
您可以使用Apache JMeter从本地计算机免费测试您的应用程序,或者使用Azure进行测试。