Super fast database designed for bigdata that uses processing mechanisms like CPU, GPU and Hybrid.
Banco de dados super rápido projetado para bigdata que utiliza mecanismos de processamentos como CPU, GPU e Híbrido.
Este projeto é um protótipo, ou seja, um conceito daquilo que servirá de base para transformá-lo em uma versão beta. No entanto, o objetivo é lançar este simplificado conceito com recursos extremamente limitados para não tardar o seu lançamento.
O contribuidor deve ter em mente que este projeto é altamente baseado em processamento paralelo devido as implementações futuras que temos em mente com processadores gráficos, a GPU, mas que também possa ser configurado para trabalhar em modo sequencial definido por um arquivo de configuração.
Tendo em mente que nosso objetivo é o processamento de dados em massa, bigdata, é proibido:
- O uso de técnicas recursivas devido o péssimo desempenho e alto consumo de memória feitas por alocação em pilhas (stack). O processamento sequencial, linha por linha, é indiscutivelmente mais rápido.
- O uso excessivo de métodos também deve ser reconsiderado pois afeta o desempenho, salvo quando não há alternativa.
Para atingirmos o melhor desempenho e estar sempre a frente de outros bancos de dados é necessário:
- Ter uma mentalidade voltada para a programação estruturada do que orientada a objetos, apesar de fazermos o uso dos dois paradigmas, deixando a orientada a objetos sempre em último caso quando não há alternativas.
- Sempre enxugar os bits, mantendo ou melhorando o alto desempenho.
Para tornar fácil o entendimento do código escrito e colaborar com os demais contribuidores, para que possam dar continuidade às implementações sem dificuldades, documente todos os seus métodos, funções e cada linha do seu código, mesmo que você considere ser evidentemente fácil de entender.
Neste protótipo deverá ser codificado as seguintes solicitações SQL:
CREATE DATABASE [NovoBanco];
DELETE DATABASE [NovoBanco];
USE [NomeDoBanco];
CREATE TABLE [NovaTabela]([Coluna1] NovoTipo, [Coluna2] NovoTipo);
DELETE TABLE [Tabela];
TRUNCATE TABLE [Banco].[Tabela];
INSERT INTO [Tabela] VALUES ([valor1], [valor2]), ([valor1], [valor2]);
SELECT [Expressão];
SELECT [Expressão] AS [NomeColunaResultado];
SELECT [Expressão] FROM [Banco].[Tabela];
SELECT [Expressão] FROM [Banco].[Tabela] WHERE [Expressão];
SELECT Coluna1, Max(Coluna2) FROM [Banco].[Tabela] WHERE [Expressão] GROUP BY Coluna1
Onde [Expressão], de modo geral, deverá ter a capacidade de realizar operações aritméticas, condicionais, atribuições e comparações, respeitando a precedência dos operadores praticadas pelos mecanismos de bancos de dados.
Operadores unários são operadores que trabalham apenas com um valor ao seu lado direito, por exemplo: --1. Temos um operador unário - e um número -1 do lado direito, isto resultará em um jogo de sinais: (-) com (-1) é igual a 1.
Operadores Aritméticos Unários
Operador unário de negação é usado par inverter resultado de um valor booleano. Ex.: !(1 = 1) o resultado será false:
Precedência de Operadores do MySql
Precedência de Operadores do Sql Server 2017
Notação Polonesa Inversa (ou RPN na sigla em inglês, de Reverse Polish Notation);
Converter de Notação infixa para Notação pós-fixa
Pilhas e o cálculo do valor de uma expressão posfixa
A calculadora RPN irá avaliar a [Expressão]
considerando a presença de: variáveis '@var' no escopo do comando sql, strings e números escritos entre aspas, números inteiros e decimais, operadores de precedência e funções.
Site para fazer testes de expressão matemática
Exemplo 1:
SELECT 1 + 2 - 4 * 3; # Deverá retornar o valor -9
Exemplo 2:
SET @num = 23;
SELECT 1 + 2 - 4 + @num; # Deverá retornar o valor 25
Exemplo 3:
SELECT 1 + 2 - 4 = 3; # Deverá retornar os números 0 ou 1 (True ou False)
A [Expressão] deverá permitir uso de funções de string, numéricos, Data e Hora, Conversão e Fluxo de Controle como mostra a seguir:
São usados em todas as expressões avaliadas pela calculadora RPN. Tanto na instrução Select quanto na cláusula Where.
CONCAT(string1,string2,...)
INSERT(string,posicao,comprimento,nova_string)
LEFT(string,comprimento)
LTRIM(string)
REPLACE(string,de_str,para_str)
RIGTH(string,comprimento)
TRIM(string)
UCASE(string) e LOWER(string)
UPPER(string)
RTRIM(string)
SUBSTRING (expressão,pos_inicio,comprimento)
São usados em todas as expressões avaliadas pela calculadora RPN. Tanto na instrução Select quanto na cláusula Where.
ABS(número)
ACOS(número)
ASIN(número)
ATAN(número)
COS(número)
COT(número)
MOD(dividendo,divisor)
SIN(número)
SQRT(número)
TAN(número)
São usados em todas as expressões avaliadas pela calculadora RPN. Tanto na instrução Select quanto na cláusula Where.
TIME()
DATE()
DAY()
MONTH(data)
YEAR(data)
HOUR(hora)
MINUTE(hora)
SECOND(hora)
São usados em todas as expressões avaliadas pela calculadora RPN. Tanto na instrução Select quanto na cláusula Where.
CAST(valor AS novo_tipo)
CONVERT(valor, novo_tipo)
São usados em todas as expressões avaliadas pela calculadora RPN. Tanto na instrução Select quanto na cláusula Where.
IF()
IFNULL()
NULLIF()
CASE..WHEN..THEN..ELSE..END
São usados em todas as expressões avaliadas pela calculadora RPN. Tanto na instrução Select quanto na cláusula Where.
=, >, <, >=, <=, !=, <>
Usadas somente na cláusula Where, a calculadora RPN deverá esperar resultado condicional (0 ou 1):
AND, OR, IS, IN, NOT, LIKE e BETWEEN.
MAX()
MIN()
SUM()
AVG()
COUNT()
ALIAS