create compose with database
This commit is contained in:
parent
262bba35da
commit
feda68d5f8
26
compose.yaml
Normal file
26
compose.yaml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
name: data_engineer-farpost
|
||||||
|
|
||||||
|
services:
|
||||||
|
database:
|
||||||
|
container_name: farpost-database
|
||||||
|
restart: always
|
||||||
|
image: postgres:latest
|
||||||
|
volumes:
|
||||||
|
- ./dump.sql:/docker-entrypoint-initdb.d/dump.sql:ro
|
||||||
|
- postgres-data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: pg_isready -d log
|
||||||
|
interval: 60s
|
||||||
|
start_period: 1s
|
||||||
|
timeout: 600s
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: log
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres-data:
|
||||||
|
name: farpost-postgres-data
|
75
dump.sql
Normal file
75
dump.sql
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
--
|
||||||
|
-- PostgreSQL database dump
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Dumped from database version 17.3 (Debian 17.3-3.pgdg120+1)
|
||||||
|
-- Dumped by pg_dump version 17.3 (Debian 17.3-3.pgdg120+1)
|
||||||
|
|
||||||
|
SET statement_timeout = 0;
|
||||||
|
SET lock_timeout = 0;
|
||||||
|
SET idle_in_transaction_session_timeout = 0;
|
||||||
|
SET transaction_timeout = 0;
|
||||||
|
SET client_encoding = 'UTF8';
|
||||||
|
SET standard_conforming_strings = on;
|
||||||
|
SELECT pg_catalog.set_config('search_path', '', false);
|
||||||
|
SET check_function_bodies = false;
|
||||||
|
SET xmloption = content;
|
||||||
|
SET client_min_messages = warning;
|
||||||
|
SET row_security = off;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: user_actions; Type: TYPE; Schema: public; Owner: postgres
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TYPE public.user_actions AS ENUM (
|
||||||
|
'first_entry',
|
||||||
|
'registration',
|
||||||
|
'login',
|
||||||
|
'logout',
|
||||||
|
'create_theme',
|
||||||
|
'entry_theme',
|
||||||
|
'delete_theme',
|
||||||
|
'write_message'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TYPE public.user_actions OWNER TO postgres;
|
||||||
|
|
||||||
|
SET default_tablespace = '';
|
||||||
|
|
||||||
|
SET default_table_access_method = heap;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: log; Type: TABLE; Schema: public; Owner: postgres
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE public.log (
|
||||||
|
id integer NOT NULL,
|
||||||
|
user_id integer NOT NULL,
|
||||||
|
action public.user_actions NOT NULL,
|
||||||
|
datetime timestamp with time zone DEFAULT (now() AT TIME ZONE 'EAST'::text) NOT NULL,
|
||||||
|
object_id integer,
|
||||||
|
response smallint NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE public.log OWNER TO postgres;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Data for Name: log; Type: TABLE DATA; Schema: public; Owner: postgres
|
||||||
|
--
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: log log_pk; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY public.log
|
||||||
|
ADD CONSTRAINT log_pk PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- PostgreSQL database dump complete
|
||||||
|
--
|
||||||
|
|
32
tasks/1.md
Normal file
32
tasks/1.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
1. Спроектировать схему БД
|
||||||
|
я здесь вижу 2 варианта развития
|
||||||
|
1) сделать одну таблицу в которой будет:
|
||||||
|
- id пользователя
|
||||||
|
- время выполненного дйствия
|
||||||
|
- enum из различный действия (бэку не нужно лишний раз искать id действия, чтобы закрепить его в таблице логов)
|
||||||
|
- (отдельная таблица для действий будет лишней)
|
||||||
|
- (бэку необходимо знать и контролировать все действия, а таблица будет лишь означать изменение данных извне, которое будет либо бесполезной, либо опасной, когда бэк не найдёт нужное действие)
|
||||||
|
2) разбить на несколько таблиц:
|
||||||
|
- таблица логов аккаунта
|
||||||
|
- таблица работы с темой
|
||||||
|
- таблица работы с сообщениями
|
||||||
|
|
||||||
|
- 1 вариант -
|
||||||
|
1) ускоренная разработка из-за отсутсвия необходимости задумываться над подтягиванием данных из других таблиц (join, lazy_loading, selectin)
|
||||||
|
2) простота работы с данными: SQL запросы намного проще, более удобный перенос в csv
|
||||||
|
- 2 вариант -
|
||||||
|
1) БД более подготовлена к изменению или усложенению архитектуры
|
||||||
|
2) повышение эффективности за счёт меньшего количества столбцов
|
||||||
|
|
||||||
|
в ТЗ не было речи про дальнейшую судьбу этой БД, так что я пойду на 1 вариант
|
||||||
|
|
||||||
|
```
|
||||||
|
CREATE TABLE public.log (
|
||||||
|
id integer NOT NULL,
|
||||||
|
user_id integer NOT NULL,
|
||||||
|
action public.user_actions NOT NULL,
|
||||||
|
datetime timestamp with time zone DEFAULT (now() AT TIME ZONE 'EAST'::text) NOT NULL,
|
||||||
|
object_id integer,
|
||||||
|
response smallint NOT NULL
|
||||||
|
);
|
||||||
|
```
|
0
tasks/2.md
Normal file
0
tasks/2.md
Normal file
Loading…
x
Reference in New Issue
Block a user