1 of 21

Base de datos en python

2 of 21

3 of 21

Conceptos generales

Bases de datos Relacionales y No relacionales

DBMS (Database Management System):

SQL (Structured Query Language): Lenguaje de consulta

4 of 21

5 of 21

Base de datos Relacionales

  • Nacieron en los 70
  • Colección de tablas
  • Cada tabla tiene un Schema que representa los atributos fijos y los tipos de datos que contiene cada campo
  • Los RDBMS típicamente proveen funcionalidades de lectura, creación, update y borrado de datos a través de SQL
  • Tienen “keys” que identifican filas y columnas que hacen el acceso más rápido

Más populares: Oracle, MySQL, PostgreSQL, Microsoft SQL Server, SQlite, DB2

6 of 21

Ventajas y desventajas

Ventajas

  • Bien documentadas. Tecnologías maduras. RDBMS desarrollados por corporaciones establecidas
  • SQL standards bien definidos y aceptados
  • Desarrolladores con experiencia en SQL y RDBMS.
  • Son ACID-compliant (Satisfacen requerimientos de Atomicidad, Consistencia, Aislación y durabilidad)

Desventajas:

  • RDBMS no funciona bien con data no estructurada
  • No siempre hay un mapeo uno a uno de las tablas en la DB a los objetos representando la misma data
  • Al migrar un RDBMS a otro tiene que haber un match exacto en tipos, Schema, máximas longitudes, etc

7 of 21

No relacionales (Schema agnostic)

  • Key-value stores: Velocidad y simpleza. Suelen trabajar en memoria o cacheado para rápido acceso. (Redis, Amazon DynamoDB)
  • Columnar store: Puede acceder a los datos por columnas. Manejo de grandes volúmenes de datos y tiene interfaz CQL (Similar a SQL) pero sigue siendo agnóstica en Schema. (BigQuery, Clickhouse, Snowflake, Cassandra, Scylla, HBase) - Muchas soportan Particiones en filas
  • Document store: Almacenan data en forma de documentos json (MongoDB, CouchBase)
  • Graph Databases: Data como red de nodos relacionados (Neo4j, Datastax Enterprise Graph)
  • Search Databases: Suelen estar orientadas a optimizar búsquedas específicas. Texto por ejemplo. (Elasticsearch, Splunk, Solr)
  • Vector DB: Pinecone, Weaviate, Milvus (Elasticsearch, pgvector)

8 of 21

Ventajas y desventajas

Ventajas

  • Schema-free más flexibles y fáciles de administrar
  • NoSQL suelen ser más horizontales y más tolerantes a fallas
  • Intercambio de data entre nodos más sencillo

Desventajas

  • Suelen ser menos maduras y estar menos adoptadas por lo que requiere un nivel mayor de expertise
  • Rango diferente de formatos y limitaciones dependiendo del tipo de DB

9 of 21

10 of 21

Comparación de infraestructuras

Data lakes are primarily about storage and can hold any data in any format, but they often require separate systems for processing and querying.

Data warehouses are designed specifically for structured, cleaned data and are optimized for high-speed analytics.

Lakehouses provide the unified storage of a data lake but add structured, queryable, and transactional features like a data warehouse, enabling direct analytics and machine learning. They provide the flexibility to store and work with raw, semi-structured, and unstructured data, while also supporting data analytics and machine learning directly on the data.

11 of 21

SQlite en python

12 of 21

Object-Relational Mappers (ORM)

13 of 21

14 of 21

Instalación de BD para pruebas

15 of 21

SQLite3 / SQLALchemy

Viene instalada en la base de python

En la carpeta del repo crear la carpeta data/sqlite3

SQLAlchemy tutorial

SQLAlchemy ORM

16 of 21

Docker

17 of 21

postgres

docker pull postgres

docker run -d \

--name some-postgres \

-e POSTGRES_PASSWORD=mysecretpassword \

-e PGDATA=/var/lib/postgresql/data/pgdata \

-v /custom/mount:/var/lib/postgresql/data \

postgres

18 of 21

MongoDB

En la carpeta del repo crear la carpeta data/mongo

docker pull mongo

docker run -v /Users/julian/Documents/repos/SQL/data/mongo:/data/db -p 27017:27017 mongo

pip install pymongo

pip install mongoengine

19 of 21

Elasticsearch

En la carpeta del repo crear la carpeta data/elasticsearch

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.2

docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" -v /Users/julian/Documents/repos/SQL/data/elasticsearch:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:7.15.2

pip install elasticsearch-dsl

20 of 21

Django → tutorial

pip install django

django-admin startproject django_test

python manage.py runserver 8080

python manage.py migrate

python manage.py createsuperuser

python manage.py startapp polls

Seguir el tutorial

21 of 21