【问题标题】:AWS RDS MySQL approximately 8 million rowsAWS RDS MySQL 大约 800 万行
【发布时间】:2020-11-08 16:46:06
【问题描述】:

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

--- AWS RDS DB CPU ---

--- AWS RDS DB Pricing ---

【问题讨论】:

    标签: mysql amazon-web-services video-streaming amazon-rds cpu-usage


    【解决方案1】:

    仅从日期范围内随机选择或从具有一定观看次数的视频中选择是否足够?你在什么数据库上?参见例如MYSQL: Query order by rand() very slow

    另一种方法是缓存随机值。你可以用一种对每个用户来说看起来完全随机的方式来做:

    用户 A 请求随机样本 => 将样本存储在缓存中,并将其标记为 已被A取回

    用户 B 请求随机样本 => 从缓存中获取随机样本, 检查我们之前是否检索过它(我们没有,它是 A,所以 归还)

    用户 A 请求随机样本 => 从缓存中获取随机样本, 检查我们之前是否检索过它(我们有,是我们,所以 我们执行另一个请求并将其添加到缓存中然后返回)

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

    【讨论】:

    • 我喜欢这种缓存随机值的想法。每天我都可以设置一个流程来创建包含应该显示给加载网页的用户的视频的表。然后,每当有人重新加载或点击新链接时,我都会检索这些行。
    • 我还想过......在代码中生成随机 ID,而不是让 SQL 引擎这样做。然后运行 ​​100 SELECT * FROM videos WHERE id = %%%。你怎么看?
    • @ExAmazonIntern 我也会尝试,但我还没有对其进行基准测试。但是,如果您删除记录,您将不得不考虑丢失的 ID。在最坏的情况下,您将错过查询的所有记录。查看我发布的链接,还有stackoverflow.com/questions/1244555/…
    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 2021-11-14
    • 2018-10-18
    • 2023-03-31
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多