cassandra长时间运行的查询分页

时间:2019-05-03 15:29:02

标签: scala cassandra long-integer paginate

我正在将20亿行的大型表从Cassandra集群v2迁移到Cassandra集群v3 我正在使用分页模式读取1000行代码。 该副本需要11天。

有人尝试过这么长的副本吗?

6小时后,我在阅读中出现错误:

com.datastax.driver.core.RequestHandler - Not retrying statement because it is not idempotent

在下面的代码中,肯定是ma_session.execute行。

代码在scala中。

  def paginatedRead(boundStatement:BoundStatement, test:(Row) =>Boolean, f:(Row)=>ResultSetFuture):(Long,Long) ={
    /*
     Cette méthode lit une table en mode paginé d'après le boundstatement
     Une fonction test permet de filtrer les record
     une Fontion f va réaliser une écriture assynchrone
     En sortie, les 2 compteurs nb lectures global et nb insertions
     */
    var page:PagingState =null
    var rsParcel:ResultSet=null

    var newRow:Row=null
    var cptGlobal=0L

    cptExec=0L; cptInsert=0L
    do {
      if (page != null) boundStatement.setPagingState(page)
      rsParcel = ma_session.execute(boundStatement.setFetchSize(fetchSize))
      if (rsParcel !=null) {
        page = rsParcel.getExecutionInfo.getPagingState
      } else page = null
      val nbRows = rsParcel.getAvailableWithoutFetching

      val itParcel = rsParcel.iterator() //. take(nbRows)

      for (i <- 0 until nbRows) {
        newRow=itParcel.next
        if (test(newRow)) {
          addFuture (f(newRow))
        }
        cptGlobal += 1
        if (cptGlobal % 100000==0) Init2.logger.warn("lecture paginated en cours lu: "+cptGlobal+"  ecrit: "+cptInsert)
      }

    }  while (page != null)
    waitFuture
    (cptGlobal,cptInsert)

  }

0 个答案:

没有答案