SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
Why

Elasticsearch
    rocks !
              AlpesJUG – 19 février 2013
Tanguy Leroux
●
    Consultant et Formateur @ Zenika
●
    Elasticsearch Addict


●
    @tlrx
●
    http://github.com/tlrx
●
    tlrx.dev@gmail.com
Un projet

  Open source
+ 700 forks +3500 watchers +100 commiters GitHub
                 Apache 2 License
Basé sur


Apache lucene
   Version 3.6.2, bientôt la 4.1
Une installation


ZERO CONFIG
Décompresser. Exécuter. Ça marche.
Orienté


document
    JSON
personne

{
    "nom"            : "Reinhardt",
    "prenom"         : "Jean Django",
    "date_naissance" : "1910-10-23"
}
film

{
    "titre"       : "Django Unchained",
    "genre"       : "western",
    "date_sortie" : "2013-01-16"
}
Elasticsearch / SGBD

 Index     → Base de données
  Type     →       Table
Document   →       Row
  Field    →      Column
Mapping    →     Schema
Elasticsearch est


    SCHEMA LeSS
La structure des documents peut évoluer avec le temps
Aujourd'hui

{
    "titre"        : "Django Unchained",
    "genre"      : "western",
    "date_sortie": "2013-01-16"
}
demain
{
    "titre"       :    "Django Unchained",
    "genre"       :    "western",
    "date_sortie" :    "2013-01-16",
    "realisateur" :    {
            "nom" :    "Tarantino",    "prenom" :      "Quentin"
    },
    "nb_entrees" :     3159385,
    "acteurs"     :    [
            {
               "nom"   :   "Foxx",        "prenom" :   "Jamie"
            },
            {
               "nom"   :   "Waltz",   "prenom" :   "Christoph"
            },
            {
               "nom"   :   "Tarantino",   "prenom" :   "Quentin"
            }
    ]
}
Recherche de « tarantino »
{
    "titre"       :    "Django Unchained",
    "genre"            : "western",
    "date_sortie" :    "2013-01-16",
    "realisateur" :    {
            "nom" :    "Tarantino",    "prenom" :      "Quentin"
    },
    "nb_entrees" :     3159385,
    "acteurs"     :    [
            {
               "nom"   :   "Foxx",        "prenom" :   "Jamie"
            },
            {
               "nom"   :   "Waltz",   "prenom" :   "Christoph"
            },
            {
               "nom"   :   "Tarantino",   "prenom" :   "Quentin"
            }
    ]
}
Recherche de « django »
                 film                           personne
{
    "titre" : "Django Unchained",
    "genre" : "western",
                                    {
    "date_sortie" : "2013-01-16",
       "realisateur" : {                "nom"      :   "Reinhardt",

         "nom" : "Tarantino",           "prenom"   :   "Jean Django",
         "prenom" : "Quentin"           "date_naissance" : "1910-10-23"
    },                              }
    "nb_entrees" : 3159385,
    "acteurs" : [...]
}
Un moteur de recherche


        restful
http://HOST:PORT/index(s)/type(s)/_action|id
           Méthodes HTTP: GET, PUT, POST, DELETE
Exemples
Indexer un document
       Put       http://HOST:PORT/mediatheque/film/1
       POSt      http://HOST:PORT/mediatheque/film/

Récupérer un document
       get       http://HOST:PORT/mediatheque/film/1

Supprimer un document
      delete     http://HOST:PORT/mediatheque/film/1

Créer un index
       post       http://HOST:PORT/mediatheque/musique

Rechercher
       get        http://HOST:PORT/mediatheque/film/_search?q=django
       get        http://HOST:PORT/_search?q=django
Un langage de requêtes


 Query dsl
match, field, query_string, bool, term,
   Fuzzy, match_all,more like this, geo,
           Range, wildcard, span,
                     ...
De nombreuses


    Facettes
terms, histogram, date histogram, range,
     Stats, geo distance, filter, query
                     ...
