Este projeto resultou no desenvolvimento de um programa para leitura e interpretação de três ficheiros de entrada: users.csv, drivers.csv e rides.csv.
A aplicação foi dividida em módulos que realizam as seguintes tarefas:
- Parsing de dados
- Interpretação de comandos
- Armazenamento de informações em catálogos:
- Usuários
- Motoristas
- Viagens
- Estatísticas
Cada catálogo é responsável por armazenar informações relevantes dos ficheiros de entrada, enquanto o módulo de estatísticas permite relacionar os principais modelos e fornecer acesso rápido a dados e resultados.
- glib2 para manipulação das coleções de dados;
Instalação
apt install gcc make libglib2.0-dev libgtk2.0-dev gdb valgrind -y
cd trabalho-pratico/
make
./programa-principal <dir_with_csvs> <input_file_path>
./programa-principal
Exemplo de utilização
Enter dataset path: dataset
Number of drivers parsed: 10000
Number of users parsed: 100000
Number of rides parsed: 1000000
$ 1 SaCruz110
Santiago Cruz;M;31;3.200;5;50.340
$ 3 2
Anita-PetPinto38;Anita-Petra Pinto;240
REsteves70;Raquel Esteves;234
$ 4 Braga
10.062
$ (Ctrl + D)
Exit with success
make programa-testes
./programa-testes <dir_with_csvs> <dir_with_input_and_outputs>
Exemplo de output
Teste de desempenho - Parsing dos dados
Number of drivers parsed: 10000
Number of users parsed: 100000
Number of rides parsed: 1000000
Parsing data time: 4.11s
Teste de desempenho - Avaliação de queries
Query 1 | 0.00000075s | "1 SaCruz110"
Query 2 | 0.00000800s | "2 50"
Query 3 | 0.00000600s | "3 50"
Query 4 | 0.00000025s | "4 Braga"
Query 5 | 0.01275250s | "5 01/01/2021 01/02/2021"
Query 6 | 0.02461975s | "6 Porto 01/01/2021 01/02/2021"
Query 7 | 0.00000700s | "7 50 Lisboa"
Query 8 | 0.00283650s | "8 M 12"
Query 9 | 0.01340325s | "9 01/01/2021 01/02/2021"
Teste funcional - Validação de queries
command1_output.txt: Pass ✔
command2_output.txt: Pass ✔
command3_output.txt: Pass ✔
command4_output.txt: Pass ✔
command5_output.txt: Pass ✔
command6_output.txt: Pass ✔
command7_output.txt: Pass ✔
command8_output.txt: Pass ✔
command9_output.txt: Pass ✔
command10_output.txt: Pass ✔
command11_output.txt: Pass ✔
command12_output.txt: Pass ✔
command13_output.txt: Pass ✔
command14_output.txt: Pass ✔
command15_output.txt: Pass ✔
command16_output.txt: Pass ✔
command17_output.txt: Pass ✔
command18_output.txt: Pass ✔
command19_output.txt: Pass ✔
malloc_stats
Arena 0:
system bytes = 550182912
in use bytes = 550137440
Total (incl. mmap):
system bytes = 1071362048
in use bytes = 1071316576
max mmap regions = 30
max mmap bytes = 588943360
malloc_stats after freeing memory
Arena 0:
system bytes = 550182912
in use bytes = 259894208
Total (incl. mmap):
system bytes = 1021255680
in use bytes = 730966976
max mmap regions = 30
max mmap bytes = 588943360
make debug
gdb ./programa-principal
valgrind ./programa-principal <dir_with_csvs> <input_file_path>
command time -v ./programa-principal <dir_with_csvs> <input_file_path>
memusage ./programa-principal <dir_with_csvs> <input_file_path>