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();
|
DomainIdRegistry ret = new DomainIdRegistry();
|
||||||
|
|
||||||
try (var conn = dataSource.getConnection();
|
try (var conn = dataSource.getConnection();
|
||||||
|
var existingDomainNamesQuery = conn.prepareStatement("""
|
||||||
|
SELECT DOMAIN_NAME FROM EC_DOMAIN
|
||||||
|
""");
|
||||||
var selectStmt = conn.prepareStatement("""
|
var selectStmt = conn.prepareStatement("""
|
||||||
SELECT ID, DOMAIN_NAME FROM EC_DOMAIN WHERE DOMAIN_NAME=?
|
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)) {
|
try (var inserter = new DomainInserter(conn, nodeId)) {
|
||||||
for (var domain : readSetDomainNames(inputData)) {
|
for (var domainName : readSetDomainNames(inputData)) {
|
||||||
inserter.accept(new EdgeDomain(domain));
|
var domain = new EdgeDomain(domainName);
|
||||||
domainNamesAll.add(domain);
|
if (existingDomainNames.contains(domain))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
inserter.accept(domain);
|
||||||
|
domainNamesAll.add(domainName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try (var inserter = new DomainInserter(conn, -1)) {
|
try (var inserter = new DomainInserter(conn, -1)) {
|
||||||
for (var domain : readReferencedDomainNames(inputData)) {
|
for (var domainName : readReferencedDomainNames(inputData)) {
|
||||||
inserter.accept(new EdgeDomain(domain));
|
var domain = new EdgeDomain(domainName);
|
||||||
domainNamesAll.add(domain);
|
if (existingDomainNames.contains(domain))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
inserter.accept(domain);
|
||||||
|
domainNamesAll.add(domainName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
existingDomainNames.clear();
|
||||||
|
|
||||||
try (var updater = new DomainAffinityUpdater(conn, nodeId)) {
|
try (var updater = new DomainAffinityUpdater(conn, nodeId)) {
|
||||||
for (var domain : readSetDomainNames(inputData)) {
|
for (var domain : readSetDomainNames(inputData)) {
|
||||||
updater.accept(new EdgeDomain(domain));
|
updater.accept(new EdgeDomain(domain));
|
||||||
@ -164,6 +182,7 @@ public class DomainLoaderService {
|
|||||||
statement.close();
|
statement.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class DomainAffinityUpdater implements AutoCloseable {
|
private static class DomainAffinityUpdater implements AutoCloseable {
|
||||||
private final PreparedStatement statement;
|
private final PreparedStatement statement;
|
||||||
private final int nodeAffinity;
|
private final int nodeAffinity;
|
||||||
|
Loading…
Reference in New Issue
Block a user