Portal SAMP
[Include] Bini - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] Bini (/showthread.php?tid=813)



Bini - Levi.M - 24/02/2021

Mais um sistema recuperado da Fórum SA-MP. Créditos ao ipsBruno.


Bini 4



Após algumas semanas de desenvolvimento da nova versão de Bini. Finalmente consigo acaba-la.
A nova versão de Bini não conta com muitas alterações, exceto a engine de manipulação de arquivos na memória. Desta vez utiliza memória cache mais avançada usando Setproperty e Getproperty!

Por mais que não seja necessário o uso de INI_Save. Aconselha o USO DA MESMA, pois em caso de crashs ou eventuais bugs no seu servidor decorrente em outros fatores, alguns arquivos podem ser perdidos !!




Velocidade
Com esta nova engine, a velocidade foi bastante aprimorada. O que já era rápido ficou mais rápido ainda.

Código PHP:
[00:57:47Bini -> write 3304 ms read 32 ms read/write 3336 ms
[00:57:47Dof2 -> write 3557 ms read 258 ms read/write 3815 ms 



A função write apesar de ser mais rápida que todos os outros sistemas de arquivos ainda precisa de alguns ajustes de velocidade e estabilidade, então eventuais atualizações estão para surgir [Imagem: mrgreen.gif]

Código usado para teste de velocidade:

Código PHP:
main() {


    DOF2_CreateFile("ipsBruno1");
    DOF2_CreateFile("ipsBruno2");


    new dof[3];

    dof[0] = GetTickCount();
    dof[2] = GetTickCount();
    for(new i!= 3000i++) {
        DOF2_SetInt("ipsBruno1""teste1"1000);
        DOF2_SetInt("ipsBruno1""teste2"2000);
        DOF2_SetInt("ipsBruno1""teste3"3000);
        DOF2_SetInt("ipsBruno1""teste4"4000);
        DOF2_SetInt("ipsBruno1""teste5"5000);
        DOF2_SetInt("ipsBruno1""teste6"6000);
        DOF2_SetInt("ipsBruno1""teste7"7000);
        DOF2_SetInt("ipsBruno1""teste8"8000);
        DOF2_SetInt("ipsBruno1""teste9"9000);
        DOF2_SetInt("ipsBruno1""teste10"10000);
        DOF2_SetInt("ipsBruno1""teste11"11000);

        DOF2_SaveFile();
    }
    dof[0] = GetTickCount() - dof[0];

    dof[1] = GetTickCount();
    for(new i!= 3000i++) {
        DOF2_GetInt("ipsBruno1""teste1");
        DOF2_GetInt("ipsBruno1""teste2");
        DOF2_GetInt("ipsBruno1""teste3");
        DOF2_GetInt("ipsBruno1""teste4");
        DOF2_GetInt("ipsBruno1""teste5");
        DOF2_GetInt("ipsBruno1""teste6");
        DOF2_GetInt("ipsBruno1""teste7");
        DOF2_GetInt("ipsBruno1""teste8");
        DOF2_GetInt("ipsBruno1""teste9");
        DOF2_GetInt("ipsBruno1""teste10");
        DOF2_GetInt("ipsBruno1""teste11");
    }
    dof[1] = GetTickCount() - dof[1];
    dof[2] = GetTickCount() - dof[2];


    //


    new bin[3];

    bin[0] = GetTickCount();
    bin[2] = GetTickCount();
    for(new i!= 3000i++) {
        INI_WriteInt("ipsBruno2""teste1"1000);
        INI_WriteInt("ipsBruno2""teste2"2000);
        INI_WriteInt("ipsBruno2""teste3"3000);
        INI_WriteInt("ipsBruno2""teste4"4000);
        INI_WriteInt("ipsBruno2""teste5"5000);
        INI_WriteInt("ipsBruno2""teste6"6000);
        INI_WriteInt("ipsBruno2""teste7"7000);
        INI_WriteInt("ipsBruno2""teste8"8000);
        INI_WriteInt("ipsBruno2""teste9"9000);
        INI_WriteInt("ipsBruno2""teste10"10000);
        INI_WriteInt("ipsBruno2""teste11"11000);
        INI_Save();
    }

    bin[0] = GetTickCount() - bin[0];
    bin[1] = GetTickCount();

    for(new i!= 3000i++) {
        INI_ReadInt("ipsBruno2""teste1");
        INI_ReadInt("ipsBruno2""teste2");
        INI_ReadInt("ipsBruno2""teste3");
        INI_ReadInt("ipsBruno2""teste4");
        INI_ReadInt("ipsBruno2""teste5");
        INI_ReadInt("ipsBruno2""teste6");
        INI_ReadInt("ipsBruno2""teste7");
        INI_ReadInt("ipsBruno2""teste8");
        INI_ReadInt("ipsBruno2""teste9");
        INI_ReadInt("ipsBruno2""teste10");
        INI_ReadInt("ipsBruno2""teste11");
    }
    
    

    bin
[1] = GetTickCount() - bin[1];
    bin[2] = GetTickCount() - bin[2];

    printf("Bini -> write %d ms - read %d ms - read/write %d ms"bin[0], bin[1], bin[2]);
    printf("Dof2 -> write %d ms - read %d ms - read/write %d ms"dof[0], dof[1], dof[2]);
    return true;
}


public 
OnFilterScriptExit() {
    
DOF2_Exit();
    
INI_Exit();
    return 
true;





Usando
Para usar Bini é bastante simples! Basta fazer o seguinte:



Escrevendo:

Números

Código PHP:
INI_WriteInt("arquivo.ini""key"valor); 


Textos
Código PHP:
INI_WriteString("arquivo.ini""key""valor"); 




Lendo valores:

Números

Código PHP:
INI_ReadInt("arquivo.ini""key"); 


Textos
Código PHP:
INI_ReadString("arquivo.ini""key"); 


deixe
Código PHP:
public OnFilterScriptExit() {
    
INI_Exit();
    return 
true;





** Importante

- Se você tem arquivos escritos por DOF2 ou Y_Ini este sistema não será compatível pois meu sistema usa o método formal para escrita de escrita em arquivos ini, sem espaço entre as keys

Código:
key=value

e não
Código:
key = value


https://en.wikipedia.org/wiki/INI_file


Porém é TOTALMENTE compatível com Dini e outros sistemas conhecidos.




Funções disponíveis:


Código PHP:
// Funções Atuais:

//   CallBack INI_WriteString("arquivo", "key", "valor")
//   CallBack INI_WriteFloat("arquivo"",key", valor)
//   CallBack INI_WriteInt("arquivo","key", valor)
//   CallBack INI_WriteBool("arquivo","key", bool:valor)

//   CallBack INI_ReadString("arquivo", "key")
//   CallBack INI_ReadInt("arquivo", "key")
//   CallBack INI_ReadFloat("arquivo","key")
//   CallBack INI_ReadBool("arquivo","key")

//   CallBack INI_Create("arquivo")
//   CallBack INI_Delete("arquivo")
//   CallBack INI_Open("arquivo") 




Download

-> https://pastebin.com/gjEJMnH5

Com está velocidade é permitido que você possa colocar em até 50 escritas/leituras em OnPlayerUpdate. Salve em bini.inc por favor.


    

Arquivo não salvando


Caso for um único arquivo, veja se o servidor não está sendo fechado corretamente. Quando você não fecha por RCON EXIT o OnGameModeExit/FilterScriptExit não são chamados e logo INI_Exit também não é !!

Caso for vários arquivos tente aumentar o valor max_lines_file para acima de 999


Exemplo:
Código PHP:
#define max_lines_file  5000 



Servidor crashando

Certifique-se se antes de usar algum arquivo INI_Open/INI_READ o arquivo existe. Use

Código PHP:
if(fexist(#arquivo.ini)) // o arquivo existe 



Ocupando muito AMX

Nem sempre o que ocupa muito amx é lento. Bini usa um sistema avançado de cache, onde tudo é registrado no amx em tempo real. Mas é tudo registrado no AMX, não ocupa nada de memória do seu computador. Só ocupará memória se de alguma forma outros fatores externos a Bini ultrapassarem isto.

https://pt.wikipedia.org/wiki/Cache



Desenvolvido por Bruno da Silva