【问题标题】:Best way to archive (in flat file) and then purge huge data归档(在平面文件中)然后清除大量数据的最佳方式
【发布时间】:2017-05-03 05:05:37
【问题描述】:

我写了下面的程序来实现这一点:

           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/

【问题讨论】:

  • 可以添加CSVWriter代码吗?
  • 是否合理假设任何新插入的行的时间戳都会大于您用于导出/清除的截止值?如果是这样,那么您问题的这方面就不是问题。
  • @VladislavKysliy,我添加了 opencsv 的源代码。 @ Gord Thomson,我明白你在说什么。时间戳将处理第 2 点。
  • @JackSparrow 我的回答好运吗?

标签: java jdbc resultset large-data


【解决方案1】:

我想提出几点建议:

  1. 避免使用时间作为限制点。这可能是原因 不可预知的错误。不同的地方时间可能不一样 不同的环境,所以我们应该小心时间。反而 时间使用sequence
  2. 使用connection pool从数据库中获取数据
  3. 将 db 中的信息保存在不同的文件中。您可以将它们存储在 不同的驱动器。之后,您必须连接信息 来自他们。
  4. 使用memory mapped files
  5. 使用多线程模型获取和存储/恢复 信息。 注意:JDBC不支持多线程所以连接 游泳池是你的帮手

这些步骤仅涉及 java 部分。您需要在数据库方面进行良好的设计。不容易,对吧?但这是使用大数据的代价。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    相关资源
    最近更新 更多