mysql - Hadoop(+HBase/HDFS)与 Mysql(或 Postgres)——要处理和查询的独立结构化数据负载

标签 mysql database-design postgresql hadoop distributed

你好,在 SO

我想听听尊敬的各位对以下内容的一些想法/评论。

我有 100M 条记录需要处理。我有 5 个节点(在岩石集群中)来执行此操作。数据非常结构化,非常适合关系数据模型。我想并行处理事情,因为我的处理需要一些时间。

在我看来,我有两个主要选择:

在每个节点上安装mysql,每个节点放20M条记录。使用头节点将查询委托(delegate)给节点并聚合结果。 Query Capabilities++,但在选择分区策略等方面我可能会有些头疼(问:这就是他们所说的 mysql/postgres 集群吗?)。真正糟糕的是记录的处理现在由我来处理(如何跨机器分发等)...

或者安装 Hadoop、Hive 和 HBase(请注意,这可能不是存储我的数据的最有效方式,因为 HBase 是面向列的)并仅定义节点。我们用 MapReduce 范式编写所有内容,然后,砰的一声,我们从此过上了幸福的生活。这里的问题是我们失去了“实时”查询功能(我知道你可以使用 Hive,但不建议实时查询 - 我需要) - 因为我有时也有一些正常的 sql 查询要执行“select * from wine where color = 'brown'”。

请注意,理论上 - 如果我有 100M 台机器,我可以立即完成整个操作,因为对于每条记录,处理过程都是独立于其他记录的。另外 - 我的数据是只读的。我不认为会发生任何更新。我不需要/想要一个节点上的 100M 记录。我不希望有冗余数据(因为有很多)所以将它保存在 mysql/postgres 和 Hadoop/HBase/HDFS 中。不是真正的选择。

非常感谢

最佳答案

你能证明MySQL是瓶颈吗? 100M 条记录并不多,看起来您没有执行复杂的查询。在不知 Prop 体是哪种处理的情况下,以下是我将按以下顺序执行的操作:

  1. 将 100M 保留在 MySQL 中。查看 Cloudera 的 Sqoop 实用程序,从数据库导入记录并在 Hadoop 中处理它们。
  2. 如果 MySQL 是 (1) 中的瓶颈,请考虑设置从复制,这将使您并行读取,而无需分片数据库的复杂性。由于您已经声明不需要写回数据库,因此这应该是一个可行的解决方案。您可以根据需要将数据复制到任意数量的服务器。
  3. 如果您正在从数据库运行复杂的选择查询,并且 (2) 仍然不可行,请考虑使用 Sqoop 导入您的记录并在 Hadoop 中执行您需要的任何查询转换。

在你的情况下,除非绝对必要,否则我会抵制跳出 MySQL 的诱惑。

关于mysql - Hadoop(+HBase/HDFS)与 Mysql(或 Postgres)——要处理和查询的独立结构化数据负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884967/

相关文章:

php - 用户收入不会更高

mysql - 如何借助MySql中的外键来选择外键表的属性?

sql-server-2008 - SQL Server 2008 : Disable index on one particular table partition

postgresql - 在 Rust 中使用 Tokio-postgres 向 Postgres 插入多个值

php - 在 PostgreSQL 中存储类似 BLOB 的数据

php - 将值添加到具有已设置值的数据库列

mysql。选择字段最大的行,按其他字段分组

sql - 在数据库中存储性别(性别)

php - 保存到数据库之前的 Laravel 预览

perl - 为什么这个 postgres 存储过程想要 `use utf8` ?