mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-23 21:18:58 +00:00
(loader) Optimize INSERT statements
INSERT IGNORE is too slow.
This commit is contained in:
parent
72afa0341f
commit
7cb92195d1
@ -45,24 +45,42 @@ public class DomainLoaderService {
|
||||
DomainIdRegistry ret = new DomainIdRegistry();
|
||||
|
||||
try (var conn = dataSource.getConnection();
|
||||
var existingDomainNamesQuery = conn.prepareStatement("""
|
||||
SELECT DOMAIN_NAME FROM EC_DOMAIN
|
||||
""");
|
||||
var selectStmt = conn.prepareStatement("""
|
||||
SELECT ID, DOMAIN_NAME FROM EC_DOMAIN WHERE DOMAIN_NAME=?
|
||||
""")
|
||||
) {
|
||||
Set<EdgeDomain> existingDomainNames = new HashSet<>();
|
||||
var existingDomainNamesRs = existingDomainNamesQuery.executeQuery();
|
||||
while (existingDomainNamesRs.next()) {
|
||||
existingDomainNames.add(new EdgeDomain(existingDomainNamesRs.getString(1)));
|
||||
}
|
||||
|
||||
try (var inserter = new DomainInserter(conn, nodeId)) {
|
||||
for (var domain : readSetDomainNames(inputData)) {
|
||||
inserter.accept(new EdgeDomain(domain));
|
||||
domainNamesAll.add(domain);
|
||||
for (var domainName : readSetDomainNames(inputData)) {
|
||||
var domain = new EdgeDomain(domainName);
|
||||
if (existingDomainNames.contains(domain))
|
||||
continue;
|
||||
|
||||
inserter.accept(domain);
|
||||
domainNamesAll.add(domainName);
|
||||
}
|
||||
}
|
||||
try (var inserter = new DomainInserter(conn, -1)) {
|
||||
for (var domain : readReferencedDomainNames(inputData)) {
|
||||
inserter.accept(new EdgeDomain(domain));
|
||||
domainNamesAll.add(domain);
|
||||
for (var domainName : readReferencedDomainNames(inputData)) {
|
||||
var domain = new EdgeDomain(domainName);
|
||||
if (existingDomainNames.contains(domain))
|
||||
continue;
|
||||
|
||||
inserter.accept(domain);
|
||||
domainNamesAll.add(domainName);
|
||||
}
|
||||
}
|
||||
|
||||
existingDomainNames.clear();
|
||||
|
||||
try (var updater = new DomainAffinityUpdater(conn, nodeId)) {
|
||||
for (var domain : readSetDomainNames(inputData)) {
|
||||
updater.accept(new EdgeDomain(domain));
|
||||
@ -164,6 +182,7 @@ public class DomainLoaderService {
|
||||
statement.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static class DomainAffinityUpdater implements AutoCloseable {
|
||||
private final PreparedStatement statement;
|
||||
private final int nodeAffinity;
|
||||
|
Loading…
Reference in New Issue
Block a user