Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop(+HBase/HDFS)vs Mysql(或Postgres)-装载要处理和查询的独立结构化数据_Mysql_Database Design_Postgresql_Hadoop_Distributed - Fatal编程技术网

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

Hadoop(+HBase/HDFS)vs Mysql(或Postgres)-装载要处理和查询的独立结构化数据,mysql,database-design,postgresql,hadoop,distributed,Mysql,Database Design,Postgresql,Hadoop,Distributed,嗨,在那里 我想从你们这些可敬可敬的人那里得到一些想法/意见 我有100万张记录需要处理。我在岩石群中有5个节点来完成这项工作。数据非常结构化,很好地位于关系数据模型中。我想并行处理,因为我的处理需要一些时间 在我看来,我有两个主要选择: 在每个节点上安装mysql,并在每个节点上放置2000万条记录。使用head节点将查询委托给节点并聚合结果。查询能力++,但在选择分区策略等方面,我可能会遇到一些麻烦。问:这就是他们所谓的mysql/postgres集群吗?。真正糟糕的是,记录的处理现在由我来

嗨,在那里

我想从你们这些可敬可敬的人那里得到一些想法/意见

我有100万张记录需要处理。我在岩石群中有5个节点来完成这项工作。数据非常结构化,很好地位于关系数据模型中。我想并行处理,因为我的处理需要一些时间

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

在每个节点上安装mysql,并在每个节点上放置2000万条记录。使用head节点将查询委托给节点并聚合结果。查询能力++,但在选择分区策略等方面,我可能会遇到一些麻烦。问:这就是他们所谓的mysql/postgres集群吗?。真正糟糕的是,记录的处理现在由我来负责如何跨机器分发等等

或者安装Hadoop、Hive和HBase请注意,这可能不是存储数据的最有效方式,因为HBase是面向列的,只定义节点。我们在MapReduce范例中编写所有内容,然后,砰的一声,我们从此幸福地生活在一起。这里的问题是,我们失去了实时查询功能,我知道您可以使用Hive,但这不建议用于实时查询——这是我所需要的——因为我还有一些正常的sql查询要在select*from wine时执行,其中COLOR='brown'

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

非常感谢

我曾经遇到过这样一种情况,我使用sqlalchemy和python多处理库并行创建了许多表。我有多个文件,每个表一个,并使用并行复制过程加载它们。如果每个流程对应于一个单独的表,则效果良好。如果只有一个表,使用COPY将很困难。我想,您可以在PostgreSQL中使用表分区。如果你感兴趣,我可以提供更多的细节


问候。

建议之前,有几个问题要问。 您能否制定查询以仅通过主键访问?换句话说,如果可以避免所有连接和表扫描。如果是这样的话,如果您需要非常高的读/写访问率,可以选择HBase。 考虑到低数据量,我认为Hive是一个不错的选择。如果你期望它们显著增长,你可以考虑它。在任何情况下,配置单元都适用于分析工作负载,而不是OLTP类型的处理。 如果您确实需要连接和扫描的关系模型,我认为最好的解决方案可能是一个主节点和4个从节点,并在它们之间进行复制。您将把所有写操作定向到主机,并在整个集群中平衡读操作。如果你读的比写的多,那就特别好了。
在这个模式中,每个节点上都有不匹配的所有100M记录。在每个节点中,如果合适,您可以使用分区。

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

在MySQL中保留100M。看看Cloudera的Sqoop实用程序,它可以从数据库导入记录并在Hadoop中处理它们。 如果MySQL是1的瓶颈,请考虑设置从复制,这将允许您并行读取,而不必是一个锐化的数据库的复杂性。因为您已经声明不需要回写数据库,所以这应该是一个可行的解决方案。您可以根据需要将数据复制到任意多个服务器。 如果您正在从数据库中运行复杂的SELECT查询,而2仍然是不可行的,那么考虑使用Sqoop导入您的记录并在Hadoop中执行您需要的任何查询转换。
在你的情况下,我会抵制跳MySQL的诱惑,除非是绝对必要的。

你也可以考虑使用。我最近发现了这篇文章,当我读到你的文章时,我想起了这篇文章

其要点是Cassandra是一个具有快速查询功能的高度可扩展的NoSQL解决方案,这听起来像是您正在寻找的解决方案


因此,这完全取决于您是否需要维护您的关系模型。

我的一位朋友给我发了这样的帖子:这是朝着正确方向迈出的一小步——但我想听听您对设计的意见以及我应该如何做。。。