mysql - 大 MySQL 表

标签 mysql caching

我正在处理一个需要缓存分页“搜索”结果的问题:Paginating very large datasets

搜索工作如下:给定一个 item_id,我找到匹配的 item_id 及其排名。

我愿意承认不向我的用户显示任何超过 500 的结果。在 500 之后,我假设他们不会找到他们正在寻找的东西......结果是排序的反正按照比赛顺序。所以我想缓存这 500 个结果,这样我只需执行一次繁重的查询,用户仍然可以分页结果(最多 500 个)。

现在,假设我使用一个中间 MySQL 表作为我的缓存...也就是说,我将每个项目的前 500 个结果存储在“匹配”表中,如下所示:“item_id (INTEGER), matched_item_id (INTEGER) , match_rank (REAL)”。搜索现在变得非常快:

SELECT item.* FROM item, matches 
    WHERE matches.item_id=<item in question>
    AND item.id=matches.matched_item_id 
    ORDER BY match_rank DESC
    LIMIT x,y

我可以毫无问题地将项目及其匹配项重新索引到此表中,因为如果结果早于 24 小时,客户会要求它们。问题是,存储 N 个项目的 500 个结果(其中 N 是 ~100,000 到 1,000,000)这个表变得相当大...... 50,000,000 - 500,000,000 行。

MySQL 能处理这个吗?我应该注意什么?

最佳答案

MySQL 可以处理这么多行,当您开始碰壁时,有多种技术可以扩展。 Partioningreplication是该场景的主要解决方案。

您还可以在 a question I previously asked 中查看 MySQL 的其他扩展技术。在 stackoverflow 上。

关于mysql - 大 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/347837/

相关文章:

c++ - 使用 Interlocks 进行线程同步并保持缓存一致性

javascript - EJS 中 webpack 包的版本控制

mysql - 如何检查mysql中的负值并确定之后的输出

java - 有没有更有效的方法来提高嵌套循环查询的性能

android - ViewPager + FragmentStatePagerAdapter + 方向改变

javascript - 如果在线则缓存 list 更新网页

php - AJAX 不想缓存图片

java - 尽管添加了驱动程序的 JAR 文件,但 JDBC 程序中仍出现 ClassNotFoundException

mysql - 根据当前id连接两个表

php - 将textarea提交到phpmyadmin问题中