AWS RDS MySQL大约有800万行

AWS RDS MySQL大约有800万行,mysql,amazon-web-services,video-streaming,amazon-rds,cpu-usage,Mysql,Amazon Web Services,Video Streaming,Amazon Rds,Cpu Usage,所以我主持了一个视频共享网站,现在我有大约200万行存储在AWS RDSdb.t2.large中。此实例的定价为每小时0.136美元。但是它非常慢,因为它只有2个CPU。获得一个具有8个CPU的实例的成本是每小时0.544美元,这远远超出了我的预算。我在几乎每一页上都运行语句“SELECT*FROM videos ORDER BY RAND()LIMIT 100”,它太慢了,只有两个CPU。有8个CPU的它是可以忍受的。我怎样才能让它更快?我不希望用户在每次刷新或新建链接时都要等待很长时间。当我

所以我主持了一个视频共享网站,现在我有大约200万行存储在AWS RDS
db.t2.large
中。此实例的定价为每小时0.136美元。但是它非常慢,因为它只有2个CPU。获得一个具有8个CPU的实例的成本是
每小时0.544美元
,这远远超出了我的预算。我在几乎每一页上都运行语句
“SELECT*FROM videos ORDER BY RAND()LIMIT 100”
,它太慢了,只有两个CPU。有8个CPU的它是可以忍受的。我怎样才能让它更快?我不希望用户在每次刷新或新建链接时都要等待很长时间。当我完成数据转储时,行数预计将增加800万行


仅仅从一个日期范围内随机选择,或者从具有一定观看量的视频中随机选择就足够了吗?你在哪个数据库上?见例

另一种方法是缓存随机值。您可以采用对每个用户来说完全随机的方式进行操作:

用户A请求random sample=>将样本存储在缓存中,并将其标记为 被一个警察抓回来的

用户B请求random sample=>get random sample from cache, 检查我们以前是否检索过它(我们没有,它是一个 归还)

用户A请求random sample=>get random sample from cache, 检查我们以前是否检索过它(我们有,是我们,所以 我们执行另一个请求并将其添加到缓存中,然后返回)


这使得B请求“免费”,因此我们只有2个请求,而不是3个请求。

我喜欢缓存随机值的想法。每天我都可以设置一个流程来创建包含视频的表格,这些视频应该显示给加载网页的用户。然后,每当有人重新加载或点击新链接时,我就会检索这些行。我还想到。。。在代码中生成随机ID,而不是让SQL引擎这样做。然后运行100
SELECT*FROM videos,其中id=%%
。你觉得怎么样?@ExAmazonIntern我也想试试,但我还没有做过基准测试。但是,如果你删除记录,你必须解释丢失的ID。在最坏的情况下,您将丢失查询中的所有记录。请参阅我发布的链接,以及