utilisation de postgresql chez lengow

Download Utilisation de PostgreSQL chez Lengow

Post on 13-Jan-2017

330 views

Embed Size (px)

TRANSCRIPT

Prsentation PowerPoint

POSTGRESQL CHEZ LENGOWQuand un poney rencontre un lphantMickael Le Baillif, Guillaume StofferMeetup PostgreSQL Nantes #22016-04-26

NOTRE METIER2

NOTRE METIER3

Lengow: Un cosystme ddi au e-commerce

NOS BESOINS EN BDD4

NOS BESOINS EN BDDUn trs grand volume de donnes estim 250 milliards de produits indexs par an

Une trs grande diversit des sources en entre (langage, format, structure)5

NOS BESOINS EN BDDUne trs grande diversit des diffuseurs en sortie (format attendu exotique)

La possibilit de manipuler un catalogue marchand en profondeur en toute scurit6

ARCHITECTURE POSTGRESQL7

QUY A-T-IL SOUS LE CAPOT ?

ARCHITECTURE MATERIELLE9

Serveur physique

ARCHITECTURE MATERIELLE10Processeursmulti-coeurs

ARCHITECTURE MATERIELLE11Donnes chaudes intgralement en RAM

ARCHITECTURE MATERIELLE12Persistence disque sur SSD

ET SI A CRASHE ?

RPLICATION ET HAUTE DISPONIBILIT14

Datacenter 1Datacenter 2WAL shippingWAL shippingWAL shippingmasterslaveslaveslave

RPLICATION ET HAUTE DISPONIBILIT15

@IP virtuelle RW@IP virtuelle RO

ARCHITECTURE LOGIQUE16JSONBXMLCSVJSONXMLCSVJSON

Marchands

Diffuseurs

IMPLMENTATIONS INTRESSANTES17

XML ET XPATH18Extraction de donnes utiles dans des documents XML directement partir de requtes SQL

XML ET XPATH19La structure du fichier envoyer aux diffuseurs est spcifie en XML

XML ET XPATH20La structure du fichier envoyer aux diffuseurs est spcifie en XML

CSVJSONXMLEANTitreMarquePrix HTPrix TTCFrais port

[ { "EAN": "...", "Titre": "...", "Marque": "...", "Prix HT": 2, "Prix TTC": 3, "Frais port": 1 }]

... ... ... ... ... ...

XML ET XPATH21

XML ET XPATH22

WITH fields AS (SELECT unnest(xpath('//field', schema_definition)) AS f FROM channel.structure WHERE id = 915)SELECT unnest(xpath('@id', f)) AS id, unnest(xpath('@name', f)) AS name, unnest(xpath('@use', f))::text = 'required' AS requiredFROM fields

XML ET XPATH23

WITH fields AS (SELECT unnest(xpath('//field', schema_definition)) AS f FROM channel.structure WHERE id = 915)SELECT unnest(xpath('@id', f)) AS id, unnest(xpath('@name', f)) AS name, unnest(xpath('@use', f))::text = 'required' AS requiredFROM fieldsf

XML ET XPATH24

WITH fields AS (SELECT unnest(xpath('//field', schema_definition)) AS f FROM channel.structure WHERE id = 915)SELECT unnest(xpath('@id', f)) AS id, unnest(xpath('@name', f)) AS name, unnest(xpath('@use', f))::text = 'required' AS requiredFROM fieldsidnamerequired1EANt2Titre Produitt3Marquet4Prix HTt

SYSTEM VERSION25

Standard SQL 2011Extension Temporal TablesProcdure versioning()Colonne type tstzrangeSynergie avec l'hritage de table

26Utilisation de triggers pour indexer les champs essentiels dans du contenu JSONTRIGGERS DINDEXATION

TRIGGERS DINDEXATION27Cas traditionnel : donnes structuresSKUnamepricestockcolor99_B33WBlue Shoes64.996blue54_A23BUmbrella19.9955black11_R22FAiePhone45.551200white98_N26TChair63.008null

TRIGGERS DINDEXATION28Stockage JSON : donnes fusionnes dans une seule colonneidattributes101{SKU: 99_B33W, name: Blue Shoes, price: 64.99 }106{SKU: 54_A23B, name: Umbrella, price: 19.99 }115{SKU: 11_R22F, name: AiePhone, price: 45.55 }132{SKU: 98_N26T, name: Chair, price: 63 }

SKUnamepricestockcolor99_B33WBlue Shoes64.996blue54_A23BUmbrella19.9955black11_R22FAiePhone45.551200white98_N26TChair63.008null

TRIGGERS DINDEXATION29catalog_198id_catalogmapping198{id: SKU, prix: price, titre: name, }

catalog_formatCREATE TRIGGER xxx after INSERT OR UPDATE OF mappingON catalog_formatidattributes101{SKU: 99_B33W, name: Blue Shoes, price: 64.99 }106{SKU: 54_A23B, name: Umbrella, price: 19.99 }115{SKU: 11_R22F, name: AiePhone, price: 45.55 }132{SKU: 98_N26T, name: Chair, price: 63 }

create index on catalog_198using btree(attributes->>SKU)

TRIGGERS DINDEXATION30create index on catalog_198using GIN (attributes)

Va indexer toutes les proprits dun produit, trop volumineux et coteux

SELECT attributesFROM catalog_198WHERE attributes @> {"SKU: "54_A23B}

catalog_198idattributes101{SKU: 99_B33W, name: Blue Shoes, price: 64.99 }106{SKU: 54_A23B, name: Umbrella, price: 19.99 }115{SKU: 11_R22F, name: AiePhone, price: 45.55 }132{SKU: 98_N26T, name: Chair, price: 63 }

ET POURPLUS TARD 31

PROJETS FUTURSCration d'index asynchrone avec PGQNe pas bloquer lors du changement de mapping dun catalogue

Paralllisation des requtes sur nos 4 serveurs (Citus DB?)Chaque serveur peut scanner de la table

TABLESAMPLE + cacheEstimer trs rapidement un rsultat sur un chantillon, puis lancer le calcul complet qui sera mis en cache32

MERCI

MERCIDes questions?

Contact:mickael.le.baillif@gmail.com guillaume.stoffer@gmail.com

33

View more >