Skip to content

Commit

Permalink
Merge pull request #14 from zanfranceschi/main
Browse files Browse the repository at this point in the history
Rebasing my side
  • Loading branch information
KitsuneSemCalda committed Mar 7, 2024
2 parents 46dfc39 + 9453a78 commit 4df7d0a
Show file tree
Hide file tree
Showing 453 changed files with 29,320 additions and 348,006 deletions.
1 change: 1 addition & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
- [ ] Não estou alterando arquivos fora do ou dos meus diretórios de participação.
- [ ] Testei pelo menos o funcionamento básico do `docker-compose.yml`, todos os serviços estão subindo e minha API respondendo na porta 9999.
- [ ] Todas imagens contidas no `docker-compose.yml` funcionam na arquitetura linux/amd64.

80 changes: 63 additions & 17 deletions STATUS-TESTES.md

Large diffs are not rendered by default.

29 changes: 29 additions & 0 deletions participantes/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ isadora-souza-mongodb/init.sql
diogoviana/storage
diogoviana/tmp
cleverton-rocha/postgresql.conf
wosteimer/src
ives-samuel-powershell/data
ives-samuel-powershell/data/database.db
ives-samuel-powershell/data/database.db-shm
Expand Down Expand Up @@ -40,4 +41,32 @@ AlcivanLucas/api_node/db/script.sql
gldmelo/postgres.conf
rizzo-nodejs/data
rizzo-nodejs/data/pg
edy-elixir-e-ranger-de-dentes/tmp
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client2.DCL
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/schema.DAT
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/LATEST.LOG
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client4.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client5.DCL
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client4.DCL
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client5.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client3.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client2.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client1.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/DECISION_TAB.LOG
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/alexander@api02/event_log_client3.DCL
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client2.DCL
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/schema.DAT
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/LATEST.LOG
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client4.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client5.DCL
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client4.DCL
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client5.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client3.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client2.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client1.DCD
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/DECISION_TAB.LOG
edy-elixir-e-ranger-de-dentes/tmp/mnesia-data/diogenes@api01/event_log_client3.DCL
jpaf/postgresql.conf
11 changes: 11 additions & 0 deletions participantes/4emcos-golang/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## Submissão para Rinha de Backend, Segunda Edição: 2024/Q1 - Controle de Concorrência

Submissão feita com:
- `Go` para api com o framework `Gin Web Framework`
- `nginx` como load balancer
- `postgres` como banco de dados
- [repositório da api](https://github.com/4emcos/rinha-de-backend-2024-q1-golang)


[@4emcos](https://twitter.com/4emcos) @ twitter
[@4emcos](https://www.linkedin.com/in/4emcos/) @ linkedin
103 changes: 103 additions & 0 deletions participantes/4emcos-golang/ddl.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
SET timezone = 'America/Sao_Paulo';
CREATE SCHEMA IF NOT EXISTS rinha;

CREATE TABLE rinha.users
(
id SERIAL PRIMARY KEY,
limit_in_cents INTEGER NOT NULL,
initial_balance INTEGER NOT NULL DEFAULT 0
);

INSERT INTO rinha.users (id, limit_in_cents, initial_balance)
VALUES (DEFAULT, 1000 * 100, 0),
(DEFAULT, 800 * 100, 0),
(DEFAULT, 10000 * 100, 0),
(DEFAULT, 100000 * 100, 0),
(DEFAULT, 5000 * 100, 0);

CREATE UNLOGGED TABLE rinha.history
(
id SERIAL PRIMARY KEY,
user_id SMALLINT NOT NULL,
value INTEGER NOT NULL,
type CHAR(1) NOT NULL,
description VARCHAR(10) NOT NULL,
do_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ALTER TABLE
rinha.history
SET
(autovacuum_enabled = false);

CREATE INDEX idx_history ON rinha.history (user_id);


CREATE OR REPLACE FUNCTION rinha.credit(
user_id_tx SMALLINT,
value_tx INT,
description_tx VARCHAR(10))
RETURNS TABLE
(
new_balance INT,
success BOOL,
current_limit INT
)
LANGUAGE plpgsql
AS
$$
BEGIN
PERFORM pg_advisory_xact_lock(user_id_tx);

INSERT INTO rinha.history VALUES (DEFAULT, user_id_tx, value_tx, 'c', description_tx);

RETURN QUERY
UPDATE rinha.users
SET initial_balance = initial_balance + value_tx
WHERE id = user_id_tx
RETURNING initial_balance, TRUE, limit_in_cents;
END;
$$;

CREATE OR REPLACE FUNCTION rinha.debit(
user_id_tx SMALLINT,
value_tx INT,
description_tx VARCHAR(10))
RETURNS TABLE
(
new_balance INT,
success BOOL,
current_limit INT
)
LANGUAGE plpgsql
AS
$$
DECLARE
current_balance int;
current_limit_value int;
BEGIN
PERFORM pg_advisory_xact_lock(user_id_tx);

SELECT limit_in_cents,
initial_balance
INTO
current_limit_value,
current_balance
FROM rinha.users
WHERE id = user_id_tx;

IF current_balance - value_tx >= current_limit_value * -1 THEN
INSERT INTO rinha.history VALUES (DEFAULT, user_id_tx, value_tx, 'd', description_tx);

RETURN QUERY
UPDATE rinha.users
SET initial_balance = initial_balance - value_tx
WHERE id = user_id_tx
RETURNING initial_balance, TRUE, limit_in_cents;

ELSE
RETURN QUERY SELECT current_balance, FALSE, current_limit_value;
END IF;
END;
$$;

Loading

0 comments on commit 4df7d0a

Please sign in to comment.