google datastore & search api
TRANSCRIPT
Twitter : @celine_louvet
Github : celinelouvet
Céline Louvet
Chez Sfeir depuis 2011
Développeuse Backend Core
Java, Google Cloud Platform
TDD, Qualité de code
● BDD dédiée pour AppEngine
● BDD NoSQL Schemaless
● Clé / Valeur
Google DatastoreQu’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 DatastorePré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 DatastoreQu’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 DatastoreRepré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 DatastoreOpé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 DatastoreQu’apporte Megastore ?
● Réplication des données
● Cohérence acceptable
● Données réparties en “Entity
groups”Cell Cell
CommentCommentComment Comment
Cell
User
Spreadsheet Spreadsheet
Cohérence faible
Google DatastoreRéplication & scalabilité
Datacenter 1Paul
Datacenter 2Valérie
Cohérence forteEntityGroup 1
EntityGroup 2
Google DatastoreOpérations entre Entity Groups
Entity Group 1
Entity Group 2
Index globaux
Cohérence faible
Index locauxCohérence forte
EntitésModification
Queue
Entités
Index locauxCohérence forte
Google Datastore
Datastore
Megastore
Bigtable
Query
Scalabilité (Sharding automatique)
Datastore
Fiabilité (Réplication)
Google DatastoreQu’apporte Datastore ?
● Facilité de requête
○ APIs de manipulation des données (Python, Java, Go)
● Clé / Valeur
Google DatastorePrincipe 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 DatastoreDifférentes APIs
● API Low-Level
● JDO/JPA
● Frameworks externes : Objectify, Twig, Slim3, etc.
Google DatastoreDiffé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
● Moteur de recherche plein texte
● Document
● Scalable, shardée
Google Search APIQu’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 APIDocuments
● Récupération de documents :
○ par id
○ par plage d’ids
● Recherche par contenu en respectant des critères
Google Search APIIndex
● Sur tous les champs :
la tour sombre
● Sur certains champs spécifiquement :
“author=king”
● En combinant :
“author=king AND NOT title=tour”
Google Search APIRequêtes
● Megastore : Providing Scalable, Highly Available Storage for
Interactive Services
● Bigtable: A Distributed Storage System for Structured Data
● Understanding Paxos
Sources