• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kingless

[Projecto] Base de dados em PHP

81 mensagens neste tópico

Boas,

Estou a pensar em desenvolver uma Base de dados em PHP do estilo da mysql  onde se podem armazenar dados a única diferença é que os dados serão armazenados em ficheiros de texto (.txt). Eu pensei em desenvolver uma base de dados assim porque em muitos servidores tens um limite de base de dados que podes criar e em servidores gratís por vezes nem base de dados tens (PHP sem base de dados não é nada), para alguém que quer ter por exemplo um site e um fórum num servidor onde só pode ter uma base de dados isso não ajuda. Por isso acho que isto seria uma boa alternativa para a mysql.

No desenvolvimento deste projecto um dos problema com que vamos nos deparar vai ser a segurança mas não há problema que não se resolva é só pensar um pouco.

Não coloquei este post na secção de projectos porque gostaria de saber primeiro a opinião dos programadores de PHP aqui do p@p, gostaria de saber se vale a pena continuar com este projecto e se gostariam de fazer parte do projecto ?

Site: http://sourceforge.net/projects/phpdatabase

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso não é necessário. Isso resume-se a um serialize() ;)

ex:

# para guardar
function store($data="", $db="", $table=""){
global $dbroot;
if(empty($data) || empty($db) || empty($table)) return null;
file_put_contents($dbroot.$db."/".$table.".txt", serialize($data));
return true;
}

PS: vê o functions.php da versão 2.6 disto :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quem me dera que se resumisse a um serialize() :thumbsup:

Já começei a desenvolver o SGBD acho que em 1 semana ou mais acabo depois digo algo ;)

EDIT: O código vais estar todo em inglês só o output de erros é que vais estar por enquanto em português para facilitar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok

O código vais estar todo em inglês

Também costumo fazer isso :thumbsup:
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Neste momento estou a tentar descobrir qual é a melhor estrutura para armazenar os dados nos ficheiros de texto...  :hmm:  O script vai se chamar pdb  (PHP DATABASE) e a extensão dos ficheiros onde os dados vão ser armazenados vai ser xxxx.pdb :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Neste momento estou a tentar descobrir qual é a melhor estrutura para armazenar os dados nos ficheiros de texto...  :hmm:

um valor por linha é capaz de ser a opção mais simples...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora aqui está uma boa ideia.

Ideias destas são muito dificeis de arranjar/ter/inventar, está aqui um bom exemplo de uma grande ideia.

Tenho uma carrada de coisas a dizer acerca deste projecto:

Começando pelo lugar entre os utilizadores... a concorrência é enorme. Para alem dos SGBDs convencionais há ainda o SQLite que vem com o PHP5 que toda a gente tem acesso. Ficaria então o publico alvo reduzido aos que têm restrições na utilização de bases de dados, incluindo sqlite. O publico alvo será à partida reduzido, mas isto não tem que ser um obstáculo.

Quanto ao armazenamento dos dados, praticamente todos os SGBDs usam ficheiros de texto, como os formatam não sei, mas concerteza valerá mais a pena ler sobre isto pois isto são tecnologias com cerca de 30 anos de melhoramento, seria suícidio e autismo se viessemos agora descobrir que os carros deviam ter quadrados em vez de rodas.

Outra dica que posso dar desde já: Os dados numéricos, como é óbvio, não devem ser guardados em ficheiros de texto, isso pode implicar consumo de 10 vezes mais espaço em disco.

Outras coisas que deves pensar para que tudo fique bem planeado:

Queres usar SQL? Não tens que usar sql, podes começar por uma linguagem mais minimalistae simples inventada por ti.

Se usares sql, qual é o nível de compatibilidade desejado?

Vais seguir algum padrão de desenvolvimento? qual?

Que formato terá a aplicação? uma biblioteca C? uma biblioteca php? terá uma API? que tipo de API usarás?

network layer... suportará?

Aconselho-te a gastares uma boa parte do teu tempo nesta fase inicial a planear tudo muito bem planeado. Normalmente passo meses a pesquisar e a sondar a internet com ideias na minha cabeça até definir bem o que vou fazer, só passado muito tempo é que o projecto se transforma em código, e essa parte nunca demora tanto tempo como pode parecer à partida.

Está aqui uma boa ideia, mas faz um bom planeamente, senão corres o risco de chegar a certa altura o projecto não ter por onde avnçar devido a más opções tomadas no inicio.

Boa sorte

PS: :thumbsup: e mais uma coisinha para o pessoal que diz que o php não dá para isto nem para aquilo, ficar a olhar ;) eheheh

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@pedrotuga

