package cn.hit.sqlLab2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* B树索引
*
*/
public class BtreeIndex {
private static int cnt = 7; //每个B树节点的键值个数
private static int t = (cnt + 1) / 2;
private static BtreeNode root = null; //根节点
private static BufferedReader in = null;
private static BufferedWriter out = null;
private static int outnumber = 0;
public static void run() {
// 随机生成1000000条记录并存入文本文件
// Generator.generator();
// System.out.println(Generator.messages.size());
long startTime = System.nanoTime();
FileWriter write = null;
try {
write = new FileWriter(new File("res/output-" + cnt + ".txt"));
out = new BufferedWriter(write);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
List<Message> messages = new ArrayList<Message>();
FileReader reader;
try {
reader = new FileReader(new File("res/input.txt"));
in = new BufferedReader(reader);
String inLine = null;
while ((inLine = in.readLine()) != null) {
Message message = new Message(Integer.parseInt(inLine.split(" ")[0]), inLine.split(" ")[1]);
messages.add(message);
}
System.out.println("messages number:"+messages.size());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
BtreeIndex.buildBtree(messages);
System.out.println("build success!");
printNode(root);
System.out.println("outnumber:" + outnumber);
long endTime = System.nanoTime();
long duration = (endTime - startTime) / 1000000;
try {
out.write("<<<<<<run time: " + duration + ">>>>>>");
System.out.println("<<<<<<run time: " + duration + ">>>>>>");
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对每条记录执行查找和删除操作
boolean delete = true;
for (Message message : messages) {
// System.out.print(message.getNum());
if (!root.isLeaf() && root.getEntryNumber() == 1
&& root.getChildren().get(0).getEntryNumber() < t
&& root.getChildren().get(1).getEntryNumber() < t) {
root =
merge(root.getChildren().get(0), root.getChildren().get(1), root.getEntries().get(0));
}
/*
B树索引
最新推荐文章于 2021-08-17 04:47:10 发布