Existe uma maneira de comunicar o DBMS com blocos de memória ou binários brutos?

3

Estou tentando comunicar um numerical matrix operations library como o LAPACK com qualquer DBMS.

É possível send/receive completar matrizes como binárias ou como ponteiros diretos de memória para processá-las (será algo como: A biblioteca Outside processa dados armazenados no DBMS, então calcula algumas coisas enormes de matriz e depois via memória bloco ou um DBMS binário obter o resultado da biblioteca)?

O objetivo principal é acelerar e evitar passar por um arquivo simples, e por último, mas não menos importante, usar a biblioteca de forma eficiente para algumas operações que o DBMS não foi projetado para.

* Is it possible that Oracle, SQL Server, MySQL support this technique?.
    
por cMinor 18.03.2011 / 07:35

3 respostas

2

O Oracle tem suporte para operações de matriz, incluindo comandos compatíveis com o LAPACK.

Dê uma olhada no pacote do Oracle UTL_NLA para fornecer um ponto de partida. Eu acho melhor você olhar tanto para usar as ferramentas de banco de dados, ou deixar o banco de dados completamente para trás - a maneira que você parece querer se aproximar é, bem, não realmente um RDBMS.

    
por 31.03.2011 / 14:12
0

Não, não é possível, não é sensato. Os dados do banco de dados são transacionais, e fazer uma memória compartilhada transacional é um inferno. Definitivamente, não "manipular ponteiros". Possível, mas você então exige que as bibliotecas do cliente sejam MUITO boas / sob controle OU executem muita sobrecarga, e isso significa que não é necessário ir novamente.

Parece que você tem requisitos que não correspondem. RDBMS, produtos padrão, não são otimizados para o seu tipo de trabalho.

O melhor que você pode fazer é:

  • Armazene os arquivos em BLOBS.
  • Use o SQL Server
  • Use um repositório BLOB baseado em FILE

Em seguida, você pode acessar os blobs por meio de compartilhamento de arquivos, que deve permitir arquivos mapeados na memória. Não exportar - eles são arquivos. Todo commit faz uma nova cópia com um nome diferente. Você obtém os nomes em sql do banco de dados (é um GUID).

Essa é possivelmente a maneira mais eficiente de lidar com isso.

    
por 18.03.2011 / 07:59
0

Você pode armazenar uma cópia de cache dos dados localmente para evitar outra transferência, se ela não tiver sido alterada desde o último acesso. Isso seria codificado totalmente fora do SGBD.

    
por 18.03.2011 / 16:41