【问题标题】:Bulk Insert/Load in MySQL and HBase在 MySQL 和 HBase 中批量插入/加载
【发布时间】:2013-02-06 22:26:08
【问题描述】:

我的系统有两个进程,其中一个执行单次插入,另一个执行批量插入。显然第二个过程更快,我正在努力将第一个过程迁移到批量插入机制,但今天早上我被一位同事提出的一个问题难住了:“为什么批量插入会比单次插入更快”。

确实,为什么批量插入比单次插入快?

另外,MySQL 和 HBase 中的批量插入和单次插入之间是否存在差异,因为它们的数据库架构完全不同?我在我的项目中都使用了这两种方法,我想知道这两个数据库的批量插入和单次插入是否存在差异。

【问题讨论】:

    标签: mysql hbase bulkinsert bulk-load


    【解决方案1】:

    据我所知,这也取决于Hbase 配置。通常,批量插入意味着将List of Puts 一起使用,在这种情况下,当您调用table.put 时,插入(在habse 层中称为flushing)会自动完成。单个插入可能会等待任何其他插入调用,以便在中间层进行批量刷新。但是,这也取决于配置。

    另一个原因可能是任务的简单性,如果您一次有更多工作,它的 Map 和 Reduce 效率更高。文件块的迁移是针对所有输入单次确定的。但在单独的插入中,这成为一个关键点。

    【讨论】:

      【解决方案2】:

      简而言之 - 批量加载操作绕过常规写入路径。这就是它速度快的原因。
      那么,当您执行简单的逐行放置操作时,在正常写入过程中会发生什么?
      所有数据同时写入 WAL 和 memstore,当 memestore 已满时,数据被刷新到新的 HFile。
      但是在 Bulkload 的情况下,它直接写入正在运行的 hbase 集群中的 StoreFile。 NO 中间的东西...
      快速提示
      - 如果您不想经常使用批量加载,因为它会在短时间内完成,这会给集群带来额外的负担,您可以使用 Put.setWriteToWal(false) 写入 WAL false 以节省一些时间。 但这会增加您的数据丢失机会..

      【讨论】:

        猜你喜欢
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多