Download the PHP package andydefer/php-jsonl without Composer
On this page you can find all versions of the php package andydefer/php-jsonl. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/php-jsonl
More information about andydefer/php-jsonl
Files in andydefer/php-jsonl
Package php-jsonl
Short Description High-performance JSONL (JSON Lines) file management library with temporal and key-based storage strategies, automatic batching, and cache expiration
License MIT
Informations about the package php-jsonl
PHP JSONL - Documentation Complète
📦 Présentation
PHP JSONL est une bibliothèque PHP moderne et performante pour la gestion de fichiers au format JSONL (JSON Lines). Elle offre une solution complète pour le logging structuré, le caching, et la gestion de données ligne par ligne avec des stratégies de partitionnement flexibles.
Caractéristiques principales
- ✅ Écriture haute performance avec bufferisation automatique
- ✅ Verrouillage automatique pour les accès concurrents
- ✅ Recherche avancée avec filtrage personnalisé
- ✅ Nettoyage intelligent (expiration, ancienneté, patterns)
- ✅ Deux stratégies de partitionnement : temporelle (logs) et par clé (cache)
- ✅ Architecture stateless : tout l'état est déporté dans un contexte unifié
- ✅ Support PHP 8.2+ avec types stricts et readonly properties
- ✅ Tests complets : 79 tests, 432 assertions
🚀 Installation
🏗️ Architecture
Structure générale
Composants principaux
| Composant | Rôle |
|---|---|
JsonlService |
Service principal, orchestrateur de toutes les opérations |
JsonlPathStrategyInterface |
Détermine l'emplacement des fichiers |
TemporalPathStrategy |
Organisation par date/heure (logs) |
KeyBasedPathStrategy |
Organisation par hash MD5 (cache) |
JsonlContext |
Gestion unifiée de l'état (verrous, buffer, traitement) |
📚 Concepts fondamentaux
Format JSONL (JSON Lines)
Le format JSONL stocke chaque enregistrement JSON sur une ligne distincte :
Avantages :
- Streaming possible (lecture ligne par ligne)
- Append uniquement (pas de réécriture complète)
- Facile à parser avec des outils classiques (
grep,awk,jq)
Types d'enregistrements
LogJsonlRecord - Pour les logs structurés
CacheJsonlRecord - Pour le caching
🎯 Stratégies de partitionnement
1. TemporalPathStrategy - Pour les logs
Organise les fichiers par date et heure :
Avantages :
- Recherche efficace par plage temporelle
- Nettoyage facile (suppression par jour)
- Pas de fichier unique trop volumineux
Utilisation :
2. KeyBasedPathStrategy - Pour le cache
Organise les fichiers par hash MD5 de la clé :
Avantages :
- Distribution uniforme des fichiers
- Accès direct par clé (pas de scanning)
- Évite les répertoires trop volumineux
Utilisation :
🔧 Installation et configuration
Configuration de base
Avec stratégie pour cache
📝 API détaillée
Opérations d'écriture
write() - Écriture simple
Exemple :
writeBatch() - Écriture par lots
Exemple :
writeBuffered() - Écriture bufferisée
Exemple :
Opérations de lecture
readAll() - Lire tout le fichier
Exemple :
readLineByLine() - Lecture ligne par ligne (streaming)
Exemple :
getFirstLine() / getLastLine() - Première/dernière ligne
Exemple :
Recherche
search() - Recherche dans un fichier
Exemple :
searchMultiple() - Recherche dans plusieurs fichiers
Exemple :
Gestion du buffer
enableBuffer() - Activer le buffer
Exemple :
disableBuffer() - Désactiver le buffer
Exemple :
flushBuffer() - Vider le buffer
Exemple :
onFlush() - Callback sur flush
Exemple :
Nettoyage des données
cleanOlderThan() - Supprimer les fichiers trop vieux
Exemple :
cleanExpired() - Supprimer les entrées expirées (cache)
Exemple :
cleanByPattern() - Supprimer par pattern glob
Exemple :
dryRun() - Simuler une suppression
Exemple :
clear() - Vider complètement un répertoire
Exemple :
Verrouillage (locks)
acquire() - Acquérir un verrou
Exemple :
release() - Libérer un verrou
executeWithLock() - Exécuter avec verrou automatique
Exemple :
isLocked() - Vérifier si un verrou est actif
Exemple :
Utilitaires cache
isExpired() - Vérifier si un cache est expiré
Exemple :
decodeCacheValue() - Décoder une valeur de cache
Exemple :
Utilitaires généraux
getFilePath() - Obtenir le chemin d'un enregistrement
Exemple :
getFilesToScan() - Obtenir les fichiers à scanner
Exemple :
getContext() - Accéder au contexte unifié
Exemple :
resetProcessingState() - Réinitialiser l'état de traitement
Exemple :
setPathStrategy() - Changer la stratégie de chemin
Exemple :
💡 Cas d'utilisation avancés
1. Logging haute performance avec buffer
2. Mise en cache avec TTL
3. Analyse de logs avec streaming
4. Migration automatique des vieux logs
5. Opérations atomiques avec verrouillage
🔍 Dépannage
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
JsonlException: Unsupported record type |
Type d'enregistrement non supporté par la stratégie | Utiliser LogJsonlRecord avec TemporalPathStrategy ou CacheJsonlRecord avec KeyBasedPathStrategy |
JsonlLockException: Timeout acquiring lock |
Fichier verrouillé trop longtemps | Augmenter le timeout ou vérifier les deadlocks |
JsonlException: File does not exist |
Fichier inexistant en lecture | Vérifier avec fileExists() avant lecture |
InvalidArgumentException: expects... |
Mauvais type d'enregistrement | Vérifier la compatibilité stratégie/record |
Suivi d'opération avec le contexte
📊 Performance
Complexités
| Opération | Complexité | Notes |
|---|---|---|
write() |
O(1) | + verrouillage fichier |
writeBatch() |
O(n) | n = nombre d'entités |
writeBuffered() |
O(1) | flush à taille atteinte |
readAll() |
O(l) | l = nombre de lignes |
search() |
O(l) | parcourt toutes les lignes |
getFirstLine() / getLastLine() |
O(1) | lecture partielle |
cleanOlderThan() |
O(f) | f = fichiers trouvés |
cleanExpired() |
O(f × l) | f = fichiers, l = lignes |
getFilesToScan() |
O(jours × 24) | pour stratégie temporelle |
Optimisations recommandées
-
Buffer pour écritures massives
-
Streaming pour gros fichiers
-
Dry run avant suppression
- Verrouillage uniquement quand nécessaire
🔗 Dépendances
PHP ^8.2- Langage requisandydefer/php-services- Services de base (FileSystemInterface)andydefer/php-vo- Value objects (DateTimeVO)andydefer/domain-structures- Structures de domaine (AbstractRecord, StrictDataObject)
📜 License
MIT License
👨💻 Auteur
Andy Kani - [email protected]
🙏 Contributions
Les contributions sont les bienvenues !