facette « terms »
curl -XGET 'localhost:9200/_search' -d '
{
    "query": {
        "match": {       "titre": "django hard" }
    },
    "facets": {
        "facet_genres": {
            "terms": {    "field": "genre"   }
        }
    }
}'
facette « terms »
{...
    "hits":{
         ...
    },
    "facets":{
         "facet_genres":{
               "_type":"terms",
               "missing":0,
               "total":2,
               "other":0,
               "terms":[
                   {"term":"western","count":1},
                   {"term":"action","count":1}
               ]
         }
    }
}
facette « terms »
{...
    "hits":{
         ...
    },
    "facets":{
         "facet_genres":{
               "_type":"terms",
               "missing":0,
               "total":2,
               "other":0,
               "terms":[
                   {"term":"western","count":1},
                   {"term":"action","count":1}
               ]
         }
    }
}
facette «histogramme»
curl -XGET 'localhost:9200/media/film_search' -d '
{
    "query": {
        "match_all": {}
    },
    "facets": {
        "facet_entrees": {
            "histogram": {
                "field": "nb_entrees",
                "interval": "1000000"
            }
        }
    }
}'
facette «histogramme»
{
    "hits": { … },
    "facets": {
        "facet_entrees": {
            "_type": "histogram",
            "entries": [
                 { "key": 1000000, "count": 1 },
                 { "key": 2000000, "count": 1 },
                 { "key": 3000000, "count": 1 }
            ]
        }
    }
}
facette «histogramme»
{
    "hits": { … },
    "facets": {
        "facet_entrees": {
            "_type": "histogram",
            "entries": [
                 { "key": 1000000, "count": 1 },
                 { "key": 2000000, "count": 1 },
                 { "key": 3000000, "count": 1 }
            ]
        }
    }
}
Elasticsearch est


      distribué
Plusieurs nœuds communiquent en uni/multicast
               Node master, data, http
                         ...
Ils ont aussi pensé à la


supervision
Elasticsearch est


100 % Java
Mais aussi tout plein d'autres


       clients
Php, perl, scala, python, shell, ruby,.Net,
       Grails, play !, flume, clojure,
                 Puppet, chef,...
Un gros paquet de


    plugins
Plugin d'analyse, rivers, transport,
             Site, misc,
                  ...
Extraction de texte avec


Apache tika
L'indexation facilitée avec les


         rivers
Jdbc, Mongodb, couchdb, rabbitmq, activemq,
        Ldap, rss, twitter, wikipedia,
                      ...
Jdbc river plugin
curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{
         "type" : "jdbc",
     "jdbc" : {
         "driver" : "com.mysql.jdbc.Driver",
         "url" : "jdbc:mysql://localhost:3306/test",
         "user" : "",
         "password" : "",
         "sql" : "select * from orders"
     }
}'
L'API

percolate
API percolate
curl -XPUT localhost:9200/_percolator/media/film_box_office -d '{
 "query": {
     "constant_score": {
         "filter": {
             "range": {
                 "nb_entrees": {
                     "from": "5000000", "include_lower": true
                 }
             }
         }
     }
 }
}'
API percolate
curl -XPOST 'localhost:9200/media/film/?percolate=*' -d '{
     "titre":"Hollywoo",
     "genre":"drame",
     "nb_entrees": 6000000
}'


{
     "ok":true,
     "_index":"media",
     "_type":"film",
     "_id":"70fc7FMWS8Sdxo733_5sWg",
     "_version":1,
     "matches":["film_box_office"]
}
Et aussi

Parent/child
  Warmers
   Slowlog
    Script
    Backup
      ...
Merci

  ?

Más contenido relacionado

Destacado

Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsDavey Shafik
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages webJean-Pierre Vincent
 
Automation using-phing
Automation using-phingAutomation using-phing
Automation using-phingRajat Pandit
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP GeneratorsMark Baker
 
The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)Matthias Noback
 
Top tips my_sql_performance
Top tips my_sql_performanceTop tips my_sql_performance
Top tips my_sql_performanceafup Paris
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Marcello Duarte
 
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Bruno Boucard
 
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLGabriele Bartolini
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)Arnauld Loyer
 
TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016CiaranMcNulty
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apacheafup Paris
 
The Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsThe Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsRyan Weaver
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersKacper Gunia
 

Destacado (20)

Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP Streams
 
Diving deep into twig
Diving deep into twigDiving deep into twig
Diving deep into twig
 
Elastic Searching With PHP
Elastic Searching With PHPElastic Searching With PHP
Elastic Searching With PHP
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
 
Automation using-phing
Automation using-phingAutomation using-phing
Automation using-phing
 
PHP5.5 is Here
PHP5.5 is HerePHP5.5 is Here
PHP5.5 is Here
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
 
The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)
 
Mocking Demystified
Mocking DemystifiedMocking Demystified
Mocking Demystified
 
