簡體   English   中英

存檔(在平面文件中)然后清除大量數據的最佳方法

[英]Best way to archive (in flat file) and then purge huge data

我寫了下面的程序來實現這個目的:

           try {
                PreparedStatement statement = connection.prepareStatement(
                    "SELECT * FROM some_table some_timestamp<?)");
                statement.setTimestamp(1, new java.sql.Timestamp(dt.getTime()));
                ResultSet resultSet = statement.executeQuery();

                CSVWriter csvWriter = new CSVWriter(new FileWriter(activeDirectory + "/archive_data" + timeStamp + ".csv"), ',');
                csvWriter.writeAll(resultSet, true);
                csvWriter.flush();

              } catch (Exception e) {
                 e.printStackTrace();
               }


            // delete from table
            try {
                PreparedStatement statement = connection.prepareStatement(
                        "DELETE FROM some_table some_timestamp<?)");
                statement.setTimestamp(1, new java.sql.Timestamp(dt.getTime()));
                statement.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            }


        }

        dbUtil.close(connection);

上述程序在一般情況下都可以正常工作,但是我想知道如何改善該程序,從而:

  1. 可以順利處理一百萬條記錄,而不會導致應用程序服務器超載

  2. 考慮到該程序運行時將有許多記錄插入到同一表中,我如何確保該程序歸檔然后清除完全相同的記錄。

更新:我正在使用openscv http://opencsv.sourceforge.net/

我想提出幾點建議:

  1. 不要將時間用作極限點。 這可能會導致無法預測的錯誤。 在不同的地方和不同的環境中時間可能會有所不同,因此我們應該注意時間。 而是時間使用順序
  2. 使用連接池從數據庫獲取數據
  3. 將db中的信息保存在其他文件中。 您可以將它們存儲在不同的驅動器上。 之后,您必須連接來自它們的信息。
  4. 使用內存映射文件
  5. 使用多線程模型來獲取和存儲/還原信息。 注意 :JDBC不支持很多線程,因此連接池是您的幫手

這些步驟僅涉及Java部分。 您需要在數據庫方面進行良好的設計。 不容易吧? 但這是使用大數據的代價。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM