我正在开发一个使用三个表的应用程序。
100万行产品。
2-5亿行用户。
用户喜欢的30-100亿行产品。
桌子会随着时间的推移而增长,但会保持在这些数字附近。
我想为这种数据库选择正确的方法。
我真的不太了解分片、集群或分区,但如果你们中的一些人能告诉我这个问题的最佳解决方案,我会专注于它,它将是一个巨大的帮助。
我只想要支持mysql的方法,如果我需要多个服务器来实现这种数据库?
谢谢。
最佳答案
您可以很容易地切分此数据集,但可能不必依赖于您尝试执行的分析类型。如果这只是每个用户喜欢的内容的历史记录,那么您可能可以使用database partitioning按日期范围对数据进行分区,然后在用户id上进行子分区。
如果你经常更新日期(用户可以“不一样”的东西),那么你可能需要看看分片。这里有一个分片实现示例:Shard-Key-Mapper。您可以在这里对数据集执行分布式并行查询(如map/reduce for SQL):Shard-Query。
如果你切分了,我建议按用户id切分,并将products表保留为“shared”表,在每个切分上重复。您应该使用基于目录的分片方法,该方法允许您在分片之间移动用户。所有关于单个用户的信息,以及他们喜欢什么的信息都将存储在一个shard上。
关于mysql - 需要帮助来选择正确的mysql DB分片,群集或分区方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5857845/