Top tips my_sql_performance
Top tips my_sql_performanceTop tips my_sql_performance
Top tips my_sql_performance
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015
 
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
 
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQL
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)
 
Behat 3.0 meetup (March)
Behat 3.0 meetup (March)Behat 3.0 meetup (March)
Behat 3.0 meetup (March)
 
TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apache
 
Caching on the Edge
Caching on the EdgeCaching on the Edge
Caching on the Edge
 
The Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsThe Wonderful World of Symfony Components
The Wonderful World of Symfony Components
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4Developers
 

Similar a Why elasticsearch rocks!

XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...
XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...
XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...Publicis Sapient Engineering
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDBMongoDB
 
OpenData, LinkedData & SmartCities
OpenData, LinkedData & SmartCitiesOpenData, LinkedData & SmartCities
OpenData, LinkedData & SmartCitiesderomemont
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Silicon Comté
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012David Pilato
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - ElasticsearchDavid Pilato
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDidier Plaindoux
 
Développement avec Java Micro Edition
Développement avec Java Micro EditionDéveloppement avec Java Micro Edition
Développement avec Java Micro EditionSylvain Wallez
 
Moteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchMoteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchAudrey Neveu
 

Similar a Why elasticsearch rocks! (11)

XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...
XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...XebiCon'16  : Les requêtes avancées dans ElasticSearch  Par Gérome Egron et I...
XebiCon'16 : Les requêtes avancées dans ElasticSearch Par Gérome Egron et I...
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDB
 
OpenData, LinkedData & SmartCities
OpenData, LinkedData & SmartCitiesOpenData, LinkedData & SmartCities
OpenData, LinkedData & SmartCities
 
Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014Présentation de ElasticSearch / Digital apéro du 12/11/2014
Présentation de ElasticSearch / Digital apéro du 12/11/2014
 
Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012Elasticsearch - OSDC France 2012
Elasticsearch - OSDC France 2012
 
Lyon JUG - Elasticsearch
Lyon JUG - ElasticsearchLyon JUG - Elasticsearch
Lyon JUG - Elasticsearch
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Développement avec Java Micro Edition
Développement avec Java Micro EditionDéveloppement avec Java Micro Edition
Développement avec Java Micro Edition
 
Moteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic SearchMoteurs de recherche : un oeil sous le capot avec Elastic Search
Moteurs de recherche : un oeil sous le capot avec Elastic Search
 

