AWS RDS MySQL 大约 800 万行
AWS RDS MySQL approximately 8 million rows
所以我托管了一个视频共享网站,现在我在 AWS RDS db.t2.large
中存储了大约 200 万行。此实例的定价为 [=12=].136/hr
。但是它非常慢,因为它只有 2 CPU。获得具有 8 CPUs 的实例的成本是 [=13=].544/hr
,这远远超出了我的预算。我几乎在每一页上都是 运行 语句 "SELECT * FROM videos ORDER BY RAND() LIMIT 100"
,而且只有 2 CPU 太慢了。 8 CPU 是可以忍受的。我怎样才能让它更快?我不希望用户在每次刷新或新 link 时等待很长时间。当我完成数据转储时,行数预计将增加 800 万行。
--- AWS RDS DB CPU ---
--- AWS RDS DB Pricing ---
在一个日期范围内或从具有一定观看次数的视频中随机 select 是否足够?你在什么数据库?参见例如MYSQL: Query order by rand() very slow
另一种方法是缓存随机值。你可以用一种对每个用户来说完全随机的方式来做到这一点:
user A requests random sample => store sample in cache, and mark it as
having been retrieved by A
user B requests random sample => get random sample from cache,
checking whether we have retrieved it before (we haven't, it was A, so
return it)
user A requests random sample => get random sample from cache,
checking whether we have retrieved it before (we have, it was us, so
we do another request and add it to the cache and then return it)
这使得 B 的请求“免费”,因此我们只有 2 个而不是 3 个请求。
所以我托管了一个视频共享网站,现在我在 AWS RDS db.t2.large
中存储了大约 200 万行。此实例的定价为 [=12=].136/hr
。但是它非常慢,因为它只有 2 CPU。获得具有 8 CPUs 的实例的成本是 [=13=].544/hr
,这远远超出了我的预算。我几乎在每一页上都是 运行 语句 "SELECT * FROM videos ORDER BY RAND() LIMIT 100"
,而且只有 2 CPU 太慢了。 8 CPU 是可以忍受的。我怎样才能让它更快?我不希望用户在每次刷新或新 link 时等待很长时间。当我完成数据转储时,行数预计将增加 800 万行。
--- AWS RDS DB CPU ---
--- AWS RDS DB Pricing ---
在一个日期范围内或从具有一定观看次数的视频中随机 select 是否足够?你在什么数据库?参见例如MYSQL: Query order by rand() very slow
另一种方法是缓存随机值。你可以用一种对每个用户来说完全随机的方式来做到这一点:
user A requests random sample => store sample in cache, and mark it as having been retrieved by A
user B requests random sample => get random sample from cache, checking whether we have retrieved it before (we haven't, it was A, so return it)
user A requests random sample => get random sample from cache, checking whether we have retrieved it before (we have, it was us, so we do another request and add it to the cache and then return it)
这使得 B 的请求“免费”,因此我们只有 2 个而不是 3 个请求。