Update to Skynet v7 - Complete documentation restructure
- Nueva estructura de carpetas según Skynet v7 - Añadidos schemas SQL completos - Documentación de entidades, componentes e integraciones - Modelo de seguridad actualizado - Infraestructura y operaciones reorganizadas
This commit is contained in:
128
01_ARQUITECTURA/almacenamiento.md
Normal file
128
01_ARQUITECTURA/almacenamiento.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Almacenamiento
|
||||
|
||||
**Versión:** 1.0
|
||||
**Estado:** Definición
|
||||
|
||||
---
|
||||
|
||||
## Visión General
|
||||
|
||||
El sistema utiliza Cloudflare R2 como almacenamiento de objetos. Cada instancia tiene su propio bucket independiente.
|
||||
|
||||
---
|
||||
|
||||
## Buckets R2
|
||||
|
||||
| Bucket | Uso | Acceso |
|
||||
|--------|-----|--------|
|
||||
| **architect** | Coordinador central | Privado |
|
||||
| **deck** | Servidor personal | Privado |
|
||||
| **corp** | Servidor empresarial | Privado |
|
||||
| **hst** | Tags semánticos (imágenes) | Público |
|
||||
| **locker** | Almacenamiento general | Privado |
|
||||
|
||||
---
|
||||
|
||||
## Protocolo locker://
|
||||
|
||||
Referencia interna para archivos almacenados en R2.
|
||||
|
||||
### Formato
|
||||
|
||||
```
|
||||
locker://{bucket}/{h_entrada}/{filename}
|
||||
```
|
||||
|
||||
### Ejemplos
|
||||
|
||||
```
|
||||
locker://deck/a1b2c3d4.../documento.pdf
|
||||
locker://corp/f5e6d7c8.../factura.png
|
||||
locker://hst/abc123.../imagen.png
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Estructura de Almacenamiento
|
||||
|
||||
### Por contenedor (ingesta)
|
||||
|
||||
```
|
||||
{bucket}/
|
||||
└── {h_entrada}/
|
||||
├── archivo1.pdf
|
||||
├── archivo2.jpg
|
||||
└── metadata.json
|
||||
```
|
||||
|
||||
### HST (tags)
|
||||
|
||||
```
|
||||
hst/
|
||||
└── {mrf}.png # mrf = SHA-256 del archivo de imagen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuración R2
|
||||
|
||||
### Variables de Entorno
|
||||
|
||||
```bash
|
||||
R2_ENDPOINT=https://{account_id}.r2.cloudflarestorage.com
|
||||
R2_ACCESS_KEY=****
|
||||
R2_SECRET_KEY=****
|
||||
R2_BUCKET={bucket_name}
|
||||
```
|
||||
|
||||
### Cliente Python
|
||||
|
||||
```python
|
||||
import boto3
|
||||
|
||||
s3 = boto3.client(
|
||||
's3',
|
||||
endpoint_url=R2_ENDPOINT,
|
||||
aws_access_key_id=R2_ACCESS_KEY,
|
||||
aws_secret_access_key=R2_SECRET_KEY
|
||||
)
|
||||
|
||||
# Subir archivo
|
||||
s3.put_object(
|
||||
Bucket=R2_BUCKET,
|
||||
Key=f"{h_entrada}/{filename}",
|
||||
Body=file_bytes
|
||||
)
|
||||
|
||||
# Obtener archivo
|
||||
response = s3.get_object(
|
||||
Bucket=R2_BUCKET,
|
||||
Key=f"{h_entrada}/{filename}"
|
||||
)
|
||||
content = response['Body'].read()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Política de Retención
|
||||
|
||||
| Tipo de datos | Retención | Backup |
|
||||
|---------------|-----------|--------|
|
||||
| Archivos de ingesta | Permanente | Sí |
|
||||
| Imágenes HST | Permanente | Sí |
|
||||
| Temporales | 7 días | No |
|
||||
|
||||
---
|
||||
|
||||
## Integridad
|
||||
|
||||
Cada archivo se identifica por su hash SHA-256:
|
||||
|
||||
```python
|
||||
import hashlib
|
||||
|
||||
def calcular_hash(contenido_bytes):
|
||||
return hashlib.sha256(contenido_bytes).hexdigest()
|
||||
```
|
||||
|
||||
La referencia `locker://` incluye el hash del contenedor, permitiendo verificación de integridad.
|
||||
Reference in New Issue
Block a user