Google Datastore & Search API
Twitter : @celine_louvet
Github : celinelouvet
Céline Louvet
Chez Sfeir depuis 2011
Développeuse Backend Core
Java, Google Cloud Platform
TDD, Qualité de code
Google Datastore
● BDD dédiée pour AppEngine
● BDD NoSQL Schemaless
● Clé / Valeur
Google Datastore
Qu’est ce que c’est ?
Cohérence forte :
La donnée est toujours cohérente entre toutes les instances
Cohérence faible :
Il faut du temps avant que toutes les données soient cohérentes entre les
instances
Google Datastore
Préambule
Google Datastore
Datastore
Megastore
Bigtable
Query
Fiabilité (Réplication)
Scalabilité (Sharding automatique)
Architecture interne
Google Datastore
Datastore
Megastore
Bigtable
Query
Fiabilité (Réplication)
Scalabilité (Sharding automatique)
Bigtable
Google Datastore
Qu’est ce que Bigtable ?
● 1ère
base haute disponibilité et scalable de Google
● Utilisation par Google :
○ Sur plus de 60 projets
○ Web Search, Youtube, Earth, Analytics, etc.
● Dédiée au stockage : ne supporte pas les queries
Google Datastore
Représentation de Bigtable
● Map multi-dimensionnelle, triée
○ comporte des lignes
○ une ligne comporte des colonnes
○ chaque cellule comporte plusieurs versions
de la donnée, indexées par timestamp
Row 1
Col 1
t1
t1’
Col 2
t2
t2’
Row 2
Col 1
t3
t3’
Google Datastore
Opérations sur Bigtable
● Exclusivement pour une ligne
○ Create, Read, Update & Delete
○ une cohérence forte
○ transactions
● Tri par clé de ligne
○ Permet les requêtes par plage de clés de ligne
○ Mais aucune recherche par colonne
Google Datastore
Datastore
Megastore
Bigtable
Query
Scalabilité (Sharding automatique)
Megastore
Fiabilité (Réplication)
Entity Group 1 Entity Group 2
Google Datastore
Qu’apporte Megastore ?
● Réplication des données
● Cohérence acceptable
● Données réparties en “Entity
groups”
Cell Cell
Comment
Comment
Comment Comment
Cell
User
Spreadsheet Spreadsheet
Cohérence faible
Google Datastore
Réplication & scalabilité
Datacenter 1
Paul
Datacenter 2
Valérie
Cohérence forteEntity
Group 1
Entity
Group 2
Google Datastore
Opérations entre Entity Groups
Entity Group 1
Entity Group 2
Index globaux
Cohérence faible
Index locaux
Cohérence forte
Entités
Modification
Queue
Entités
Index locaux
Cohérence forte
Google Datastore
Datastore
Megastore
Bigtable
Query
Scalabilité (Sharding automatique)
Datastore
Fiabilité (Réplication)
Google Datastore
Qu’apporte Datastore ?
● Facilité de requête
○ APIs de manipulation des données (Python, Java, Go)
● Clé / Valeur
Google Datastore
Principe du Datastore
● Combinaison de plusieurs Bigtables
○ Entities table
○ Index tables :
■ entities by kind
■ entities by property ASC
■ entities by property DESC
○ Custom indexes table
Google Datastore
Différentes APIs
● API Low-Level
● JDO/JPA
● Frameworks externes : Objectify, Twig, Slim3, etc.
Google Datastore
Différentes APIs
Démo
Google Datastore
Différentes APIs en résumé
● API Low-Level
○ Meilleures performances
○ Plus de code à produire
● Objectify
○ Beaucoup moins de code
○ Des performances dégradées
○ Prise en compte des évolutions plus longue
○ Des bugs potentiels
Google Search API
● Moteur de recherche plein texte
● Document
● Scalable, shardée
Google Search API
Qu’est ce que c’est ?
● Objet unique avec un id et des champs
● Plusieurs types de champs :
○ Atom
○ Text
○ HTML
○ Number
○ Date
○ Geopoint
Google Search API
Documents
● Récupération de documents :
○ par id
○ par plage d’ids
● Recherche par contenu en respectant des critères
Google Search API
Index
● Sur tous les champs :
la tour sombre
● Sur certains champs spécifiquement :
“author=king”
● En combinant :
“author=king AND NOT title=tour”
Google Search API
Requêtes
Google Search API
Démo
Le couple idéal
Le couple idéal
Service
DAO Search
Datastore
Search
API
Des questions ?
Merci
Sources
● Megastore : Providing Scalable, Highly Available Storage for
Interactive Services
● Bigtable: A Distributed Storage System for Structured Data
● Understanding Paxos
Sources

Google datastore & search api