Alfresco Bulk Import

Import massivo

Il sistema di import è stato sviluppato da Peter Monks ne parla in questo articolo descrivendo in generale il funzionamento http://blogs.alfresco.com/wp/pmonks/2009/10/22/bulk-import-from-a-filesystem/

Il tool è integrato in alfresco e si può scaricare anche qui http://code.google.com/p/alfresco-bulk-filesystem-import/ mi sembra siano la stessa cosa.

Documentazione ufficiale Administrator — Bulk import

Permette l'importazione in un repository dal file systemd del server di Alfresco. Opzionalmente rimpiazza il contenuto esistente ma non esegue delete (e non è disegnato per sincronizzare il repository con il file system locale). La struttura di base del file system viene letteralmente preservata nel repository.
È possibile caricare metadati per i files e gli spazi assimilati, come la storia dei files.

Ci sono due tipi di bulk import:

  1. streaming: strem i file copiandoli durante l'importazione
  2. in-place: disponibile solo nella versione enterprise, assume che i file sono già esistenti così nessuna copia è richiesta. Questo permette un notevole miglioramento di permformance. Da quello che leggo sembra che non li metta nell'alf data ma li legga sempre da quel repository.

Ci sono una serie di restrizioni:

  • non supporta AVM , Advanced Versioning Manager
  • si può eseguire solo un bulk import alla volta
  • l'accesso al tool di bulk import è ristretto agli amministratori per default

Preparing the filesystem

Metadata files

Per caricare i metadata di un file "IMG_1967.jpg", bisogna creare un file "IMG_1967.jpg.metadata.properties.xml" con questa sintassi

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
   <entry key="key1">value1</entry>
    entry key="key2">value2</entry>
    ...
</properties>

Nella pagina di sono altre info su come specificare le proprietà preparando i file xml , si può anche lavorare sulla history dei metadati.

Importing via the user interface

Streaming

Ci sono due modi di importare una semplice interfaccia grafica raggiungibile previa autenticazione

http://localhost:8080/alfresco/service/bulkfsimport

e un web script che può essere lanciato in maniera automatica passando i parametri in get , raggiungibile

http://localhost:8080/alfresco/service/bulkfsimport/initiate

Campi

  • Il campo 'Import directory' indica la directory dove importare deve essere montata sul file system della macchina di alfresco secondo il path del sistema, vanno bene nfts gfs
  • il nome di content store name non l'ho capito molto bene
  • il "target space" indica dove caricare i campi, comincia con "/Company Home" il separatore di campi è con "/" indipendentemente dal s.o. dove alfresco runs. C'è un autocompletamento tramite ajax.
  • Il box "Replace existing files" se viene checked indica che in caso esista già su alfresco il nodo viene rimpiazzato versionando e quindi conservando quello precedente.
  • "Number of Threads" text field allows you to override the default number of threads (defined by the property "bulkImport.batch.numThreads" da usare nel bulk import.
  • "Batch Size" cambia il numero di default di directory e files importati alla volta per transazioni. Definiti nella proprietà bulkImport.batch.batchSize
  • "Disable rules" checkbox permette di disabilitare il numero di regole processate durante il bulk import.

Bulk Import status

Per controllare lo status sia in formato html che xml

http://localhost:8080/alfresco/service/bulkfsimport/status

Lo status viene aggiornato ogni 5 secondi quando il bulk import viene inizializzato.

Bulk Import diagnostics

Abilitando il loggining si possono capire eventuali problemi.

Enable debug statements with log4j.logger.org.alfresco.repo.batch.BatchProcessor=info.

Questa non l'ho capita:
" You can also enable logging for retrying the transaction handler to pinpoint any transactional issues during the import. Enable this with log4j.logger.org.alfresco.repo.transaction.RetryingTransactionHelper=info. "

Ottimizzazioni

Sono partito da queste slides http://www.slideshare.net/alfresco/taking-your-bulk-content-ingestions-to-the-next-level
Lui spiega un po' di cose che ho già letto nella doc ufficiale che per quanto brutta è un discorso che si capisce meglio delle slides.
Interessanti invece le ottimizzazioni

Parametri modificabili

system.usages.enabled=false
index.tracking.disableInTransactionIndexing=true
alfresco.cluster.name=dummyCluster

La prima proprietà disabilità le quote utente, le altre due disabilitano l'indicizzazione durante l'importazione. Dice che è incompatibile con share 3.x . Dopo l'importazione si riabilita
alfresco-bulk-filesystem-import.threadpool.size.core=48
alfresco-bulk-filesystem-import.threadpool.size.max=48

Questi sopra sono il numero di thread e sembra dalle performance abbastanza irrilevante
alfresco-bulk-filesystem-import.batch.weight=1000

high batch weitgh invece migliora le performance, ha impatto sulla risposta della UI

Dichiara che quello che ha impatto sui tempi è la velocità del disco.

Inplace import

Con l'inplace import si ottiene un miglioramento di 375 volte

Conclusioni

  • Operazioni più grosse migliorano le performance rispetto a quelle più piccole.
  • multi thread non è un una magia aiuta con le cpu ma il limite è quello del disco
Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License