Obrigado pelo apoio :thumbsup: vou seguir os teus conselhos e sugestões ;) Estava mesmo a precisar de algo para me motivar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem...

Já fiz alguns avanços significativos, já é possivel criar-se base de dados e tabelas com colunas e ja é possivel inserir dados numa certa coluna de uma certa  tabela... como não implementei nenhum tipo de linguagem os comandos para fazer isso são os seguintes:

$db  = new pdb_init( 'utilizador', 'password' );  //Verifica se o utilizador e a password estão correctos depois inicializa o PDB

$db->create_db( 'nome_da_database' );  //Cria uma base de dados

$colunas = array( 'coluna_1' , 'coluna_2', 'coluna_3', 'coluna_n' );  //As colunas

// é possível também adicionar-se já dados as colunas:

$colunas = array( 'coluna_1' => 'os_dados_aqui', 'coluna_2' => 'os_dados_aqui', /*...*/ );

$db->create_table( 'nome_tabela', $colunas ); //Cria uma tabela e adiciona as colunas a tabela

PS: Estive a pensar em varias formas de como poderia facilitar a execução de comandos e foram essas que me vieram ao pensamento. Pra mim não poderia ser mais fácil.

EDIT: Daqui a alguns dias vou precisar de "Alpha testers" para testarem o script e ajudarem-me a encontrar bugs e falhas de segurança antes de eu publicar o script para o publico em geral. Quem quiser ser Alpha tester  diga aqui ou envie-me uma MP.  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quem quiser ser Alpha tester  diga aqui ou envie-me uma MP.  :thumbsup:

Com aqui cm o je

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

kingless, tens de ter atenção ao modo de encriptação dos dados ou seja assim vai ser muito mais fácil a copia de dados penso eu! Alem disso já pensaste quanto vai ocupar em termos de espaço? alem disso a utilização dessas bases de dados só é possível se o sistema em si esteja programado para esse efeito. Eu não estou a desmoralizar mas sim a alertar para alguns problemas que saltão logo a vista só isso

É uma boa ideia sem duvida mas para ter sucesso vai ter de ser muito bem planeada e estruturada. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@karva depois aviso-te quando for altura de testar ;)

@mosta77

Já esta tudo pensado ;) (ou quase tudo)

Os dados não vão ser encriptados, apenas os nomes dos ficheiros vão ser encriptados para que não seja possível aceder a esses ficheiros pela a URL... (já imaginaste o que é que aconteceria se todas pessoas soubessem os nomes dos ficheiros onde os dados são guardados :| ) A única pessoa que vai ter acesso a esses ficheiros onde vão estar os dados vai ser o admin. (o admin não ia querer roubar os seus dados lol)

Todo admin do script vai poder definir uma palavra secreta que só ele sabe e essa palavra secreta vai ser encriptada junto do nome do ficheiro o que vai tornar um ficheiro único para cada script... cada site vai ter os ficheiros guardados com nomes diferentes

Os nomes dos ficheiros serão encriptados mais ou menos da seguinte forma:

$ficheiro_db = sha1( $palavra_secreta . $nome_do_ficheiro ".pdb" );   

Quanto ao espaço que vai ocupar em disco também ja tinha pensado nisso... todos os dados vão ser comprimidos utilizando a função gzencode para teres o ideia do tamanho que os ficheiros vão ter depois de comprimidos vou te dar um exemplo... 1 ficheiro de 1400 bytes  vai ficar com um tamanho de mais ou menos 350 bytes depois  de comprimido... já ves o espaço que vou poupar...

Acho que não consegui explicar muito bem como tudo vai funcionar, acho melhor esperares pelo script assim vais poder ver como tudo funciona.

Já agora deixo aqui a estrutura do PDB  (Acho que não vão entender a estrutura porque eu fiz para eu entender :thumbsup: )

  [uSER-INPUT]
             |
             |-- > [DATABASE]
             |        |
             |        |
             |     [DECOMPRESS]
             |        |
             |        |-- > [TABLE]
             |                 |
             |                 |-- >[DECRYPT]
             |                          |
             |                          | -- > [TABLE-NAME]
             |                                      |
             |                                      |
             |                                   [COLUMN]
             |                                      |
             |                                      | < -- > [COLUMN-NUMBER]
             |                                      |
             |                                   [CONTENT]
             |                                      |
             |                                      | --> [ENCRYPT]
             |                                      |         |
             |                                      |     [COMPRESS]
             | <<< ---------------------------------|         |
             |                                      |    [sAVE-TABLE]
        [uSER-OUTPUT]                               |
                                              [CLOSE-DATABASE]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tá aqui o je pa testar os alphas ;)

