Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[NoSQL BA 2021] NoSQL + SQL = PostgreSQL

[NoSQL BA 2021] NoSQL + SQL = PostgreSQL

Nesta apresentação veremos um pouco das capacidades NoSQL do PostgreSQL por oferecer suporte nativo a JSON/JSONB, HStore (chave/valor), XML, oferecendo excelente indexação e otimização no armazenamento, e atendendo aos requisitos ACID, portanto tendo o melhor dos dois mundos. Sem contar o alto poder de extensibilidade que oferece pela possibilidade de escrever novos tipos de dados, mecanismos de indexação, linguagens procedurais, adaptadores de fontes de dados externas (SQL/MED), entre outras diversas características excelentes.

Esta palestra foi realizada no NoSQL Bahia 2021: http://www.nosqlba.com/2021/index.html

More Decks by Fabrízio de Royes Mello

Other Decks in Technology

Transcript

  1. NoSQL + SQL = PostgreSQL
    @fabriziomello

    View full-size slide

  2. Fabrízio de Royes Mello
    • Empreendedor
    • Colaborador PostgreSQL
    • Pai, Marido, etc ...

    View full-size slide

  3. NoSQL nasceu para resolver ...
    - Escalabilidade
    - Modelo Relacional
    - SQL

    View full-size slide

  4. Escalabilidade
    Vertical e Horizontal

    View full-size slide

  5. http://pudgylogic.blogspot.com/2016/01/horizontal-vs-vertical-scaling.html

    View full-size slide

  6. Escalabilidade VERTICAL (PostgreSQL)
    ● Índices (btree, hash, gin, gist, brin, bloom, …)
    ● Particionamento de Tabelas
    ● Operações Paralelo (queries, índices, etc)
    ● JIT (compilar execução)
    ● Full Text Search
    ● Extensibilidade:
    ○ PostGIS, TimescaleDB, PGStrom, TableAM

    View full-size slide

  7. Escalabilidade HORIZONTAL
    (PostgreSQL)
    1. Load Balancing com réplicas Read-Only
    2. Foreign Data Wrappers
    3. CitusDB (extensão)

    View full-size slide

  8. https://www.percona.com/blog/2018/10/02/scaling-postgresql-using-connection-poolers-and-load-balancers-for-an-enterprise-grade-environment/
    1)

    View full-size slide

  9. https://medium.com/@rondineli.gomes.araujo/testing-pgbouncer-pgpool-load-balancing-d0545e6d091
    1)

    View full-size slide

  10. http://www.3manuek.com/postgresmanualsharding
    2)

    View full-size slide

  11. https://docs.citusdata.com/en/v10.0/develop/reference_processing.html#citus-query-processing
    3)

    View full-size slide

  12. https://docs.citusdata.com/en/v10.0/get_started/concepts.html
    3)

    View full-size slide

  13. Modelo Relacional
    Tabelas e Relacionamentos

    View full-size slide

  14. PostgreSQL (modelo híbrido)

    View full-size slide

  15. PostgreSQL (modelo híbrido)
    https://gist.github.com/rponte/bf362945a1af948aa04b587f8ff332f8
    INT4 / INT8

    View full-size slide

  16. DDL
    CREATE TABLE customer (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    data JSONB
    );
    CREATE INDEX idx_customer_data
    ON customer USING gin (data);
    CREATE INDEX idx_customer_data_birthdate
    ON customer ((data->>'birthdate'));

    View full-size slide

  17. Duas linhas com documentos JSON
    INSERT INTO customer (name, data)
    VALUES (
    'Fulano de Tal',
    $$
    {
    "phones": ["+55 (51) 99888-7766", "+55 (53) 3344-5566" ],
    "address": "Rua Sem Nome, 12345",
    "city": "Bagé"
    }
    $$::JSONB
    ), (
    'Beltrano de Tal',
    $$
    {
    "address": "Avenida Com Nome, 54321",
    "city": "Bagé",
    "state": "RS",
    "birthdate": "1978-01-01"
    }
    $$::JSONB
    );

    View full-size slide

  18. Recuperação das linhas
    SELECT
    name,
    data->>'city',
    data->>'state',
    data->'phones',
    data->>'birthdate'
    FROM
    customer
    WHERE
    data->>'city' = 'Bagé';

    View full-size slide

  19. Similar para outros Tipos de Dados
    ● XML
    ● HSTORE (chave/valor)
    ● Arrays

    View full-size slide

  20. SQL
    muito além do JOIN

    View full-size slide

  21. Lembram desse Diagrama ER ??

    View full-size slide

  22. E se fizéssemos assim?

    View full-size slide

  23. Exemplo SQL
    -- Using JOIN clause
    SELECT
    customer.id, customer.name, city.name AS "city"
    FROM
    customer
    JOIN city ON city.id = customer.city;
    -- No JOIN clause (thanks to Natural Key)
    SELECT
    id, name, city
    FROM
    customer;

    View full-size slide

  24. SQL é muito mais que JOIN (SQL:1999)
    ● LATERAL
    ● Grouping Sets
    ● WITH [ RECURSIVE ]
    ● FILTER (SQL:2003)
    ● OVER and PARTITION BY (SQL:2003)
    ● TABLESAMPLE (SQL:2003)
    ● …

    View full-size slide

  25. Come to the “Elephant” side of the force !!

    View full-size slide