quinta-feira, janeiro 28, 2021

CrateDB - Uma alternativa escalável para o Postgresql

 CrateDB (https://crate.io/products/cratedb/) é um banco de dados que oferece a sintaxe do Postgresql mas é mais escalável e mais rápido

 

 

Para instalar:


    $ bash -c "$(curl -L try.crate.io)"
 
e ele já executará
 
alternativamente,  faça o download  (https://crate.io/download/)  e extraia:
 
    tar -xzf crate-*.tar.gz
    cd crate-* 
 
 execute com 
 
    ./bin/crate    
 
Use a admin UI
 
    http://localhost:4200/ 
 
instale o driver python
 
    pip install crate
 
 
 Conecte à ao nó:
 
    connection = client.connect("localhost:4200")
 
 Databases
O CrateDB não permite a criação de databases, então usa schemas 
 
isslocation.py: (de https://crate.io/docs/crate/tutorials/en/latest/generate-time-series/python.html)
 
 
 
import time

import requests
from crate import client


def position():
    response = requests.get("http://api.open-notify.org/iss-now.json")
    position = response.json()["iss_position"]
    return f'POINT ({position["longitude"]} {position["latitude"]})'


def insert():
    # New connection each time
    try:
        connection = client.connect("localhost:4200")
        print("CONNECT OK")
    except Exception as err:
        print("CONNECT ERROR: %s" % err)
        return
        
    try:
        cursor.execute(
            "INSERT INTO iss (position) VALUES (?)", [position()],
        )
        print("INSERT OK")
    except Exception as err:
        print("INSERT ERROR: %s" % err)
        return


# Loop indefinitely
while True:
    insert()
    print("Sleeping for 10 seconds...")
    time.sleep(10) 
 
    cursor = connection.cursor() 


listar databases:

    select datname from pg_database;

ou 

    show schemas;

crie um novo schema (database) criando uma nova tabela

   

create table my_schema.my_table (
   pk int primary key,
   label text,
   position geo_point
);

Para excluir uma 'database' ou schema exclua as tabelas. ao excluir a última tabela o schema será removido


    drop table my_schema.my_table;


outro exemplo, apenas para criar uma database (schema)

create table my_new_db.empty (
   id int primary key
);
 
    drop table my_new_db.empty;
 
 Não é possível usar com o PyDAL porque o cratedb não tem suporte ao tipo Serial e não tem autoincrement