【发布时间】:2018-03-07 06:40:42
【问题描述】:
我们致力于电子商务领域。我们以非常高的速度处理每个订单。每个订单都可以根据用户取消和更换。
无论发生什么,都不能错过订单。因此,无论我们收到什么订单,我们都会以字符串的形式存储在一个文件中,当用户取消订单或订单完成时,我们会从文件中删除相应的字符串。
还可能出现用户一次可以取消超过 50 个订单的情况。因此,从文件中删除字符串的一般方法:将所有字符串存储在文件中并通过在列表中搜索来删除它会导致非常高的延迟。
对于一个取消请求,这不是问题,但是当用户想一次取消所有订单时,这种方法会导致大问题。
我当前用于从文件中删除字符串的代码:
public void deleteFromFile(String clordID) throws InterruptedException {
//delete based on clorid from the file
BufferedReader in = null;
String line = null;
try {
in = new BufferedReader(new FileReader(dir + "\\pendingOrders.txt"));
List<String> listLines = new ArrayList<>();
while ((line = in.readLine()) != null) {
if (!(line.contains(clordID))) { // check for Order ID which is unique for every string
listLines.add(line);
}
}
in.close();
BufferedWriter bufferedWriter1 = new BufferedWriter(new FileWriter(dir + "\\pendingOrders.txt"));
bufferedWriter1.write("");
bufferedWriter1.close();
BufferedWriter bufferedWriter2 = new BufferedWriter(new FileWriter(dir + "\\pendingOrders.txt", true));
for (String msg : listLines) {
bufferedWriter2.write(msg + "\n");
}
//in.close();
bufferedWriter2.close();
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}//Delete
有没有办法提高性能?每次提出取消请求时,将所有字符串存储到列表中并再次清除文件并写入文件肯定会导致高延迟。
【问题讨论】:
-
您使用的是平面文件?你疯了吗?
-
我只是使用一个简单的文本文件。新方法确实可以接受,但我现在不能使用任何数据库
-
您运行的不是一个高性能的电子商务应用程序,没有什么是不能错过的。您正在运行一个任何事情都可能发生的玩具项目。使用事务数据库。这就是他们的目的。
-
是的,我知道,但是到目前为止我还不能使用数据库,先生。我只能使用一个文件
-
那么你不应该担心性能。担心正确性、可读性、设计、可维护性。如果性能真的很重要,你就不会使用文件。
标签: java performance file-io