Pergunta

Eu quero armazenar um grande conjunto de resultados do banco de dados na memória. Cada registro tem tempo comprimento e acesso variável deve ser tão rápido como matrizes. Qual é a melhor maneira de implementar isso? Eu estava pensando em manter deslocamentos em uma tabela separada e armazenar todos os registros consecutivamente? É estranho? (Programming language: Delphi)

Foi útil?

Solução

Não sei se totalmente segui-lo, mas ter um olhar para TList.

Em Delphi 7, pelo menos, ele é implementado como um arrary de ponteiros. Você pode usar a propriedade capacidade de pré alocar a lista antes do tempo se você sabe quantos resultados estão voltando.

A lista vai crescer automaticamente se ele ficar sem espaço. Quanto cresce depende de quão grande a lista é.

Dê uma olhada na fonte para a unidade de classes para ver o que está fazendo.

Edit:. Também em D2009 apoio genric foi adicionado em TList o que o torna um pouco mais agradável de usar

Outras dicas

A melhor maneira é provavelmente para conter uma matriz de ponteiros para registros. Você não terá que lidar com deslocamentos, nesse caso, e pesquisas será constante de tempo.

Por que não usar uma versão de memória do seu banco de dados? A maioria tem uma maneira de manter uma tabela completa na memória, geralmente envolvendo a palavra-chave SQL MEMORY. Você iria copiar a tabela do disco para a tabela de memória e, em seguida, pode usar todas as operações de banco de dados normais a velocidade da memória. Eu sei que isso funciona bem em DBISAM.

A seguir mj2008 , você poderia usar um TClientDataset em vez de uma matriz de registro. Quão grande é que conjunto de resultados?

Eu usaria TList, e armazenar ponteiros para seu registro.

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top