私はこのようになりますcommit_filesをという名前のテーブルを持つMySQLデータベースを持っている:ファイル名の列が空のときコピーデータ
+----------+-------------+
| Field | Type |
+----------+-------------+
| sha | varchar(40) |
| filename | text |
+----------+-------------+
SHA欄には、50000件のレコードが含まれます。この表のSHAキーとリモートのMongoDBコレクションのSHAキーを比較したいと思います。 SHAがMongoコレクションに存在する場合、ルールはそのSHAキーに対応するファイル名を取り出し、ローカルMySQLのSHAキーに対応するファイル名フィールドに挿入する必要があります。
現在のところ、Javaコードでは、コレクション内のすべてのデータを繰り返してMySQLデータベースに挿入していますが、MongoDBデータベースのサイズによって、すべてを引き出すのは効率的ではありません。長い時間。
MySQLで使用しているSHAリストのファイル名のみを取得したいと思っています。私はここで適切なトラックにいますか?どのようにこれを完了するための任意のアイデアは素晴らしいだろう。乾杯
//get commit files from mongo db and insert into mysql
DBCollection commits = db.getCollection("commits");
DBCursor commitList = commits.find();
System.out.println("Commits in MongoDB: " + commitList.size());
int handledCommit = 1;
while (commitList.hasNext()) {
DBObject commit = commitList.next();
String sha = commit.get("sha").toString();
BasicDBList files = (BasicDBList) commit.get("files");
if (files != null) {
System.out.println("commit: " + handledCommit+++" files: " + files.size());
for (Object f: files) {
DBObject file = (DBObject) f;
String filename = file.get("filename").toString();
// insert into mysql
String mysqlQuery = " insert into commit_files (sha, filename) values (?, ?)";
PreparedStatement preparedStmt = mysqlConn.prepareStatement(mysqlQuery);
preparedStmt.setString(1, sha);
preparedStmt.setString(2, filename);
preparedStmt.execute();
}
}
}