Quero ver esse código depressa :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tou a gostar de ver :thumbsup:

Isto faz lembrar algo tipo SQL Lite ou algo do género mas gosto da ideia ;)

Quando terminares, e tiveres na disposição, faz uma comparação no tempo da leitura dos dados do MySQL, e outras bases de dados se puderes, com o tempo de leitura de dados do teu PDB ;)

Parabéns e força com isso :)

(Só não me proponho como tester porque tenho já trabalho, se não era com todo o gosto :) )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso parece-me uma boa ideia, uma coisa que me está a "perturbar" será a nível de performance, e de locking... Em caso de concorrência de acessos escrita e/ou leitura, como é que isso se vai passar? Vai ser preciso um certo malabarismo, e numa solução baseada em ficheiros é capaz de ser muito complicado e possivelmente poderá tornar-se lento... Ainda por cima tendo encriptação/compressão (e respectivos processos inversos) pelo meio... Mas posso disponibilizar-me a testar isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso parece-me uma boa ideia, uma coisa que me está a "perturbar" será a nível de performance, e de locking... Em caso de concorrência de acessos escrita e/ou leitura, como é que isso se vai passar? Vai ser preciso um certo malabarismo, e numa solução baseada em ficheiros é capaz de ser muito complicado e possivelmente poderá tornar-se lento... Ainda por cima tendo encriptação/compressão (e respectivos processos inversos) pelo meio... Mas posso disponibilizar-me a testar isso...

Os sgbds que conheces são baseados em ficheiros ( mysql, postgres, oracle, etc etc )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exacto, mas neste caso cada vez que um script é executado digamos para ter uma listagem de uma tabela, o respectivo ficheiro vai ser aberto. Se no mesmo momento outra pessoa tentar escrever uma valor nessa tabela, o que é que se vai passar? Uma vez que o ficheiro já está aberto por outro processo (outro script), vai berrar. MySQL e afins tem meios próprios para lidar com isso. Neste caso parece-me extremamente complicado saber a todo o instante quem é que está a abrir o ficheiro, e o que fazer em caso de concorrência de leitura e/ou escrita.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exacto, mas neste caso cada vez que um script é executado digamos para ter uma listagem de uma tabela, o respectivo ficheiro vai ser aberto. Se no mesmo momento outra pessoa tentar escrever uma valor nessa tabela, o que é que se vai passar? Uma vez que o ficheiro já está aberto por outro processo (outro script), vai berrar. MySQL e afins tem meios próprios para lidar com isso. Neste caso parece-me extremamente complicado saber a todo o instante quem é que está a abrir o ficheiro, e o que fazer em caso de concorrência de leitura e/ou escrita.

basta ter uma estrura de dados para gerir os fechos de cada ficheiro (uma hash, por exemplo). uma função antes de realizar as operações verifica os fechos do ficheiro. é claro que é preciso ter algum cuidado com isto (nomeadamente para não criar um deadlock).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, essa parte é capaz de ser complicado de gerir. Suponho que esse tipo de ocorrências poderão ser relativamente poucas nos ambientes a que isto se destina, mesmo supondo que toda uma operação de leitura (por exemplo) leve 1 segundo (valor extramamente elevado, parece-me), teria de haver outra operação nesse mesmo segundo para causar problemas, certo? Podemos assumir que seja muito improvável, mas de qualquer forma é sempre bom tomar providências para esses casos... digo eu.

Outros pormenores que também poderão estragar a festa (digo eu, assim com os nervos) é no caso de ter muita informação, não? Tipo linhas com muita coisa, ou um elevado número de registos..? Sou gajo para dizer que a partir de um certo ponto as coisas começam a ficar um bocado lentas, não?

Mas de qualquer forma, parece-me uma boa ideia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia é boa.  Mas existe aqui uma certa aceleração no projecto.

Os problemas de concorrência é assunto sério nas BD's e parece-me que não está a ser ponderado com o devido valor aqui! Para não falar que é lixado de tratar.

Não me parece que a encriptação seja de grande utilidade, já que os ficheiros estão no server, e supostamente não é qualquer pessoa que devia aceder ao server. Vai colocar overhead na BD e sem grande implicações na segurança.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os problemas de concorrência é assunto sério nas BD's e parece-me que não está a ser ponderado com o devido valor aqui! Para não falar que é lixado de tratar.

a concorrência complica bastante em BDs com transações e BDs distribuídas.

para casos simples como este, não me parece assim tão complicado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois.... mebrei-me agora que o php não suporta multithread nem coisas dos estilo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora