我有一个非常大的MySQL表,它太大而不能频繁查询(500米+行)。我所做的是将我需要的结果缓存在另一个名为“recent”的表中。
在“recent”表中,架构看起来像这样
USER_ID
PAGE_ID
DISPLAY_ORDER
我在USER_ID和DISPLAY_ORDER上放了一个唯一索引,因为我只想在此表中为每个用户存储多达64条记录。因此,DISPLAY_ORDER只是一个最多为64的int。使用REPLACE INTO更新行。
这是一个好方法吗?或者,如果用户超过64行,我应该定期从表中删除数据。我需要考虑性能。在接下来的几个月中,5亿的主表将增长到10亿,每个用户64行,这意味着“最近的”表也将非常大......
感谢您的帮助。
答案 0 :(得分:0)
如果我是你,我会认真考虑转移到大数据NoSQL数据库。像Cassandra或HBase这样的东西,它们都具有很好的性能和大量的数据。让5-10个集群节点通过MapReduce为您完成工作,而不是一个巨大的单片服务器试图扫描并搜索那么多记录。
答案 1 :(得分:0)
我同意eggyal和Todd Nakamura
eggyal :对您的数据进行分区
处理大型数据集时,您确实需要对数据进行分区,这样您就有机会对数据的子集运行查询。
Todd Nakamura :研究不同的数据库技术
这个问题看起来像NoSQL数据存储将是一个很好的解决方案。它将允许非常大的数据集,并能够使用Map / Reduce(Hadoop)来对查询进行并行化。