문제

메모리에 데이터베이스에서 큰 결과 세트를 저장하고 싶습니다. 모든 레코드의 길이는 가변 길이를 가지고 있으며 액세스 시간은 배열만큼 빠르야합니다. 이것을 구현하는 가장 좋은 방법은 무엇입니까? 오프셋을 별도의 테이블에 보관하고 모든 레코드를 연속적으로 저장할 생각 이었습니까? 이상합니까? (프로그래밍 언어 : 델파이)

도움이 되었습니까?

해결책

내가 당신을 완전히 따르십시오. tlist를 살펴보십시오.

델파이 7에서는 적어도 많은 포인터로 구현됩니다. 수용 속성을 사용하여 얼마나 많은 결과가 돌아 오는지 알면 미리 목록을 사전 할당 할 수 있습니다.

공간이 부족하면 목록이 자동으로 증가합니다. 그것이 얼마나 자라는지는 목록이 얼마나 큰지에 따라 다릅니다.

클래스 단위의 소스를 살펴보고 그것이 무엇을하고 있는지 확인하십시오.

편집 : 또한 D2009에서 유전자 지지대가 TLIST에 추가되어 사용하기가 조금 더 좋습니다.

다른 팁

가장 좋은 방법은 아마도 레코드에 다양한 포인터를 포함하는 것입니다. 이 경우 오프셋을 다룰 필요가 없으며 조회는 일정 시간이됩니다.

데이터베이스의 메모리 버전을 사용하지 않는 이유는 무엇입니까? 대부분은 전체 테이블을 메모리에 보관할 수있는 방법이 있으며, 일반적으로 SQL 키워드 메모리가 포함됩니다. 디스크에서 메모리 테이블로 테이블을 복사 한 다음 메모리 속도에서 모든 일반 데이터베이스 작업을 사용할 수 있습니다. 나는 이것이 DBISAM에서 잘 작동한다는 것을 알고 있습니다.

수행원 MJ2008, 레코드 배열 대신 tclientDataset을 사용할 수 있습니다. 결과 세트가 얼마나 큽니까?

나는 tlist를 사용하고 당신의 레코드에 포인터를 저장합니다.

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top