Pregunta

Quiero almacenar un gran conjunto de resultados de la base de datos en la memoria. Cada registro tiene una longitud variable y el tiempo de acceso debe ser tan rápido como las matrices. ¿Cuál es la mejor manera de implementar esto? ¿Estaba pensando en mantener las compensaciones en una tabla separada y almacenar todos los registros consecutivamente? ¿Es extraño? (Lenguaje de programación: Delphi)

¿Fue útil?

Solución

No estoy seguro de seguirte por completo, pero echa un vistazo a TList.

En Delphi 7 al menos, se implementa como un archivo de punteros. Puede usar la propiedad de capacidad para preasignar la lista con anticipación si sabe cuántos resultados están regresando.

La lista crecerá automáticamente si se queda sin espacio. Cuánto crece depende de qué tan grande sea la lista.

Eche un vistazo a la fuente de la unidad de clases para ver qué está haciendo.

Editar: También en D2009 se agregó soporte genérico a TList, lo que lo hace un poco más agradable de usar.

Otros consejos

La mejor manera es probablemente contener una matriz de punteros a los registros. No tendrá que lidiar con compensaciones, en ese caso, y las búsquedas serán de tiempo constante.

¿Por qué no usar una versión de MEMORIA de su base de datos? La mayoría tiene una forma de mantener una tabla completa en la memoria, que generalmente involucra la palabra clave SQL MEMORY. Copiaría la tabla del disco a la tabla de memoria y luego podría usar todas las operaciones normales de la base de datos a la velocidad de la memoria. Sé que esto funciona bien en DBISAM.

Siguiendo mj2008 , puede usar un TCLientDataset en lugar de una matriz de registros. ¿Qué tan grande es ese conjunto de resultados?

Usaría TList y almacenaría punteros en su registro.

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top