Bulk Import Deduplication System - Current Status
π― Project Overviewβ
We hebben een revolutionaire bulk import deduplication system geΓ―mplementeerd die de traditionele "lookup-then-save" aanpak vervangt met een single-call database operatie die automatisch duplicaten detecteert en classificeert.
β Voltooide Implementatiesβ
1. Revolutionary Single-Call Architectureβ
Files: lib/Service/ObjectHandlers/SaveObjects.php, lib/Db/ObjectHandlers/OptimizedBulkOperations.php
- Keuze:
INSERT...ON DUPLICATE KEY UPDATEmet database-computed classification - Voordeel: Elimineert database lookup overhead, 3-5x sneller
- Status: β GeΓ―mplementeerd en werkend
2. Database-Managed Timestampsβ
Files: lib/Migration/Version1Date20250908174500.php, lib/Migration/Version1Date20250908180000.php
- Keuze:
UNIQUE (uuid)constraint +ON UPDATE CURRENT_TIMESTAMP - Voordeel: Automatische deduplication en timestamp management
- Status: β Migraties toegepast
3. Smart Change Detectionβ
File: lib/Db/ObjectHandlers/OptimizedBulkOperations.php (lines 89-120)
-- CASE WHEN logic voor precisie change detection
`updated` = CASE WHEN (
JSON_EXTRACT(`object`, '$') != JSON_EXTRACT(VALUES(`object`), '$') OR
COALESCE(`name`, '') != COALESCE(VALUES(`name`), '') OR
COALESCE(`description`, '') != COALESCE(VALUES(`description`), '')
-- ... meer velden
) THEN NOW() ELSE `updated` END
- Keuze: Vergelijkt alle data fields inclusief JSON met NULL-safe handling
- Voordeel: Alleen echte changes triggeren timestamp updates
- Status: β GeΓ―mplementeerd
4. Database-Computed Classificationβ
File: lib/Db/ObjectHandlers/OptimizedBulkOperations.php (lines 200-230)
SELECT *,
'{$operationStartTime}' as operation_start_time,
CASE
WHEN created >= '{$operationStartTime}' THEN 'created'
WHEN updated >= '{$operationStartTime}' THEN 'updated'
ELSE 'unchanged'
END as object_status
FROM oc_openregister_objects
WHERE uuid IN (...)
- Keuze: Database berekent classificatie in plaats van PHP
- Voordeel: Precisie timing, geen PHP container time drift
- Status: β GeΓ―mplementeerd
5. Clean Business Data Storageβ
File: lib/Service/ObjectHandlers/SaveObjects.php (lines 1095-1115)
- Probleem: Metadata fields (id, uuid, register, schema, etc.) zaten in business data
- Oplossing: Expliciete metadata removal voor cleane object kolom
- Status: β Fixed - id field uit business data verwijderd
6. Immutable Created Timestampβ
File: lib/Db/ObjectHandlers/OptimizedBulkOperations.php
- Keuze:
createdveld uitgesloten vanON DUPLICATE KEY UPDATE - Voordeel: Created timestamp blijft intact bij updates
- Status: β GeΓ―mplementeerd
π Huidige Database Statusβ
- Register 19 objects: 768 (na cleaning)
- Clean business data: β Geen metadata fields meer in object column
- UNIQUE constraint: β Actief op UUID field
- Smart timestamps: β created immutable, updated auto-managed