1

我正在开发一个将使用三个表的应用程序。1 - 100 万行产品。2 - 5 亿行用户。3 - 100 亿行用户喜欢的产品。这些表格会随着时间的推移而增长,但会保持在这些数字附近。我想为这种数据库选择正确的方法。我真的不太了解分片、集群或分区,但如果你们中的一些人能告诉我这个问题的最佳解决方案,我将专注于它,这将是一个巨大的帮助。我只想要支持 mysql 的方法,如果我需要多台服务器用于这种数据库?谢谢。

4

2 回答 2

1

您可以非常轻松地对该数据集进行分片,但您可能不必根据您尝试执行的分析类型进行分片。如果这只是每个用户喜欢的历史记录,那么您可能可以使用数据库分区来按日期范围对数据进行分区,然后按 user_id 进行子分区。

如果您会经常更新日期(用户可以“不喜欢”事物),那么您可能需要查看分片。这里有一个分片实现示例:Shard-Key-Mapper。您可以在此处对数据集执行分布式并行查询(如 SQL 的 map/reduce):Shard-Query

如果你分片,我应该建议按 user_id 分片并将产品表保留为在每个分片上重复的“共享”表。您应该使用基于目录的分片方法,该方法允许您在分片之间移动用户。有关单个用户的所有信息,以及有关他们喜欢什么的信息将一起存储在一个分片上。

于 2011-05-08T07:27:51.620 回答
0

我认为如果你真的不想要像 Hadoop 这样的 noSQL 解决方案,你就无法避免获得多个数据库(这里:MySQL)服务器。在我看来,MySQL 复制并不能为此类数据提供足够的可扩展性,因为主服务器将成为瓶颈。我也不是可扩展性专业人士,但我目前也在考虑一个很好的解决方案来解决我身边的类似问题。我想我会采用分片解决方案,将我的数据分区到多个节点上。我只是在考虑一种智能的方法来创建从数据到分片的映射。但这取决于您的应用程序您想要如何制作它。我认为您的“产品喜好”数据非常适合分区,因为它非常庞大。

顺便说一句:一篇反对分片的有趣文章:http: //37signals.com/svn/posts/1509-mr-moore-gets-to-punt-on-sharding

于 2011-05-02T14:13:18.703 回答