| Auszug |
|---|
|
Nuclos Performance große Tabellen: Chunk, chunkSize, OFFSET vermeiden, Keyset, getEntityObjectsChunk, Millionen Datensätze. |
Sprache: Deutsch · English
Große Tabellen performant verarbeiten – in Chunks lesen und OFFSET durch Keyset-Pagination ersetzen.
| Status |
|---|
| colour | Blue |
|---|
| title | Entwickler |
|---|
|
| Status |
|---|
| colour | Green |
|---|
| title | Stand: Jul 2026 |
|---|
|
| Status |
|---|
| colour | Grey |
|---|
| title | gilt fuer Nuclos 4.2026.x |
|---|
|
Zwei Grundregeln, um sehr große Tabellen (Millionen Datensätze) performant zu verarbeiten.
- Daten immer in Blöcken (Chunks) holen.
- Beim Einlesen der ganzen Tabelle OFFSET vermeiden – stattdessen über die letzte ID weiterblättern (Keyset-Pagination).
| Codeblock |
|---|
|
final long CHUNKSIZE = 5000;
long lastID = 0L;
Map<UID, FieldMeta<?>> mpFields = metaProvider.getAllEntityFieldsByEntity(entity);
DbQueryBuilder builder = dataBaseHelper.getDbAccess().getQueryBuilder();
for (;;) {
DbCondition cond = builder.plainCondition("t.INTID > " + lastID);
CollectableSearchCondition csc = new CollectableDbCondition(cond);
CollectableSearchExpression cse = new CollectableSearchExpression(csc);
Collection<EntityObjectVO<Long>> lstEOs = entityObjectFacade.getEntityObjectsChunk(entity, mpFields.values(), null, cse, 0L, CHUNKSIZE - 1);
if (lstEOs.isEmpty()) {
return;
}
for (EntityObjectVO<Long> eo : lstEOs) {
....
lastID = eo.getPrimaryKey();
}
} |