【发布时间】:2014-06-09 07:38:11
【问题描述】:
很快我将构建一个包含 200 万行的数据库结构。一般来说,每分钟查询的行数不超过 200 行,在这 200 行中,正在查询的行将是 10-20 行。
鉴于表的大小,我想将查询的行“存储”在某处,以便查询该行的任何其他最终用户能够“更快”地获取行数据。然后我希望通过此访问该行一段时间,然后在不再使用时将其放回主表中。我相信这将使访问更快、更高效。
使用以下架构,我将提供一个示例。在这种情况下,第 1 行已从应用程序层访问。应用层查询“已访问”表以查看该行是否存在。如果是,它使用它并使用任何更改的数据更新“访问”表。如果不是,则从主大表中查询并放入“已访问”表中,直到 cron 运行(例如 10 分钟后),此时所有“已访问”数据都被复制到主表中并从已访问表中删除.
http://sqlfiddle.com/#!2/d76f6/2
我正在尝试解决以下问题:
1) 这会提高效率吗(我想每个针对“已访问”而不是主要查询的查询会明显更快)?
2) 应该使用什么技术来存储“访问”数据?主表可能会存储在 MariaDB/MySQL 中,但是我很乐意在平面文件、sqlite、不同的实例中运行它,或者将它保存在同一个实例中……我愿意接受可以实现这一点的建议更高效,理论上应用层没有理由不能充当任何技术之间的中介
【问题讨论】:
-
这个问题让我变得更聪明了,谢谢。听起来你在正确的轨道上。
-
@Andrew - 谢谢!这是我最喜欢 Stackoverflow 的地方之一。尽管它不是一个“讨论”网站,但有很多观点和看待事物的方式,我发现自己不断地阅读改变我思维方式的东西! :D.
-
我实际上不认为这是一个好主意。 RDBMS 有自己的缓存,我希望他们为您完成此类工作。这样做会使应用程序代码更加复杂,并且会涉及客户端和服务器之间的更多通信。我怀疑这会比服务器缓存提供更好的结果。我会尝试调整服务器缓存......或者在出现真正问题之前完全不用担心。
-
请将所有相关细节放在问题本身中,以防止人们不得不点击周围,如果他们无法这样做,人们就无法完全理解问题,并且如果出现这个问题,这个问题就没有意义SQLFiddle 曾因任何原因关闭或直接终止链接。
-
@Frazz - 这是一个公平的观点。我不知道缓存已完成 - 对于这种情况,有什么关于阅读好的 RDBMS 的建议吗?或者具体阅读 MariaDB/MySQL(我目前计划的技术)?如果可行,很高兴沿着这条路走下去
标签: mysql performance data-structures mariadb