Why elasticsearch rocks!

  • 1. Why Elasticsearch rocks ! AlpesJUG – 19 février 2013
  • 2. Tanguy Leroux ● Consultant et Formateur @ Zenika ● Elasticsearch Addict ● @tlrx ● http://github.com/tlrx ● tlrx.dev@gmail.com
  • 3. Un projet Open source + 700 forks +3500 watchers +100 commiters GitHub Apache 2 License
  • 4. Basé sur Apache lucene Version 3.6.2, bientôt la 4.1
  • 7. personne { "nom" : "Reinhardt", "prenom" : "Jean Django", "date_naissance" : "1910-10-23" }
  • 8. film { "titre" : "Django Unchained", "genre" : "western", "date_sortie" : "2013-01-16" }
  • 9. Elasticsearch / SGBD Index → Base de données Type → Table Document → Row Field → Column Mapping → Schema
  • 10. Elasticsearch est SCHEMA LeSS La structure des documents peut évoluer avec le temps
  • 11. Aujourd'hui { "titre" : "Django Unchained", "genre" : "western", "date_sortie": "2013-01-16" }
  • 12. demain { "titre" : "Django Unchained", "genre" : "western", "date_sortie" : "2013-01-16", "realisateur" : { "nom" : "Tarantino", "prenom" : "Quentin" }, "nb_entrees" : 3159385, "acteurs" : [ { "nom" : "Foxx", "prenom" : "Jamie" }, { "nom" : "Waltz", "prenom" : "Christoph" }, { "nom" : "Tarantino", "prenom" : "Quentin" } ] }
  • 13. Recherche de « tarantino » { "titre" : "Django Unchained", "genre" : "western", "date_sortie" : "2013-01-16", "realisateur" : { "nom" : "Tarantino", "prenom" : "Quentin" }, "nb_entrees" : 3159385, "acteurs" : [ { "nom" : "Foxx", "prenom" : "Jamie" }, { "nom" : "Waltz", "prenom" : "Christoph" }, { "nom" : "Tarantino", "prenom" : "Quentin" } ] }
  • 14. Recherche de « django » film personne { "titre" : "Django Unchained", "genre" : "western", { "date_sortie" : "2013-01-16", "realisateur" : { "nom" : "Reinhardt", "nom" : "Tarantino", "prenom" : "Jean Django", "prenom" : "Quentin" "date_naissance" : "1910-10-23" }, } "nb_entrees" : 3159385, "acteurs" : [...] }
  • 15. Un moteur de recherche restful http://HOST:PORT/index(s)/type(s)/_action|id Méthodes HTTP: GET, PUT, POST, DELETE
  • 16. Exemples Indexer un document Put http://HOST:PORT/mediatheque/film/1 POSt http://HOST:PORT/mediatheque/film/ Récupérer un document get http://HOST:PORT/mediatheque/film/1 Supprimer un document delete http://HOST:PORT/mediatheque/film/1 Créer un index post http://HOST:PORT/mediatheque/musique Rechercher get http://HOST:PORT/mediatheque/film/_search?q=django get http://HOST:PORT/_search?q=django
  • 17. Un langage de requêtes Query dsl match, field, query_string, bool, term, Fuzzy, match_all,more like this, geo, Range, wildcard, span, ...
  • 18. De nombreuses Facettes terms, histogram, date histogram, range, Stats, geo distance, filter, query ...
  • 19. facette « terms » curl -XGET 'localhost:9200/_search' -d ' { "query": { "match": { "titre": "django hard" } }, "facets": { "facet_genres": { "terms": { "field": "genre" } } } }'
  • 20. facette « terms » {... "hits":{ ... }, "facets":{ "facet_genres":{ "_type":"terms", "missing":0, "total":2, "other":0, "terms":[ {"term":"western","count":1}, {"term":"action","count":1} ] } } }
  • 21. facette « terms » {... "hits":{ ... }, "facets":{ "facet_genres":{ "_type":"terms", "missing":0, "total":2, "other":0, "terms":[ {"term":"western","count":1}, {"term":"action","count":1} ] } } }
  • 22. facette «histogramme» curl -XGET 'localhost:9200/media/film_search' -d ' { "query": { "match_all": {} }, "facets": { "facet_entrees": { "histogram": { "field": "nb_entrees", "interval": "1000000" } } } }'
  • 23. facette «histogramme» { "hits": { … }, "facets": { "facet_entrees": { "_type": "histogram", "entries": [ { "key": 1000000, "count": 1 }, { "key": 2000000, "count": 1 }, { "key": 3000000, "count": 1 } ] } } }
  • 24. facette «histogramme» { "hits": { … }, "facets": { "facet_entrees": { "_type": "histogram", "entries": [ { "key": 1000000, "count": 1 }, { "key": 2000000, "count": 1 }, { "key": 3000000, "count": 1 } ] } } }
  • 25. Elasticsearch est distribué Plusieurs nœuds communiquent en uni/multicast Node master, data, http ...
  • 26. Ils ont aussi pensé à la supervision
  • 28. Mais aussi tout plein d'autres clients Php, perl, scala, python, shell, ruby,.Net, Grails, play !, flume, clojure, Puppet, chef,...
  • 29. Un gros paquet de plugins Plugin d'analyse, rivers, transport, Site, misc, ...
  • 30. Extraction de texte avec Apache tika
  • 31. L'indexation facilitée avec les rivers Jdbc, Mongodb, couchdb, rabbitmq, activemq, Ldap, rss, twitter, wikipedia, ...
  • 32. Jdbc river plugin curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{ "type" : "jdbc", "jdbc" : { "driver" : "com.mysql.jdbc.Driver", "url" : "jdbc:mysql://localhost:3306/test", "user" : "", "password" : "", "sql" : "select * from orders" } }'
  • 34. API percolate curl -XPUT localhost:9200/_percolator/media/film_box_office -d '{ "query": { "constant_score": { "filter": { "range": { "nb_entrees": { "from": "5000000", "include_lower": true } } } } } }'
  • 35. API percolate curl -XPOST 'localhost:9200/media/film/?percolate=*' -d '{ "titre":"Hollywoo", "genre":"drame", "nb_entrees": 6000000 }' { "ok":true, "_index":"media", "_type":"film", "_id":"70fc7FMWS8Sdxo733_5sWg", "_version":1, "matches":["film_box_office"] }
  • 36. Et aussi Parent/child Warmers Slowlog Script Backup ...