private void start() throws Exception {
    logger.info("UserSentenceFeature");
    DBClient.getInstance().connect();

    DBClient.getInstance().selectAuthorDocReview(
        new OnAuthorDocReviewHandler() {

          @Override
          public void handle(ResultSet rs) throws Exception {
            while (rs.next()) {
              int authorId = rs.getInt("author_id");
              int docId = rs.getInt("doc_id");
              String post = rs.getString("post");

              Bean userBean = null;
              if (!map.containsKey(authorId)) {
                userBean = new Bean();
                map.put(authorId, userBean);
              } else {
                userBean = map.get(authorId);
              }

              DocumentPreprocessor dp = new DocumentPreprocessor(
                  new StringReader(post));
              int sentences = 0;
              for (List sentence : dp) {
                sentences++;
                userBean.incrementWords(sentence.size());
              }

              userBean.incrementSentence(sentences);
              userBean.incrementPost();
              logger.debug(authorId + " " + docId + " " + userBean);
            }
          }

          @Override
          public void handleFinish(PreparedStatement pstmtInsert)
              throws Exception {
            int batchCount = 0;
            for (Map.Entry<Integer, Bean> entry : map.entrySet()) {
              int authorId = entry.getKey();
              Bean bean = entry.getValue();
              String avgWordsPerSentence = bean.avgWordsPerSentence();
              String avgSentencesPerPost = bean.avgSentencesPerPost();

              logger.debug("{} {} {} {}", authorId, bean, avgWordsPerSentence,
                  avgSentencesPerPost);

              pstmtInsert.setInt(1, authorId);
              pstmtInsert.setString(2,
                  UserFeatureType.AvgWordsPerSentence.name());
              pstmtInsert.setString(3, avgWordsPerSentence);
              pstmtInsert.addBatch();

              pstmtInsert.setInt(1, authorId);
              pstmtInsert.setString(2,
                  UserFeatureType.AvgSentencesPerPost.name());
              pstmtInsert.setString(3, avgSentencesPerPost);
              pstmtInsert.addBatch();

              batchCount += 2;

              if (batchCount > 50000) {
                pstmtInsert.executeBatch();
                pstmtInsert.clearBatch();
                batchCount = 0;
              }

            }
            pstmtInsert.executeBatch();
            pstmtInsert.clearBatch();
            batchCount = 0;

            DBClient.getInstance().commit();
          }
        });
  }